DPClang: add compiler support

Fixes: #28157
This commit is contained in:
Vito Gamberini committed 2026-10-13 14:59:23 -04:00
1 parent 784727d1de
commit 21213ae1d9
46 files changed
+185 -71

No files matched your search

+2 -1
View File
@@ -121,7 +121,8 @@ When activated, this experimental feature provides the following:
SYCL for C++ sources that can reach it.
The SYCL language is supported by Makefile, Ninja, FASTBuild, and Visual Studio
generators with AdaptiveCpp, SYCL-capable Clang, or IntelLLVM compiler drivers.
generators with AdaptiveCpp, SYCL-capable Clang, DPClang, or IntelLLVM compiler
drivers.
:prop_tgt:`SYCL_SEPARABLE_COMPILATION` controls separate compilation of device
code. :prop_tgt:`SYCL_RESOLVE_DEVICE_SYMBOLS` controls device linking, including
+3 -3
View File
@@ -13,8 +13,8 @@ SYCL compiler:
such as ``generic``, ``omp.accelerated``,
``cuda.explicit-multipass:sm_80,sm_86``, and
``hip.explicit-multipass:gfx90a``.
* IntelLLVM accepts SYCL target triples or architecture aliases, such as
``spir64`` and ``intel_gpu_pvc``.
* IntelLLVM and DPClang accept SYCL target triples or architecture aliases, such
as ``spir64`` and ``intel_gpu_pvc``.
* Clang accepts offload target triples, such as ``spirv64-unknown-unknown``.
The compiler installation must support the requested targets. These values
@@ -32,7 +32,7 @@ For example:
if(CMAKE_SYCL_COMPILER_ID STREQUAL "AdaptiveCpp")
set_property(TARGET app PROPERTY SYCL_DEVICE_TARGETS
cuda.explicit-multipass:sm_80)
elseif(CMAKE_SYCL_COMPILER_ID STREQUAL "IntelLLVM")
elseif(CMAKE_SYCL_COMPILER_ID MATCHES "^(DPClang|IntelLLVM)$")
set_property(TARGET app PROPERTY SYCL_DEVICE_TARGETS intel_gpu_pvc)
endif()
+9
View File
@@ -103,6 +103,15 @@ Languages
* ``import std`` is now available for all C++ 20 and later code with
:prop_tgt:`CXX_SCAN_FOR_MODULES` enabled.
Compilers
---------
* The `open-source DPC++ compiler`_, version 7.0 and newer, is now supported
with :variable:`compiler id <CMAKE_<LANG>_COMPILER_ID>` ``DPClang`` for
languages ``C`` and ``CXX``.
.. _`open-source DPC++ compiler`: https://github.com/intel/llvm
Command-Line
------------
+5 -3
View File
@@ -21,6 +21,7 @@ Value Name
``Cray`` Cray Compiler
``CrayClang`` Cray Clang-based Compiler
``Diab`` `Wind River Systems Diab Compiler`_
``DPClang`` `Open-source DPC++ Compiler`_
``Embarcadero``, ``Borland`` `Embarcadero`_
``Flang`` `Classic Flang Fortran Compiler`_
``LLVMFlang`` `LLVM Flang Fortran Compiler`_
@@ -69,8 +70,10 @@ languages.
.. note::
SYCL support is experimental and gated by ``CMAKE_EXPERIMENTAL_SYCL``.
.. _LLVM Clang: https://clang.llvm.org
.. _AdaptiveCpp: https://adaptivecpp.github.io/
.. _LLVM Clang: https://clang.llvm.org
.. _Wind River Systems Diab Compiler: https://www.windriver.com/resource/wind-river-diab-compiler-product-overview
.. _Open-source DPC++ Compiler: https://github.com/intel/llvm
.. _Embarcadero: https://www.embarcadero.com
.. _Classic Flang Fortran Compiler: https://github.com/flang-compiler/flang
.. _LLVM Flang Fortran Compiler: https://github.com/llvm/llvm-project/tree/main/flang
@@ -86,7 +89,6 @@ languages.
.. _Pelles C: https://pellesc.se
.. _Renesas Compiler: https://www.renesas.com
.. _Small Device C Compiler: https://sdcc.sourceforge.net
.. _Tiny C Compiler: https://bellard.org/tcc
.. _Tasking Compiler Toolsets: https://www.tasking.com
.. _Texas Instruments Clang-based Compilers: https://www.ti.com/tool/download/ARM-CGT-CLANG
.. _Wind River Systems Diab Compiler: https://www.windriver.com/resource/wind-river-diab-compiler-product-overview
.. _Tiny C Compiler: https://bellard.org/tcc
+1
View File
@@ -45,6 +45,7 @@ function(compiler_id_detection outvar lang)
list(APPEND ordered_compilers
Intel
IntelLLVM
DPClang
PathScale
Embarcadero
Borland
+3 -2
View File
@@ -58,7 +58,7 @@ else()
# finally list compilers to try
if(NOT CMAKE_C_COMPILER_INIT)
set(CMAKE_C_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}cc ${_CMAKE_TOOLCHAIN_PREFIX}gcc cl bcc xlc icx clang)
set(CMAKE_C_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}cc ${_CMAKE_TOOLCHAIN_PREFIX}gcc cl bcc xlc icx clang dpclang)
endif()
_cmake_find_compiler(C)
@@ -134,6 +134,7 @@ else()
# They pre-date our support for the GNU-like variant targeting the
# MSVC ABI so we do not consider that here.
if(CMAKE_C_COMPILER_ID STREQUAL "Clang"
OR "x${CMAKE_C_COMPILER_ID}" STREQUAL "xDPClang"
OR "x${CMAKE_C_COMPILER_ID}" STREQUAL "xIntelLLVM")
if("x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
set(CMAKE_C_COMPILER_FRONTEND_VARIANT "MSVC")
@@ -161,7 +162,7 @@ if (NOT _CMAKE_TOOLCHAIN_PREFIX)
if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang|QCC|LCC")
get_filename_component(COMPILER_BASENAME "${CMAKE_C_COMPILER}" NAME)
if (COMPILER_BASENAME MATCHES "^(.+-)?(clang|g?cc)(-cl)?(-?[0-9]+(\\.[0-9]+)*)?(-[^.]+)?(\\.exe)?$")
if (COMPILER_BASENAME MATCHES "^(.+-)?(dpclang|clang|g?cc)(-cl)?(-?[0-9]+(\\.[0-9]+)*)?(-[^.]+)?(\\.exe)?$")
set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
set(_CMAKE_TOOLCHAIN_SUFFIX ${CMAKE_MATCH_4})
set(_CMAKE_COMPILER_SUFFIX ${CMAKE_MATCH_6})
+3 -2
View File
@@ -63,7 +63,7 @@ else()
# on Windows, first introduced by Intel oneAPI 2023.0.
list(APPEND CMAKE_CXX_COMPILER_LIST icpx)
endif()
list(APPEND CMAKE_CXX_COMPILER_LIST icx clang++)
list(APPEND CMAKE_CXX_COMPILER_LIST icx clang++ dpclang++)
endif()
_cmake_find_compiler(CXX)
@@ -137,6 +137,7 @@ else()
# They pre-date our support for the GNU-like variant targeting the
# MSVC ABI so we do not consider that here.
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang"
OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xDPClang"
OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xIntelLLVM")
if("x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "MSVC")
@@ -166,7 +167,7 @@ if (NOT _CMAKE_TOOLCHAIN_PREFIX)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|QCC|LCC")
get_filename_component(COMPILER_BASENAME "${CMAKE_CXX_COMPILER}" NAME)
if (COMPILER_BASENAME MATCHES "^(.+-)?(clang\\+\\+|[gc]\\+\\+|clang-cl)(-?[0-9]+(\\.[0-9]+)*)?(-[^.]+)?(\\.exe)?$")
if (COMPILER_BASENAME MATCHES "^(.+-)?(dpclang\\+\\+|dpclang-cl|clang\\+\\+|[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})
+4 -2
View File
@@ -331,6 +331,7 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
set(_variant "")
if("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xClang"
OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xDPClang"
OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xIntelLLVM")
if("x${CMAKE_${lang}_SIMULATE_ID}" STREQUAL "xMSVC")
if(CMAKE_GENERATOR MATCHES "Visual Studio")
@@ -374,7 +375,7 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
# for C++ and the GNU-frontend variant.
set(CMAKE_${lang}_COMPILER_CLANG_RESOURCE_DIR "")
if ("x${lang}" STREQUAL "xCXX" AND
"x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xClang" AND
CMAKE_${lang}_COMPILER_ID MATCHES "^(Clang|DPClang)$" AND
"x${CMAKE_${lang}_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
execute_process(
COMMAND "${CMAKE_${lang}_COMPILER}"
@@ -398,6 +399,7 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
if ("x${lang}" STREQUAL "xCXX" AND
EXISTS "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/${lang}-DetectStdlib.h" AND
("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xClang") OR
("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xDPClang") OR
("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xGNU"))
# See #20851 for a proper abstraction for this.
@@ -419,7 +421,7 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
# Locate the standard library headers selected by Clang, including toolsets
# discovered by the driver without a developer command prompt environment.
set(_stdlib_trace_flags)
if (CMAKE_${lang}_COMPILER_ID STREQUAL "Clang")
if (CMAKE_${lang}_COMPILER_ID MATCHES "^(Clang|DPClang)$")
if (CMAKE_${lang}_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
list(APPEND _stdlib_trace_flags -clang:-H)
else ()
+1
View File
@@ -184,6 +184,7 @@ if(NOT CMAKE_SYCL_COMPILER_ID_RUN)
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")
+6 -4
View File
@@ -69,7 +69,7 @@ set(_CMAKE_TOOL_VARS "")
# if it's the MS C/CXX compiler, search for link
if(("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_SIMULATE_ID}" STREQUAL "xMSVC" AND
("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC"
OR NOT "x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xClang"))
OR NOT "x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" MATCHES "^x(Clang|DPClang)$"))
OR "x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xMSVC"
OR (CMAKE_HOST_WIN32 AND "x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xPGI")
OR (CMAKE_HOST_WIN32 AND "x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xNVIDIA")
@@ -83,10 +83,12 @@ if(("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_SIMULATE_ID}" STREQUAL "xMSVC" AND
set(_CMAKE_MT_NAMES "mt")
# Prepend toolchain-specific names.
if("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" MATCHES "^x(Clang|LLVMFlang)$")
if("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" MATCHES "^x(Clang|DPClang|LLVMFlang)$")
set(_CMAKE_NM_NAMES "llvm-nm" "nm")
list(PREPEND _CMAKE_AR_NAMES "llvm-lib")
if("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION}" VERSION_GREATER_EQUAL 14.0.2)
if("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION}" VERSION_GREATER_EQUAL 14.0.2 OR
(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID STREQUAL "DPClang" AND
CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION_INTERNAL VERSION_GREATER_EQUAL 14.0.2))
list(PREPEND _CMAKE_MT_NAMES "llvm-mt")
endif()
list(PREPEND _CMAKE_LINKER_NAMES "lld-link")
@@ -191,7 +193,7 @@ else()
set(_CMAKE_TAPI_NAMES "tapi")
# Prepend toolchain-specific names.
if("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" MATCHES "^x(Clang|IntelLLVM|LLVMFlang)$")
if("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" MATCHES "^x(Clang|DPClang|IntelLLVM|LLVMFlang)$")
if("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_SIMULATE_ID}" STREQUAL "xMSVC")
list(PREPEND _CMAKE_LINKER_NAMES "lld-link")
elseif(NOT APPLE)
@@ -35,7 +35,11 @@ function (_cmake_cxx_find_modules_json)
set(CMAKE_CXX_STDLIB_MODULES_JSON "${CMAKE_CXX_STDLIB_MODULES_JSON}" PARENT_SCOPE)
endif ()
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "18.1.2" AND
set(_clang_version "${CMAKE_CXX_COMPILER_VERSION}")
if(CMAKE_CXX_COMPILER_ID STREQUAL "DPClang")
set(_clang_version "${CMAKE_CXX_COMPILER_VERSION_INTERNAL}")
endif()
if (_clang_version VERSION_LESS "18.1.2" AND
CMAKE_CXX_STANDARD_LIBRARY STREQUAL "libc++")
# The original PR had a key spelling mismatch internally. Do not support it
# and instead require a release known to have the fix.
@@ -0,0 +1 @@
include(Compiler/Clang-C-FeatureTests)
+2
View File
@@ -0,0 +1,2 @@
include(Compiler/DPClang)
__compiler_dpclang(C)
@@ -0,0 +1 @@
include(Compiler/Clang-CXX-CXXImportStd)
@@ -0,0 +1 @@
include(Compiler/Clang-CXX-FeatureTests)
+2
View File
@@ -0,0 +1,2 @@
include(Compiler/DPClang)
__compiler_dpclang(CXX)
@@ -0,0 +1,17 @@
set(_compiler_id_pp_test "defined(__clang__) && defined(__DPCPP__) && defined(__dpcpp_major__) && __dpcpp_major__ >= 7 && defined(__dpcpp_minor__) && defined(__dpcpp_patchlevel__) && !defined(__INTEL_CLANG_COMPILER) && !defined(__INTEL_LLVM_COMPILER)")
set(_compiler_id_version_compute "
# define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@(__dpcpp_major__)
# define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(__dpcpp_minor__)
# define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__dpcpp_patchlevel__)
# define @PREFIX@COMPILER_VERSION_INTERNAL_STR __clang_version__
#if defined(_MSC_VER)
# define @PREFIX@SIMULATE_VERSION_MAJOR @MACRO_DEC@(_MSC_VER / 100)
# define @PREFIX@SIMULATE_VERSION_MINOR @MACRO_DEC@(_MSC_VER % 100)
#endif")
set(_compiler_id_simulate "
#if defined(_MSC_VER)
# define @PREFIX@SIMULATE_ID \"MSVC\"
#endif")
@@ -0,0 +1,6 @@
set(_dpclang_version "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION}")
set(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION
"${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION_INTERNAL}")
include(Compiler/Clang-FindBinUtils)
set(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION "${_dpclang_version}")
unset(_dpclang_version)
+12
View File
@@ -0,0 +1,12 @@
include(Compiler/DPClang)
__compiler_dpclang(SYCL)
include(Compiler/IntelLLVM-SYCL-DeviceLink)
if(CMAKE_SYCL_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
set(CMAKE_SYCL_COMPILE_OPTIONS_SEPARABLE_COMPILATION_ON "-clang:-fgpu-rdc")
set(CMAKE_SYCL_COMPILE_OPTIONS_SEPARABLE_COMPILATION_OFF "-clang:-fno-gpu-rdc")
set(CMAKE_SYCL_DEVICE_LINK_OPTIONS "-fsycl;-clang:-fsycl-link")
set(CMAKE_SYCL_DEVICE_LINK_OPTIONS_WHOLE_ARCHIVE "-clang:-Wl,--whole-archive")
set(CMAKE_SYCL_DEVICE_LINK_OPTIONS_NO_WHOLE_ARCHIVE "-clang:-Wl,--no-whole-archive")
endif()
+14
View File
@@ -0,0 +1,14 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file LICENSE.rst or https://cmake.org/licensing for details.
include_guard()
# DPClang's public version describes DPC++, not the underlying Clang. Use the
# latter for Clang's feature thresholds while preserving the public version.
macro(__compiler_dpclang lang)
set(_dpclang_${lang}_version "${CMAKE_${lang}_COMPILER_VERSION}")
set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_${lang}_COMPILER_VERSION_INTERNAL}")
include(Compiler/Clang-${lang})
set(CMAKE_${lang}_COMPILER_VERSION "${_dpclang_${lang}_version}")
unset(_dpclang_${lang}_version)
endmacro()
@@ -0,0 +1,20 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file LICENSE.rst or https://cmake.org/licensing for details.
# Standalone device linking for the IntelLLVM and DPClang DPC++ drivers.
set(CMAKE_SYCL_COMPILER_HAS_DEVICE_LINK_PHASE TRUE)
set(CMAKE_SYCL_COMPILE_OPTIONS_SEPARABLE_COMPILATION_ON "-fgpu-rdc")
set(CMAKE_SYCL_COMPILE_OPTIONS_SEPARABLE_COMPILATION_OFF "-fno-gpu-rdc")
set(CMAKE_SYCL_DEVICE_LINK_OPTIONS "-fsycl;-fsycl-link")
if(NOT CMAKE_SYCL_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
if(CMAKE_SYCL_COMPILER_ID STREQUAL "IntelLLVM")
set(CMAKE_SYCL_DEVICE_LINK_OPTIONS_PIC "-shared")
endif()
set(CMAKE_SYCL_DEVICE_LINK_OPTIONS_WHOLE_ARCHIVE "-Wl,--whole-archive")
set(CMAKE_SYCL_DEVICE_LINK_OPTIONS_NO_WHOLE_ARCHIVE "-Wl,--no-whole-archive")
elseif(CMAKE_SYCL_COMPILER_ID STREQUAL "IntelLLVM")
set(CMAKE_SYCL_DEVICE_LINK_OPTIONS_WHOLE_ARCHIVE
"-Qoption,link,--whole-archive")
set(CMAKE_SYCL_DEVICE_LINK_OPTIONS_NO_WHOLE_ARCHIVE
"-Qoption,link,--no-whole-archive")
endif()
+1 -15
View File
@@ -4,21 +4,7 @@ __compiler_intel_llvm(SYCL)
set(_CMAKE_SYCL_REQUIRED_FLAG "-fsycl")
if(CMAKE_SYCL_COMPILER_VERSION VERSION_GREATER_EQUAL 2026.0)
set(CMAKE_SYCL_COMPILER_HAS_DEVICE_LINK_PHASE TRUE)
set(CMAKE_SYCL_COMPILE_OPTIONS_SEPARABLE_COMPILATION_ON "-fgpu-rdc")
set(CMAKE_SYCL_COMPILE_OPTIONS_SEPARABLE_COMPILATION_OFF "-fno-gpu-rdc")
set(CMAKE_SYCL_DEVICE_LINK_OPTIONS
"-fsycl;-fsycl-link")
if(NOT CMAKE_SYCL_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
set(CMAKE_SYCL_DEVICE_LINK_OPTIONS_PIC "-shared")
set(CMAKE_SYCL_DEVICE_LINK_OPTIONS_WHOLE_ARCHIVE "-Wl,--whole-archive")
set(CMAKE_SYCL_DEVICE_LINK_OPTIONS_NO_WHOLE_ARCHIVE "-Wl,--no-whole-archive")
else()
set(CMAKE_SYCL_DEVICE_LINK_OPTIONS_WHOLE_ARCHIVE
"-Qoption,link,--whole-archive")
set(CMAKE_SYCL_DEVICE_LINK_OPTIONS_NO_WHOLE_ARCHIVE
"-Qoption,link,--no-whole-archive")
endif()
include(Compiler/IntelLLVM-SYCL-DeviceLink)
endif()
set(CMAKE_SYCL_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN
+4 -3
View File
@@ -202,6 +202,7 @@ function(_OPENMP_FLAG_CANDIDATES LANG)
set(OMP_FLAG_GNU "-fopenmp")
set(OMP_FLAG_LCC "-fopenmp")
set(OMP_FLAG_Clang "-fopenmp=libomp" "-fopenmp=libiomp5" "-fopenmp" "-Xclang -fopenmp")
set(OMP_FLAG_DPClang "${OMP_FLAG_Clang}")
set(OMP_FLAG_AppleClang "-Xclang -fopenmp")
set(OMP_FLAG_HP "+Oopenmp")
if(WIN32)
@@ -340,7 +341,7 @@ function(_OPENMP_GET_FLAGS LANG FLAG_MODE OPENMP_FLAG_VAR OPENMP_LIB_NAMES_VAR)
)
if(OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG} AND
NOT "${CMAKE_${LANG}_COMPILER_ID};${CMAKE_${LANG}_SIMULATE_ID}" STREQUAL "Clang;MSVC")
NOT "${CMAKE_${LANG}_COMPILER_ID};${CMAKE_${LANG}_SIMULATE_ID}" MATCHES "^(Clang|DPClang);MSVC$")
set("${OPENMP_FLAG_VAR}" "${OPENMP_FLAG}" PARENT_SCOPE)
if(CMAKE_${LANG}_VERBOSE_FLAG)
@@ -421,7 +422,7 @@ function(_OPENMP_GET_FLAGS LANG FLAG_MODE OPENMP_FLAG_VAR OPENMP_LIB_NAMES_VAR)
break()
elseif((CMAKE_${LANG}_COMPILER_ID STREQUAL "AppleClang"
AND CMAKE_${LANG}_COMPILER_VERSION VERSION_GREATER_EQUAL "7.0") OR
(CMAKE_${LANG}_COMPILER_ID STREQUAL "Clang" AND APPLE))
(CMAKE_${LANG}_COMPILER_ID MATCHES "^(Clang|DPClang)$" AND APPLE))
# Check for separate OpenMP library on AppleClang 7+
find_library(OpenMP_libomp_LIBRARY
@@ -497,7 +498,7 @@ function(_OPENMP_GET_FLAGS LANG FLAG_MODE OPENMP_FLAG_VAR OPENMP_LIB_NAMES_VAR)
break()
endif()
endif()
elseif(CMAKE_${LANG}_COMPILER_ID STREQUAL "Clang" AND WIN32)
elseif(CMAKE_${LANG}_COMPILER_ID MATCHES "^(Clang|DPClang)$" AND WIN32)
# Check for separate OpenMP library for Clang on Windows
find_library(OpenMP_libomp_LIBRARY
NAMES libomp libgomp libiomp5
@@ -3,7 +3,8 @@
macro(cmake_sycl_filter_implicit_libs variable)
foreach(library IN LISTS ${variable})
if(library MATCHES "^sycl([0-9]+d?|-devicelib-host)?([.]lib)?$")
get_filename_component(library_name "${library}" NAME)
if(library_name MATCHES "^(lib)?sycl([0-9]+d?|-devicelib-host)?([.]lib|[.]a|[.]so([.][0-9]+)*|[.]dylib)?$")
list(APPEND CMAKE_SYCL_RUNTIME_LIBRARY_LINK_OPTIONS_DEFAULT "${library}")
list(REMOVE_ITEM ${variable} "${library}")
endif()
+1
View File
@@ -0,0 +1 @@
include(Platform/Linux-Clang-C)
+1
View File
@@ -0,0 +1 @@
include(Platform/Linux-Clang-CXX)
+1 -1
View File
@@ -7,7 +7,7 @@ __windows_compiler_clang(SYCL)
if(CMAKE_SYCL_COMPILER_FRONTEND_VARIANT STREQUAL "GNU" AND
CMAKE_SYCL_SIMULATE_ID STREQUAL "MSVC")
unset(CMAKE_INCLUDE_SYSTEM_FLAG_SYCL_WARNING)
if(CMAKE_SYCL_COMPILER_ID MATCHES "^(Clang|IntelLLVM)$")
if(CMAKE_SYCL_COMPILER_ID MATCHES "^(Clang|DPClang|IntelLLVM)$")
# Let the driver apply CRT defines to the host compilation only and select
# the matching libsycl dependency, including the debug runtime.
set(CMAKE_SYCL_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded -fms-runtime-lib=static)
+2
View File
@@ -0,0 +1,2 @@
include(Platform/Windows-DPClang)
__windows_compiler_dpclang(C)
@@ -0,0 +1,2 @@
include(Platform/Windows-DPClang)
__windows_compiler_dpclang(CXX)
@@ -0,0 +1,2 @@
include(Platform/Windows-DPClang)
__windows_compiler_dpclang(SYCL)
+12
View File
@@ -0,0 +1,12 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file LICENSE.rst or https://cmake.org/licensing for details.
include_guard()
macro(__windows_compiler_dpclang lang)
set(_dpclang_${lang}_version "${CMAKE_${lang}_COMPILER_VERSION}")
set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_${lang}_COMPILER_VERSION_INTERNAL}")
include(Platform/Windows-Clang-${lang})
set(CMAKE_${lang}_COMPILER_VERSION "${_dpclang_${lang}_version}")
unset(_dpclang_${lang}_version)
endmacro()
+5 -2
View File
@@ -317,9 +317,12 @@ bool cmFastbuildNormalTargetGenerator::DetectBaseLinkerCommand(
linkFlags += cmJoin({ rpath, frameworkPath, linkPath }, " ");
cm::TargetType const targetType = this->GeneratorTarget->GetType();
// Add OS X version flags, if any.
std::string languageCompileFlags;
if (targetType == cm::TargetType::SHARED_LIBRARY ||
targetType == cm::TargetType::MODULE_LIBRARY) {
this->LocalCommonGenerator->AddLanguageFlagsForLinking(
languageCompileFlags, this->GeneratorTarget, linkLanguage, Config);
// Add OS X version flags, if any.
this->AppendOSXVerFlag(linkFlags, linkLanguage, "COMPATIBILITY", true);
this->AppendOSXVerFlag(linkFlags, linkLanguage, "CURRENT", false);
}
@@ -394,7 +397,7 @@ bool cmFastbuildNormalTargetGenerator::DetectBaseLinkerCommand(
FASTBUILD_DOLLAR_TAG "CompileDefineFlags" FASTBUILD_DOLLAR_TAG;
vars.Flags = targetFlags.c_str();
vars.LinkFlags = linkFlags.c_str();
vars.LanguageCompileFlags = "";
vars.LanguageCompileFlags = languageCompileFlags.c_str();
std::string const linker = this->GeneratorTarget->GetLinkerTool(Config);
vars.Linker = linker.c_str();
std::string const targetSupportPath = this->ConvertToFastbuildPath(
+4 -4
View File
@@ -2776,11 +2776,11 @@ void cmGeneratorTarget::AddSYCLDeviceTargetFlags(cmBuildStep compileOrLink,
if (!targets.empty() && !cmIsOff(targets)) {
std::string option;
if (acpp) {
option = "--acpp-targets=" + targets;
} else if (compiler == "IntelLLVM") {
option = "-fsycl-targets=" + cmJoin(cmList{ targets }, ",");
option = cmStrCat("--acpp-targets=", targets);
} else if (compiler == "IntelLLVM" || compiler == "DPClang") {
option = cmStrCat("-fsycl-targets=", cmJoin(cmList{ targets }, ","));
} else if (compiler == "Clang") {
option = "--offload-targets=" + cmJoin(cmList{ targets }, ",");
option = cmStrCat("--offload-targets=", cmJoin(cmList{ targets }, ","));
} else {
this->LocalGenerator->IssueMessage(
MessageType::FATAL_ERROR,
+5 -3
View File
@@ -87,8 +87,9 @@ constexpr auto FASTBUILD_FORCE_RESPONSE_FILE =
constexpr auto FASTBUILD_IDE_ARGS = "CMAKE_FASTBUILD_IDE_ARGS";
static std::map<std::string, std::string> const compilerIdToFastbuildFamily = {
{ "MSVC", "msvc" }, { "Clang", "clang" }, { "AppleClang", "clang" },
{ "GNU", "gcc" }, { "NVIDIA", "cuda-nvcc" }, { "Clang-cl", "clang-cl" },
{ "DPClang", "clang" }, { "MSVC", "msvc" }, { "Clang", "clang" },
{ "AppleClang", "clang" }, { "GNU", "gcc" }, { "NVIDIA", "cuda-nvcc" },
{ "Clang-cl", "clang-cl" },
};
static std::set<std::string> const supportedLanguages = { "C", "CXX", "CUDA",
@@ -999,7 +1000,8 @@ void cmGlobalFastbuildGenerator::AddCompiler(std::string const& language,
compilerDef.Executable = compilerLocation;
compilerDef.CmakeCompilerID =
mf->GetSafeDefinition(cmStrCat("CMAKE_", language, "_COMPILER_ID"));
if (compilerDef.CmakeCompilerID == "Clang" &&
if ((compilerDef.CmakeCompilerID == "Clang" ||
compilerDef.CmakeCompilerID == "DPClang") &&
mf->GetSafeDefinition(cmStrCat(
"CMAKE_", language, "_COMPILER_FRONTEND_VARIANT")) == "MSVC") {
compilerDef.CmakeCompilerID = "Clang-cl";
+2 -1
View File
@@ -76,7 +76,8 @@ namespace {
bool DetectGCCOnWindows(cm::string_view compilerId, cm::string_view simulateId,
cm::string_view compilerFrontendVariant)
{
return ((compilerId == "Clang"_s && compilerFrontendVariant == "GNU"_s) ||
return (((compilerId == "Clang"_s || compilerId == "DPClang"_s) &&
compilerFrontendVariant == "GNU"_s) ||
(simulateId != "MSVC"_s &&
(compilerId == "GNU"_s || compilerId == "QCC"_s ||
cmHasLiteralSuffix(compilerId, "Clang"))));
+1 -1
View File
@@ -2346,7 +2346,7 @@ void cmLocalGenerator::AddLanguageFlags(std::string& flags,
}
// Add VFS Overlay for Clang compilers
if (compilerId == "Clang") {
if (compilerId == "Clang" || compilerId == "DPClang") {
if (cmValue vfsOverlay =
this->Makefile->GetDefinition("CMAKE_CLANG_VFS_OVERLAY")) {
if (compilerSimulateId == "MSVC") {
@@ -10,11 +10,11 @@ add_executable(target_compile_options
"${CMAKE_CURRENT_SOURCE_DIR}/main.cpp"
)
target_compile_options(target_compile_options
PRIVATE $<$<CXX_COMPILER_ID:AppleClang,IBMClang,CrayClang,Clang,GNU,LCC>:-DMY_PRIVATE_DEFINE>
PRIVATE $<$<CXX_COMPILER_ID:AppleClang,IBMClang,CrayClang,Clang,DPClang,GNU,LCC>:-DMY_PRIVATE_DEFINE>
PUBLIC $<$<COMPILE_LANG_AND_ID:CXX,GNU,LCC>:-DMY_PUBLIC_DEFINE>
PUBLIC $<$<COMPILE_LANG_AND_ID:CXX,GNU,LCC,Clang,AppleClang,CrayClang,IBMClang>:-DMY_MUTLI_COMP_PUBLIC_DEFINE>
PUBLIC $<$<COMPILE_LANG_AND_ID:CXX,GNU,LCC,Clang,DPClang,AppleClang,CrayClang,IBMClang>:-DMY_MUTLI_COMP_PUBLIC_DEFINE>
INTERFACE $<$<CXX_COMPILER_ID:GNU,LCC>:-DMY_INTERFACE_DEFINE>
INTERFACE $<$<CXX_COMPILER_ID:GNU,LCC,Clang,AppleClang,CrayClang,IBMClang>:-DMY_MULTI_COMP_INTERFACE_DEFINE>
INTERFACE $<$<CXX_COMPILER_ID:GNU,LCC,Clang,DPClang,AppleClang,CrayClang,IBMClang>:-DMY_MULTI_COMP_INTERFACE_DEFINE>
)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|LCC")
@@ -50,7 +50,7 @@ if(CMAKE_GENERATOR MATCHES "Visual Studio")
endif()
target_compile_options(consumer
PRIVATE $<$<CXX_COMPILER_ID:GNU,LCC,Clang,AppleClang,CrayClang,IBMClang>:$<TARGET_PROPERTY:target_compile_options,INTERFACE_COMPILE_OPTIONS>>
PRIVATE $<$<CXX_COMPILER_ID:GNU,LCC,Clang,DPClang,AppleClang,CrayClang,IBMClang>:$<TARGET_PROPERTY:target_compile_options,INTERFACE_COMPILE_OPTIONS>>
)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|LCC")
@@ -55,7 +55,7 @@ endmacro()
# detailed features tables, not just meta-features
if (CMAKE_C_COMPILE_FEATURES)
if (NOT CMAKE_C_COMPILER_ID MATCHES "^(LCC|Cray|CrayClang|PGI|NVHPC|XL|XLClang|IBMClang|IntelLLVM|Fujitsu|FujitsuClang|OrangeC)$")
if (NOT CMAKE_C_COMPILER_ID MATCHES "^(LCC|Cray|CrayClang|PGI|NVHPC|XL|XLClang|IBMClang|IntelLLVM|DPClang|Fujitsu|FujitsuClang|OrangeC)$")
set(C_expected_features ${CMAKE_C_COMPILE_FEATURES})
list(FILTER C_expected_features EXCLUDE REGEX "^c_std_[0-9][0-9]")
endif()
@@ -98,7 +98,7 @@ if (C_expected_features)
endif()
if (CMAKE_CXX_COMPILE_FEATURES)
if (NOT CMAKE_CXX_COMPILER_ID MATCHES "^(LCC|Cray|CrayClang|PGI|NVHPC|XL|XLClang|IBMClang|IntelLLVM|Fujitsu|FujitsuClang|OrangeC)$")
if (NOT CMAKE_CXX_COMPILER_ID MATCHES "^(LCC|Cray|CrayClang|PGI|NVHPC|XL|XLClang|IBMClang|IntelLLVM|DPClang|Fujitsu|FujitsuClang|OrangeC)$")
set(CXX_expected_features ${CMAKE_CXX_COMPILE_FEATURES})
list(FILTER CXX_expected_features EXCLUDE REGEX "^cxx_std_[0-9][0-9]")
endif()
+1 -1
View File
@@ -1133,7 +1133,7 @@ def gen_check_build_system_targets(c, g, inSource):
e["compileGroups"] = apple_exe_framework["compileGroups"]
e["link"] = apple_exe_framework["link"]
if args.cxx_compiler_id in ['Clang', 'AppleClang', 'LCC', 'GNU', 'Intel', 'IntelLLVM', 'MSVC', 'Embarcadero', 'CrayClang', 'IBMClang'] and g["name"] != "Xcode":
if args.cxx_compiler_id in ['Clang', 'AppleClang', 'LCC', 'GNU', 'Intel', 'IntelLLVM', 'DPClang', 'MSVC', 'Embarcadero', 'CrayClang', 'IBMClang'] and g["name"] != "Xcode":
for e in expected:
if e["name"] == "cxx_exe":
if matches(g["name"], "^(Visual Studio |Ninja Multi-Config)"):
@@ -17,7 +17,7 @@ foreach(i RANGE 0 ${last})
include("${RunCMake_TEST_BINARY_DIR}/targets.cmake")
if(compiler STREQUAL "AdaptiveCpp")
set(option "--acpp-targets=${expected_targets}")
elseif(compiler STREQUAL "IntelLLVM")
elseif(compiler MATCHES "^(DPClang|IntelLLVM)$")
string(REPLACE ";" "," value "${expected_targets}")
set(option "-fsycl-targets=${value}")
else()
+1 -1
View File
@@ -7,7 +7,7 @@ set(CMAKE_BUILD_TYPE Debug)
if(CMAKE_SYCL_COMPILER_ID STREQUAL "Clang")
set(device_targets_selected spirv64-unknown-unknown)
set(device_targets_baseline spirv32-unknown-unknown)
elseif(CMAKE_SYCL_COMPILER_ID STREQUAL "IntelLLVM")
elseif(CMAKE_SYCL_COMPILER_ID MATCHES "^(DPClang|IntelLLVM)$")
set(device_targets_selected "spir64;intel_gpu_pvc")
set(device_targets_baseline spir64)
elseif(CMAKE_SYCL_COMPILER_ID STREQUAL "AdaptiveCpp")
@@ -2,7 +2,7 @@ set(CMAKE_EXPERIMENTAL_SYCL "c0d1fb10-2ece-420e-9d29-7d7f2b300f25")
enable_language(SYCL)
if(CMAKE_SYCL_COMPILER_ID STREQUAL "Clang")
set(CMAKE_SYCL_DEVICE_TARGETS spirv64-unknown-unknown)
elseif(CMAKE_SYCL_COMPILER_ID STREQUAL "IntelLLVM")
elseif(CMAKE_SYCL_COMPILER_ID MATCHES "^(DPClang|IntelLLVM)$")
set(CMAKE_SYCL_DEVICE_TARGETS spir64)
elseif(CMAKE_SYCL_COMPILER_ID STREQUAL "AdaptiveCpp")
set(CMAKE_SYCL_DEVICE_TARGETS omp.accelerated)
+3 -3
View File
@@ -3,9 +3,9 @@ set(CMAKE_EXPERIMENTAL_SYCL "c0d1fb10-2ece-420e-9d29-7d7f2b300f25")
project(Complex CXX SYCL)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
include(Test.cmake)
# Remove gate when IntelLLVM -fsycl-link bug is fixed
if(CMAKE_SYCL_COMPILER_ID STREQUAL "IntelLLVM")
sycl_not_supported("IntelLLVM -fsycl-link cannot produce a single device-link output")
# Remove gate when DPC++ archive device finalization is fixed.
if(CMAKE_SYCL_COMPILER_ID MATCHES "^(DPClang|IntelLLVM)$")
sycl_not_supported("${CMAKE_SYCL_COMPILER_ID} -fsycl-link cannot finalize SYCL archives")
return()
endif()
if(NOT CMAKE_SYCL_COMPILE_OPTIONS_SEPARABLE_COMPILATION_ON)
@@ -2,9 +2,9 @@ cmake_minimum_required(VERSION 4.4)
set(CMAKE_EXPERIMENTAL_SYCL "c0d1fb10-2ece-420e-9d29-7d7f2b300f25")
project(CircularLinkLine SYCL CXX)
include(../utils/Test.cmake)
# Remove gate when IntelLLVM -fsycl-link bug is fixed
if(CMAKE_SYCL_COMPILER_ID STREQUAL "IntelLLVM")
sycl_not_supported("IntelLLVM -fsycl-link cannot produce a single device-link output")
# Remove gate when DPC++ archive device finalization is fixed.
if(CMAKE_SYCL_COMPILER_ID MATCHES "^(DPClang|IntelLLVM)$")
sycl_not_supported("${CMAKE_SYCL_COMPILER_ID} -fsycl-link cannot finalize SYCL archives")
return()
endif()
if(NOT CMAKE_SYCL_COMPILE_OPTIONS_SEPARABLE_COMPILATION_ON OR
@@ -2,9 +2,9 @@ cmake_minimum_required(VERSION 4.4)
set(CMAKE_EXPERIMENTAL_SYCL "c0d1fb10-2ece-420e-9d29-7d7f2b300f25")
project(ResolveDeviceSymbols CXX SYCL)
include(../utils/Test.cmake)
# Remove gate when IntelLLVM -fsycl-link bug is fixed
if(CMAKE_SYCL_COMPILER_ID STREQUAL "IntelLLVM")
sycl_not_supported("IntelLLVM -fsycl-link cannot produce a single device-link output")
# Remove gate when DPC++ archive device finalization is fixed.
if(CMAKE_SYCL_COMPILER_ID MATCHES "^(DPClang|IntelLLVM)$")
sycl_not_supported("${CMAKE_SYCL_COMPILER_ID} -fsycl-link cannot finalize SYCL archives")
return()
endif()
@@ -2,9 +2,9 @@ cmake_minimum_required(VERSION 4.4)
set(CMAKE_EXPERIMENTAL_SYCL "c0d1fb10-2ece-420e-9d29-7d7f2b300f25")
project(SeparateCompilation SYCL)
include(../utils/Test.cmake)
# Remove gate when IntelLLVM -fsycl-link bug is fixed
if(CMAKE_SYCL_COMPILER_ID STREQUAL "IntelLLVM")
sycl_not_supported("IntelLLVM -fsycl-link cannot produce a single device-link output")
# Remove gate when DPC++ archive device finalization is fixed.
if(CMAKE_SYCL_COMPILER_ID MATCHES "^(DPClang|IntelLLVM)$")
sycl_not_supported("${CMAKE_SYCL_COMPILER_ID} -fsycl-link cannot finalize SYCL archives")
return()
endif()