Skip to content

Commit fb47754

Browse files
committed
Set CC and CXX environment variables for clang toolchain
Sets the C and C++ compiler environment variables so CMake uses Clang instead of the system default compiler. Fixes #1140
1 parent 2c82545 commit fb47754

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/ClangToolChain.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,12 @@
1111
package org.eclipse.cdt.build.gcc.core;
1212

1313
import java.nio.file.Path;
14+
import java.util.ArrayList;
15+
import java.util.Arrays;
16+
import java.util.List;
1417

1518
import org.eclipse.cdt.core.build.IToolChainProvider;
19+
import org.eclipse.cdt.core.envvar.EnvironmentVariable;
1620
import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
1721

1822
/**
@@ -28,7 +32,29 @@ public class ClangToolChain extends GCCToolChain {
2832

2933
public ClangToolChain(IToolChainProvider provider, Path pathToToolChain, String arch,
3034
IEnvironmentVariable[] envVars) {
31-
super(provider, pathToToolChain, arch, envVars);
35+
super(provider, pathToToolChain, arch, addClangEnvVars(envVars));
36+
}
37+
38+
private static IEnvironmentVariable[] addClangEnvVars(IEnvironmentVariable[] envVars) {
39+
List<IEnvironmentVariable> envVarsNew = new ArrayList<>(Arrays.asList(envVars));
40+
/*
41+
* Set CC and CXX environment variables for clang and clang++. This is equivalent to setting these in the
42+
* CMakeLists.txt:
43+
* set(CMAKE_C_COMPILER clang)
44+
* set(CMAKE_CXX_COMPILER clang++)
45+
*/
46+
addIfAbsent("cc", "clang", envVarsNew); //$NON-NLS-1$ //$NON-NLS-2$
47+
addIfAbsent("cxx", "clang++", envVarsNew); //$NON-NLS-1$ //$NON-NLS-2$
48+
49+
return envVarsNew.toArray(new EnvironmentVariable[0]);
50+
}
51+
52+
private static void addIfAbsent(String name, String value, List<IEnvironmentVariable> envVarsNew) {
53+
boolean isAbsent = envVarsNew.stream().noneMatch(ev -> ev.getName().equals(name));
54+
55+
if (isAbsent) {
56+
envVarsNew.add(new EnvironmentVariable(name, value, IEnvironmentVariable.ENVVAR_APPEND, null));
57+
}
3258
}
3359

3460
@Override

0 commit comments

Comments
 (0)