[clang] [llvm] [offload-arch] Move GPU detection into a library and unit tests to unittests/tools (PR #226552)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 28 06:18:37 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-nvptx
@llvm/pr-subscribers-backend-amdgpu
Author: Nikita Kornev (KornevNikita)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/226552.diff
15 Files Affected:
- (modified) clang/tools/offload-arch/CMakeLists.txt (+4-4)
- (renamed) clang/tools/offload-arch/lib/AMDGPUArchByHIP.cpp ()
- (renamed) clang/tools/offload-arch/lib/AMDGPUArchByKFD.cpp ()
- (added) clang/tools/offload-arch/lib/CMakeLists.txt (+14)
- (renamed) clang/tools/offload-arch/lib/LevelZeroArch.cpp ()
- (renamed) clang/tools/offload-arch/lib/NVPTXArch.cpp (-1)
- (modified) clang/unittests/CMakeLists.txt (+1-1)
- (removed) clang/unittests/offload-arch/CMakeLists.txt (-21)
- (added) clang/unittests/tools/CMakeLists.txt (+1)
- (added) clang/unittests/tools/offload-arch/CMakeLists.txt (+8)
- (renamed) clang/unittests/tools/offload-arch/OffloadArchTest.cpp (+2-2)
- (added) llvm/utils/gn/secondary/clang/tools/offload-arch/lib/BUILD.gn (+14)
- (modified) llvm/utils/gn/secondary/clang/unittests/BUILD.gn (+1-1)
- (removed) llvm/utils/gn/secondary/clang/unittests/offload-arch/BUILD.gn (-19)
- (added) llvm/utils/gn/secondary/clang/unittests/tools/offload-arch/BUILD.gn (+11)
``````````diff
diff --git a/clang/tools/offload-arch/CMakeLists.txt b/clang/tools/offload-arch/CMakeLists.txt
index 8e37e3d2ae5db..83dcdd62f1720 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 0000000000000..2692229dc675b
--- /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 11ea2e79cd279..c6e728ac1d043 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 5cc21a563be3e..b2fee01649abc 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 523b5f33ed6b3..0000000000000
--- 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 0000000000000..8a51d644cf1ab
--- /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 0000000000000..56cfe48d56487
--- /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 2d4a35c85729d..7de00610bd189 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 0000000000000..987dd7a9a9a97
--- /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 a8c4b93f4baba..13ac1fac6637e 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 336f30a6570b9..0000000000000
--- 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 0000000000000..3ebd60b6da0c7
--- /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" ]
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/226552
More information about the llvm-commits
mailing list