blob: 9e4c2040a97cca9d79397b49e1b90347d5b45a71 [file] [edit]
#! /usr/bin/env python3
# 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
import argparse
import os
import sys
# Adapt to location in source tree
llvmsrcroot = os.path.normpath(f"{__file__}/../../..")
sys.path.insert(0, os.path.join(llvmsrcroot, ".ci/buildbot"))
import worker
llvmbuilddir = "llvm.build"
testsuitebuilddir = "TS-build"
def absolute_path(path):
return os.path.abspath(os.path.expanduser(path))
def in_test_suite(test_suite_src, path):
path = os.path.expanduser(path)
if os.path.isabs(path):
return path
return os.path.join(test_suite_src, path)
def check_test_suite_build_dir(test_suite_src, test_suite_build_dir):
if test_suite_build_dir == os.path.abspath(os.sep):
raise RuntimeError("refusing to use filesystem root as test-suite build dir")
if test_suite_build_dir == test_suite_src:
raise RuntimeError("test-suite build dir must not be the test-suite source dir")
parser = argparse.ArgumentParser(
description="Build LLVM and run llvm-test-suite External HIP TPL tests."
)
parser.add_argument(
"--test-suite-src",
default="/opt/botworker/llvm/llvm-test-suite",
help="Path to the llvm-test-suite checkout.",
)
parser.add_argument(
"--test-suite-externals",
default="/opt/botworker/llvm/External",
help="Path to the llvm-test-suite External dependencies directory.",
)
parser.add_argument(
"--test-suite-build-dir",
default=testsuitebuilddir,
help="Build directory for llvm-test-suite; relative paths are under test-suite-src.",
)
parser.add_argument(
"--amdgpu-arch",
default="gfx90a",
help="AMDGPU architecture to use for HIP External tests.",
)
with worker.run(
__file__,
llvmsrcroot,
parser=parser,
cachefile="offload/cmake/caches/AMDGPUBot.cmake",
clobberpaths=[llvmbuilddir],
workerjobs=32,
) as w:
test_suite_src = absolute_path(w.args.test_suite_src)
test_suite_externals = absolute_path(w.args.test_suite_externals)
test_suite_build_dir = absolute_path(
in_test_suite(test_suite_src, w.args.test_suite_build_dir)
)
check_test_suite_build_dir(test_suite_src, test_suite_build_dir)
compiler_bin_dir = w.in_workdir(os.path.join(llvmbuilddir, "bin"))
clang = os.path.join(compiler_bin_dir, "clang")
clangxx = os.path.join(compiler_bin_dir, "clang++")
with w.step("configure llvm", halt_on_fail=True):
w.run_command(
[
"cmake",
"-GNinja",
f"-S{w.in_llvmsrc('llvm')}",
f"-B{llvmbuilddir}",
f"-C{w.cachefile}",
]
)
with w.step("compile llvm", halt_on_fail=True):
w.run_ninja(builddir=llvmbuilddir)
with w.step("update llvm-test-suite", halt_on_fail=True):
if not os.path.isdir(test_suite_src):
raise RuntimeError(f"directory does not exist: {test_suite_src}")
w.run_command(["git", "-C", test_suite_src, "reset", "--hard", "origin/main"])
w.run_command(["git", "-C", test_suite_src, "pull"])
with w.step("clean llvm-test-suite build", halt_on_fail=True):
if os.path.exists(test_suite_build_dir):
w.rmtree(test_suite_build_dir)
with w.step("configure llvm-test-suite", halt_on_fail=True):
w.run_command(
[
"cmake",
"-GNinja",
f"-B{test_suite_build_dir}",
f"-S{test_suite_src}",
f"-DTEST_SUITE_EXTERNALS_DIR={test_suite_externals}",
f"-DAMDGPU_ARCHS={w.args.amdgpu_arch}",
f"-DTEST_SUITE_SUBDIRS=External",
f"-DEXTERNAL_HIP_TESTS_KOKKOS=ON",
f"-DCMAKE_C_COMPILER={clang}",
f"-DCMAKE_CXX_COMPILER={clangxx}",
]
)
with w.step("build kokkos and kokkos test suite", halt_on_fail=True):
w.run_command(
[
"cmake",
"--build",
test_suite_build_dir,
"--parallel",
"--target",
"build-kokkos",
]
)
with w.step("run kokkos test suite", halt_on_fail=True):
w.run_command(
["cmake", "--build", test_suite_build_dir, "--target", "test-kokkos"]
)