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

Chris Bieneman via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 5 07:03:41 PST 2016


I think you may be misaligning the if statements. I've only used it when doing full LLVM+clang builds. In fact, some of the more advanced knobs depend on LLVM being built in-tree (which is a bug that I should fix). If you’re having problems making it work, let me know. It is still largely untested outside darwin and a handful of users, so I expect there will be bugs.

-Chris

> On Jan 3, 2016, at 4:33 PM, Chandler Carruth <chandlerc at google.com> wrote:
> 
> Hey Chris, I just noticed that this option is only available when you build Clang as a standalone project, as opposed to building all of LLVM. Was that intentional? Is there any plan to support this in more normal whole-LLVM builds? It seems substantially more useful for stuff like picking up miscompiles...
> 
> -Chandler
> 
> On Wed, Aug 5, 2015 at 10:39 AM Chris Bieneman <beanz at apple.com <mailto:beanz at apple.com>> wrote:
> Author: cbieneman
> Date: Wed Aug  5 12:38:12 2015
> New Revision: 244070
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=244070&view=rev <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:
> 
> 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 <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 <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 <mailto:cfe-commits at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160105/3cd541f0/attachment-0001.html>


More information about the cfe-commits mailing list