Skip to content

Commit 6c03632

Browse files
committed
Add shared version of CufRuntime
1 parent e355da3 commit 6c03632

File tree

7 files changed

+237
-76
lines changed

7 files changed

+237
-76
lines changed

flang-rt/CMakeLists.txt

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,9 @@ else ()
109109
# be installed there using the same prefix. This is to not have a difference
110110
# between bootstrap and standalone runtimes builds.
111111
set(FLANG_RT_OUTPUT_RESOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
112-
set(FLANG_RT_INSTALL_RESOURCE_PATH "lib/clang/${LLVM_VERSION_MAJOR}")
112+
set(FLANG_RT_INSTALL_RESOURCE_PATH "lib${LLVM_LIBDIR_SUFFIX}/clang/${LLVM_VERSION_MAJOR}")
113113

114-
extend_path(FLANG_RT_OUTPUT_RESOURCE_LIB_DIR "${FLANG_RT_OUTPUT_RESOURCE_DIR}" "lib")
114+
extend_path(FLANG_RT_OUTPUT_RESOURCE_LIB_DIR "${FLANG_RT_OUTPUT_RESOURCE_DIR}" "lib${LLVM_LIBDIR_SUFFIX}")
115115
endif ()
116116
extend_path(FLANG_RT_INSTALL_RESOURCE_LIB_PATH "${FLANG_RT_INSTALL_RESOURCE_PATH}" "${toolchain_lib_subdir}")
117117
cmake_path(NORMAL_PATH FLANG_RT_OUTPUT_RESOURCE_DIR)
@@ -177,6 +177,23 @@ elseif (FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "OpenMP")
177177
set(FLANG_RT_DEVICE_ARCHITECTURES "all" CACHE STRING
178178
"List of OpenMP device architectures to be used to compile the Fortran runtime (e.g. 'gfx1103;sm_90')"
179179
)
180+
181+
if (FLANG_RT_DEVICE_ARCHITECTURES STREQUAL "all")
182+
# TODO: support auto detection on the build system.
183+
set(all_amdgpu_architectures
184+
"gfx700;gfx701;gfx801;gfx803;gfx900;gfx902;gfx906"
185+
"gfx908;gfx90a;gfx90c;gfx940;gfx1010;gfx1030"
186+
"gfx1031;gfx1032;gfx1033;gfx1034;gfx1035;gfx1036"
187+
"gfx1100;gfx1101;gfx1102;gfx1103;gfx1150;gfx1151"
188+
"gfx1152;gfx1153")
189+
set(all_nvptx_architectures
190+
"sm_35;sm_37;sm_50;sm_52;sm_53;sm_60;sm_61;sm_62"
191+
"sm_70;sm_72;sm_75;sm_80;sm_86;sm_89;sm_90")
192+
set(all_gpu_architectures
193+
"${all_amdgpu_architectures};${all_nvptx_architectures}")
194+
set(FLANG_RT_DEVICE_ARCHITECTURES ${all_gpu_architectures})
195+
endif()
196+
list(REMOVE_DUPLICATES FLANG_RT_DEVICE_ARCHITECTURES)
180197
else ()
181198
message(FATAL_ERROR "Invalid value '${FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT}' for FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT; must be empty, 'CUDA', or 'OpenMP'")
182199
endif ()

flang-rt/cmake/modules/AddFlangRT.cmake

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,14 @@
2828
# Library requires include path and linking to LLVM's Support component
2929
# ADDITIONAL_HEADERS
3030
# May specify header files for IDE generators.
31+
# INCLUDE_DIRECTORIES
32+
# Additional include_directories for all added targets
33+
# TARGET_PROPERTIES
34+
# Set target properties of all added targets
3135
# )
3236
function (add_flangrt_library name)
3337
set(options STATIC SHARED OBJECT INSTALL_WITH_TOOLCHAIN EXCLUDE_FROM_ALL LINK_TO_LLVM)
34-
set(multiValueArgs ADDITIONAL_HEADERS)
38+
set(multiValueArgs ADDITIONAL_HEADERS INCLUDE_DIRECTORIES TARGET_PROPERTIES)
3539
cmake_parse_arguments(ARG
3640
"${options}"
3741
""
@@ -252,6 +256,10 @@ function (add_flangrt_library name)
252256
target_link_libraries(${tgtname} PUBLIC ${llvm_libs})
253257
target_include_directories(${tgtname} PUBLIC ${LLVM_INCLUDE_DIRS})
254258
endif ()
259+
260+
if (ARG_INCLUDE_DIRECTORIES)
261+
target_include_directories(${tgtname} ${ARG_INCLUDE_DIRECTORIES})
262+
endif ()
255263
endforeach ()
256264

257265
foreach (tgtname IN LISTS libtargets)
@@ -271,6 +279,10 @@ function (add_flangrt_library name)
271279
)
272280
endif ()
273281

282+
if (ARG_TARGET_PROPERTIES)
283+
set_target_properties(${tgtname} PROPERTIES ${ARG_TARGET_PROPERTIES})
284+
endif ()
285+
274286
# flang-rt should build all the Flang-RT targets that are built in an
275287
# 'all' build.
276288
if (NOT ARG_EXCLUDE_FROM_ALL)

flang-rt/cmake/modules/AddFlangRTOffload.cmake

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ macro(enable_cuda_compilation name files)
1616

1717
enable_language(CUDA)
1818

19-
# TODO: figure out how to make target property CUDA_SEPARABLE_COMPILATION
20-
# work, and avoid setting CMAKE_CUDA_SEPARABLE_COMPILATION.
21-
set(CMAKE_CUDA_SEPARABLE_COMPILATION ON)
19+
set_target_properties(${name}
20+
PROPERTIES
21+
CUDA_SEPARABLE_COMPILATION ON
22+
)
2223

2324
# Treat all supported sources as CUDA files.
2425
set_source_files_properties(${files} PROPERTIES LANGUAGE CUDA)
@@ -60,8 +61,10 @@ macro(enable_cuda_compilation name files)
6061
# When using libcudacxx headers files, we have to use them
6162
# for all files of Flang-RT.
6263
if (EXISTS "${FLANG_RT_LIBCUDACXX_PATH}/include")
63-
target_include_directories(obj.${name}PTX AFTER PRIVATE "${FLANG_RT_LIBCUDACXX_PATH}/include")
64-
target_compile_definitions(obj.${name}PTX PRIVATE RT_USE_LIBCUDACXX=1)
64+
foreach (tgt IN ITEMS "${name}" "obj.${name}PTX")
65+
target_include_directories(${tgt} AFTER PRIVATE "${FLANG_RT_LIBCUDACXX_PATH}/include")
66+
target_compile_definitions(${tgt} PRIVATE RT_USE_LIBCUDACXX=1)
67+
endforeach ()
6568
endif ()
6669
endif()
6770
endmacro()
@@ -79,26 +82,6 @@ macro(enable_omp_offload_compilation name files)
7982
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND
8083
"${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
8184

82-
set(all_amdgpu_architectures
83-
"gfx700;gfx701;gfx801;gfx803;gfx900;gfx902;gfx906"
84-
"gfx908;gfx90a;gfx90c;gfx940;gfx1010;gfx1030"
85-
"gfx1031;gfx1032;gfx1033;gfx1034;gfx1035;gfx1036"
86-
"gfx1100;gfx1101;gfx1102;gfx1103;gfx1150;gfx1151"
87-
"gfx1152;gfx1153"
88-
)
89-
set(all_nvptx_architectures
90-
"sm_35;sm_37;sm_50;sm_52;sm_53;sm_60;sm_61;sm_62"
91-
"sm_70;sm_72;sm_75;sm_80;sm_86;sm_89;sm_90"
92-
)
93-
set(all_gpu_architectures
94-
"${all_amdgpu_architectures};${all_nvptx_architectures}"
95-
)
96-
# TODO: support auto detection on the build system.
97-
if (FLANG_RT_DEVICE_ARCHITECTURES STREQUAL "all")
98-
set(FLANG_RT_DEVICE_ARCHITECTURES ${all_gpu_architectures})
99-
endif()
100-
list(REMOVE_DUPLICATES FLANG_RT_DEVICE_ARCHITECTURES)
101-
10285
string(REPLACE ";" "," compile_for_architectures
10386
"${FLANG_RT_DEVICE_ARCHITECTURES}"
10487
)

flang-rt/lib/flang_rt/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,8 @@ if (NOT WIN32)
134134
ADDITIONAL_HEADERS ${public_headers} ${private_headers}
135135
)
136136

