Skip to content

Commit 628f859

Browse files
Modify the code to patch Windows-IntelLLVM.cmake for different cmake versions
1 parent 075c77d commit 628f859

File tree

3 files changed

+71
-4
lines changed

3 files changed

+71
-4
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2+
# file Copyright.txt or https://cmake.org/licensing for details.
3+
4+
5+
# This module is shared by multiple languages; use include blocker.
6+
if(__WINDOWS_INTEL_LLVM)
7+
return()
8+
endif()
9+
set(__WINDOWS_INTEL_LLVM 1)
10+
11+
# Platform/Windows-MSVC adds some linking options icx/ifx do not understand,
12+
# but that need to be passed to the linker. Wrap all the linking options from
13+
# Platform/Windows-MSVC so that the compiler will hand them off to the linker
14+
# without interpreting them.
15+
16+
# Save original CMAKE_${t}_LINKER_FLAGS_INIT
17+
foreach(t EXE SHARED MODULE STATIC)
18+
set(_saved_cmake_${t}_linker_flags_init ${CMAKE_${t}_LINKER_FLAGS_INIT})
19+
set(CMAKE_${t}_LINKER_FLAGS_INIT "")
20+
endforeach()
21+
include(Platform/Windows-MSVC)
22+
# Wrap linker flags from Windows-MSVC
23+
set(_IntelLLVM_LINKER_WRAPPER_FLAG "/Qoption,link,")
24+
set(_IntelLLVM_LINKER_WRAPPER_FLAG_SEP ",")
25+
foreach(t EXE SHARED MODULE STATIC)
26+
set(_wrapped_linker_flags "")
27+
foreach(flag ${CMAKE_${t}_LINKER_FLAGS_INIT})
28+
string(STRIP ${flag} flag)
29+
list(APPEND _wrapped_linker_flags "${_IntelLLVM_LINKER_WRAPPER_FLAG}${flag}")
30+
endforeach()
31+
set(CMAKE_${t}_LINKER_FLAGS_INIT "")
32+
list(APPEND CMAKE_${t}_LINKER_FLAGS_INIT
33+
${_saved_cmake_${t}_linker_flags_init} ${_wrapped_linker_flags})
34+
endforeach()
35+
36+
macro(__windows_compiler_intel lang)
37+
__windows_compiler_msvc(${lang})
38+
39+
set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "${_IntelLLVM_LINKER_WRAPPER_FLAG}")
40+
set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP "${_IntelLLVM_LINKER_WRAPPER_FLAG_SEP}")
41+
set(CMAKE_${lang}_CREATE_WIN32_EXE "${CMAKE_${lang}_LINKER_WRAPPER_FLAG}/subsystem:windows")
42+
set(CMAKE_${lang}_CREATE_CONSOLE_EXE "${CMAKE_${lang}_LINKER_WRAPPER_FLAG}/subsystem:console")
43+
set(CMAKE_LINK_DEF_FILE_FLAG "${CMAKE_${lang}_LINKER_WRAPPER_FLAG}/DEF:")
44+
set(CMAKE_LIBRARY_PATH_FLAG "${CMAKE_${lang}_LINKER_WRAPPER_FLAG}/LIBPATH:")
45+
46+
# Features for LINK_LIBRARY generator expression
47+
if(MSVC_VERSION GREATER "1900")
48+
## WHOLE_ARCHIVE: Force loading all members of an archive
49+
set(CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE "LINKER:/WHOLEARCHIVE:<LIBRARY>")
50+
set(CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE_SUPPORTED TRUE)
51+
endif()
52+
53+
set(CMAKE_${lang}_LINK_EXECUTABLE
54+
"${_CMAKE_VS_LINK_EXE}<CMAKE_${lang}_COMPILER> ${CMAKE_CL_NOLOGO} <CMAKE_${lang}_LINK_FLAGS> <OBJECTS> ${CMAKE_START_TEMP_FILE} <LINK_FLAGS> <LINK_LIBRARIES> /link /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} ${CMAKE_END_TEMP_FILE}")
55+
set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
56+
"${_CMAKE_VS_LINK_DLL}<CMAKE_${lang}_COMPILER> ${CMAKE_CL_NOLOGO} <CMAKE_${lang}_LINK_FLAGS> <OBJECTS> ${CMAKE_START_TEMP_FILE} -LD <LINK_FLAGS> <LINK_LIBRARIES> -link /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} ${CMAKE_END_TEMP_FILE}")
57+
set(CMAKE_${lang}_CREATE_SHARED_MODULE ${CMAKE_${lang}_CREATE_SHARED_LIBRARY})
58+
if (NOT "${lang}" STREQUAL "Fortran" OR CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 2022.1)
59+
# The Fortran driver does not support -fuse-ld=llvm-lib before compiler version 2022.1
60+
set(CMAKE_${lang}_CREATE_STATIC_LIBRARY
61+
"<CMAKE_${lang}_COMPILER> ${CMAKE_CL_NOLOGO} <CMAKE_${lang}_LINK_FLAGS> <OBJECTS> ${CMAKE_START_TEMP_FILE} -fuse-ld=llvm-lib -o <TARGET> <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
62+
endif()
63+
64+
set(CMAKE_DEPFILE_FLAGS_${lang} "-QMD -QMT <DEP_TARGET> -QMF <DEP_FILE>")
65+
set(CMAKE_${lang}_DEPFILE_FORMAT gcc)
66+
endmacro()

conda-recipe/bld.bat

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@ set "INCLUDE=%BUILD_PREFIX%\include;%INCLUDE%"
66
"%PYTHON%" setup.py clean --all
77
set "SKBUILD_ARGS=-G Ninja -- -DCMAKE_C_COMPILER:PATH=icx -DCMAKE_CXX_COMPILER:PATH=icx -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON"
88

9-
FOR %%V IN (14.0.0 14 15.0.0 15 16.0.0 16) DO @(
9+
FOR %%V IN (14.0.0 14 15.0.0 15 16.0.0 16 17.0.0 17) DO @(
1010
REM set DIR_HINT if directory exists
1111
IF EXIST "%BUILD_PREFIX%\Library\lib\clang\%%V\" (
1212
SET "SYCL_INCLUDE_DIR_HINT=%BUILD_PREFIX%\Library\lib\clang\%%V"
1313
)
1414
)
1515

16-
set "PLATFORM_DIR=%PREFIX%\Library\share\cmake-3.22\Modules\Platform"
16+
set "PATCHED_CMAKE_VERSION=3.26"
17+
set "PLATFORM_DIR=%PREFIX%\Library\share\cmake-%PATCHED_CMAKE_VERSION%\Modules\Platform"
1718
set "FN=Windows-IntelLLVM.cmake"
1819

1920
rem Save the original file, and copy patched file to
@@ -22,7 +23,7 @@ if EXIST "%PLATFORM_DIR%" (
2223
dir "%PLATFORM_DIR%\%FN%"
2324
copy /Y "%PLATFORM_DIR%\%FN%" .
2425
if errorlevel 1 exit 1
25-
copy /Y .github\workflows\Windows-IntelLLVM.cmake "%PLATFORM_DIR%"
26+
copy /Y ".github\workflows\Windows-IntelLLVM_%PATCHED_CMAKE_VERSION%.cmake" "%PLATFORM_DIR%\%FN%"
2627
if errorlevel 1 exit 1
2728
)
2829

@@ -40,6 +41,6 @@ if NOT "%WHEELS_OUTPUT_FOLDER%"=="" (
4041

4142
if EXIST "%PLATFORM_DIR%" (
4243
rem copy back
43-
copy /Y "%FN%" "%PLATFORM_DIR%"
44+
copy /Y "%FN%" "%PLATFORM_DIR%\%FN%"
4445
if errorlevel 1 exit 1
4546
)

0 commit comments

Comments
 (0)