[PATCH] D15584: [CMake] Support a simple case for bootstrap builds to generate PGO data
Chris Bieneman via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 16 12:33:09 PST 2015
beanz created this revision.
beanz added reviewers: bogner, silvas, chandlerc.
beanz added a subscriber: cfe-commits.
This patch adds support for the clang multi-stage bootstrapping to support PGO profdata generation, and can build a 2 or 3 stage compiler.
With this patch applied you can configure your build directory with the following invocation of CMake:
cmake -G <generator> -C <path_to_clang>/cmake/caches/PGO-stage1.cmake <source dir>
After configuration the following additional targets will be generated:
stage2:
Builds a stage1 x86 compiler, runtime, and required tools (llvm-config, llvm-profdata) then uses that compiler to build an instrumented stage2 compiler.
stage2-generate-profdata:
Depends on "stage2" and will use the stage2 compiler to generate profdata based on the training files in <clang>/utils/perf-training
stage3:
Depends on "stage2-generate-profdata" and will use the stage1 compiler with the stage2 profdata to build a PGO-optimized compiler.
stage3-check-llvm:
Depends on stage3 and runs check-llvm using the stage3 compiler.
stage3-check-clang:
Depends on stage3 and runs check-clang using the stage3 compiler.
stage3-check-all:
Depends on stage3 and runs check-all using the stage3 compiler.
stage3-test-suite:
Depends on stage3 and runs the test-suite using the stage3 compiler (requires in-tree test-suite).
http://reviews.llvm.org/D15584
Files:
CMakeLists.txt
cmake/caches/PGO-stage1.cmake
cmake/caches/PGO-stage2.cmake
cmake/caches/PGO-stage3.cmake
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: cmake/caches/PGO-stage1.cmake
===================================================================
--- /dev/null
+++ cmake/caches/PGO-stage1.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
+ stage3
+ generate-profdata
+ stage3-check-all
+ stage3-check-llvm
+ stage3-check-clang
+ stage3-test-suite CACHE STRING "")
+
+set(CLANG_BOOTSTRAP_CMAKE_ARGS
+ -C ${CMAKE_CURRENT_LIST_DIR}/PGO-stage2.cmake
+ CACHE STRING "")
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -677,6 +677,25 @@
CLANG_REPOSITORY_STRING
CMAKE_MAKE_PROGRAM)
+ 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})
+ endif()
+
if(TARGET compiler-rt)
set(RUNTIME_DEP compiler-rt)
endif()
@@ -703,7 +722,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 +734,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}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D15584.43050.patch
Type: text/x-patch
Size: 3539 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151216/85ae99b6/attachment.bin>
More information about the cfe-commits
mailing list