System: Debian Linux Sid/Unstable amd64
LLVM/Clang: Trunk
Scenario: In the past couple of days I’ve been compiling against trunk I get two separate and spurious hang ups with CMake.
Note: I build against more than just X86 follow along the progress of other platforms, though just building for X86 produces the same results below.
Assumption: Configure cmake with prior built clang and clang++ via gcc-4.6.3 under /usr/local/bin… /clang …/clang++ as follows:
mdriftmeyer@horus:~/DeveloperProjects/LLVMProject/cmake-llvm$ cmake -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_CXX_COMPILER=/usr/local/bin/clang++ -DCMAKE_C_COMPILER=/usr/local/bin/clang -DCMAKE_CXX_FLAGS=’-O2’ CMAKE_C_FLAGS=’-O2’ -DLLVM_BUILD_EXAMPLES=ON -DLLVM_BUILD_TESTS=ON -DLLVM_INCLUDE_TESTS=ON -DLLVM_TARGETS_TO_BUILD=‘ARM;CppBackend;PTX;Hexagon;X86’ …/trunk/llvm/
– Target triple: x86_64-unknown-linux-gnu
– Native target architecture is X86
– Threads enabled.
– Building with -fPIC
– Constructing LLVMBuild project information
– Targeting ARM
– Targeting CppBackend
– Targeting PTX
– Targeting Hexagon
– Targeting X86
– Clang version: 3.1
– Configuring done
You have changed variables that require your cache to be deleted.
Configure will be re-run and you may have to reset some variables.
The following variables have changed:
CMAKE_C_COMPILER= /usr/local/bin/clang
CMAKE_CXX_COMPILER= /usr/local/bin/clang++– The C compiler identification is Clang
– The CXX compiler identification is Clang
– Check for working C compiler: /usr/local/bin/clang
– Check for working C compiler: /usr/local/bin/clang – works
– Detecting C compiler ABI info
– Detecting C compiler ABI info - done
– Check for working CXX compiler: /usr/local/bin/clang++
– Check for working CXX compiler: /usr/local/bin/clang++ – broken
CMake Error at /usr/share/cmake-2.8/Modules/CMakeTestCXXCompiler.cmake:45 (MESSAGE):
The C++ compiler “/usr/local/bin/clang++” is not able to compile a simple
test program.It fails with the following output:
Change Dir: /home/mdriftmeyer/DeveloperProjects/LLVMProject/cmake-llvm/CMakeFiles/CMakeTmp
Run Build Command:/usr/bin/make “cmTryCompileExec/fast”
/usr/bin/make -f CMakeFiles/cmTryCompileExec.dir/build.make
CMakeFiles/cmTryCompileExec.dir/buildmake[1]: Entering directory
`/home/mdriftmeyer/DeveloperProjects/LLVMProject/cmake-llvm/CMakeFiles/CMakeTmp’/usr/bin/cmake -E cmake_progress_report
/home/mdriftmeyer/DeveloperProjects/LLVMProject/cmake-llvm/CMakeFiles/CMakeTmp/CMakeFiles
1Building CXX object CMakeFiles/cmTryCompileExec.dir/testCXXCompiler.cxx.o
/usr/local/bin/clang++ -o
CMakeFiles/cmTryCompileExec.dir/testCXXCompiler.cxx.o -c
/home/mdriftmeyer/DeveloperProjects/LLVMProject/cmake-llvm/CMakeFiles/CMakeTmp/testCXXCompiler.cxxLinking CXX executable cmTryCompileExec
/usr/bin/cmake -E cmake_link_script
CMakeFiles/cmTryCompileExec.dir/link.txt --verbose=1/usr/local/bin/clang++
CMakeFiles/cmTryCompileExec.dir/testCXXCompiler.cxx.o -o cmTryCompileExec
-rdynamic/usr/bin/ld: error: cannot find -lstdc++
clang-3: error: linker command failed with exit code 1 (use -v to see
invocation)make[1]: Leaving directory
`/home/mdriftmeyer/DeveloperProjects/LLVMProject/cmake-llvm/CMakeFiles/CMakeTmp’make[1]: *** [cmTryCompileExec] Error 1
make: *** [cmTryCompileExec/fast] Error 2
CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:3 (project)– Configuring incomplete, errors occurred!
mdriftmeyer@horus:~/DeveloperProjects/LLVMProject/cmake-llvm$
Now out of curriousity I change clang++ to clang-3.1 which of course has two symlinks [clang and clang++] under /usr/local/bin
If I configure and attempt to make against the following:
mdriftmeyer@horus:~/DeveloperProjects/LLVMProject/cmake-llvm$ cmake -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_CXX_COMPILER=/usr/local/bin/clang-3.1 -DCMAKE_C_COMPILER=/usr/local/bin/clang-3.1 -DCMAKE_CXX_FLAGS=’-O2’ CMAKE_C_FLAGS=’-O2’ -DLLVM_BUILD_EXAMPLES=ON -DLLVM_BUILD_TESTS=ON -DLLVM_INCLUDE_TESTS=ON -DLLVM_TARGETS_TO_BUILD=‘ARM;CppBackend;PTX;Hexagon;X86’ …/trunk/llvm/
– Target triple: x86_64-unknown-linux-gnu
– Native target architecture is X86
– Threads enabled.
– Building with -fPIC
– Constructing LLVMBuild project information
– Targeting ARM
– Targeting CppBackend
– Targeting PTX
– Targeting Hexagon
– Targeting X86
– Clang version: 3.1
– Configuring done
– Generating done
– Build files have been written to: /home/mdriftmeyer/DeveloperProjects/LLVMProject/cmake-llvm
mdriftmeyer@horus:~/DeveloperProjects/LLVMProject/cmake-llvm$
Result:
mdriftmeyer@horus:~/DeveloperProjects/LLVMProject/cmake-llvm$ make -j3
Scanning dependencies of target LLVMHello
[ 0%] Building CXX object lib/Transforms/Hello/CMakeFiles/LLVMHello.dir/Hello.cpp.o
Scanning dependencies of target profile_rt-shared
Scanning dependencies of target LLVMSupport
[ 0%] Building C object runtime/libprofile/CMakeFiles/profile_rt-shared.dir/BasicBlockTracing.c.o
In file included from /home/mdriftmeyer/DeveloperProjects/LLVMProject/trunk/llvm/lib/Transforms/Hello/Hello.cpp:16:
/home/mdriftmeyer/DeveloperProjects/LLVMProject/trunk/llvm/include/llvm/Pass.h:32:10: fatal error: 'string’
file not found
#include
^
[ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/APFloat.cpp.o
[ 0%] Building C object runtime/libprofile/CMakeFiles/profile_rt-shared.dir/CommonProfiling.c.o
In file included from /home/mdriftmeyer/DeveloperProjects/LLVMProject/trunk/llvm/lib/Support/APFloat.cpp:15:
In file included from /home/mdriftmeyer/DeveloperProjects/LLVMProject/trunk/llvm/include/llvm/ADT/APFloat.h:104:
In file included from /home/mdriftmeyer/DeveloperProjects/LLVMProject/trunk/llvm/include/llvm/ADT/APInt.h:18:
In file included from /home/mdriftmeyer/DeveloperProjects/LLVMProject/trunk/llvm/include/llvm/ADT/ArrayRef.h:13:
In file included from /home/mdriftmeyer/DeveloperProjects/LLVMProject/trunk/llvm/include/llvm/ADT/SmallVector.h:17:
In file included from /home/mdriftmeyer/DeveloperProjects/LLVMProject/trunk/llvm/include/llvm/Support/type_traits.h:20:
/home/mdriftmeyer/DeveloperProjects/LLVMProject/cmake-llvm/include/llvm/Support/DataTypes.h:36:10: fatal error:
’cmath’ file not found
#include
^
[ 0%] Building C object runtime/libprofile/CMakeFiles/profile_rt-shared.dir/GCDAProfiling.c.o
[ 0%] Building C object runtime/libprofile/CMakeFiles/profile_rt-shared.dir/PathProfiling.c.o
1 error generated.
make[2]: *** [lib/Transforms/Hello/CMakeFiles/LLVMHello.dir/Hello.cpp.o] Error 1
make[1]: *** [lib/Transforms/Hello/CMakeFiles/LLVMHello.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs…
1 error generated.
[ 0%] make[2]: *** [lib/Support/CMakeFiles/LLVMSupport.dir/APFloat.cpp.o] Error 1
make[1]: *** [lib/Support/CMakeFiles/LLVMSupport.dir/all] Error 2
[ 0%] Building C object runtime/libprofile/CMakeFiles/profile_rt-shared.dir/EdgeProfiling.c.o
Building C object runtime/libprofile/CMakeFiles/profile_rt-shared.dir/OptimalEdgeProfiling.c.o
Linking C shared library …/…/lib/profile_rt.so
[ 0%] Built target profile_rt-shared
make: *** [all] Error 2
mdriftmeyer@horus:~/DeveloperProjects/LLVMProject/cmake-llvm$
Of course if I configure as follows:;
mdriftmeyer@horus:~/DeveloperProjects/LLVMProject/cmake-llvm$ cmake -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_CXX_COMPILER=/usr/bin/g++ -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_FLAGS=’-O2’ CMAKE_C_FLAGS=’-O2’ -DLLVM_BUILD_EXAMPLES=ON -DLLVM_BUILD_TESTS=ON -DLLVM_INCLUDE_TESTS=ON -DLLVM_TARGETS_TO_BUILD=‘ARM;CppBackend;PTX;Hexagon;X86’ …/trunk/llvm/
Results: after rebuilding the cache and rerunning the configuration twice the end is that LLVM/Clang builds cleanly. None of the noise above about clang++ failing to be able to build a simple c++ program nor the missing string and cmath header files.
Perhaps this is just a Debian Linux issue and has to do with upgrades to LSB 4.1 [Linux Standard Base 4.1], but then I don’t know enough about LSB to know exactly how a compiler infrastructure would be impacted by it, if at all. [http://www.linuxfoundation.org/collaborate/workgroups/lsb/lsb-41-release-notes]
NOTE: (The work on Libc++ under libcxx being put under /runtime and recognized by Cmake is still not working, from what I’ve seen, though work on it around 2 weeks prior was mentioned it would get added for Linux)
- Marc