Skip to content

Commit 6244af5

Browse files
committed
runtime: generate the link arguments in CMake
Rather than invoke a bash script to generate the file, write the file statically from CMake. This allows us to cross-compile for platforms which require the static library arguments on platforms which do not have bash.
1 parent f7df8e7 commit 6244af5

File tree

2 files changed

+29
-103
lines changed

2 files changed

+29
-103
lines changed

stdlib/public/runtime/CMakeLists.txt

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -269,34 +269,44 @@ foreach(sdk ${SWIFT_CONFIGURED_SDKS})
269269
if(${SWIFT_SDK_${sdk}_OBJECT_FORMAT} STREQUAL ELF)
270270
string(TOLOWER "${sdk}" lowercase_sdk)
271271
if(SWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_STATICLIB)
272-
set(ICU_STATICLIB "TRUE")
272+
set(libicu_i18n_a -licui18nswift)
273+
set(libicu_uc_a -licuucswift)
274+
set(libicu_data_a -licudataswift)
273275
else()
274-
set(ICU_STATICLIB "FALSE")
275276
find_package(ICU REQUIRED COMPONENTS uc i18n)
276277
get_filename_component(ICU_UC_LIBDIR "${ICU_UC_LIBRARIES}" DIRECTORY)
277278
get_filename_component(ICU_I18N_LIBDIR "${ICU_I18N_LIBRARIES}" DIRECTORY)
279+
280+
set(libicu_i18n_a -licui18n)
281+
set(libicu_uc_a -licuuc)
282+
set(libicu_data_a)
283+
if(EXISTS ${ICU_I18N_LIBDIR}/libicui18n.a AND
284+
EXISTS ${ICU_UC_LIBDIR}/libicuuc.a AND
285+
EXISTS ${ICU_UC_LIBDIR}/libicudata.a)
286+
set(libicu_i18n_a ${ICU_I18N_LIBDIR}/libicui18n.a)
287+
set(libicu_uc_a ${ICU_UC_LIBDIR}/libicuuc.a)
288+
set(libicu_data_a ${ICU_UC_LIBDIR}/libicudata.a)
289+
endif()
278290
endif()
279-
set(linkfile "${lowercase_sdk}/static-stdlib-args.lnk")
280-
add_custom_command_target(swift_static_stdlib_${sdk}_args
281-
COMMAND
282-
"${SWIFT_SOURCE_DIR}/utils/gen-static-stdlib-link-args"
283-
"${sdk}"
284-
"${SWIFTSTATICLIB_DIR}/${linkfile}"
285-
"${ICU_STATICLIB}"
286-
"${ICU_UC_LIBDIR}"
287-
"${ICU_I18N_LIBDIR}"
288-
OUTPUT
289-
"${SWIFTSTATICLIB_DIR}/${linkfile}"
290-
DEPENDS
291-
"${SWIFT_SOURCE_DIR}/utils/gen-static-stdlib-link-args")
292291

293-
list(APPEND static_stdlib_lnk_file_list ${swift_static_stdlib_${sdk}_args})
292+
set(linkfile ${lowercase_sdk}/static-stdlib-args.lnk)
293+
file(WRITE "${SWIFTSTATICLIB_DIR}/${linkfile}" "
294+
-ldl
295+
-lpthread
296+
-lswiftCore
297+
-lswiftImageInspectionShared
298+
${libicu_i18n_a}
299+
${libicu_uc_a}
300+
${libicu_data_a}
301+
-lstdc++
302+
-lm
303+
-Xlinker -export-dynamic
304+
-Xlinker --exclude-libs
305+
-Xlinker ALL")
306+
294307
swift_install_in_component(FILES "${SWIFTSTATICLIB_DIR}/${linkfile}"
295308
DESTINATION "lib/swift_static/${lowercase_sdk}"
296309
COMPONENT stdlib)
297310
endif()
298311
endforeach()
299312
endforeach()
300-
add_custom_target(swift_static_lnk_args ALL DEPENDS ${static_stdlib_lnk_file_list})
301-
add_dependencies(stdlib swift_static_lnk_args)
302-

utils/gen-static-stdlib-link-args

Lines changed: 0 additions & 84 deletions
This file was deleted.

0 commit comments

Comments
 (0)