> On Aug 5, 2015, at 3:15 PM, Justin Bogner <m...@justinbogner.com> wrote: > > > Chris Bieneman <be...@apple.com> writes: >> Author: cbieneman >> Date: Wed Aug 5 12:38:12 2015 >> New Revision: 244070 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=244070&view=rev >> Log: >> [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: > > This is great! Thanks for working on it. > > Would it be crazy to make this pass along the tablegen from the stage1 > build to the stage2 build, so that it doesn't need to rebuild it?
This would be easy enough to do. Setting LLVM_TABLEGEN_EXE and CLANG_TABLEGEN_EXE on the CMake command line should accomplish it. Not sure if there is any reason not to do that by default. -Chris > >> 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 >> >> Modified: >> cfe/trunk/CMakeLists.txt >> >> Modified: cfe/trunk/CMakeLists.txt >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/CMakeLists.txt?rev=244070&r1=244069&r2=244070&view=diff >> ============================================================================== >> --- cfe/trunk/CMakeLists.txt (original) >> +++ cfe/trunk/CMakeLists.txt Wed Aug 5 12:38:12 2015 >> @@ -96,6 +96,7 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURR >> >> 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() >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits