blob: 04491be1b7661844bf3b0cdbbfac2854b267991c [file]
# 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")