137-
enable_cuda_compilation(flang_rt.static "${supported_sources}")
138-
enable_omp_offload_compilation(flang_rt.static "${supported_sources}")
137+
enable_cuda_compilation(flang_rt "${supported_sources}")
138+
enable_omp_offload_compilation(flang_rt "${supported_sources}")
139139

140140
# Select a default runtime, which is used for unit and regression tests.
141141
get_target_property(default_target flang_rt.default ALIASED_TARGET)

flang-rt/lib/flang_rt/CUDA/CMakeLists.txt

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,32 @@
66
#
77
#===------------------------------------------------------------------------===#
88

9-
10-
add_flangrt_library(CufRuntime STATIC
9+
add_flangrt_library(CufRuntime STATIC SHARED
1110
allocatable.cpp
1211
allocator.cpp
1312
descriptor.cpp
1413
kernel.cpp
1514
memmove-function.cpp
1615
memory.cpp
1716
registration.cpp
18-
)
1917

20-
# libCufRuntime depends on a certain version of CUDA. To be able to have
21-
# multiple build of this library with different CUDA version, the version is
22-
# added to the library name.
23-
set_target_properties(CufRuntime
24-
PROPERTIES
18+
TARGET_PROPERTIES
2519
OUTPUT_NAME "CufRuntime_cuda_${CUDAToolkit_VERSION_MAJOR}"
20+
INCLUDE_DIRECTORIES
21+
PRIVATE ${CUDAToolkit_INCLUDE_DIRS}
2622
)
2723

28-
target_include_directories(CufRuntime PRIVATE ${CUDAToolkit_INCLUDE_DIRS})
24+
# For the static library, link-in the static dependencies as well.
25+
if (TARGET CufRuntime.static)
26+
target_link_libraries(CufRuntime.static PUBLIC
27+
flang_rt.static
28+
CUDA::cudart_static
29+
)
30+
endif ()
2931

30-
target_link_libraries(CufRuntime
31-
PUBLIC
32-
flang_rt
33-
CUDA::cudart_static
34-
)
32+
if (TARGET CufRuntime.shared)
33+
target_link_libraries(CufRuntime.shared PUBLIC
34+
flang_rt.shared
35+
CUDA::cudart
36+
)
37+
endif ()
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
option(FLANG_EXPERIMENTAL_CUDA_RUNTIME
2+
"Compile Fortran runtime as CUDA sources (experimental)" OFF
3+
)
4+
5+
option(FLANG_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS
6+
"Do not compile global variables' definitions when producing PTX library" OFF
7+
)
8+
9+
set(FLANG_LIBCUDACXX_PATH "" CACHE PATH "Path to libcu++ package installation")
10+
11+
set(FLANG_EXPERIMENTAL_OMP_OFFLOAD_BUILD "off" CACHE STRING
12+
"Compile Fortran runtime as OpenMP target offload sources (experimental). Valid options are 'off', 'host_device', 'nohost'")
13+
14+
set(FLANG_OMP_DEVICE_ARCHITECTURES "all" CACHE STRING
15+
"List of OpenMP device architectures to be used to compile the Fortran runtime (e.g. 'gfx1103;sm_90')")
16+
17+
macro(enable_cuda_compilation name files)
18+
if (FLANG_EXPERIMENTAL_CUDA_RUNTIME)
19+
if (BUILD_SHARED_LIBS)
20+
message(FATAL_ERROR
21+
"BUILD_SHARED_LIBS is not supported for CUDA build of Fortran runtime"
22+
)
23+
endif()
24+
25+
enable_language(CUDA)
26+
27+
# TODO: figure out how to make target property CUDA_SEPARABLE_COMPILATION
28+
# work, and avoid setting CMAKE_CUDA_SEPARABLE_COMPILATION.
29+
set(CMAKE_CUDA_SEPARABLE_COMPILATION ON)
30+
31+
# Treat all supported sources as CUDA files.
32+
set_source_files_properties(${files} PROPERTIES LANGUAGE CUDA)
33+
set(CUDA_COMPILE_OPTIONS)
34+
if ("${CMAKE_CUDA_COMPILER_ID}" MATCHES "Clang")
35+
# Allow varargs.
36+
set(CUDA_COMPILE_OPTIONS
37+
-Xclang -fcuda-allow-variadic-functions
38+
)
39+
endif()
40+
if ("${CMAKE_CUDA_COMPILER_ID}" MATCHES "NVIDIA")
41+
set(CUDA_COMPILE_OPTIONS
42+
--expt-relaxed-constexpr
43+
# Disable these warnings:
44+
# 'long double' is treated as 'double' in device code
45+
-Xcudafe --diag_suppress=20208
46+
-Xcudafe --display_error_number
47+
)
48+
endif()
49+
set_source_files_properties(${files} PROPERTIES COMPILE_OPTIONS
50+
"${CUDA_COMPILE_OPTIONS}"
51+
)
52+
53+
if (EXISTS "${FLANG_LIBCUDACXX_PATH}/include")
54+
# When using libcudacxx headers files, we have to use them
55+
# for all files of F18 runtime.
56+
include_directories(AFTER ${FLANG_LIBCUDACXX_PATH}/include)
57+
add_compile_definitions(RT_USE_LIBCUDACXX=1)
58+
endif()
59+
60+
# Add an OBJECT library consisting of CUDA PTX.
61+
llvm_add_library(${name}PTX OBJECT PARTIAL_SOURCES_INTENDED ${files})
62+
set_property(TARGET obj.${name}PTX PROPERTY CUDA_PTX_COMPILATION ON)
63+
if (FLANG_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS)
64+
target_compile_definitions(obj.${name}PTX
65+
PRIVATE FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
66+
)
67+
endif()
68+
endif()
69+
endmacro()
70+
71+
macro(enable_omp_offload_compilation files)
72+
if (NOT FLANG_EXPERIMENTAL_OMP_OFFLOAD_BUILD STREQUAL "off")
73+
# 'host_device' build only works with Clang compiler currently.
74+
# The build is done with the CMAKE_C/CXX_COMPILER, i.e. it does not use
75+
# the in-tree built Clang. We may have a mode that would use the in-tree
76+
# built Clang.
77+
#
78+
# 'nohost' is supposed to produce an LLVM Bitcode library,
79+
# and it has to be done with a C/C++ compiler producing LLVM Bitcode
80+
# compatible with the LLVM toolchain version distributed with the Flang
81+
# compiler.
82+
# In general, the in-tree built Clang should be used for 'nohost' build.
83+
# Note that 'nohost' build does not produce the host version of Flang
84+
# runtime library, so there will be two separate distributable objects.
85+
# 'nohost' build is a TODO.
86+
87+
if (NOT FLANG_EXPERIMENTAL_OMP_OFFLOAD_BUILD STREQUAL "host_device")
88+
message(FATAL_ERROR "Unsupported OpenMP offload build of Flang runtime")
89+
endif()
90+
if (BUILD_SHARED_LIBS)
91+
message(FATAL_ERROR
92+
"BUILD_SHARED_LIBS is not supported for OpenMP offload build of Fortran runtime"
93+
)
94+
endif()
95+
96+
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND
97+
"${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
98+
99+
set(all_amdgpu_architectures
100+
"gfx700;gfx701;gfx801;gfx803;gfx900;gfx902;gfx906"
101+
"gfx908;gfx90a;gfx90c;gfx940;gfx1010;gfx1030"
102+
"gfx1031;gfx1032;gfx1033;gfx1034;gfx1035;gfx1036"
103+
"gfx1100;gfx1101;gfx1102;gfx1103;gfx1150;gfx1151"
104+
"gfx1152;gfx1153"
105+
)
106+
set(all_nvptx_architectures
107+
"sm_35;sm_37;sm_50;sm_52;sm_53;sm_60;sm_61;sm_62"
108+
"sm_70;sm_72;sm_75;sm_80;sm_86;sm_89;sm_90"
109+
)
110+
set(all_gpu_architectures
111+
"${all_amdgpu_architectures};${all_nvptx_architectures}"
112+
)
113+
# TODO: support auto detection on the build system.
114+
if (FLANG_OMP_DEVICE_ARCHITECTURES STREQUAL "all")
115+
set(FLANG_OMP_DEVICE_ARCHITECTURES ${all_gpu_architectures})
116+
endif()
117+
list(REMOVE_DUPLICATES FLANG_OMP_DEVICE_ARCHITECTURES)
118+
119+
string(REPLACE ";" "," compile_for_architectures
120+
"${FLANG_OMP_DEVICE_ARCHITECTURES}"
121+
)
122+
123+
set(OMP_COMPILE_OPTIONS
124+
-fopenmp
125+
-fvisibility=hidden
126+
-fopenmp-cuda-mode
127+
--offload-arch=${compile_for_architectures}
128+
# Force LTO for the device part.
129+
-foffload-lto
130+
)
131+
set_source_files_properties(${files} PROPERTIES COMPILE_OPTIONS
132+
"${OMP_COMPILE_OPTIONS}"
133+
)
134+
135+
# Enable "declare target" in the source code.
136+
set_source_files_properties(${files}
137+
PROPERTIES COMPILE_DEFINITIONS OMP_OFFLOAD_BUILD
138+
)
139+
else()
140+
message(FATAL_ERROR
141+
"Flang runtime build is not supported for these compilers:\n"
142+
"CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}\n"
143+
"CMAKE_C_COMPILER_ID: ${CMAKE_C_COMPILER_ID}")
144+
endif()
145+
endif()
146+
endmacro()
Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
1-
! RUN: %flang -### --target=aarch64-windows-msvc -resource-dir=%S/Inputs/resource_dir %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC
2-
! RUN: %flang -### --target=aarch64-windows-msvc -resource-dir=%S/Inputs/resource_dir -fms-runtime-lib=static_dbg %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC-DEBUG
3-
! RUN: %flang -### --target=aarch64-windows-msvc -resource-dir=%S/Inputs/resource_dir -fms-runtime-lib=dll %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC-DLL
4-
! RUN: %flang -### --target=aarch64-windows-msvc -resource-dir=%S/Inputs/resource_dir -fms-runtime-lib=dll_dbg %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC-DLL-DEBUG
5-
6-
! MSVC: -fc1
7-
! MSVC-SAME: --dependent-lib=clang_rt.builtins.lib
8-
! MSVC-SAME: -D_MT
9-
! MSVC-SAME: --dependent-lib=libcmt
10-
! MSVC-SAME: --dependent-lib=flang_rt.static.lib
11-
12-
! MSVC-DEBUG: -fc1
13-
! MSVC-DEBUG-SAME: --dependent-lib=clang_rt.builtins.lib
14-
! MSVC-DEBUG-SAME: -D_MT
15-
! MSVC-DEBUG-SAME: -D_DEBUG
16-
! MSVC-DEBUG-SAME: --dependent-lib=libcmtd
17-
! MSVC-DEBUG-SAME: --dependent-lib=flang_rt.static_dbg.lib
18-
19-
! MSVC-DLL: -fc1
20-
! MSVC-DLL-SAME: --dependent-lib=clang_rt.builtins.lib
21-
! MSVC-DLL-SAME: -D_MT
22-
! MSVC-DLL-SAME: -D_DLL
23-
! MSVC-DLL-SAME: --dependent-lib=msvcrt
24-
! MSVC-DLL-SAME: --dependent-lib=flang_rt.dynamic.lib
25-
26-
! MSVC-DLL-DEBUG: -fc1
27-
! MSVC-DLL-DEBUG-SAME: --dependent-lib=clang_rt.builtins.lib
28-
! MSVC-DLL-DEBUG-SAME: -D_MT
29-
! MSVC-DLL-DEBUG-SAME: -D_DEBUG
30-
! MSVC-DLL-DEBUG-SAME: -D_DLL
31-
! MSVC-DLL-DEBUG-SAME: --dependent-lib=msvcrtd
32-
! MSVC-DLL-DEBUG-SAME: --dependent-lib=flang_rt.dynamic_dbg.lib
1+
! RUN: %flang -### --target=aarch64-windows-msvc -resource-dir=%S/Inputs/resource_dir %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC
2+
! RUN: %flang -### --target=aarch64-windows-msvc -resource-dir=%S/Inputs/resource_dir -fms-runtime-lib=static_dbg %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC-DEBUG
3+
! RUN: %flang -### --target=aarch64-windows-msvc -resource-dir=%S/Inputs/resource_dir -fms-runtime-lib=dll %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC-DLL
4+
! RUN: %flang -### --target=aarch64-windows-msvc -resource-dir=%S/Inputs/resource_dir -fms-runtime-lib=dll_dbg %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC-DLL-DEBUG
5+
6+
! MSVC: -fc1
7+
! MSVC-SAME: --dependent-lib=clang_rt.builtins.lib
8+
! MSVC-SAME: -D_MT
9+
! MSVC-SAME: --dependent-lib=libcmt
10+
! MSVC-SAME: --dependent-lib=flang_rt.static.lib
11+
12+
! MSVC-DEBUG: -fc1
13+
! MSVC-DEBUG-SAME: --dependent-lib=clang_rt.builtins.lib
14+
! MSVC-DEBUG-SAME: -D_MT
15+
! MSVC-DEBUG-SAME: -D_DEBUG
16+
! MSVC-DEBUG-SAME: --dependent-lib=libcmtd
17+
! MSVC-DEBUG-SAME: --dependent-lib=flang_rt.static_dbg.lib
18+
19+
! MSVC-DLL: -fc1
20+
! MSVC-DLL-SAME: --dependent-lib=clang_rt.builtins.lib
21+
! MSVC-DLL-SAME: -D_MT
22+
! MSVC-DLL-SAME: -D_DLL
23+
! MSVC-DLL-SAME: --dependent-lib=msvcrt
24+
! MSVC-DLL-SAME: --dependent-lib=flang_rt.dynamic.lib
25+
26+
! MSVC-DLL-DEBUG: -fc1
27+
! MSVC-DLL-DEBUG-SAME: --dependent-lib=clang_rt.builtins.lib
28+
! MSVC-DLL-DEBUG-SAME: -D_MT
29+
! MSVC-DLL-DEBUG-SAME: -D_DEBUG
30+
! MSVC-DLL-DEBUG-SAME: -D_DLL
31+
! MSVC-DLL-DEBUG-SAME: --dependent-lib=msvcrtd
32+
! MSVC-DLL-DEBUG-SAME: --dependent-lib=flang_rt.dynamic_dbg.lib

0 commit comments

Comments
 (0)