Skip to content

Commit a2c33ad

Browse files
committed
[Runtime] Fix generation of .lnk files for static linking.
Use the new `SWIFT_SDK_<sdk>_STATIC_LINKING_SUPPORTED` and `_STATIC_ONLY` flags instead of hardcoding support for Linux and WASI. Also, use the `_LIB_SUBDIR` variable rather than lowercasing the SDK. rdar://123504757
1 parent 7224178 commit a2c33ad

File tree

1 file changed

+51
-33
lines changed

1 file changed

+51
-33
lines changed

stdlib/public/runtime/CMakeLists.txt

Lines changed: 51 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -114,39 +114,35 @@ set(swift_runtime_library_compile_flags ${swift_runtime_compile_flags})
114114
list(APPEND swift_runtime_library_compile_flags -DswiftCore_EXPORTS)
115115
list(APPEND swift_runtime_library_compile_flags -I${SWIFT_SOURCE_DIR}/stdlib/include/llvm/Support -I${SWIFT_SOURCE_DIR}/include)
116116

117-
if(SWIFT_BUILD_STATIC_STDLIB)
118-
set(static_binary_lnk_file_list)
117+
set(static_binary_lnk_file_list)
119118

120-
foreach(sdk ${SWIFT_SDKS})
121-
if(NOT "${sdk}" STREQUAL "LINUX" AND NOT "${sdk}" STREQUAL "WASI")
122-
continue()
123-
endif()
119+
foreach(sdk ${SWIFT_SDKS})
120+
if(NOT SWIFT_SDK_${sdk}_STATIC_LINKING_SUPPORTED)
121+
continue()
122+
endif()
124123

125-
string(TOLOWER "${sdk}" lowercase_sdk)
126-
set(static_binary_lnk_src "${SWIFT_SOURCE_DIR}/stdlib/public/Resources/${lowercase_sdk}/static-executable-args.lnk")
124+
if(SWIFT_BUILD_STATIC_STDLIB OR SWIFT_SDK_${sdk}_STATIC_ONLY)
125+
set(lib_dir "${SWIFT_SDK_${sdk}_LIB_SUBDIR}")
126+
set(static_binary_lnk_src "${SWIFT_SOURCE_DIR}/stdlib/public/Resources/${lib_dir}/static-executable-args.lnk")
127127

128128
# Generate the static-executable-args.lnk file used for ELF systems (eg linux)
129-
set(linkfile "${lowercase_sdk}/static-executable-args.lnk")
129+
set(linkfile "${lib_dir}/static-executable-args.lnk")
130130
add_custom_command_target(swift_static_binary_${sdk}_args
131131
COMMAND
132-
"${CMAKE_COMMAND}" -E copy
133-
"${static_binary_lnk_src}"
134-
"${SWIFTSTATICLIB_DIR}/${linkfile}"
132+
"${CMAKE_COMMAND}" -E copy
133+
"${static_binary_lnk_src}"
134+
"${SWIFTSTATICLIB_DIR}/${linkfile}"
135135
OUTPUT
136-
"${SWIFTSTATICLIB_DIR}/${linkfile}"
136+
"${SWIFTSTATICLIB_DIR}/${linkfile}"
137137
DEPENDS
138-
"${static_binary_lnk_src}")
138+
"${static_binary_lnk_src}")
139139

140140
list(APPEND static_binary_lnk_file_list ${swift_static_binary_${sdk}_args})
141141
swift_install_in_component(FILES "${SWIFTSTATICLIB_DIR}/${linkfile}"
142-
DESTINATION "lib/swift_static/${lowercase_sdk}"
143-
COMPONENT stdlib)
144-
endforeach()
145-
if(static_binary_lnk_file_list)
146-
add_dependencies(stdlib ${static_binary_lnk_file_list})
147-
add_custom_target(static_binary_magic ALL DEPENDS ${static_binary_lnk_file_list})
142+
DESTINATION "lib/swift_static/${lib_dir}"
143+
COMPONENT stdlib)
148144
endif()
149-
endif()
145+
endforeach()
150146

