From cdde0e959a2f371764c1e28bb1f310e1030a79f5 Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Wed, 24 May 2023 14:37:48 -0500 Subject: [PATCH] Modify the code to patch Windows-IntelLLVM.cmake for different cmake versions --- ...LVM.cmake => Windows-IntelLLVM_3.22.cmake} | 0 .../workflows/Windows-IntelLLVM_3.26.cmake | 66 +++++++++++++++++++ conda-recipe/bld.bat | 18 ++--- 3 files changed, 71 insertions(+), 13 deletions(-) rename .github/workflows/{Windows-IntelLLVM.cmake => Windows-IntelLLVM_3.22.cmake} (100%) mode change 100755 => 100644 create mode 100644 .github/workflows/Windows-IntelLLVM_3.26.cmake diff --git a/.github/workflows/Windows-IntelLLVM.cmake b/.github/workflows/Windows-IntelLLVM_3.22.cmake old mode 100755 new mode 100644 similarity index 100% rename from .github/workflows/Windows-IntelLLVM.cmake rename to .github/workflows/Windows-IntelLLVM_3.22.cmake diff --git a/.github/workflows/Windows-IntelLLVM_3.26.cmake b/.github/workflows/Windows-IntelLLVM_3.26.cmake new file mode 100644 index 00000000000..eac3f0a9a82 --- /dev/null +++ b/.github/workflows/Windows-IntelLLVM_3.26.cmake @@ -0,0 +1,66 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + + +# This module is shared by multiple languages; use include blocker. +if(__WINDOWS_INTEL_LLVM) + return() +endif() +set(__WINDOWS_INTEL_LLVM 1) + +# Platform/Windows-MSVC adds some linking options icx/ifx do not understand, +# but that need to be passed to the linker. Wrap all the linking options from +# Platform/Windows-MSVC so that the compiler will hand them off to the linker +# without interpreting them. + +# Save original CMAKE_${t}_LINKER_FLAGS_INIT +foreach(t EXE SHARED MODULE STATIC) + set(_saved_cmake_${t}_linker_flags_init ${CMAKE_${t}_LINKER_FLAGS_INIT}) + set(CMAKE_${t}_LINKER_FLAGS_INIT "") +endforeach() +include(Platform/Windows-MSVC) +# Wrap linker flags from Windows-MSVC +set(_IntelLLVM_LINKER_WRAPPER_FLAG "/Qoption,link,") +set(_IntelLLVM_LINKER_WRAPPER_FLAG_SEP ",") +foreach(t EXE SHARED MODULE STATIC) + set(_wrapped_linker_flags "") + foreach(flag ${CMAKE_${t}_LINKER_FLAGS_INIT}) + string(STRIP ${flag} flag) + list(APPEND _wrapped_linker_flags "${_IntelLLVM_LINKER_WRAPPER_FLAG}${flag}") + endforeach() + set(CMAKE_${t}_LINKER_FLAGS_INIT "") + list(APPEND CMAKE_${t}_LINKER_FLAGS_INIT + ${_saved_cmake_${t}_linker_flags_init} ${_wrapped_linker_flags}) +endforeach() + +macro(__windows_compiler_intel lang) + __windows_compiler_msvc(${lang}) + + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "${_IntelLLVM_LINKER_WRAPPER_FLAG}") + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP "${_IntelLLVM_LINKER_WRAPPER_FLAG_SEP}") + set(CMAKE_${lang}_CREATE_WIN32_EXE "${CMAKE_${lang}_LINKER_WRAPPER_FLAG}/subsystem:windows") + set(CMAKE_${lang}_CREATE_CONSOLE_EXE "${CMAKE_${lang}_LINKER_WRAPPER_FLAG}/subsystem:console") + set(CMAKE_LINK_DEF_FILE_FLAG "${CMAKE_${lang}_LINKER_WRAPPER_FLAG}/DEF:") + set(CMAKE_LIBRARY_PATH_FLAG "${CMAKE_${lang}_LINKER_WRAPPER_FLAG}/LIBPATH:") + + # Features for LINK_LIBRARY generator expression + if(MSVC_VERSION GREATER "1900") + ## WHOLE_ARCHIVE: Force loading all members of an archive + set(CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE "LINKER:/WHOLEARCHIVE:") + set(CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE_SUPPORTED TRUE) + endif() + + set(CMAKE_${lang}_LINK_EXECUTABLE + "${_CMAKE_VS_LINK_EXE} ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} /link /out: /implib: /pdb: /version:.${_PLATFORM_LINK_FLAGS} ${CMAKE_END_TEMP_FILE}") + set(CMAKE_${lang}_CREATE_SHARED_LIBRARY + "${_CMAKE_VS_LINK_DLL} ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} -LD -link /out: /implib: /pdb: /version:.${_PLATFORM_LINK_FLAGS} ${CMAKE_END_TEMP_FILE}") + set(CMAKE_${lang}_CREATE_SHARED_MODULE ${CMAKE_${lang}_CREATE_SHARED_LIBRARY}) + if (NOT "${lang}" STREQUAL "Fortran" OR CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 2022.1) + # The Fortran driver does not support -fuse-ld=llvm-lib before compiler version 2022.1 + set(CMAKE_${lang}_CREATE_STATIC_LIBRARY + " ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} -fuse-ld=llvm-lib -o ${CMAKE_END_TEMP_FILE}") + endif() + + set(CMAKE_DEPFILE_FLAGS_${lang} "-QMD -QMT -QMF ") + set(CMAKE_${lang}_DEPFILE_FORMAT gcc) +endmacro() diff --git a/conda-recipe/bld.bat b/conda-recipe/bld.bat index bef5d19d85f..9398b115175 100644 --- a/conda-recipe/bld.bat +++ b/conda-recipe/bld.bat @@ -22,23 +22,15 @@ set "SKBUILD_ARGS=-G Ninja -- -DCMAKE_C_COMPILER:PATH=icx -DCMAKE_CXX_COMPILER:P set "SKBUILD_ARGS=%SKBUILD_ARGS% -DDPCTL_MODULE_PATH:PATH=%DPCTL_CMAKE_DIR% " set "SKBUILD_ARGS=%SKBUILD_ARGS% -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON" -FOR %%V IN (14.0.0 14 15.0.0 15 16.0.0 16) DO @( +FOR %%V IN (14.0.0 14 15.0.0 15 16.0.0 16 17.0.0 17) DO @( REM set DIR_HINT if directory exists IF EXIST "%BUILD_PREFIX%\Library\lib\clang\%%V\" ( SET "SYCL_INCLUDE_DIR_HINT=%BUILD_PREFIX%\Library\lib\clang\%%V" ) ) -for /f "tokens=*" %%p in ('where cmake') do set CMAKE_PATH=%%p & goto :continue -:continue -for /f "tokens=3" %%a in ('%CMAKE_PATH% --version') do set CMAKE_VERSION=%%a & goto :continue -:continue -for /f "tokens=1-2 delims=." %%a in ("%CMAKE_VERSION%") do ( - set CMAKE_VERSION_MAJOR=%%a - set CMAKE_VERSION_MINOR=%%b -) - -set "PLATFORM_DIR=%PREFIX%\Library\share\cmake-%CMAKE_VERSION_MAJOR%.%CMAKE_VERSION_MINOR%\Modules\Platform" +set "PATCHED_CMAKE_VERSION=3.26" +set "PLATFORM_DIR=%PREFIX%\Library\share\cmake-%PATCHED_CMAKE_VERSION%\Modules\Platform" set "FN=Windows-IntelLLVM.cmake" rem Save the original file, and copy patched file to @@ -47,7 +39,7 @@ if EXIST "%PLATFORM_DIR%" ( dir "%PLATFORM_DIR%\%FN%" copy /Y "%PLATFORM_DIR%\%FN%" . if errorlevel 1 exit 1 - copy /Y .github\workflows\Windows-IntelLLVM.cmake "%PLATFORM_DIR%" + copy /Y ".github\workflows\Windows-IntelLLVM_%PATCHED_CMAKE_VERSION%.cmake" "%PLATFORM_DIR%\%FN%" if errorlevel 1 exit 1 ) @@ -65,6 +57,6 @@ if NOT "%WHEELS_OUTPUT_FOLDER%"=="" ( rem copy back if EXIST "%PLATFORM_DIR%" ( - copy /Y "%FN%" "%PLATFORM_DIR%" + copy /Y "%FN%" "%PLATFORM_DIR%\%FN%" if errorlevel 1 exit 1 )