#! /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"] )