Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

175 lines
5.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# ===----------------------------------------------------------------------===##
#
# 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
#
# ===----------------------------------------------------------------------===##
set -e
set -o pipefail
PROGNAME="$(basename "${0}")"
function usage() {
cat <<EOF
Usage:
${PROGNAME} [options] <BUILDER> [-- commit ...]
[-h|--help] Display this help and exit.
--llvm-root <DIR> Path to the root of the LLVM monorepo. By default, we try
to figure it out based on the current working directory.
--build-dir <DIR> The directory to use for storing benchmark results. By default,
this is '<llvm-root>/build/<builder>'. Note that intermediate
build results are never kept around.
[--lnt-url <URL>] The optional URL of the LNT instance to submit results to. By
default, results are not submitted to any LNT instance.
[--filter <FILTER>] Optional filter to pass to lit to run only a subset of benchmarks.
Environment variables
SPEC_DIR Optional path to a SPEC installation. If set and the directory
exists, SPEC benchmarks are included in the run.
If commits are provided after --, only those commits are benchmarked and the
runner exits. Otherwise, the runner polls the given LNT url (which must be
present) to discover un-benchmarked commits and runs indefinitely.
EOF
}
if [[ $# == 0 ]]; then
usage
exit 0
fi
while [[ $# -gt 0 ]]; do
case ${1} in
-h|--help)
usage
exit 0
;;
--llvm-root)
MONOREPO_ROOT="${2}"
shift; shift
;;
--build-dir)
BUILD_DIR="${2}"
shift; shift
;;
--lnt-url)
LNT_URL="${2}"
shift; shift
;;
--filter)
FILTER="${2}"
shift; shift
;;
--)
shift
COMMITS=("$@")
break
;;
*)
BUILDER="${1}"
shift
;;
esac
done
MONOREPO_ROOT="${MONOREPO_ROOT:="$(git rev-parse --show-toplevel)"}"
BUILD_DIR="${BUILD_DIR:=${MONOREPO_ROOT}/build/${BUILDER}}"
case "${BUILDER}" in
apple-m5-clang21)
export SDKROOT=$(xcrun --show-sdk-path)
COMPILER=$(brew --prefix)/opt/llvm/bin/clang++
BENCHMARK_SUITE_VERSION=0eefb2682bf8c04954c46e91916b5164d8424702
;;
apple-m5-xcode26)
COMPILER=clang++
BENCHMARK_SUITE_VERSION=0eefb2682bf8c04954c46e91916b5164d8424702
;;
*)
echo "${BUILDER} is not a known configuration"
exit 1
;;
esac
echo "***********************************************"
echo "Diagnose tools in use"
cmake --version
ninja --version
${COMPILER} --version
echo "Benchmark suite version: ${BENCHMARK_SUITE_VERSION}"
echo "***********************************************"
LNT_TEST_SUITE=libcxx2
mkdir -p "${BUILD_DIR}"
# Given path/to/abcdef.json, figures out the next available path,
# considering path/to/abcdef.{1,2,3,etc}.json.
next_available_path() {
local path="${1}"
local base="${path%.json}"
local i=1
while [ -f "${path}" ]; do
path="${base}.${i}.json"
i=$((i + 1))
done
echo "${path}"
}
run_benchmarks() {
local spec_arg=""
if [ -d "${SPEC_DIR}" ]; then
spec_arg="--spec-dir ${SPEC_DIR}"
fi
local filter_arg=""
if [ -n "${FILTER}" ]; then
filter_arg="--filter ${FILTER}"
fi
local output=$(next_available_path "${BUILD_DIR}/${1}.json")
${MONOREPO_ROOT}/libcxx/utils/ci/lnt/run-benchmarks \
--test-suite-commit ${BENCHMARK_SUITE_VERSION} \
--git-repo ${MONOREPO_ROOT} \
--machine ${BUILDER} \
--compiler ${COMPILER} \
--benchmark-commit ${1} \
${spec_arg} \
${filter_arg} \
--output ${output}
if [ -n "${LNT_URL}" ]; then
${MONOREPO_ROOT}/libcxx/utils/ci/lnt/submit-benchmarks \
--lnt-url ${LNT_URL} \
--test-suite ${LNT_TEST_SUITE} \
${output}
fi
}
if [ ${#COMMITS[@]} -gt 0 ]; then
for commit in "${COMMITS[@]}"; do
run_benchmarks ${commit}
done
else
if [ -z "${LNT_URL}" ]; then
echo "error: --lnt-url is required when polling for commits (it is used to discover un-benchmarked commits)"
exit 1
fi
while true; do
${MONOREPO_ROOT}/libcxx/utils/ci/lnt/commit-watch --git-repo ${MONOREPO_ROOT} \
--lnt-url ${LNT_URL} --test-suite ${LNT_TEST_SUITE} --machine ${BUILDER} | \
while read commit; do \
run_benchmarks ${commit}
done
sleep 60 # To avoid busy looping in case something goes really wrong
done
fi