[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