llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-libcxx @llvm/pr-subscribers-clang Author: Vlad Serebrennikov (Endilll) <details> <summary>Changes</summary> Following the discussion in https://github.com/llvm/llvm-project/pull/93233#issuecomment-2127920882, this patch merges `clang-ci` pipeline into main `GitHub Pull Requests` pipeline. `clang-ci` enables additional test coverage for Clang by compiling it, and then using it to compile and tests libc++, libc++abi, and libunwind in C++03, C++26, and Clang Modules modes. Additional work we skip and total time savings we should see: 1. Checking out the repo to generate the clang-ci pipeline (2 minutes) 2. Building Clang (3.5 minutes) 3. Uploading the artifacts once, then downloading them 3 times and unpacking 3 times (0.5 minutes) Note that because previously-split jobs for each mode are now under a single Linux job, it now takes around 8 minutes more see the Linux CI results despite total time savings. The primary goal of this patch is to reduce the load of CI by removing duplicated work. I consider this goal achieved. I could keep the job parallelism we had (3 libc++ jobs depending on a main Linux job), but I don't consider it worth the effort and opportunity cost, because parallelism is not helping once the pool of builders is fully subscribed. --- Full diff: https://github.com/llvm/llvm-project/pull/93318.diff 3 Files Affected: - (modified) .ci/generate-buildkite-pipeline-premerge (+30-12) - (modified) .ci/monolithic-linux.sh (+65) - (removed) clang/utils/ci/buildkite-pipeline.yml (-82) ``````````diff diff --git a/.ci/generate-buildkite-pipeline-premerge b/.ci/generate-buildkite-pipeline-premerge index e1c66ac18e7ac..3ed5eb96eceb5 100755 --- a/.ci/generate-buildkite-pipeline-premerge +++ b/.ci/generate-buildkite-pipeline-premerge @@ -85,6 +85,22 @@ function compute-projects-to-test() { done } +function compute-runtimes-to-test() { + projects=${@} + for project in ${projects}; do + case ${project} in + clang) + for p in libcxx libcxxabi libunwind; do + echo $p + done + ;; + *) + # Nothing to do + ;; + esac + done +} + function add-dependencies() { projects=${@} for project in ${projects}; do @@ -178,6 +194,15 @@ function check-targets() { cross-project-tests) echo "check-cross-project" ;; + libcxx) + echo "check-cxx" + ;; + libcxxabi) + echo "check-cxxabi" + ;; + libunwind) + echo "check-unwind" + ;; lldb) echo "check-all" # TODO: check-lldb may not include all the LLDB tests? ;; @@ -207,17 +232,6 @@ if echo "$modified_dirs" | grep -q -E "^(libcxx|libcxxabi|libunwind|runtimes|cma EOF fi -# If clang changed. -if echo "$modified_dirs" | grep -q -E "^(clang)$"; then - cat <<EOF -- trigger: "clang-ci" - build: - message: "${buildMessage}" - commit: "${BUILDKITE_COMMIT}" - branch: "${BUILDKITE_BRANCH}" -EOF -fi - # Generic pipeline for projects that have not defined custom steps. # # Individual projects should instead define the pre-commit CI tests that suits their @@ -231,6 +245,10 @@ linux_projects_to_test=$(exclude-linux $(compute-projects-to-test ${modified_pro linux_check_targets=$(check-targets ${linux_projects_to_test} | sort | uniq) linux_projects=$(add-dependencies ${linux_projects_to_test} | sort | uniq) +linux_runtimes_to_test=$(compute-runtimes-to-test ${linux_projects_to_test}) +linux_runtime_check_targets=$(check-targets ${linux_runtimes_to_test} | sort | uniq) +linux_runtimes=$(echo ${linux_runtimes_to_test} | sort | uniq) + windows_projects_to_test=$(exclude-windows $(compute-projects-to-test ${modified_projects})) windows_check_targets=$(check-targets ${windows_projects_to_test} | sort | uniq) windows_projects=$(add-dependencies ${windows_projects_to_test} | sort | uniq) @@ -255,7 +273,7 @@ if [[ "${linux_projects}" != "" ]]; then CC: 'clang' CXX: 'clang++' commands: - - './.ci/monolithic-linux.sh "$(echo ${linux_projects} | tr ' ' ';')" "$(echo ${linux_check_targets})"' + - './.ci/monolithic-linux.sh "$(echo ${linux_projects} | tr ' ' ';')" "$(echo ${linux_check_targets})" "$(echo ${linux_runtimes} | tr ' ' ';')" "$(echo ${linux_runtime_check_targets})"' EOF fi diff --git a/.ci/monolithic-linux.sh b/.ci/monolithic-linux.sh index b00a4b984a1d2..bbd90f7d496b1 100755 --- a/.ci/monolithic-linux.sh +++ b/.ci/monolithic-linux.sh @@ -54,3 +54,68 @@ cmake -S "${MONOREPO_ROOT}"/llvm -B "${BUILD_DIR}" \ echo "--- ninja" # Targets are not escaped as they are passed as separate arguments. ninja -C "${BUILD_DIR}" -k 0 ${targets} + +runtimes="${3}" +runtime_targets="${4}" + +# Compiling runtimes with just-built Clang and running their tests +# as an additional testing for Clang. +if [[ "${runtimes}" != "" ]]; then + if [[ "${runtime_targets}" == "" ]]; then + echo "Runtimes to build are specified, but targets are not." + fi + + RUNTIMES_BUILD_DIR="${MONOREPO_ROOT}/build-runtimes" + INSTALL_DIR="${RUNTIMES_BUILD_DIR}/install" + mkdir -p ${RUNTIMES_BUILD_DIR} + + echo "--- cmake runtimes C++03" + + cmake -S "${MONOREPO_ROOT}/runtimes" -B "${RUNTIMES_BUILD_DIR}" -GNinja \ + -DCMAKE_C_COMPILER="${BUILD_DIR}/bin/clang" \ + -DCMAKE_CXX_COMPILER="${BUILD_DIR}/bin/clang++" \ + -DLLVM_ENABLE_RUNTIMES="${runtimes}" \ + -DLIBCXX_CXX_ABI=libcxxabi \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \ + -DLIBCXX_TEST_PARAMS="std=c++03" \ + -DLIBCXXABI_TEST_PARAMS="std=c++03" + + echo "--- ninja runtimes C++03" + + ninja -vC "${RUNTIMES_BUILD_DIR}" ${runtime_targets} + + echo "--- cmake runtimes C++26" + + rm -rf "${RUNTIMES_BUILD_DIR}" + cmake -S "${MONOREPO_ROOT}/runtimes" -B "${RUNTIMES_BUILD_DIR}" -GNinja \ + -DCMAKE_C_COMPILER="${BUILD_DIR}/bin/clang" \ + -DCMAKE_CXX_COMPILER="${BUILD_DIR}/bin/clang++" \ + -DLLVM_ENABLE_RUNTIMES="${runtimes}" \ + -DLIBCXX_CXX_ABI=libcxxabi \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \ + -DLIBCXX_TEST_PARAMS="std=c++26" \ + -DLIBCXXABI_TEST_PARAMS="std=c++26" + + echo "--- ninja runtimes C++26" + + ninja -vC "${RUNTIMES_BUILD_DIR}" ${runtime_targets} + + echo "--- cmake runtimes clang modules" + + rm -rf "${RUNTIMES_BUILD_DIR}" + cmake -S "${MONOREPO_ROOT}/runtimes" -B "${RUNTIMES_BUILD_DIR}" -GNinja \ + -DCMAKE_C_COMPILER="${BUILD_DIR}/bin/clang" \ + -DCMAKE_CXX_COMPILER="${BUILD_DIR}/bin/clang++" \ + -DLLVM_ENABLE_RUNTIMES="${runtimes}" \ + -DLIBCXX_CXX_ABI=libcxxabi \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \ + -DLIBCXX_TEST_PARAMS="enable_modules=clang" \ + -DLIBCXXABI_TEST_PARAMS="enable_modules=clang" + + echo "--- ninja runtimes clang modules" + + ninja -vC "${RUNTIMES_BUILD_DIR}" ${runtime_targets} +fi diff --git a/clang/utils/ci/buildkite-pipeline.yml b/clang/utils/ci/buildkite-pipeline.yml deleted file mode 100644 index 86cfcf35cc867..0000000000000 --- a/clang/utils/ci/buildkite-pipeline.yml +++ /dev/null @@ -1,82 +0,0 @@ -#===----------------------------------------------------------------------===## -# -# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -# See https://llvm.org/LICENSE.txt for license information. -# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -# -#===----------------------------------------------------------------------===## - -# -# This file describes the various pre-commit CI bots used to test Clang against -# libc++ under various configurations. Unlike the usual libc++ CI pipeline, -# which aims to test libc++ itself, this pipeline aims to test Clang by -# compiling libc++ and running its test suite against the just-built Clang, -# in various configurations. -# -env: - # LLVM RELEASE bump version - LLVM_HEAD_VERSION: "17" -steps: - - label: "Building Clang (Linux)" - commands: - - "clang/utils/ci/run-buildbot build-clang" - agents: - queue: "linux" - retry: - automatic: - - exit_status: -1 # Agent was lost - limit: 2 - timeout_in_minutes: 120 - - - wait - - - label: "Testing libc++ with just-built Clang (C++03)" - commands: - - "clang/utils/ci/run-buildbot generic-cxx03" - artifact_paths: - - "**/test-results.xml" - - "**/crash_diagnostics/*" - env: - LLVM_SYMBOLIZER_PATH: "/usr/bin/llvm-symbolizer-${LLVM_HEAD_VERSION}" # TODO: Should we build that from scratch? - CLANG_CRASH_DIAGNOSTICS_DIR: "crash_diagnostics" - agents: - queue: "linux" - retry: - automatic: - - exit_status: -1 # Agent was lost - limit: 2 - timeout_in_minutes: 120 - - - label: "Testing libc++ with just-built Clang (C++26)" - commands: - - "clang/utils/ci/run-buildbot generic-cxx26" - artifact_paths: - - "**/test-results.xml" - - "**/crash_diagnostics/*" - env: - LLVM_SYMBOLIZER_PATH: "/usr/bin/llvm-symbolizer-${LLVM_HEAD_VERSION}" # TODO: Should we build that from scratch? - CLANG_CRASH_DIAGNOSTICS_DIR: "crash_diagnostics" - agents: - queue: "linux" - retry: - automatic: - - exit_status: -1 # Agent was lost - limit: 2 - timeout_in_minutes: 120 - - - label: "Testing libc++ with just-built Clang (w/ Clang Modules)" - commands: - - "clang/utils/ci/run-buildbot generic-modules" - artifact_paths: - - "**/test-results.xml" - - "**/crash_diagnostics/*" - env: - LLVM_SYMBOLIZER_PATH: "/usr/bin/llvm-symbolizer-${LLVM_HEAD_VERSION}" # TODO: Should we build that from scratch? - CLANG_CRASH_DIAGNOSTICS_DIR: "crash_diagnostics" - agents: - queue: "linux" - retry: - automatic: - - exit_status: -1 # Agent was lost - limit: 2 - timeout_in_minutes: 120 `````````` </details> https://github.com/llvm/llvm-project/pull/93318 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits