| # Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| # file LICENSE.rst or https://cmake.org/licensing for details. |
| |
| |
| if(CMAKE_GENERATOR MATCHES "^Xcode") |
| message(FATAL_ERROR |
| "The SYCL language is not supported by the \"${CMAKE_GENERATOR}\" " |
| "generator.") |
| endif() |
| |
| include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake) |
| |
| # Record the selection used to identify the host toolchain and runtime. |
| if(DEFINED CMAKE_SYCL_DEVICE_TARGETS) |
| set(_CMAKE_SYCL_DEVICE_TARGETS "${CMAKE_SYCL_DEVICE_TARGETS}") |
| endif() |
| |
| # Load system-specific compiler preferences for this language. |
| include(Platform/${CMAKE_SYSTEM_NAME}-Determine-SYCL OPTIONAL) |
| include(Platform/${CMAKE_SYSTEM_NAME}-SYCL OPTIONAL) |
| if(NOT CMAKE_SYCL_COMPILER_NAMES) |
| set(CMAKE_SYCL_COMPILER_NAMES dpclang++ dpclang-cl icpx icx icx-cl dpcpp acpp syclcc clang++ clang-cl) |
| endif() |
| |
| if(NOT "${CMAKE_GENERATOR}" MATCHES "Green Hills MULTI") |
| if(NOT CMAKE_SYCL_COMPILER) |
| set(CMAKE_SYCL_COMPILER_INIT NOTFOUND) |
| |
| if(NOT $ENV{SYCLCXX} STREQUAL "") |
| get_filename_component(CMAKE_SYCL_COMPILER_INIT $ENV{SYCLCXX} PROGRAM PROGRAM_ARGS CMAKE_SYCL_FLAGS_ENV_INIT) |
| if(CMAKE_SYCL_FLAGS_ENV_INIT) |
| set(CMAKE_SYCL_COMPILER_ARG1 "${CMAKE_SYCL_FLAGS_ENV_INIT}" CACHE STRING "Arguments to SYCL compiler") |
| endif() |
| if(NOT EXISTS ${CMAKE_SYCL_COMPILER_INIT}) |
| message(FATAL_ERROR "Could not find the compiler specified in the environment variable SYCLCXX:\n$ENV{SYCLCXX}.\n${CMAKE_SYCL_COMPILER_INIT}") |
| endif() |
| endif() |
| |
| if(CMAKE_GENERATOR_SYCL AND NOT CMAKE_SYCL_COMPILER_INIT) |
| set(CMAKE_SYCL_COMPILER_INIT ${CMAKE_GENERATOR_SYCL}) |
| endif() |
| |
| if(NOT CMAKE_SYCL_COMPILER_INIT) |
| set(CMAKE_SYCL_COMPILER_LIST dpclang++ dpclang-cl icpx icx icx-cl dpcpp acpp syclcc clang++ clang-cl) |
| endif() |
| |
| _cmake_find_compiler(SYCL) |
| else() |
| _cmake_find_compiler_path(SYCL) |
| endif() |
| mark_as_advanced(CMAKE_SYCL_COMPILER) |
| |
| get_filename_component(_CMAKE_SYCL_COMPILER_NAME |
| "${CMAKE_SYCL_COMPILER}" NAME_WE) |
| if(_CMAKE_SYCL_COMPILER_NAME MATCHES "^(acpp|syclcc|syclcc-clang)$") |
| set(CMAKE_SYCL_COMPILER_ID_TEST_FLAGS_FIRST "-x c++") |
| set(CMAKE_SYCL_COMPILER_ID_TEST_FLAGS "-c -x c++" "-x c++") |
| else() |
| set(CMAKE_SYCL_COMPILER_ID_TEST_FLAGS_FIRST "-fsycl -x c++") |
| set(CMAKE_SYCL_COMPILER_ID_TEST_FLAGS |
| "-c -fsycl -x c++" |
| "-fsycl -x c++" |
| "-c -x c++" |
| "-x c++") |
| endif() |
| unset(_CMAKE_SYCL_COMPILER_NAME) |
| endif() |
| |
| if(CMAKE_SYCL_COMPILER_TARGET) |
| get_filename_component(_CMAKE_SYCL_COMPILER_NAME |
| "${CMAKE_SYCL_COMPILER}" NAME_WE) |
| if(_CMAKE_SYCL_COMPILER_NAME MATCHES "^(acpp|syclcc|syclcc-clang)$") |
| set(CMAKE_SYCL_COMPILER_ID_TEST_FLAGS_FIRST |
| "-c --target=${CMAKE_SYCL_COMPILER_TARGET} -x c++") |
| else() |
| set(CMAKE_SYCL_COMPILER_ID_TEST_FLAGS_FIRST |
| "-c --target=${CMAKE_SYCL_COMPILER_TARGET} -fsycl -x c++") |
| endif() |
| unset(_CMAKE_SYCL_COMPILER_NAME) |
| endif() |
| |
| get_filename_component(_CMAKE_SYCL_COMPILER_NAME |
| "${CMAKE_SYCL_COMPILER}" NAME_WE) |
| if(_CMAKE_SYCL_COMPILER_NAME MATCHES "^(acpp|syclcc|syclcc-clang)$") |
| if(NOT DEFINED _CMAKE_SYCL_DEVICE_TARGETS) |
| if(DEFINED ENV{ACPP_TARGETS}) |
| set(_CMAKE_SYCL_DEVICE_TARGETS "$ENV{ACPP_TARGETS}") |
| elseif(DEFINED ENV{HIPSYCL_TARGETS}) |
| set(_CMAKE_SYCL_DEVICE_TARGETS "$ENV{HIPSYCL_TARGETS}") |
| else() |
| execute_process(COMMAND "${CMAKE_SYCL_COMPILER}" --help |
| OUTPUT_VARIABLE _CMAKE_SYCL_DRIVER_HELP |
| ERROR_QUIET) |
| if(_CMAKE_SYCL_DRIVER_HELP MATCHES |
| "--acpp-targets=[^\n]*\n[^\n]*\n[^\n]*\n \\[current value: ([^]\n]+)\\]") |
| if(NOT CMAKE_MATCH_1 STREQUAL "NOT SET") |
| set(_CMAKE_SYCL_DEVICE_TARGETS "${CMAKE_MATCH_1}") |
| endif() |
| endif() |
| unset(_CMAKE_SYCL_DRIVER_HELP) |
| endif() |
| endif() |
| # AdaptiveCpp supplies the backend's source language itself. A forwarded |
| # -x c++ would override its -x cuda/-x hip during multipass compilation. |
| string(TOLOWER "${_CMAKE_SYCL_DEVICE_TARGETS}" _CMAKE_SYCL_TARGET_FLOWS) |
| if(_CMAKE_SYCL_TARGET_FLOWS MATCHES |
| "(^|;)[ \t]*(cuda|hip)(\\.(integrated|explicit)-multipass)?[ \t]*(:|;|$)" OR |
| (NOT "${CMAKE_SYCL_DEVICE_TARGETS}" STREQUAL "" AND |
| NOT CMAKE_SYCL_DEVICE_TARGETS)) |
| string(REPLACE "-x c++" "" CMAKE_SYCL_COMPILER_ID_TEST_FLAGS_FIRST |
| "${CMAKE_SYCL_COMPILER_ID_TEST_FLAGS_FIRST}") |
| string(REPLACE "-x c++" "" CMAKE_SYCL_COMPILER_ID_TEST_FLAGS |
| "${CMAKE_SYCL_COMPILER_ID_TEST_FLAGS}") |
| endif() |
| unset(_CMAKE_SYCL_TARGET_FLOWS) |
| set(_CMAKE_SYCL_DEVICE_TARGET_OPTION "--acpp-targets=") |
| set(_CMAKE_SYCL_DEVICE_TARGET_VALUE "${_CMAKE_SYCL_DEVICE_TARGETS}") |
| elseif(_CMAKE_SYCL_COMPILER_NAME MATCHES "^(clang\\+\\+|clang|clang-cl)(-[0-9]+)?$") |
| set(_CMAKE_SYCL_DEVICE_TARGET_OPTION "--offload-targets=") |
| string(REPLACE ";" "," _CMAKE_SYCL_DEVICE_TARGET_VALUE |
| "${_CMAKE_SYCL_DEVICE_TARGETS}") |
| else() |
| set(_CMAKE_SYCL_DEVICE_TARGET_OPTION "-fsycl-targets=") |
| string(REPLACE ";" "," _CMAKE_SYCL_DEVICE_TARGET_VALUE |
| "${_CMAKE_SYCL_DEVICE_TARGETS}") |
| endif() |
| if(_CMAKE_SYCL_DEVICE_TARGETS) |
| set(CMAKE_SYCL_COMPILER_ID_TEST_FLAGS_FIRST |
| "\"${_CMAKE_SYCL_DEVICE_TARGET_OPTION}${_CMAKE_SYCL_DEVICE_TARGET_VALUE}\" ${CMAKE_SYCL_COMPILER_ID_TEST_FLAGS_FIRST}") |
| string(REPLACE ";" "\\;" _CMAKE_SYCL_DEVICE_TARGET_VALUE |
| "${_CMAKE_SYCL_DEVICE_TARGET_VALUE}") |
| foreach(_flag IN LISTS CMAKE_SYCL_COMPILER_ID_TEST_FLAGS) |
| # Subsequent attempts must not silently fall back to default targets. |
| string(APPEND _CMAKE_SYCL_ID_TARGET_FLAGS |
| "\"${_CMAKE_SYCL_DEVICE_TARGET_OPTION}${_CMAKE_SYCL_DEVICE_TARGET_VALUE}\" ${_flag};") |
| endforeach() |
| set(CMAKE_SYCL_COMPILER_ID_TEST_FLAGS "${_CMAKE_SYCL_ID_TARGET_FLAGS}") |
| endif() |
| unset(_CMAKE_SYCL_COMPILER_NAME) |
| unset(_CMAKE_SYCL_DEVICE_TARGET_OPTION) |
| unset(_CMAKE_SYCL_DEVICE_TARGET_VALUE) |
| unset(_CMAKE_SYCL_ID_TARGET_FLAGS) |
| unset(_flag) |
| |
| if(NOT CMAKE_SYCL_COMPILER_ID_RUN) |
| set(CMAKE_SYCL_COMPILER_ID_RUN 1) |
| |
| set(CMAKE_SYCL_COMPILER_ID) |
| set(CMAKE_SYCL_PLATFORM_ID) |
| file(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in |
| CMAKE_SYCL_COMPILER_ID_PLATFORM_CONTENT) |
| |
| list(APPEND CMAKE_SYCL_COMPILER_ID_VENDORS IAR) |
| set(CMAKE_SYCL_COMPILER_ID_VENDOR_FLAGS_IAR ) |
| set(CMAKE_SYCL_COMPILER_ID_VENDOR_REGEX_IAR "IAR .+ Compiler") |
| |
| set(CMAKE_SYCL_COMPILER_ID_TOOL_MATCH_REGEX "\nLd[^\n]*(\n[ \t]+[^\n]*)*\n[ \t]+([^ \t\r\n]+)[^\r\n]*-o[^\r\n]*CompilerIdSYCL/(\\./)?(CompilerIdSYCL.(framework|xctest|build/[^ \t\r\n]+)/)?CompilerIdSYCL[ \t\n\\\"]") |
| set(CMAKE_SYCL_COMPILER_ID_TOOL_MATCH_INDEX 2) |
| |
| include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake) |
| get_filename_component(_CMAKE_SYCL_COMPILER_NAME "${CMAKE_SYCL_COMPILER}" NAME_WE) |
| if(_CMAKE_SYCL_COMPILER_NAME MATCHES "-cl$") |
| string(APPEND CMAKE_SYCL_COMPILER_ID_TEST_FLAGS_FIRST " -clang:-v") |
| else() |
| string(APPEND CMAKE_SYCL_COMPILER_ID_TEST_FLAGS_FIRST " -v") |
| endif() |
| unset(_CMAKE_SYCL_COMPILER_NAME) |
| CMAKE_DETERMINE_COMPILER_ID(SYCL SYCLFLAGS CMakeSYCLCompilerId.sycl) |
| |
| include(CMakeParseImplicitLinkInfo) |
| cmake_parse_implicit_link_info2("${CMAKE_SYCL_COMPILER_PRODUCED_OUTPUT}" _CMAKE_SYCL_LINK_LOG "" |
| LANGUAGE SYCL |
| COMPUTE_IMPLICIT_LIBS CMAKE_SYCL_HOST_IMPLICIT_LINK_LIBRARIES |
| COMPUTE_IMPLICIT_DIRS CMAKE_SYCL_HOST_IMPLICIT_LINK_DIRECTORIES |
| COMPUTE_IMPLICIT_FWKS CMAKE_SYCL_HOST_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES) |
| message(CONFIGURE_LOG "Parsed SYCL compiler-id link information:\n${_CMAKE_SYCL_LINK_LOG}\n") |
| set(CMAKE_SYCL_IMPLICIT_LINK_LIBRARIES "${CMAKE_SYCL_HOST_IMPLICIT_LINK_LIBRARIES}") |
| set(CMAKE_SYCL_IMPLICIT_LINK_DIRECTORIES "${CMAKE_SYCL_HOST_IMPLICIT_LINK_DIRECTORIES}") |
| set(CMAKE_SYCL_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "${CMAKE_SYCL_HOST_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES}") |
| include(Internal/CMakeSYCLFilterImplicitLibs) |
| cmake_sycl_filter_implicit_libs(CMAKE_SYCL_IMPLICIT_LINK_LIBRARIES) |
| |
| _cmake_find_compiler_sysroot(SYCL) |
| else() |
| if(NOT DEFINED CMAKE_SYCL_COMPILER_FRONTEND_VARIANT) |
| if(CMAKE_SYCL_COMPILER_ID STREQUAL "Clang" OR |
| "x${CMAKE_SYCL_COMPILER_ID}" STREQUAL "xDPClang" OR |
| "x${CMAKE_SYCL_COMPILER_ID}" STREQUAL "xIntelLLVM") |
| if("x${CMAKE_SYCL_SIMULATE_ID}" STREQUAL "xMSVC") |
| set(CMAKE_SYCL_COMPILER_FRONTEND_VARIANT "MSVC") |
| else() |
| set(CMAKE_SYCL_COMPILER_FRONTEND_VARIANT "GNU") |
| endif() |
| elseif(CMAKE_SYCL_COMPILER_ID STREQUAL "AdaptiveCpp") |
| set(CMAKE_SYCL_COMPILER_FRONTEND_VARIANT "GNU") |
| else() |
| set(CMAKE_SYCL_COMPILER_FRONTEND_VARIANT "") |
| endif() |
| endif() |
| endif() |
| |
| if(NOT _CMAKE_TOOLCHAIN_LOCATION) |
| get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_SYCL_COMPILER}" PATH) |
| endif() |
| |
| if(NOT _CMAKE_TOOLCHAIN_PREFIX) |
| if(CMAKE_SYCL_COMPILER_ID MATCHES "GNU|Clang|IntelLLVM|QCC|LCC") |
| get_filename_component(COMPILER_BASENAME "${CMAKE_SYCL_COMPILER}" NAME) |
| if(COMPILER_BASENAME MATCHES "^(.+-)?(dpclang\\+\\+|dpclang-cl|dpclang|clang\\+\\+|dpcpp|icpx|[gc]\\+\\+|clang-cl)(-?[0-9]+(\\.[0-9]+)*)?(-[^.]+)?(\\.exe)?$") |
| set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1}) |
| set(_CMAKE_TOOLCHAIN_SUFFIX ${CMAKE_MATCH_3}) |
| set(_CMAKE_COMPILER_SUFFIX ${CMAKE_MATCH_5}) |
| elseif(CMAKE_SYCL_COMPILER_TARGET AND CMAKE_SYCL_COMPILER_ID MATCHES "Clang|IntelLLVM") |
| set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_SYCL_COMPILER_TARGET}-) |
| endif() |
| |
| if("${_CMAKE_TOOLCHAIN_PREFIX}" MATCHES "(.+-)?llvm-$") |
| set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1}) |
| endif() |
| endif() |
| endif() |
| |
| set(_CMAKE_PROCESSING_LANGUAGE "SYCL") |
| include(CMakeFindBinUtils) |
| include(Compiler/${CMAKE_SYCL_COMPILER_ID}-FindBinUtils OPTIONAL) |
| unset(_CMAKE_PROCESSING_LANGUAGE) |
| |
| if(CMAKE_SYCL_COMPILER_SYSROOT) |
| string(CONCAT _SET_CMAKE_SYCL_COMPILER_SYSROOT |
| "set(CMAKE_SYCL_COMPILER_SYSROOT \"${CMAKE_SYCL_COMPILER_SYSROOT}\")\n" |
| "set(CMAKE_COMPILER_SYSROOT \"${CMAKE_SYCL_COMPILER_SYSROOT}\")") |
| else() |
| set(_SET_CMAKE_SYCL_COMPILER_SYSROOT "") |
| endif() |
| |
| if(MSVC_SYCL_ARCHITECTURE_ID) |
| set(SET_MSVC_SYCL_ARCHITECTURE_ID |
| "set(MSVC_SYCL_ARCHITECTURE_ID ${MSVC_SYCL_ARCHITECTURE_ID})") |
| endif() |
| |
| # configure all variables set in this file |
| configure_file(${CMAKE_ROOT}/Modules/CMakeSYCLCompiler.cmake.in |
| ${CMAKE_PLATFORM_INFO_DIR}/CMakeSYCLCompiler.cmake |
| @ONLY |
| ) |
| |
| set(CMAKE_SYCL_COMPILER_ENV_VAR "SYCLCXX") |