https://github.com/wenju-he updated 
https://github.com/llvm/llvm-project/pull/185376

>From 2bafccb1d76eaf76699e385f9e96a54c810a7543 Mon Sep 17 00:00:00 2001
From: Wenju He <[email protected]>
Date: Mon, 9 Mar 2026 09:49:29 +0100
Subject: [PATCH 1/2] [libclc][CMake] Add spir64 target to clang compiler test

This fixes `error : unknown target triple 'unknown'` on Windows when
clang is built with LLVM_TARGETS_TO_BUILD empty.
---
 libclc/cmake/modules/CMakeTestCLCCompiler.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libclc/cmake/modules/CMakeTestCLCCompiler.cmake 
b/libclc/cmake/modules/CMakeTestCLCCompiler.cmake
index d18a818f93bfb..c4501c41a8ce8 100644
--- a/libclc/cmake/modules/CMakeTestCLCCompiler.cmake
+++ b/libclc/cmake/modules/CMakeTestCLCCompiler.cmake
@@ -15,7 +15,7 @@ file(MAKE_DIRECTORY "${_test_dir}")
 message(STATUS "Check for working CLC compiler: ${CMAKE_CLC_COMPILER}")
 
 execute_process(
-  COMMAND "${CMAKE_CLC_COMPILER}" -x cl -c -flto
+  COMMAND "${CMAKE_CLC_COMPILER}" -target spir64-unknown-unknown -x cl -c -flto
           -o "${_test_out}" "${_test_file}"
   RESULT_VARIABLE _clc_result
   ERROR_VARIABLE _clc_error

>From 55ee855f8a62d84ab1c1916205e9cf4b22819651 Mon Sep 17 00:00:00 2001
From: Wenju He <[email protected]>
Date: Mon, 9 Mar 2026 13:30:42 +0100
Subject: [PATCH 2/2] Test that the compiler works for all targets in
 LIBCLC_TARGETS_TO_BUILD

---
 libclc/CMakeLists.txt                         | 21 ++++------
 libclc/cmake/modules/AddLibclc.cmake          | 17 ++++++++
 .../cmake/modules/CMakeTestCLCCompiler.cmake  | 42 ++++++++++++-------
 3 files changed, 52 insertions(+), 28 deletions(-)

diff --git a/libclc/CMakeLists.txt b/libclc/CMakeLists.txt
index f55f02f0e2fc0..265ccdbf94c51 100644
--- a/libclc/CMakeLists.txt
+++ b/libclc/CMakeLists.txt
@@ -10,8 +10,6 @@ set(CMAKE_CXX_STANDARD 17)
 # Add path for custom modules
 list( INSERT CMAKE_MODULE_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" )
 
-enable_language( CLC )
-
 include( AddLibclc )
 
 include( GNUInstallDirs )
@@ -114,6 +112,14 @@ else()
   endforeach()
 endif()
 
+if( NOT LIBCLC_TARGETS_TO_BUILD )
+  message( FATAL_ERROR
+    "LIBCLC_TARGETS_TO_BUILD is empty. Specify at least one target or use 
'all'.\n"
+    "Valid targets are: ${LIBCLC_TARGETS_ALL}\n")
+endif()
+
+enable_language( CLC )
+
 list( SORT LIBCLC_TARGETS_TO_BUILD )
 
 foreach( tool IN ITEMS opt llvm-link )
@@ -153,16 +159,7 @@ foreach( t ${LIBCLC_TARGETS_TO_BUILD} )
   list( GET TRIPLE 2 OS )
 
   # Determine the clang target triple.
-  set(clang_triple ${t})
-  if(ARCH STREQUAL spirv AND LIBCLC_USE_SPIRV_BACKEND)
-    set(clang_triple spirv32--)
-  elseif(ARCH STREQUAL spirv64 AND LIBCLC_USE_SPIRV_BACKEND)
-    set(clang_triple spirv64--)
-  elseif(ARCH STREQUAL spirv OR ARCH STREQUAL clspv)
-    set(clang_triple spir--)
-  elseif(ARCH STREQUAL spirv64 OR ARCH STREQUAL clspv64)
-    set(clang_triple spir64--)
-  endif()
+  libclc_target_to_clang_triple(${t} clang_triple)
 
   # Determine the preprocessor identifier for this target.
   set(MACRO_ARCH ${ARCH})
diff --git a/libclc/cmake/modules/AddLibclc.cmake 
b/libclc/cmake/modules/AddLibclc.cmake
index db99f53c8b421..981bdaaa67c68 100644
--- a/libclc/cmake/modules/AddLibclc.cmake
+++ b/libclc/cmake/modules/AddLibclc.cmake
@@ -1,3 +1,20 @@
+# Convert libclc target to clang target triple
+function(libclc_target_to_clang_triple target out_var)
+  string(REPLACE "-" ";" TRIPLE ${target})
+  list(GET TRIPLE 0 ARCH)
+  set(clang_triple ${target})
+  if(ARCH STREQUAL spirv AND LIBCLC_USE_SPIRV_BACKEND)
+    set(clang_triple spirv32--)
+  elseif(ARCH STREQUAL spirv64 AND LIBCLC_USE_SPIRV_BACKEND)
+    set(clang_triple spirv64--)
+  elseif(ARCH STREQUAL spirv OR ARCH STREQUAL clspv)
+    set(clang_triple spir--)
+  elseif(ARCH STREQUAL spirv64 OR ARCH STREQUAL clspv64)
+    set(clang_triple spir64--)
+  endif()
+  set(${out_var} ${clang_triple} PARENT_SCOPE)
+endfunction()
+
 # Converts a list of relative source paths to absolute paths and exports
 # it to the parent scope.
 macro(libclc_configure_source_list variable path)
diff --git a/libclc/cmake/modules/CMakeTestCLCCompiler.cmake 
b/libclc/cmake/modules/CMakeTestCLCCompiler.cmake
index c4501c41a8ce8..3714cd4ec6ee8 100644
--- a/libclc/cmake/modules/CMakeTestCLCCompiler.cmake
+++ b/libclc/cmake/modules/CMakeTestCLCCompiler.cmake
@@ -2,6 +2,8 @@ 
configure_file(${CMAKE_CURRENT_LIST_DIR}/CMakeCLCCompiler.cmake.in
   ${CMAKE_PLATFORM_INFO_DIR}/CMakeCLCCompiler.cmake @ONLY)
 include(${CMAKE_PLATFORM_INFO_DIR}/CMakeCLCCompiler.cmake)
 
+include(AddLibclc)
+
 if(CMAKE_CLC_COMPILER_FORCED)
   set(CMAKE_CLC_COMPILER_WORKS TRUE)
   return()
@@ -14,21 +16,29 @@ file(MAKE_DIRECTORY "${_test_dir}")
 
 message(STATUS "Check for working CLC compiler: ${CMAKE_CLC_COMPILER}")
 
-execute_process(
-  COMMAND "${CMAKE_CLC_COMPILER}" -target spir64-unknown-unknown -x cl -c -flto
-          -o "${_test_out}" "${_test_file}"
-  RESULT_VARIABLE _clc_result
-  ERROR_VARIABLE _clc_error
-)
+# Test that the compiler works for all targets in LIBCLC_TARGETS_TO_BUILD
+foreach(_target ${LIBCLC_TARGETS_TO_BUILD})
+  # Convert libclc target to clang triple
+  libclc_target_to_clang_triple(${_target} _clang_triple)
+
+  execute_process(
+    COMMAND "${CMAKE_CLC_COMPILER}" --target=${_clang_triple} -x cl -c -flto
+            -nostdlib -nostdlibinc -cl-no-stdinc -o "${_test_out}" 
"${_test_file}"
+    RESULT_VARIABLE _clc_result
+    ERROR_VARIABLE _clc_error
+    OUTPUT_QUIET
+  )
+
+  if(NOT _clc_result EQUAL 0)
+    message(FATAL_ERROR
+      "The CLC compiler\n"
+      "  ${CMAKE_CLC_COMPILER}\n"
+      "is not able to compile a simple OpenCL test program for ${_target}.\n"
+      "Output:\n${_clc_error}")
+  endif()
 
-if(_clc_result EQUAL 0)
-  set(CMAKE_CLC_COMPILER_WORKS TRUE)
-  message(STATUS "Check for working CLC compiler: ${CMAKE_CLC_COMPILER} - 
works")
   file(REMOVE "${_test_out}")
-else()
-  message(FATAL_ERROR
-    "The CLC compiler\n"
-    "  ${CMAKE_CLC_COMPILER}\n"
-    "is not able to compile a simple OpenCL test program.\n"
-    "Output:\n${_clc_error}")
-endif()
+endforeach()
+
+set(CMAKE_CLC_COMPILER_WORKS TRUE)
+message(STATUS "Check for working CLC compiler: ${CMAKE_CLC_COMPILER} - works")

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to