[libclc] [libclc][CMake] Add spir64 target to clang compiler test (PR #185376)
Wenju He via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 9 05:31:55 PDT 2026
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 <wenju.he at intel.com>
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 <wenju.he at intel.com>
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")
More information about the cfe-commits
mailing list