clang + libcxx + ninja

Since clang tools currently choke when using the gcc 4.9.2 libstdc++ headers (and 4.8.3, and 4.8.2, and testing against older versions is seriously inconvenient), I decided to try libcxx to work around it. I checked out the source as described in [1], but that caused the llvm build to fail with the following error:

[9/24] Performing configure step for 'libcxx_tsan'
FAILED: cd /home/peter/Programming/llvm/ninja/projects/compiler-rt/lib/tsan/libcxx_tsan/src/libcxx_tsan-build && /usr/bin/cmake -P /home/peter/Programming/llvm/ninja/projects/compiler-rt/lib/tsan/libcxx_tsan/src/libcxx_tsan-stamp/libcxx_tsan-configure.cmake && /usr/bin/cmake -E touch /home/peter/Programming/llvm/ninja/projects/compiler-rt/lib/tsan/libcxx_tsan/src/libcxx_tsan-stamp/libcxx_tsan-configure
CMake Error at /home/peter/Programming/llvm/ninja/projects/compiler-rt/lib/tsan/libcxx_tsan/src/libcxx_tsan-stamp/libcxx_tsan-configure.cmake:16 (message):
   Command failed: 1

    '/usr/bin/cmake' '-DCMAKE_C_COMPILER=/home/peter/Programming/llvm/ninja/./bin/clang' '-DCMAKE_CXX_COMPILER=/home/peter/Programming/llvm/ninja/./bin/clang' '-DCMAKE_C_FLAGS= -fsanitize=thread' '-DCMAKE_CXX_FLAGS= -fsanitize=thread' '-DCMAKE_BUILD_TYPE=Release' '-DCMAKE_INSTALL_PREFIX:PATH=/home/peter/Programming/llvm/ninja/projects/compiler-rt/lib/tsan/libcxx_tsan' '-GNinja' '/home/peter/Programming/llvm/llvm/projects/libcxx'

   See also


Close inspection reveals that it tries to run cmake passing -GNinja (the same as the main build) but doesn't supply -DCMAKE_MAKE_PROGRAM. Editing the file [2] to inject the missing parameter lets the build succeed, but as that file is generated, this edit needs to be repeated sometimes when I update svn, and I'm not sure where it is generated from for a more permanent fix.

[2] $BUILD/projects/compiler-rt/lib/tsan/libcxx_tsan/src/libcxx_tsan-stamp/libcxx_tsan-configure.cmake

I think Alexey might know who wrote the libc++ tsan and msan build scripts. I suspect you don’t need those, and that your build would succeed if you built libcxx instead of ‘all’.

Clang (and clang tools) should work with all the major versions of libstdc++. I suspect fixing this will be more fruitful than trying to port your codebase to a new STL implementation. I think you sent email about those problems, let me try to go find those threads and reply there.

Hi Peter,

Sorry for the late response. Unfortunately, I can’t experiment with it myself at the moment, but you can
try passing correct -DCMAKE_MAKE_PROGRAM flag to ExternalProject_Add invocation here: