r244070 - [CMake] First pass at adding support for clang bootstrap builds to CMake

Chris Bieneman via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 10 10:44:49 PDT 2015


> On Aug 5, 2015, at 3:15 PM, Justin Bogner <mail at justinbogner.com> wrote:
> 
> 
> Chris Bieneman <beanz at 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 at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list