151147
add_swift_target_library(swiftRuntime OBJECT_LIBRARY
152148
${swift_runtime_sources}
@@ -248,15 +244,15 @@ foreach(sdk ${SWIFT_SDKS})
248244
"${static_runtime_registrar}"
249245
DEPENDS
250246
"${swiftrtObject}")
251-
if(SWIFT_BUILD_DYNAMIC_STDLIB)
247+
if(SWIFT_BUILD_DYNAMIC_STDLIB AND NOT SWIFT_SDK_${sdk}_STATIC_ONLY)
252248
swift_install_in_component(FILES
253249
"${shared_runtime_registrar}"
254250
DESTINATION
255251
"lib/swift/${arch_subdir}"
256252
COMPONENT
257253
stdlib)
258254
endif()
259-
if(SWIFT_BUILD_STATIC_STDLIB)
255+
if(SWIFT_BUILD_STATIC_STDLIB OR SWIFT_SDK_${sdk}_STATIC_ONLY)
260256
swift_install_in_component(FILES
261257
"${static_runtime_registrar}"
262258
DESTINATION
@@ -273,10 +269,26 @@ foreach(sdk ${SWIFT_SDKS})
273269
add_dependencies(stdlib swift-stdlib-${arch_suffix} swiftImageRegistration-${arch_suffix})
274270
endif()
275271

276-
# Generate the static-stdlib-args.lnk file used by -static-stdlib option for
277-
# 'GenericUnix' (eg linux)
278-
if(SWIFT_SDK_${sdk}_OBJECT_FORMAT STREQUAL "ELF")
279-
string(TOLOWER "${sdk}" lowercase_sdk)
272+
endforeach()
273+
274+
# Generate the static-stdlib-args.lnk file used by -static-stdlib option for
275+
# 'GenericUnix' (eg linux)
276+
if(SWIFT_SDK_${sdk}_OBJECT_FORMAT STREQUAL "ELF")
277+
set(lib_dir "${SWIFT_SDK_${sdk}_LIB_SUBDIR}")
278+
set(static_stdlib_lnk_src "${SWIFT_SOURCE_DIR}/stdlib/public/Resources/${lib_dir}/static-stdlib-args.lnk")
279+
set(linkfile ${lib_dir}/static-stdlib-args.lnk)
280+
if(EXISTS "${static_stdlib_lnk_src}")
281+
add_custom_command_target(swift_static_stdlib_${sdk}_args
282+
COMMAND
283+
"${CMAKE_COMMAND}" -E copy
284+
"${static_stdlib_lnk_src}"
285+
"${SWIFTSTATICLIB_DIR}/${linkfile}"
286+
OUTPUT
287+
"${SWIFTSTATICLIB_DIR}/${linkfile}"
288+
DEPENDS
289+
"${static_stdlib_lnk_src}")
290+
list(APPEND static_binary_lnk_file_list ${swift_static_stdlib_${sdk}_args})
291+
else()
280292
set(libpthread -lpthread)
281293
set(concurrency_libs)
282294
set(android_libraries)
@@ -287,7 +299,6 @@ foreach(sdk ${SWIFT_SDKS})
287299
set(concurrency_libs "-ldispatch -lBlocksRuntime")
288300
endif()
289301

290-
set(linkfile ${lowercase_sdk}/static-stdlib-args.lnk)
291302
file(WRITE "${SWIFTSTATICLIB_DIR}/${linkfile}" "
292303
-ldl
293304
${libpthread}
@@ -299,10 +310,17 @@ ${concurrency_libs}
299310
-Xlinker -export-dynamic
300311
-Xlinker --exclude-libs
301312
-Xlinker ALL")
302-
303-
swift_install_in_component(FILES "${SWIFTSTATICLIB_DIR}/${linkfile}"
304-
DESTINATION "lib/swift_static/${lowercase_sdk}"
305-
COMPONENT stdlib)
306313
endif()
307-
endforeach()
314+
315+
swift_install_in_component(FILES "${SWIFTSTATICLIB_DIR}/${linkfile}"
316+
DESTINATION "lib/swift_static/${lib_dir}"
317+
COMPONENT stdlib)
318+
endif()
319+
308320
endforeach()
321+
322+
if(static_binary_lnk_file_list)
323+
add_dependencies(stdlib ${static_binary_lnk_file_list})
324+
add_custom_target(static_binary_magic ALL DEPENDS ${static_binary_lnk_file_list})
325+
endif()
326+

0 commit comments

Comments
 (0)