blob: 3e22a6e1afc1fc913e746ae97d6da982e29cfc08 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
if("x${CMAKE_Fortran_SIMULATE_ID}" STREQUAL "xGNU")
include(Platform/Windows-GNU)
__windows_compiler_gnu(Fortran)
elseif("x${CMAKE_Fortran_SIMULATE_ID}" STREQUAL "xMSVC")
include(Platform/Windows-MSVC)
__windows_compiler_msvc(Fortran)
# FIXME(LLVMFlang): It does not provides MSVC runtime library selection flags.
# It should be given a flag like classic Flang's `-Xclang --dependent-lib=`, or a
# dedicated flag to select among multiple `Fortran*.lib` runtime library variants
# that each depend on a different MSVC runtime library. For now, LLVMFlang's
# `Fortran*.lib` runtime libraries hard-code use of msvcrt (MultiThreadedDLL),
# so we link to it ourselves.
set(_LLVMFlang_LINK_RUNTIME "-defaultlib:msvcrt")
set(CMAKE_Fortran_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded "")
set(CMAKE_Fortran_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL "")
set(CMAKE_Fortran_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug "")
set(CMAKE_Fortran_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL "")
# FIXME(LLVMFlang): It does not provide all debug information format flags or predefines.
# It should be given a flag to enable Embedded debug information like MSVC -Z7.
#set(CMAKE_Fortran_COMPILE_OPTIONS_MSVC_DEBUG_INFORMATION_FORMAT_Embedded) # not supported by LLVMFlang
#set(CMAKE_Fortran_COMPILE_OPTIONS_MSVC_DEBUG_INFORMATION_FORMAT_EditAndContinue) # not supported by LLVMFlang
set(CMAKE_Fortran_COMPILE_OPTIONS_MSVC_DEBUG_INFORMATION_FORMAT_ProgramDatabase "-g")
set(CMAKE_Fortran_COMPILE_OBJECT "<CMAKE_Fortran_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
if(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT_DEFAULT)
set(_g "")
else()
set(_g " -g")
endif()
string(APPEND CMAKE_Fortran_FLAGS_DEBUG_INIT "${_g}")
string(APPEND CMAKE_Fortran_FLAGS_RELEASE_INIT "")
string(APPEND CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT "${_g}")
string(APPEND CMAKE_Fortran_FLAGS_MINSIZEREL_INIT "")
unset(_g)
# We link with lld-link.exe instead of the compiler driver, so explicitly
# pass implicit link information previously detected from the compiler.
set(_LLVMFlang_LINK_DIRS "${CMAKE_Fortran_IMPLICIT_LINK_DIRECTORIES}")
list(TRANSFORM _LLVMFlang_LINK_DIRS PREPEND "-libpath:\"")
list(TRANSFORM _LLVMFlang_LINK_DIRS APPEND "\"")
string(JOIN " " _LLVMFlang_LINK_DIRS ${_LLVMFlang_LINK_DIRS})
string(JOIN " " _LLVMFlang_LINK_LIBS ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES})
foreach(v IN ITEMS
CMAKE_Fortran_LINK_EXECUTABLE
CMAKE_Fortran_CREATE_SHARED_LIBRARY
CMAKE_Fortran_CREATE_SHARED_MODULE
)
string(APPEND "${v}" " ${_LLVMFlang_LINK_DIRS} ${_LLVMFlang_LINK_LIBS} ${_LLVMFlang_LINK_RUNTIME}")
endforeach()
unset(_LLVMFlang_LINK_DIRS)
unset(_LLVMFlang_LINK_LIBS)
unset(_LLVMFlang_LINK_RUNTIME)
else()
message(FATAL_ERROR "LLVMFlang target ABI unrecognized: ${CMAKE_Fortran_SIMULATE_ID}")
endif()
|