[PATCH] D15584: [CMake] Support a simple case for bootstrap builds to generate PGO data

Justin Bogner via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 5 13:00:40 PST 2016


Chris Bieneman <beanz at apple.com> writes:
> beanz updated this revision to Diff 43192.
> beanz added a comment.
>
> One more dependency hookup fix, this one makes it so that stage2
> doesn't depend on the stage2-instrumented compiler-rt, and avoids
> building it when you invoke the 'stage2' target.

Please update the cache file names to better match the updated target
naming scheme, but otherwise this LGTM.

>
> http://reviews.llvm.org/D15584
>
> Files:
>   CMakeLists.txt
>   cmake/caches/PGO-stage2.cmake
>   cmake/caches/PGO-stage3.cmake
>   cmake/caches/PGO.cmake
>
> Index: cmake/caches/PGO.cmake
> ===================================================================
> --- /dev/null
> +++ cmake/caches/PGO.cmake
> @@ -0,0 +1,17 @@
> +set(CMAKE_BUILD_TYPE RELEASE CACHE STRING "")
> +set(CLANG_ENABLE_BOOTSTRAP ON CACHE BOOL "")
> +set(LLVM_BUILD_EXTERNAL_COMPILER_RT ON CACHE BOOL "")
> +
> +set(LLVM_TARGETS_TO_BUILD X86 CACHE STRING "")
> +set(BOOTSTRAP_LLVM_BUILD_INSTRUMENTED ON CACHE BOOL "")
> +set(CLANG_BOOTSTRAP_TARGETS
> +  generate-profdata
> +  stage2
> +  stage2-check-all
> +  stage2-check-llvm
> +  stage2-check-clang
> +  stage2-test-suite CACHE STRING "")
> +
> +set(CLANG_BOOTSTRAP_CMAKE_ARGS
> +  -C ${CMAKE_CURRENT_LIST_DIR}/PGO-stage2.cmake
> +  CACHE STRING "")
> Index: cmake/caches/PGO-stage3.cmake
> ===================================================================
> --- /dev/null
> +++ cmake/caches/PGO-stage3.cmake
> @@ -0,0 +1,2 @@
> +set(CMAKE_BUILD_TYPE RELEASE CACHE STRING "")
> +set(LLVM_BUILD_EXTERNAL_COMPILER_RT ON CACHE BOOL "")
> Index: cmake/caches/PGO-stage2.cmake
> ===================================================================
> --- /dev/null
> +++ cmake/caches/PGO-stage2.cmake
> @@ -0,0 +1,9 @@
> +set(CMAKE_BUILD_TYPE RELEASE CACHE STRING "")
> +set(CLANG_ENABLE_BOOTSTRAP ON CACHE BOOL "")
> +set(LLVM_BUILD_EXTERNAL_COMPILER_RT ON CACHE BOOL "")
> +
> +set(CLANG_BOOTSTRAP_TARGETS check-all check-llvm check-clang test-suite CACHE STRING "")
> +
> +set(CLANG_BOOTSTRAP_CMAKE_ARGS
> +  -C ${CMAKE_CURRENT_LIST_DIR}/PGO-stage3.cmake
> +  CACHE STRING "")
> Index: CMakeLists.txt
> ===================================================================
> --- CMakeLists.txt
> +++ CMakeLists.txt
> @@ -631,11 +631,19 @@
>  
>    string(REGEX MATCH "stage([0-9]*)" MATCHED_STAGE "${CLANG_STAGE}")
>    if(MATCHED_STAGE)
> -    math(EXPR STAGE_NUM "${MATCHED_STAGE} + 1")
> -    set(NEXT_CLANG_STAGE stage${STAGE_NUM})
> +    if(NOT LLVM_BUILD_INSTRUMENTED)
> +      math(EXPR STAGE_NUM "${CMAKE_MATCH_1} + 1")
> +      set(NEXT_CLANG_STAGE stage${STAGE_NUM})
> +    else()
> +      set(NEXT_CLANG_STAGE stage${CMAKE_MATCH_1})
> +    endif()
>    else()
>      set(NEXT_CLANG_STAGE bootstrap)
>    endif()
> +
> +  if(BOOTSTRAP_LLVM_BUILD_INSTRUMENTED)
> +    set(NEXT_CLANG_STAGE ${NEXT_CLANG_STAGE}-instrumented)
> +  endif()
>    message(STATUS "Setting next clang stage to: ${NEXT_CLANG_STAGE}")
>    
>    
> @@ -681,6 +689,26 @@
>      set(RUNTIME_DEP compiler-rt)
>    endif()
>  
> +  set(COMPILER_OPTIONS
> +    -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++
> +    -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang
> +    -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang)
> +
> +  if(BOOTSTRAP_LLVM_BUILD_INSTRUMENTED)
> +    set(PGO_DEP llvm-profdata)
> +    set(PGO_OPT -DLLVM_PROFDATA=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-profdata)
> +  endif()
> +
> +  if(LLVM_BUILD_INSTRUMENTED)
> +    set(PGO_DEP generate-profdata)
> +    set(PGO_OPT -DLLVM_PROFDATA_FILE=${CMAKE_CURRENT_BINARY_DIR}/utils/perf-training/clang.profdata)
> +    set(COMPILER_OPTIONS
> +      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
> +      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
> +      -DCMAKE_ASM_COMPILER=${CMAKE_ASM_COMPILER})
> +    set(RUNTIME_DEP) # Don't set runtime dependencies
> +  endif()
> +
>    # Find all variables that start with BOOTSTRAP_ and populate a variable with
>    # them.
>    get_cmake_property(variableNames VARIABLES)
> @@ -703,7 +731,7 @@
>    endforeach()
>  
>    ExternalProject_Add(${NEXT_CLANG_STAGE}
> -    DEPENDS clang ${LTO_DEP} ${RUNTIME_DEP}
> +    DEPENDS clang ${LTO_DEP} ${RUNTIME_DEP} ${PGO_DEP}
>      PREFIX ${NEXT_CLANG_STAGE}
>      SOURCE_DIR ${CMAKE_SOURCE_DIR}
>      STAMP_DIR ${STAMP_DIR}
> @@ -715,11 +743,9 @@
>                  -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
>                  ${CLANG_BOOTSTRAP_CMAKE_ARGS}
>                  ${PASSTHROUGH_VARIABLES}
> -                -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++
> -                -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang
> -                -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang
> -                -DCLANG_STAGE=${NEXT_CLANG_STAGE}
> -                ${LTO_LIBRARY} ${LTO_AR} ${LTO_RANLIB} ${verbose}
> +                 -DCLANG_STAGE=${NEXT_CLANG_STAGE}
> +                ${COMPILER_OPTIONS}
> +                ${LTO_LIBRARY} ${LTO_AR} ${LTO_RANLIB} ${verbose} ${PGO_OPT}
>      INSTALL_COMMAND ""
>      STEP_TARGETS configure build
>      ${cmake_3_4_USES_TERMINAL_OPTIONS}


More information about the cfe-commits mailing list