[clang] [llvm] test-release.sh: Add a CMake cache file for 3-stage release builds (PR #75903)

Tom Stellard via cfe-commits cfe-commits at lists.llvm.org
Tue Dec 19 00:04:46 PST 2023


https://github.com/tstellar created https://github.com/llvm/llvm-project/pull/75903

You can now pass the -use-cmake-cache option to test-release.sh and it will use a predefined cache file for building the release.  This will make it easier to reproduce the builds and add other enhancements like PGO or bolt optimizations.

>From 88b9aac241bed0ce7c65fa798b68c9779f0615e7 Mon Sep 17 00:00:00 2001
From: Tom Stellard <tstellar at redhat.com>
Date: Fri, 15 Dec 2023 01:27:25 +0000
Subject: [PATCH] test-release.sh: Add a CMake cache file for 3-stage release
 builds

You can now pass the -use-cmake-cache option and it will use a
predefined cache file for building the release.  This will make it
easier to reproduce the builds and add other enhancements, like PGO
or bolt optimizations.
---
 .github/workflows/release-binaries.yml |  5 +-
 clang/cmake/caches/Release.cmake       | 41 ++++++++++++++++
 llvm/utils/release/test-release.sh     | 67 +++++++++++++++++++++++---
 3 files changed, 104 insertions(+), 9 deletions(-)
 create mode 100644 clang/cmake/caches/Release.cmake

diff --git a/.github/workflows/release-binaries.yml b/.github/workflows/release-binaries.yml
index 4e3eaff97a8783..4a4ba9dcc5ca34 100644
--- a/.github/workflows/release-binaries.yml
+++ b/.github/workflows/release-binaries.yml
@@ -93,8 +93,8 @@ jobs:
 
     - name: Build Clang
       run: |
-        cmake -G Ninja  -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_BUILD_TYPE=Release -DCMAKE_ENABLE_ASSERTIONS=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DLLVM_ENABLE_PROJECTS=clang -S llvm -B build
-        ninja -v -C build
+        cmake -G Ninja -C clang/cmake/caches/Release.cmake -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_POSITION_INDEPENDENT_CODE=ON -S llvm -B build
+        ninja -v -C build clang
 
 
   build-binaries:
@@ -152,6 +152,7 @@ jobs:
         -triple ${{ matrix.target.triple }} \
         -use-ninja \
         -no-checkout \
+        -use-cmake-cache \
         -no-test-suite \
         -configure-flags "-DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache"
 
diff --git a/clang/cmake/caches/Release.cmake b/clang/cmake/caches/Release.cmake
new file mode 100644
index 00000000000000..42c88655c58cee
--- /dev/null
+++ b/clang/cmake/caches/Release.cmake
@@ -0,0 +1,41 @@
+# Plain options configure the first build.
+# BOOTSTRAP_* options configure the second build.
+# BOOTSTRAP_BOOTSTRAP_* options configure the third build.
+
+set(CMAKE_BUILD_TYPE RELEASE CACHE STRING "")
+
+# Stage 1 Bootstrap Setup
+set(CLANG_ENABLE_BOOTSTRAP ON CACHE BOOL "")
+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 "")
+
+# Stage 1 Options
+set(LLVM_ENABLE_PROJECTS "clang" 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
+  check-all
+  check-llvm
+  check-clang CACHE STRING "")
+
+# Stage 2 Options
+set(BOOTSTRAP_LLVM_ENABLE_PROJECTS "clang" CACHE STRING "")
+set(BOOTSTRAP_LLVM_TARGETS_TO_BUILD Native CACHE 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 "")
diff --git a/llvm/utils/release/test-release.sh b/llvm/utils/release/test-release.sh
index f38134e3d22d8f..544d4bfdd799ce 100755
--- a/llvm/utils/release/test-release.sh
+++ b/llvm/utils/release/test-release.sh
@@ -46,7 +46,7 @@ BuildDir="`pwd`"
 ExtraConfigureFlags=""
 ExportBranch=""
 git_ref=""
