[clang] [llvm] [offload-arch] Move GPU detection into a library and unit tests to unittests/tools (PR #226552)
Nikita Kornev via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 25 10:50:51 PDT 2026
https://github.com/KornevNikita created https://github.com/llvm/llvm-project/pull/226552
Instead of compiling tool sources directly into the unit test, build the vendor-specific detection code as a clangOffloadArch static library in clang/tools/offload-arch/lib and link it into both offload-arch and OffloadArchTests. Move the unit tests to clang/unittests/tools/offload-arch for consistency with llvm/unittests/tools.
>From d64dce2825b769f3805dfdbb6b99ca76faacc066 Mon Sep 17 00:00:00 2001
From: "Kornev, Nikita" <nikita.kornev at intel.com>
Date: Fri, 25 Sep 2026 19:28:02 +0200
Subject: [PATCH] [offload-arch] Move GPU detection into a library and unit
tests to unittests/tools
Instead of compiling tool sources directly into the unit test, build the
vendor-specific detection code as a clangOffloadArch static library in
clang/tools/offload-arch/lib and link it into both offload-arch and
OffloadArchTests. Move the unit tests to clang/unittests/tools/offload-arch
for consistency with llvm/unittests/tools.
Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
---
clang/tools/offload-arch/CMakeLists.txt | 8 +++----
.../{ => lib}/AMDGPUArchByHIP.cpp | 0
.../{ => lib}/AMDGPUArchByKFD.cpp | 0
clang/tools/offload-arch/lib/CMakeLists.txt | 14 +++++++++++++
.../offload-arch/{ => lib}/LevelZeroArch.cpp | 0
.../offload-arch/{ => lib}/NVPTXArch.cpp | 1 -
clang/unittests/CMakeLists.txt | 2 +-
clang/unittests/offload-arch/CMakeLists.txt | 21 -------------------
clang/unittests/tools/CMakeLists.txt | 1 +
.../tools/offload-arch/CMakeLists.txt | 8 +++++++
.../offload-arch/OffloadArchTest.cpp | 4 ++--
.../clang/tools/offload-arch/lib/BUILD.gn | 14 +++++++++++++
.../gn/secondary/clang/unittests/BUILD.gn | 2 +-
.../clang/unittests/offload-arch/BUILD.gn | 19 -----------------
.../unittests/tools/offload-arch/BUILD.gn | 11 ++++++++++
15 files changed, 56 insertions(+), 49 deletions(-)
rename clang/tools/offload-arch/{ => lib}/AMDGPUArchByHIP.cpp (100%)
rename clang/tools/offload-arch/{ => lib}/AMDGPUArchByKFD.cpp (100%)
create mode 100644 clang/tools/offload-arch/lib/CMakeLists.txt
rename clang/tools/offload-arch/{ => lib}/LevelZeroArch.cpp (100%)
rename clang/tools/offload-arch/{ => lib}/NVPTXArch.cpp (99%)
delete mode 100644 clang/unittests/offload-arch/CMakeLists.txt
create mode 100644 clang/unittests/tools/CMakeLists.txt
create mode 100644 clang/unittests/tools/offload-arch/CMakeLists.txt
rename clang/unittests/{ => tools}/offload-arch/OffloadArchTest.cpp (98%)
create mode 100644 llvm/utils/gn/secondary/clang/tools/offload-arch/lib/BUILD.gn
delete mode 100644 llvm/utils/gn/secondary/clang/unittests/offload-arch/BUILD.gn
create mode 100644 llvm/utils/gn/secondary/clang/unittests/tools/offload-arch/BUILD.gn
diff --git a/clang/tools/offload-arch/CMakeLists.txt b/clang/tools/offload-arch/CMakeLists.txt
index 8e37e3d2ae5db9..83dcdd62f1720d 100644
--- a/clang/tools/offload-arch/CMakeLists.txt
+++ b/clang/tools/offload-arch/CMakeLists.txt
@@ -1,10 +1,10 @@
-set(LLVM_LINK_COMPONENTS Support TargetParser)
+set(LLVM_LINK_COMPONENTS Support)
-add_clang_tool(offload-arch OffloadArch.cpp NVPTXArch.cpp AMDGPUArchByKFD.cpp
- AMDGPUArchByHIP.cpp LevelZeroArch.cpp)
+add_clang_tool(offload-arch OffloadArch.cpp)
# Legacy binary names.
add_clang_symlink(amdgpu-arch offload-arch)
add_clang_symlink(nvptx-arch offload-arch)
-target_link_libraries(offload-arch PRIVATE clangBasic)
+add_subdirectory(lib)
+target_link_libraries(offload-arch PRIVATE clangBasic clangOffloadArch)
diff --git a/clang/tools/offload-arch/AMDGPUArchByHIP.cpp b/clang/tools/offload-arch/lib/AMDGPUArchByHIP.cpp
similarity index 100%
rename from clang/tools/offload-arch/AMDGPUArchByHIP.cpp
rename to clang/tools/offload-arch/lib/AMDGPUArchByHIP.cpp
diff --git a/clang/tools/offload-arch/AMDGPUArchByKFD.cpp b/clang/tools/offload-arch/lib/AMDGPUArchByKFD.cpp
similarity index 100%
rename from clang/tools/offload-arch/AMDGPUArchByKFD.cpp
rename to clang/tools/offload-arch/lib/AMDGPUArchByKFD.cpp
diff --git a/clang/tools/offload-arch/lib/CMakeLists.txt b/clang/tools/offload-arch/lib/CMakeLists.txt
new file mode 100644
index 00000000000000..2692229dc675b6
--- /dev/null
+++ b/clang/tools/offload-arch/lib/CMakeLists.txt
@@ -0,0 +1,14 @@
+# Not add_clang_library: this is not part of clang's public library interface,
+# the sources are shared between offload-arch and its unit tests.
+add_llvm_library(clangOffloadArch STATIC
+ AMDGPUArchByHIP.cpp
+ AMDGPUArchByKFD.cpp
+ LevelZeroArch.cpp
+ NVPTXArch.cpp
+
+ BUILDTREE_ONLY
+
+ LINK_COMPONENTS
+ Support
+ TargetParser
+ )
diff --git a/clang/tools/offload-arch/LevelZeroArch.cpp b/clang/tools/offload-arch/lib/LevelZeroArch.cpp
similarity index 100%
rename from clang/tools/offload-arch/LevelZeroArch.cpp
rename to clang/tools/offload-arch/lib/LevelZeroArch.cpp
diff --git a/clang/tools/offload-arch/NVPTXArch.cpp b/clang/tools/offload-arch/lib/NVPTXArch.cpp
similarity index 99%
rename from clang/tools/offload-arch/NVPTXArch.cpp
rename to clang/tools/offload-arch/lib/NVPTXArch.cpp
index 11ea2e79cd279e..c6e728ac1d043f 100644
--- a/clang/tools/offload-arch/NVPTXArch.cpp
+++ b/clang/tools/offload-arch/lib/NVPTXArch.cpp
@@ -11,7 +11,6 @@
//
//===----------------------------------------------------------------------===//
-#include "clang/Basic/Version.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/DynamicLibrary.h"
#include "llvm/Support/Error.h"
diff --git a/clang/unittests/CMakeLists.txt b/clang/unittests/CMakeLists.txt
index 5cc21a563be3e5..b2fee01649abc6 100644
--- a/clang/unittests/CMakeLists.txt
+++ b/clang/unittests/CMakeLists.txt
@@ -110,7 +110,7 @@ add_subdirectory(Support)
if (CLANG_ENABLE_CIR)
add_subdirectory(CIR)
endif()
-add_subdirectory(offload-arch)
+add_subdirectory(tools)
# If we're doing a single merged clang unit test binary, add that target after
# all the previous subdirectories have been processed.
diff --git a/clang/unittests/offload-arch/CMakeLists.txt b/clang/unittests/offload-arch/CMakeLists.txt
deleted file mode 100644
index 523b5f33ed6b31..00000000000000
--- a/clang/unittests/offload-arch/CMakeLists.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-set(OffloadArchTestSources
- OffloadArchTest.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/../../tools/offload-arch/AMDGPUArchByKFD.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/../../tools/offload-arch/LevelZeroArch.cpp
- )
-
-if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
- list(APPEND OffloadArchTestSources
- ${CMAKE_CURRENT_SOURCE_DIR}/../../tools/offload-arch/AMDGPUArchByHIP.cpp)
-endif()
-
-add_distinct_clang_unittest(OffloadArchTests
- ${OffloadArchTestSources}
- CLANG_LIBS
- clangBasic
- LINK_LIBS
- LLVMTestingSupport
- LLVM_COMPONENTS
- Support
- TargetParser
- )
diff --git a/clang/unittests/tools/CMakeLists.txt b/clang/unittests/tools/CMakeLists.txt
new file mode 100644
index 00000000000000..8a51d644cf1ab1
--- /dev/null
+++ b/clang/unittests/tools/CMakeLists.txt
@@ -0,0 +1 @@
+add_subdirectory(offload-arch)
diff --git a/clang/unittests/tools/offload-arch/CMakeLists.txt b/clang/unittests/tools/offload-arch/CMakeLists.txt
new file mode 100644
index 00000000000000..56cfe48d564872
--- /dev/null
+++ b/clang/unittests/tools/offload-arch/CMakeLists.txt
@@ -0,0 +1,8 @@
+add_distinct_clang_unittest(OffloadArchTests
+ OffloadArchTest.cpp
+ LINK_LIBS
+ clangOffloadArch
+ LLVMTestingSupport
+ LLVM_COMPONENTS
+ Support
+ )
diff --git a/clang/unittests/offload-arch/OffloadArchTest.cpp b/clang/unittests/tools/offload-arch/OffloadArchTest.cpp
similarity index 98%
rename from clang/unittests/offload-arch/OffloadArchTest.cpp
rename to clang/unittests/tools/offload-arch/OffloadArchTest.cpp
index 2d4a35c85729d6..7de00610bd1898 100644
--- a/clang/unittests/offload-arch/OffloadArchTest.cpp
+++ b/clang/unittests/tools/offload-arch/OffloadArchTest.cpp
@@ -21,13 +21,13 @@
#include <optional>
#include <string>
-// Defined in AMDGPUArchByHIP.cpp (non-static, compiled into this test).
+// Defined in AMDGPUArchByHIP.cpp (non-static, linked via clangOffloadArch).
#ifdef _WIN32
bool compareVersions(llvm::StringRef A, llvm::StringRef B);
llvm::SmallVector<std::string, 8> getCandidateBinPaths(llvm::StringRef ExeDir);
#endif
-// Defined in AMDGPUArchByKFD.cpp (non-static, compiled into this test).
+// Defined in AMDGPUArchByKFD.cpp (non-static, linked via clangOffloadArch).
int printGPUsByKFD(llvm::StringRef NodePath);
// Defined in LevelZeroArch.cpp.
diff --git a/llvm/utils/gn/secondary/clang/tools/offload-arch/lib/BUILD.gn b/llvm/utils/gn/secondary/clang/tools/offload-arch/lib/BUILD.gn
new file mode 100644
index 00000000000000..987dd7a9a9a977
--- /dev/null
+++ b/llvm/utils/gn/secondary/clang/tools/offload-arch/lib/BUILD.gn
@@ -0,0 +1,14 @@
+static_library("lib") {
+ output_name = "clangOffloadArch"
+ configs += [ "//llvm/utils/gn/build:clang_code" ]
+ deps = [
+ "//llvm/lib/Support",
+ "//llvm/lib/TargetParser",
+ ]
+ sources = [
+ "AMDGPUArchByHIP.cpp",
+ "AMDGPUArchByKFD.cpp",
+ "LevelZeroArch.cpp",
+ "NVPTXArch.cpp",
+ ]
+}
diff --git a/llvm/utils/gn/secondary/clang/unittests/BUILD.gn b/llvm/utils/gn/secondary/clang/unittests/BUILD.gn
index a8c4b93f4baba9..13ac1fac6637ec 100644
--- a/llvm/utils/gn/secondary/clang/unittests/BUILD.gn
+++ b/llvm/utils/gn/secondary/clang/unittests/BUILD.gn
@@ -24,7 +24,7 @@ group("unittests") {
"Support:ClangSupportTests",
"Tooling:ToolingTests",
"Tooling/Syntax:SyntaxTests",
- "offload-arch:OffloadArchTests",
+ "tools/offload-arch:OffloadArchTests",
]
if (clang_enable_static_analyzer) {
deps += [
diff --git a/llvm/utils/gn/secondary/clang/unittests/offload-arch/BUILD.gn b/llvm/utils/gn/secondary/clang/unittests/offload-arch/BUILD.gn
deleted file mode 100644
index 336f30a6570b91..00000000000000
--- a/llvm/utils/gn/secondary/clang/unittests/offload-arch/BUILD.gn
+++ /dev/null
@@ -1,19 +0,0 @@
-import("//third-party/unittest/unittest.gni")
-
-unittest("OffloadArchTests") {
- configs += [ "//llvm/utils/gn/build:clang_code" ]
- deps = [
- "//clang/lib/Basic",
- "//llvm/lib/Support",
- "//llvm/lib/Testing/Support",
- ]
- sources = [
- "//clang/tools/offload-arch/AMDGPUArchByKFD.cpp",
- "//clang/tools/offload-arch/LevelZeroArch.cpp",
- "OffloadArchTest.cpp",
- ]
-
- if (current_os == "win") {
- sources += [ "//clang/tools/offload-arch/AMDGPUArchByHIP.cpp" ]
- }
-}
diff --git a/llvm/utils/gn/secondary/clang/unittests/tools/offload-arch/BUILD.gn b/llvm/utils/gn/secondary/clang/unittests/tools/offload-arch/BUILD.gn
new file mode 100644
index 00000000000000..3ebd60b6da0c7e
--- /dev/null
+++ b/llvm/utils/gn/secondary/clang/unittests/tools/offload-arch/BUILD.gn
@@ -0,0 +1,11 @@
+import("//third-party/unittest/unittest.gni")
+
+unittest("OffloadArchTests") {
+ configs += [ "//llvm/utils/gn/build:clang_code" ]
+ deps = [
+ "//clang/tools/offload-arch/lib",
+ "//llvm/lib/Support",
+ "//llvm/lib/Testing/Support",
+ ]
+ sources = [ "OffloadArchTest.cpp" ]
+}
More information about the llvm-commits
mailing list