[libclc] [libclc][Test] Don't hard code `clang` path in update_libclc_tests.py (PR #201806)
Wenju He via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 5 04:10:54 PDT 2026
https://github.com/wenju-he created https://github.com/llvm/llvm-project/pull/201806
In #201773, build folder is `redhat-linux-build` rather than `build`. Detect clang from PATH. Also add --clang-binary option to specify clang path.
>From 0ed5e4a503b810e03cc99c2651255755fb5aba99 Mon Sep 17 00:00:00 2001
From: Wenju He <wenju.he at intel.com>
Date: Fri, 5 Jun 2026 12:54:19 +0200
Subject: [PATCH] [libclc][Test] Don't hard code `clang` path in
update_libclc_tests.py
In #201773, build folder is `redhat-linux-build` rather than `build`.
Detect clang from PATH. Also add --clang-binary option to specify clang path.
---
libclc/test/update_libclc_tests.py | 27 ++++++++++++++++++++++-----
1 file changed, 22 insertions(+), 5 deletions(-)
diff --git a/libclc/test/update_libclc_tests.py b/libclc/test/update_libclc_tests.py
index 5ad78eed549ff..fa64a63d20a75 100755
--- a/libclc/test/update_libclc_tests.py
+++ b/libclc/test/update_libclc_tests.py
@@ -19,6 +19,7 @@
import argparse
import os
import re
+import shutil
import subprocess
import sys
from concurrent.futures import ProcessPoolExecutor, as_completed
@@ -51,7 +52,6 @@
SCRIPT_DIR = Path(__file__).parent
REPO_ROOT = SCRIPT_DIR.parent.parent
UPDATE_SCRIPT = REPO_ROOT / "llvm" / "utils" / "update_cc_test_checks.py"
-CLANG = REPO_ROOT / "build" / "bin" / "clang"
def find_cl_files(test_dir: Path):
@@ -92,7 +92,7 @@ def file_requires_feature(path: Path, feature: str) -> bool:
return False
-def process_file(cl_file: Path, triple: str, cpu: str, check_prefix: str) -> bool:
+def process_file(cl_file: Path, triple: str, cpu: str, check_prefix: str, clang: Path) -> bool:
original = cl_file.read_bytes()
orig_lines = original.splitlines(keepends=True)
saved_run = {i: orig_lines[i] for i in _run_line_indices(original)}
@@ -101,7 +101,7 @@ def process_file(cl_file: Path, triple: str, cpu: str, check_prefix: str) -> boo
sys.executable,
str(UPDATE_SCRIPT),
"--clang",
- str(CLANG),
+ str(clang),
str(cl_file),
]
print(f" update: {cl_file.relative_to(REPO_ROOT)}")
@@ -126,8 +126,25 @@ def main():
choices=list(ARCH_TO_TRIPLE.keys()),
help="Target arch: amdgpu, amdgcn, nvptx64, spirv, spirv64",
)
+ parser.add_argument(
+ "--clang-binary",
+ default=None,
+ help="The clang binary used to generate the test case (default: clang from PATH)",
+ )
args = parser.parse_args()
+ if args.clang_binary:
+ clang = Path(args.clang_binary)
+ if not clang.is_file():
+ print(f"Error: clang binary not found: {clang}", file=sys.stderr)
+ sys.exit(1)
+ else:
+ clang_in_path = shutil.which("clang")
+ if not clang_in_path:
+ print("Error: clang not found in PATH; use --clang-binary to specify.", file=sys.stderr)
+ sys.exit(1)
+ clang = Path(clang_in_path)
+
arch = args.arch.lower()
triple = ARCH_TO_TRIPLE[arch]
cpu = ARCH_TO_CPU[arch]
@@ -147,7 +164,7 @@ def main():
return
print(
- f"arch={arch} triple={triple} cpu={cpu} check_prefix={check_prefix} requires={requires_feature}"
+ f"arch={arch} triple={triple} cpu={cpu} check_prefix={check_prefix} requires={requires_feature} clang={clang}"
)
print(f"Processing {len(target_files)} file(s)...")
@@ -155,7 +172,7 @@ def main():
num_workers = max(1, os.cpu_count() // 2)
with ProcessPoolExecutor(max_workers=num_workers) as executor:
futures = {
- executor.submit(process_file, f, triple, cpu, check_prefix): f
+ executor.submit(process_file, f, triple, cpu, check_prefix, clang): f
for f in target_files
}
for future in as_completed(futures):
More information about the cfe-commits
mailing list