diff --git a/clang/cmake/caches/llvm-toolchain/stage1.cmake b/clang/cmake/caches/llvm-toolchain/stage1.cmake new file mode 100644 index 0000000000000..b3e76eee43c25 --- /dev/null +++ b/clang/cmake/caches/llvm-toolchain/stage1.cmake @@ -0,0 +1,17 @@ +# Stage 1 +# * Build an LTO optimized libcxx, so we can staticially link it into stage 2 +# clang. + + +set(CMAKE_BUILD_TYPE Release CACHE STRING "") +set(LLVM_TARGETS_TO_BUILD Native CACHE STRING "") +set(LLVM_ENABLE_RUNTIMES compiler-rt libcxx libcxxabi libunwind CACHE STRING "") +set(LLVM_ENABLE_PROJECTS clang lld CACHE STRING "") + +set(CLANG_ENABLE_BOOTSTRAP ON CACHE BOOL "") +set(CLANG_BOOTSTRAP_CMAKE_ARGS -C ${CMAKE_CURRENT_LIST_DIR}/stage2-instrumented.cmake CACHE BOOL "") +set(BOOTSTRAP_LLVM_BUILD_INSTRUMENTED IR CACHE BOOL "") +set(CLANG_BOOTSTRAP_TARGETS stage2-check-all stage2-distribution stage2-install-distribution stage2-clang stage2-clang-bolt CACHE BOOL "") +set(LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY ON CACHE STRING "") +set(RUNTIMES_CMAKE_ARGS "-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON" CACHE STRING "") +set(LLVM_ENABLE_LLD ON CACHE STRING "") diff --git a/clang/cmake/caches/llvm-toolchain/stage2-instrumented.cmake b/clang/cmake/caches/llvm-toolchain/stage2-instrumented.cmake new file mode 100644 index 0000000000000..783b8e0b2067e --- /dev/null +++ b/clang/cmake/caches/llvm-toolchain/stage2-instrumented.cmake @@ -0,0 +1,11 @@ +# Stage 2 instrumented: +# * Build an instrumented clang, so we can generate profile data for stage 2. + + +set(CLANG_ENABLE_BOOTSTRAP ON CACHE BOOL "") +set(LLVM_BUILD_INSTRUMENTED IR CACHE STRING "") +set(CLANG_BOOTSTRAP_CMAKE_ARGS -C ${CMAKE_CURRENT_LIST_DIR}/stage2.cmake CACHE STRING "") +set(CLANG_BOOTSTRAP_TARGETS clang check-all distribution install-distribution clang-bolt CACHE STRING "") +set(CLANG_BOLT OFF CACHE STRING "") + +include(${CMAKE_CURRENT_LIST_DIR}/stage2.cmake) diff --git a/clang/cmake/caches/llvm-toolchain/stage2.cmake b/clang/cmake/caches/llvm-toolchain/stage2.cmake new file mode 100644 index 0000000000000..40c200c3f715f --- /dev/null +++ b/clang/cmake/caches/llvm-toolchain/stage2.cmake @@ -0,0 +1,17 @@ +# Stage 2: +# * This is the final stage. +# * The goal is to have a clang that is LTO, PGO, and bolt optimized and also +# statically linked to libcxx and compiler-rt. + +set(LLVM_TARGETS_TO_BUILD Native CACHE STRING "") +set(LLVM_ENABLE_RUNTIMES compiler-rt libcxx libcxxabi libunwind CACHE STRING "" FORCE) +set(LLVM_ENABLE_PROJECTS clang lld bolt CACHE STRING "" FORCE) +set(LLVM_ENABLE_LLD ON CACHE BOOL "") +set(LLVM_ENABLE_LTO THIN CACHE STRING "") +set(LLVM_ENABLE_LIBCXX ON CACHE BOOL "") +set(LLVM_STATIC_LINK_CXX_STDLIB ON CACHE BOOL "") +set(CLANG_BOLT "INSTRUMENT" CACHE STRING "") +set(CMAKE_EXE_LINKER_FLAGS "-Wl,--emit-relocs,-znow -rtlib=compiler-rt --unwindlib=libunwind -static-libgcc" CACHE STRING "") +set(CMAKE_SHARED_LINKER_FLAGS "-rtlib=compiler-rt --unwindlib=libunwind -static-libgcc" CACHE STRING "") +set(CMAKE_MODULE_LINKER_FLAGS "-rtlib=compiler-rt --unwindlib=libunwind -static-libgcc" CACHE STRING "") +set(LLVM_DISTRIBUTION_COMPONENTS clang lld runtimes clang-resource-headers CACHE STRING "") diff --git a/clang/cmake/caches/llvm-toolchain/usage.rst b/clang/cmake/caches/llvm-toolchain/usage.rst new file mode 100644 index 0000000000000..fff580899d934 --- /dev/null +++ b/clang/cmake/caches/llvm-toolchain/usage.rst @@ -0,0 +1,19 @@ +# LLVM Toolchain Build + +This directory contains cache files for building a complete LLVM-based toolchain. +The resulting clang build will be LTO, PGO, and BOLT optimized and statically +linked against libc++ and compiler-rt. + +The build is done in 3 stages: + +* Stage 1: Build an LTO optimized libc++ with Stage 1 clang/lld. +* Stage 2 Instrumented: Build clang with instrumentation in order to generate + profile data for PGO. +* Stage 2: Build clang with LTO, PGO, and BOLT optimizations and statically link + with stage2 libc++ and compiler-rt. + +## Usage + +:: + $ cmake -S llvm -B build -C clang/cmake/caches/llvm-toolchain/stage1.cmake + $ ninja stage2-install-distribution