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
