summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorChris Bieneman <beanz@apple.com>2015-08-05 17:38:12 +0000
committerChris Bieneman <beanz@apple.com>2015-08-05 17:38:12 +0000
commitf2a00e9d2a433bf0d4a9a3bee38d18771c3b75a0 (patch)
treee014877926705674168456e9cbf7528764aad654 /clang
parentdd44c26d349f67f97b2313901ed91adb6e250a03 (diff)
downloadbcm5719-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.txt74
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()
OpenPOWER on IntegriCloud