-
+do_cmake_cache="no"
 do_bolt="no"
 if [ "$System" = "Linux" ]; then
     case $Machine in
@@ -87,6 +87,7 @@ function usage() {
     echo " -no-mlir             Disable check-out & build MLIR"
     echo " -no-flang            Disable check-out & build Flang"
     echo " -silent-log          Don't output build logs to stdout"
+    echo " -use-cmake-cache     Build using a CMake cache file"
 }
 
 while [ $# -gt 0 ]; do
@@ -200,6 +201,9 @@ while [ $# -gt 0 ]; do
         -silent-log )
             do_silent_log="yes"
             ;;
+        -use-cmake-cache | --use-cmake-cache )
+            do_cmake_cache="yes"
+            ;;
         -help | --help | -h | --h | -\? )
             usage
             exit 0
@@ -328,6 +332,55 @@ Package=$Package-$Triple
 # Errors to be highlighted at the end are written to this file.
 echo -n > $LogDir/deferred_errors.log
 
+redir="/dev/stdout"
+if [ $do_silent_log == "yes" ]; then
+  echo "# Silencing build logs because of -silent-log flag..."
+  redir="/dev/null"
+fi
+
+
+function build_with_cmake_cache() {
+(
+  CMakeBuildDir=$BuildDir/build
+  SrcDir=$BuildDir/llvm-project/
+  InstallDir=$BuildDir/install
+
+  rm -rf $CMakeBuildDir
+
+  # FIXME: Would be nice if the commands were echoed to the log file too.
+  set -x
+
+  env CC="$c_compiler" CXX="$cxx_compiler" \
+  cmake -G "$generator" -B $CMakeBuildDir -S $SrcDir/llvm \
+        -C $SrcDir/clang/cmake/caches/Release.cmake \
+	-DCLANG_BOOTSTRAP_PASSTHROUGH="CMAKE_POSITION_INDEPENDENT_CODE;LLVM_LIT_ARGS" \
+        -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
+        -DLLVM_LIT_ARGS="-j $NumJobs $LitVerbose" \
+        $ExtraConfigureFlags
+        2>&1 | tee $LogDir/llvm.configure-$Flavor.log
+
+  ${MAKE} $J_ARG $Verbose -C $CMakeBuildDir stage3-check-all \
+          2>&1 | tee $LogDir/llvm.make-$Flavor.log > $redir
+
+  DESTDIR="${InstallDir}" \
+  ${MAKE} -C $CMakeBuildDir stage3-install \
+          2>&1 | tee $LogDir/llvm.install-$Flavor.log > $redir
+
+ mkdir -p $BuildDir/Release
+ pushd $BuildDir/Release
+ mv $InstallDir/usr/local $Package
+ if [ "$use_gzip" = "yes" ]; then
+    tar cf - $Package | gzip -9c > $BuildDir/$Package.tar.gz
+  else
+    tar cf - $Package | xz -9ce -T $NumJobs > $BuildDir/$Package.tar.xz
+  fi
+  mv $Package $InstallDir/usr/local
+  popd
+) 2>&1 | tee $LogDir/testing.$Release-$RC.log
+
+  exit 0
+}
+
 function deferred_error() {
   Phase="$1"
   Flavor="$2"
@@ -485,12 +538,6 @@ function build_llvmCore() {
       fi
     fi
 
-    redir="/dev/stdout"
-    if [ $do_silent_log == "yes" ]; then
-      echo "# Silencing build logs because of -silent-log flag..."
-      redir="/dev/null"
-    fi
-
     cd $ObjDir
     echo "# Compiling llvm $Release-$RC $Flavor"
     echo "# ${MAKE} $J_ARG $Verbose"
@@ -600,7 +647,13 @@ if [ $do_test_suite = "yes" ]; then
   mkdir -p $TestSuiteBuildDir
 fi
 
+if [ "$do_cmake_cache" = "yes" ]; then
+  build_with_cmake_cache
+  exit 0
+fi
+
 (
+
 Flavors="Release"
 if [ "$do_debug" = "yes" ]; then
     Flavors="Debug $Flavors"



More information about the cfe-commits mailing list