-
Notifications
You must be signed in to change notification settings - Fork 15.4k
release/21.x: [CI][Github] Set SCCACHE_IDLE_TIMEOUT to 0 (#150508) #150947
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This is in preparation for migrating to Google Cloud Storage (GCS) based caching soon which is only supported by sccache. Reviewers: Keenuts, gburgessiv, dschuff, lnihlen, cmtice Reviewed By: cmtice Pull Request: llvm#149195 (cherry picked from commit 871d65b)
This change modifies CI scripts to add a pseudo-project for CIR and detect when CIR-specific files are modified. It also enables building clang with CIR enabled whenever both the clang and mlir projects are being built. Building and testing CIR is only enabled on Linux at this time, as CIR doesn't properly support Windows or MacOS yet. (cherry picked from commit afff28e)
This patch enables sccache using GCS for Linux premerge. (cherry picked from commit 921287e)
This patch sets the sccache idle timeout to zero which ensures that it will run indefinitely. Without this, sccache will sometimes stop when several long test suites get run consequitively. This resets the statistics which we save at the end. Ensuring the process stays running means we have accurate statistics when we collect them at the end. (cherry picked from commit bcfd294)
|
@cmtice @andykaylor @Keenuts @Keenuts @cmtice What do you think about merging this PR to the release branch? |
|
@llvm/pr-subscribers-github-workflow Author: None (llvmbot) ChangesBackport 871d65b afff28e 921287e 796f551 bcfd294 Requested by: @boomanaiden154 Full diff: https://github.com/llvm/llvm-project/pull/150947.diff 5 Files Affected:
diff --git a/.ci/compute_projects.py b/.ci/compute_projects.py
index c3cf714ce6c10..8e25fd61d6b32 100644
--- a/.ci/compute_projects.py
+++ b/.ci/compute_projects.py
@@ -19,6 +19,7 @@
PROJECT_DEPENDENCIES = {
"llvm": set(),
"clang": {"llvm"},
+ "CIR": {"clang", "mlir"},
"bolt": {"clang", "lld", "llvm"},
"clang-tools-extra": {"clang", "llvm"},
"compiler-rt": {"clang", "lld"},
@@ -55,6 +56,7 @@
".ci": {
"llvm",
"clang",
+ "CIR",
"lld",
"lldb",
"bolt",
@@ -128,6 +130,7 @@
"lldb": "check-lldb",
"llvm": "check-llvm",
"clang": "check-clang",
+ "CIR": "check-clang-cir",
"bolt": "check-bolt",
"lld": "check-lld",
"flang": "check-flang",
@@ -247,6 +250,14 @@ def _get_modified_projects(modified_files: list[str]) -> Set[str]:
# capacity.
if len(path_parts) > 3 and path_parts[:3] == ("llvm", "utils", "gn"):
continue
+ # If the file is in the clang/lib/CIR directory, add the CIR project.
+ if len(path_parts) > 3 and (
+ path_parts[:3] == ("clang", "lib", "CIR")
+ or path_parts[:3] == ("clang", "test", "CIR")
+ or path_parts[:4] == ("clang", "include", "clang", "CIR")
+ ):
+ modified_projects.add("CIR")
+ # Fall through to add clang.
modified_projects.add(pathlib.Path(modified_file).parts[0])
return modified_projects
@@ -267,6 +278,13 @@ def get_env_variables(modified_files: list[str], platform: str) -> Set[str]:
runtimes_check_targets_needs_reconfig = _compute_project_check_targets(
runtimes_to_test_needs_reconfig
)
+
+ # CIR is used as a pseudo-project in this script. It is built as part of the
+ # clang build, but it requires an explicit option to enable. We set that
+ # option here, and remove it from the projects_to_build list.
+ enable_cir = "ON" if "CIR" in projects_to_build else "OFF"
+ projects_to_build.discard("CIR")
+
# We use a semicolon to separate the projects/runtimes as they get passed
# to the CMake invocation and thus we need to use the CMake list separator
# (;). We use spaces to separate the check targets as they end up getting
@@ -279,6 +297,7 @@ def get_env_variables(modified_files: list[str], platform: str) -> Set[str]:
"runtimes_check_targets_needs_reconfig": " ".join(
sorted(runtimes_check_targets_needs_reconfig)
),
+ "enable_cir": enable_cir,
}
diff --git a/.ci/compute_projects_test.py b/.ci/compute_projects_test.py
index 6299931e1ec34..732514c96f5a6 100644
--- a/.ci/compute_projects_test.py
+++ b/.ci/compute_projects_test.py
@@ -104,6 +104,10 @@ def test_clang(self):
env_variables["runtimes_check_targets_needs_reconfig"],
"check-cxx check-cxxabi check-unwind",
)
+ self.assertEqual(
+ env_variables["enable_cir"],
+ "OFF",
+ )
def test_clang_windows(self):
env_variables = compute_projects.get_env_variables(
@@ -126,6 +130,32 @@ def test_clang_windows(self):
env_variables["runtimes_check_targets_needs_reconfig"],
"check-cxx check-cxxabi check-unwind",
)
+ self.assertEqual(env_variables["enable_cir"], "OFF")
+
+ def test_cir(self):
+ env_variables = compute_projects.get_env_variables(
+ ["clang/lib/CIR/CMakeLists.txt"], "Linux"
+ )
+ self.assertEqual(
+ env_variables["projects_to_build"],
+ "clang;clang-tools-extra;lld;llvm;mlir",
+ )
+ self.assertEqual(
+ env_variables["project_check_targets"],
+ "check-clang check-clang-cir check-clang-tools",
+ )
+ self.assertEqual(
+ env_variables["runtimes_to_build"], "compiler-rt;libcxx;libcxxabi;libunwind"
+ )
+ self.assertEqual(
+ env_variables["runtimes_check_targets"],
+ "check-compiler-rt",
+ )
+ self.assertEqual(
+ env_variables["runtimes_check_targets_needs_reconfig"],
+ "check-cxx check-cxxabi check-unwind",
+ )
+ self.assertEqual(env_variables["enable_cir"], "ON")
def test_bolt(self):
env_variables = compute_projects.get_env_variables(
@@ -158,6 +188,7 @@ def test_mlir(self):
self.assertEqual(env_variables["runtimes_to_build"], "")
self.assertEqual(env_variables["runtimes_check_targets"], "")
self.assertEqual(env_variables["runtimes_check_targets_needs_reconfig"], "")
+ self.assertEqual(env_variables["enable_cir"], "OFF")
def test_flang(self):
env_variables = compute_projects.get_env_variables(
@@ -168,6 +199,7 @@ def test_flang(self):
self.assertEqual(env_variables["runtimes_to_build"], "")
self.assertEqual(env_variables["runtimes_check_targets"], "")
self.assertEqual(env_variables["runtimes_check_targets_needs_reconfig"], "")
+ self.assertEqual(env_variables["enable_cir"], "OFF")
def test_invalid_subproject(self):
env_variables = compute_projects.get_env_variables(
@@ -237,7 +269,7 @@ def test_ci(self):
)
self.assertEqual(
env_variables["project_check_targets"],
- "check-bolt check-clang check-clang-tools check-flang check-lld check-lldb check-llvm check-mlir check-polly",
+ "check-bolt check-clang check-clang-cir check-clang-tools check-flang check-lld check-lldb check-llvm check-mlir check-polly",
)
self.assertEqual(
env_variables["runtimes_to_build"],
diff --git a/.ci/monolithic-linux.sh b/.ci/monolithic-linux.sh
index 8d1faab13986c..e6d34cf52e192 100755
--- a/.ci/monolithic-linux.sh
+++ b/.ci/monolithic-linux.sh
@@ -21,7 +21,7 @@ BUILD_DIR="${BUILD_DIR:=${MONOREPO_ROOT}/build}"
INSTALL_DIR="${BUILD_DIR}/install"
rm -rf "${BUILD_DIR}"
-ccache --zero-stats
+sccache --zero-stats
if [[ -n "${CLEAR_CACHE:-}" ]]; then
echo "clearing cache"
@@ -36,7 +36,7 @@ export CLANG_CRASH_DIAGNOSTICS_DIR=`realpath artifacts/reproducers`
function at-exit {
retcode=$?
- ccache --print-stats > artifacts/ccache_stats.txt
+ sccache --show-stats > artifacts/sccache_stats.txt
cp "${BUILD_DIR}"/.ninja_log artifacts/.ninja_log
cp "${BUILD_DIR}"/test-results.*.xml artifacts/ || :
@@ -53,6 +53,7 @@ targets="${2}"
runtimes="${3}"
runtime_targets="${4}"
runtime_targets_needs_reconfig="${5}"
+enable_cir="${6}"
lit_args="-v --xunit-xml-output ${BUILD_DIR}/test-results.xml --use-unique-output-file-name --timeout=1200 --time-tests"
@@ -72,13 +73,15 @@ cmake -S "${MONOREPO_ROOT}"/llvm -B "${BUILD_DIR}" \
-G Ninja \
-D CMAKE_PREFIX_PATH="${HOME}/.local" \
-D CMAKE_BUILD_TYPE=Release \
+ -D CLANG_ENABLE_CIR=${enable_cir} \
-D LLVM_ENABLE_ASSERTIONS=ON \
-D LLVM_BUILD_EXAMPLES=ON \
-D COMPILER_RT_BUILD_LIBFUZZER=OFF \
-D LLVM_LIT_ARGS="${lit_args}" \
-D LLVM_ENABLE_LLD=ON \
-D CMAKE_CXX_FLAGS=-gmlt \
- -D LLVM_CCACHE_BUILD=ON \
+ -D CMAKE_C_COMPILER_LAUNCHER=sccache \
+ -D CMAKE_CXX_COMPILER_LAUNCHER=sccache \
-D LIBCXX_CXX_ABI=libcxxabi \
-D MLIR_ENABLE_BINDINGS_PYTHON=ON \
-D LLDB_ENABLE_PYTHON=ON \
diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index ff63355222065..d0518fa6879e2 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -34,10 +34,6 @@ jobs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 2
- - name: Setup ccache
- uses: hendrikmuhs/ccache-action@a1209f81afb8c005c13b4296c32e363431bffea5 # v1.2.17
- with:
- max-size: "2000M"
- name: Build and Test
# Mark the job as a success even if the step fails so that people do
# not get notified while the new premerge pipeline is in an
@@ -61,7 +57,20 @@ jobs:
export CC=/opt/llvm/bin/clang
export CXX=/opt/llvm/bin/clang++
- ./.ci/monolithic-linux.sh "${projects_to_build}" "${project_check_targets}" "${runtimes_to_build}" "${runtimes_check_targets}" "${runtimes_check_targets_needs_reconfig}"
+ # This environment variable is passes into the container through the
+ # runner pod definition. This differs between our two clusters which
+ # why we do not hardcode it.
+ export SCCACHE_GCS_BUCKET=$CACHE_GCS_BUCKET
+ export SCCACHE_GCS_RW_MODE=READ_WRITE
+
+ # Set the idle timeout to zero to ensure sccache runs for the
+ # entire duration of the job. Otherwise it might stop if we run
+ # several test suites in a row and discard statistics that we want
+ # to save in the end.
+ export SCCACHE_IDLE_TIMEOUT=0
+ sccache --start-server
+
+ ./.ci/monolithic-linux.sh "${projects_to_build}" "${project_check_targets}" "${runtimes_to_build}" "${runtimes_check_targets}" "${runtimes_check_targets_needs_reconfig}" "${enable_cir}"
- name: Upload Artifacts
if: '!cancelled()'
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
@@ -85,11 +94,6 @@ jobs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 2
- - name: Setup ccache
- uses: hendrikmuhs/ccache-action@a1209f81afb8c005c13b4296c32e363431bffea5 # v1.2.17
- with:
- variant: "sccache"
- max-size: "2000M"
- name: Compute Projects
id: vars
run: |
@@ -112,7 +116,9 @@ jobs:
shell: cmd
run: |
call C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat -arch=amd64 -host_arch=amd64
- bash .ci/monolithic-windows.sh "${{ steps.vars.outputs.windows-projects }}" "${{ steps.vars.outputs.windows-check-targets }}"
+ # See the comments above in the Linux job for why we define each of
+ # these environment variables.
+ bash -c "export SCCACHE_GCS_BUCKET=$CACHE_GCS_BUCKET; export SCCACHE_GCS_RW_MODE=READ_WRITE; export SCCACHE_IDLE_TIMEOUT=0; sccache --start-server; .ci/monolithic-windows.sh \"${{ steps.vars.outputs.windows-projects }}\" \"${{ steps.vars.outputs.windows-check-targets }}\""
- name: Upload Artifacts
if: '!cancelled()'
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
diff --git a/polly/CMakeLists.txt b/polly/CMakeLists.txt
index 52d1be6fe295a..770fddca86b22 100644
--- a/polly/CMakeLists.txt
+++ b/polly/CMakeLists.txt
@@ -1,3 +1,4 @@
+# test
# Check if this is a in tree build.
if (NOT DEFINED LLVM_MAIN_SRC_DIR)
project(Polly)
|
|
There are too many commits at this point to easily keep track of and there are still problems with this PR (like the |
Backport 871d65b afff28e 921287e 796f551 bcfd294
Requested by: @boomanaiden154