-
Notifications
You must be signed in to change notification settings - Fork 12k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[CMake][Release] Refactor cache file and use two stages for non-PGO b…
…uilds (#89812) Completely refactor the cache file to simplify it and remove unnecessary variables. The main functional change here is that the non-PGO builds now use two stages, so `ninja -C build stage2-package` can be used with both PGO and non-PGO builds. (cherry picked from commit 6473fbf)
- Loading branch information
Showing
1 changed file
with
66 additions
and
68 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,95 +1,93 @@ | ||
# Plain options configure the first build. | ||
# BOOTSTRAP_* options configure the second build. | ||
# BOOTSTRAP_BOOTSTRAP_* options configure the third build. | ||
# PGO Builds have 3 stages (stage1, stage2-instrumented, stage2) | ||
# non-PGO Builds have 2 stages (stage1, stage2) | ||
|
||
# General Options | ||
|
||
function (set_final_stage_var name value type) | ||
if (LLVM_RELEASE_ENABLE_PGO) | ||
set(BOOTSTRAP_BOOTSTRAP_${name} ${value} CACHE ${type} "") | ||
else() | ||
set(BOOTSTRAP_${name} ${value} CACHE ${type} "") | ||
endif() | ||
endfunction() | ||
|
||
function (set_instrument_and_final_stage_var name value type) | ||
# This sets the varaible for the final stage in non-PGO builds and in | ||
# the stage2-instrumented stage for PGO builds. | ||
set(BOOTSTRAP_${name} ${value} CACHE ${type} "") | ||
if (LLVM_RELEASE_ENABLE_PGO) | ||
# Set the variable in the final stage for PGO builds. | ||
set(BOOTSTRAP_BOOTSTRAP_${name} ${value} CACHE ${type} "") | ||
endif() | ||
endfunction() | ||
|
||
# General Options: | ||
# If you want to override any of the LLVM_RELEASE_* variables you can set them | ||
# on the command line via -D, but you need to do this before you pass this | ||
# cache file to CMake via -C. e.g. | ||
# | ||
# cmake -D LLVM_RELEASE_ENABLE_PGO=ON -C Release.cmake | ||
set(LLVM_RELEASE_ENABLE_LTO THIN CACHE STRING "") | ||
set(LLVM_RELEASE_ENABLE_PGO OFF CACHE BOOL "") | ||
|
||
set(LLVM_RELEASE_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "") | ||
set(LLVM_RELEASE_ENABLE_PROJECTS "clang;lld;lldb;clang-tools-extra;bolt;polly;mlir;flang" CACHE STRING "") | ||
# Note we don't need to add install here, since it is one of the pre-defined | ||
# steps. | ||
set(LLVM_RELEASE_FINAL_STAGE_TARGETS "clang;package;check-all;check-llvm;check-clang" CACHE STRING "") | ||
set(CMAKE_BUILD_TYPE RELEASE CACHE STRING "") | ||
|
||
# Stage 1 Bootstrap Setup | ||
# Stage 1 Options | ||
set(LLVM_TARGETS_TO_BUILD Native CACHE STRING "") | ||
set(CLANG_ENABLE_BOOTSTRAP ON CACHE BOOL "") | ||
|
||
set(STAGE1_PROJECTS "clang") | ||
set(STAGE1_RUNTIMES "") | ||
|
||
if (LLVM_RELEASE_ENABLE_PGO) | ||
list(APPEND STAGE1_PROJECTS "lld") | ||
list(APPEND STAGE1_RUNTIMES "compiler-rt") | ||
set(CLANG_BOOTSTRAP_TARGETS | ||
generate-profdata | ||
stage2 | ||
stage2-package | ||
stage2-clang | ||
stage2-distribution | ||
stage2-install | ||
stage2-install-distribution | ||
stage2-install-distribution-toolchain | ||
stage2-check-all | ||
stage2-check-llvm | ||
stage2-check-clang | ||
stage2-test-suite CACHE STRING "") | ||
else() | ||
set(CLANG_BOOTSTRAP_TARGETS | ||
clang | ||
check-all | ||
check-llvm | ||
check-clang | ||
test-suite | ||
stage3 | ||
stage3-clang | ||
stage3-check-all | ||
stage3-check-llvm | ||
stage3-check-clang | ||
stage3-install | ||
stage3-test-suite CACHE STRING "") | ||
endif() | ||
stage2-check-clang CACHE STRING "") | ||
|
||
# Stage 1 Options | ||
set(STAGE1_PROJECTS "clang") | ||
set(STAGE1_RUNTIMES "") | ||
# Configuration for stage2-instrumented | ||
set(BOOTSTRAP_CLANG_ENABLE_BOOTSTRAP ON CACHE STRING "") | ||
# This enables the build targets for the final stage which is called stage2. | ||
set(BOOTSTRAP_CLANG_BOOTSTRAP_TARGETS ${LLVM_RELEASE_FINAL_STAGE_TARGETS} CACHE STRING "") | ||
set(BOOTSTRAP_LLVM_BUILD_INSTRUMENTED IR CACHE STRING "") | ||
set(BOOTSTRAP_LLVM_ENABLE_RUNTIMES "compiler-rt" CACHE STRING "") | ||
set(BOOTSTRAP_LLVM_ENABLE_PROJECTS "clang;lld" CACHE STRING "") | ||
|
||
if (LLVM_RELEASE_ENABLE_PGO) | ||
list(APPEND STAGE1_PROJECTS "lld") | ||
list(APPEND STAGE1_RUNTIMES "compiler-rt") | ||
else() | ||
if (LLVM_RELEASE_ENABLE_LTO) | ||
list(APPEND STAGE1_PROJECTS "lld") | ||
endif() | ||
# Any targets added here will be given the target name stage2-${target}, so | ||
# if you want to run them you can just use: | ||
# ninja -C $BUILDDIR stage2-${target} | ||
set(CLANG_BOOTSTRAP_TARGETS ${LLVM_RELEASE_FINAL_STAGE_TARGETS} CACHE STRING "") | ||
endif() | ||
|
||
# Stage 1 Common Config | ||
set(LLVM_ENABLE_RUNTIMES ${STAGE1_RUNTIMES} CACHE STRING "") | ||
set(LLVM_ENABLE_PROJECTS ${STAGE1_PROJECTS} CACHE STRING "") | ||
|
||
set(LLVM_TARGETS_TO_BUILD Native CACHE STRING "") | ||
|
||
# Stage 2 Bootstrap Setup | ||
set(BOOTSTRAP_CLANG_ENABLE_BOOTSTRAP ON CACHE STRING "") | ||
set(BOOTSTRAP_CLANG_BOOTSTRAP_TARGETS | ||
clang | ||
package | ||
check-all | ||
check-llvm | ||
check-clang CACHE STRING "") | ||
|
||
# Stage 2 Options | ||
set(STAGE2_PROJECTS "clang") | ||
set(STAGE2_RUNTIMES "") | ||
|
||
if (LLVM_RELEASE_ENABLE_LTO OR LLVM_RELEASE_ENABLE_PGO) | ||
list(APPEND STAGE2_PROJECTS "lld") | ||
endif() | ||
|
||
if (LLVM_RELEASE_ENABLE_PGO) | ||
set(BOOTSTRAP_LLVM_BUILD_INSTRUMENTED IR CACHE STRING "") | ||
list(APPEND STAGE2_RUNTIMES "compiler-rt") | ||
set(BOOTSTRAP_LLVM_ENABLE_LTO ${LLVM_RELEASE_ENABLE_LTO}) | ||
if (LLVM_RELEASE_ENABLE_LTO) | ||
set(BOOTSTRAP_LLVM_ENABLE_LLD ON CACHE BOOL "") | ||
endif() | ||
# stage2-instrumented and Final Stage Config: | ||
# Options that need to be set in both the instrumented stage (if we are doing | ||
# a pgo build) and the final stage. | ||
set_instrument_and_final_stage_var(LLVM_ENABLE_LTO "${LLVM_RELEASE_ENABLE_LTO}" STRING) | ||
if (LLVM_RELEASE_ENABLE_LTO) | ||
set_instrument_and_final_stage_var(LLVM_ENABLE_LLD "ON" BOOL) | ||
endif() | ||
|
||
set(BOOTSTRAP_LLVM_ENABLE_PROJECTS ${STAGE2_PROJECTS} CACHE STRING "") | ||
set(BOOTSTRAP_LLVM_ENABLE_RUNTIMES ${STAGE2_RUNTIMES} CACHE STRING "") | ||
if (NOT LLVM_RELEASE_ENABLE_PGO) | ||
set(BOOTSTRAP_LLVM_TARGETS_TO_BUILD Native CACHE STRING "") | ||
endif() | ||
# Final Stage Config (stage2) | ||
set_final_stage_var(LLVM_ENABLE_RUNTIMES "${LLVM_RELEASE_ENABLE_RUNTIMES}" STRING) | ||
set_final_stage_var(LLVM_ENABLE_PROJECTS "${LLVM_RELEASE_ENABLE_PROJECTS}" STRING) | ||
|
||
# Stage 3 Options | ||
set(BOOTSTRAP_BOOTSTRAP_LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "") | ||
set(BOOTSTRAP_BOOTSTRAP_LLVM_ENABLE_PROJECTS "clang;lld;lldb;clang-tools-extra;bolt;polly;mlir;flang" CACHE STRING "") | ||
set(BOOTSTRAP_BOOTSTRAP_LLVM_ENABLE_LTO ${LLVM_RELEASE_ENABLE_LTO} CACHE STRING "") | ||
if (LLVM_RELEASE_ENABLE_LTO) | ||
set(BOOTSTRAP_BOOTSTRAP_LLVM_ENABLE_LLD ON CACHE BOOL "") | ||
endif() |