11# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
22# file Copyright.txt or https://cmake.org/licensing for details.
33
4-
54# This module is shared by multiple languages; use include blocker.
65if (__WINDOWS_INTEL_LLVM)
7- return ()
6+ return ()
87endif ()
98set (__WINDOWS_INTEL_LLVM 1)
109
@@ -15,52 +14,65 @@ set(__WINDOWS_INTEL_LLVM 1)
1514
1615# Save original CMAKE_${t}_LINKER_FLAGS_INIT
1716foreach (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 "" )
17+ set (_saved_cmake_${t} _linker_flags_init ${CMAKE_${t} _LINKER_FLAGS_INIT})
18+ set (CMAKE_${t} _LINKER_FLAGS_INIT "" )
2019endforeach ()
2120include (Platform/Windows-MSVC )
2221# Wrap linker flags from Windows-MSVC
2322set (_IntelLLVM_LINKER_WRAPPER_FLAG "/Qoption,link," )
2423set (_IntelLLVM_LINKER_WRAPPER_FLAG_SEP "," )
2524foreach (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} )
25+ set (_wrapped_linker_flags "" )
26+ foreach (flag ${CMAKE_${t} _LINKER_FLAGS_INIT})
27+ string (STRIP ${flag} flag)
28+ list (APPEND _wrapped_linker_flags "${_IntelLLVM_LINKER_WRAPPER_FLAG}${flag} " )
29+ endforeach ()
30+ set (CMAKE_${t} _LINKER_FLAGS_INIT "" )
31+ list (
32+ APPEND CMAKE_${t} _LINKER_FLAGS_INIT
33+ ${_saved_cmake_${t} _linker_flags_init}
34+ ${_wrapped_linker_flags}
35+ )
3436endforeach ()
3537
3638macro (__windows_compiler_intel lang)
37- __windows_compiler_msvc(${lang} )
39+ __windows_compiler_msvc(${lang} )
3840
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:" )
41+ set (CMAKE_${lang} _LINKER_WRAPPER_FLAG "${_IntelLLVM_LINKER_WRAPPER_FLAG} " )
42+ set (CMAKE_${lang} _LINKER_WRAPPER_FLAG_SEP "${_IntelLLVM_LINKER_WRAPPER_FLAG_SEP} " )
43+ set (CMAKE_${lang} _CREATE_WIN32_EXE
44+ "${CMAKE_${lang} _LINKER_WRAPPER_FLAG}/subsystem:windows"
45+ )
46+ set (CMAKE_${lang} _CREATE_CONSOLE_EXE
47+ "${CMAKE_${lang} _LINKER_WRAPPER_FLAG}/subsystem:console"
48+ )
49+ set (CMAKE_LINK_DEF_FILE_FLAG "${CMAKE_${lang} _LINKER_WRAPPER_FLAG}/DEF:" )
50+ set (CMAKE_LIBRARY_PATH_FLAG "${CMAKE_${lang} _LINKER_WRAPPER_FLAG}/LIBPATH:" )
4551
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+ # Features for LINK_LIBRARY generator expression
53+ if (MSVC_VERSION GREATER "1900" )
54+ ## WHOLE_ARCHIVE: Force loading all members of an archive
55+ set (CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE "LINKER:/WHOLEARCHIVE:<LIBRARY>" )
56+ set (CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE_SUPPORTED TRUE )
57+ endif ()
5258
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 ()
59+ set (CMAKE_${lang} _LINK_EXECUTABLE
60+ "${_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} "
61+ )
62+ set (CMAKE_${lang} _CREATE_SHARED_LIBRARY
63+ "${_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} "
64+ )
65+ set (CMAKE_${lang} _CREATE_SHARED_MODULE ${CMAKE_${lang} _CREATE_SHARED_LIBRARY})
66+ if (
67+ NOT "${lang} " STREQUAL "Fortran"
68+ OR CMAKE_${lang} _COMPILER_VERSION VERSION_GREATER_EQUAL 2022.1
69+ )
70+ # The Fortran driver does not support -fuse-ld=llvm-lib before compiler version 2022.1
71+ set (CMAKE_${lang} _CREATE_STATIC_LIBRARY
72+ "<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} "
73+ )
74+ endif ()
6375
64- set (CMAKE_DEPFILE_FLAGS_${lang} "-QMD -QMT <DEP_TARGET> -QMF <DEP_FILE>" )
65- set (CMAKE_${lang} _DEPFILE_FORMAT gcc)
76+ set (CMAKE_DEPFILE_FLAGS_${lang} "-QMD -QMT <DEP_TARGET> -QMF <DEP_FILE>" )
77+ set (CMAKE_${lang} _DEPFILE_FORMAT gcc)
6678endmacro ()
0 commit comments