diff options
| author | Chris Bieneman <beanz@apple.com> | 2015-08-05 17:38:12 +0000 |
|---|---|---|
| committer | Chris Bieneman <beanz@apple.com> | 2015-08-05 17:38:12 +0000 |
| commit | f2a00e9d2a433bf0d4a9a3bee38d18771c3b75a0 (patch) | |
| tree | e014877926705674168456e9cbf7528764aad654 /clang | |
| parent | dd44c26d349f67f97b2313901ed91adb6e250a03 (diff) | |
| download | bcm5719-llvm-f2a00e9d2a433bf0d4a9a3bee38d18771c3b75a0.tar.gz bcm5719-llvm-f2a00e9d2a433bf0d4a9a3bee38d18771c3b75a0.zip | |
[CMake] First pass at adding support for clang bootstrap builds to CMake
Summary:
This patch adds a new CLANG_ENABLE_BOOTSTRAP option to CMake which adds targets for building a stage2 bootstrap compiler. The targets are:
bootstrap-configure
bootstrap-build
bootstrap (same as bootstrap-configure and bootstrap-build)
bootstrap-install
bootstrap-check-llvm
bootstrap-check-clang
bootstrap-check-all
If you are using 3.3.20150708 or greater it utilizes the ninja USES_TERMINAL_* settings on the external project so that the output is properly buffered.
Reviewers: bogner, chandlerc
Subscribers: filcab, cfe-commits
Differential Revision: http://reviews.llvm.org/D11743
llvm-svn: 244070
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/CMakeLists.txt | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt index ab70f1dab61..f0002ac1af9 100644 --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -96,6 +96,7 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) option(LLVM_FORCE_USE_OLD_HOST_TOOLCHAIN "Set to ON to force using an old, unsupported host toolchain." OFF) + option(CLANG_ENABLE_BOOTSTRAP "Generate the clang bootstrap target" OFF) include(AddLLVM) include(TableGen) @@ -551,3 +552,76 @@ if (CLANG_BUILT_STANDALONE) ${CLANG_BINARY_DIR}/share/clang/cmake/ClangConfig.cmake COPYONLY) endif () + +if (CLANG_ENABLE_BOOTSTRAP) + include(ExternalProject) + + if(CMAKE_VERSION VERSION_LESS 3.3.20150708) + set(cmake_3_4_USES_TERMINAL_OPTIONS) + else() + set(cmake_3_4_USES_TERMINAL_OPTIONS + USES_TERMINAL_CONFIGURE 1 + USES_TERMINAL_BUILD 1 + USES_TERMINAL_INSTALL 1 + ) + endif() + + set(STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/bootstrap-stamps/) + set(BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/bootstrap-bins/) + + add_custom_target(bootstrap-clear + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/bootstrap-cleared + ) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/bootstrap-cleared + DEPENDS clang + COMMAND ${CMAKE_COMMAND} -E remove_directory ${BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E make_directory ${BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E remove_directory ${STAMP_DIR} + COMMAND ${CMAKE_COMMAND} -E make_directory ${STAMP_DIR} + COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/bootstrap-cleared + COMMENT "Clobberring bootstrap build and stamp directories" + ) + + ExternalProject_Add(bootstrap + DEPENDS clang + PREFIX bootstrap + SOURCE_DIR ${CMAKE_SOURCE_DIR} + STAMP_DIR ${STAMP_DIR} + BINARY_DIR ${BINARY_DIR} + CMAKE_ARGS + # We shouldn't need to set this here, but INSTALL_DIR doesn't + # seem to work, so instead I'm passing this through + -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} + ${CLANG_BOOTSTRAP_CMAKE_ARGS} + -DCMAKE_CXX_COMPILER=${CMAKE_BINARY_DIR}/bin/clang++ + -DCMAKE_C_COMPILER=${CMAKE_BINARY_DIR}/bin/clang + INSTALL_COMMAND "" + STEP_TARGETS configure build + ${cmake_3_4_USES_TERMINAL_OPTIONS} + ) + + # exclude really-install from main target + set_target_properties(bootstrap PROPERTIES _EP_really-install_EXCLUDE_FROM_MAIN On) + ExternalProject_Add_Step(bootstrap really-install + COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target install + COMMENT "Performing install step for 'bootstrap'" + DEPENDEES build + ) + ExternalProject_Add_StepTargets(bootstrap really-install) + add_custom_target(bootstrap-install DEPENDS bootstrap-really-install) + + + set(ADDITIONAL_TARGETS_TO_ADD check-llvm check-clang check-all) + foreach(target ${ADDITIONAL_TARGETS_TO_ADD}) + # exclude from main target + set_target_properties(bootstrap PROPERTIES _EP_${target}_EXCLUDE_FROM_MAIN On) + + ExternalProject_Add_Step(bootstrap ${target} + COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target ${target} + COMMENT "Performing ${target} for 'bootstrap'" + DEPENDEES configure + ) + ExternalProject_Add_StepTargets(bootstrap ${target}) + endforeach() +endif() |

