From dad3599e9a8bb07983a963b1f8cbdd964e309bd3 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Sun, 11 Jun 2023 11:07:46 +0000 Subject: [PATCH 1/5] [wasm] Revert stdlib/public/runtime/CMakeLists.txt around inspection object --- stdlib/public/runtime/CMakeLists.txt | 47 +++------------------------- 1 file changed, 5 insertions(+), 42 deletions(-) diff --git a/stdlib/public/runtime/CMakeLists.txt b/stdlib/public/runtime/CMakeLists.txt index 3d86b4cbc5257..2152ed7819060 100644 --- a/stdlib/public/runtime/CMakeLists.txt +++ b/stdlib/public/runtime/CMakeLists.txt @@ -102,7 +102,8 @@ set(swift_runtime_library_compile_flags ${swift_runtime_compile_flags}) list(APPEND swift_runtime_library_compile_flags -DswiftCore_EXPORTS) list(APPEND swift_runtime_library_compile_flags -I${SWIFT_SOURCE_DIR}/stdlib/include/llvm/Support -I${SWIFT_SOURCE_DIR}/include) -macro(add_image_inspection_shared sdk primary_arch inspection_file linkfile_src) +set(sdk "${SWIFT_HOST_VARIANT_SDK}") +if(SWIFT_BUILD_STATIC_STDLIB AND "${sdk}" STREQUAL "LINUX") set(static_binary_lnk_file_list) string(TOLOWER "${sdk}" lowercase_sdk) @@ -111,57 +112,19 @@ macro(add_image_inspection_shared sdk primary_arch inspection_file linkfile_src) add_custom_command_target(swift_static_binary_${sdk}_args COMMAND "${CMAKE_COMMAND}" -E copy - "${linkfile_src}" + "${SWIFT_SOURCE_DIR}/utils/static-executable-args.lnk" "${SWIFTSTATICLIB_DIR}/${linkfile}" OUTPUT "${SWIFTSTATICLIB_DIR}/${linkfile}" DEPENDS - "${linkfile_src}") + "${SWIFT_SOURCE_DIR}/utils/static-executable-args.lnk") list(APPEND static_binary_lnk_file_list ${swift_static_binary_${sdk}_args}) swift_install_in_component(FILES "${SWIFTSTATICLIB_DIR}/${linkfile}" DESTINATION "lib/swift_static/${lowercase_sdk}" COMPONENT stdlib) -endmacro() - -set(is_image_inspection_required) -foreach(sdk IN LISTS SWIFT_SDKS) - set(image_inspection_shared_sdk) - set(primary_arch) - set(image_inspection_shared_file) - set(linkfile_src) - - if("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "ELF") - list(APPEND ELFISH_SDKS ${sdk}) - set(linkfile_src "${SWIFT_SOURCE_DIR}/utils/static-executable-args.lnk") - elseif("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "WASM") - set(linkfile_src "${SWIFT_SOURCE_DIR}/utils/webassembly/static-executable-args.lnk") - endif() - - if(SWIFT_BUILD_STATIC_STDLIB AND "${sdk}" STREQUAL "LINUX") - set(image_inspection_shared_sdk "${sdk}") - set(image_inspection_shared_file ImageInspectionELF.cpp) - elseif(SWIFT_BUILD_STATIC_STDLIB AND "${sdk}" STREQUAL "WASI") - set(image_inspection_shared_sdk "${sdk}") - set(image_inspection_shared_file ImageInspectionWasm.cpp) - # Set default arch - set(primary_arch "wasm32") - endif() - - if("${sdk}" STREQUAL "${SWIFT_PRIMARY_VARIANT_SDK}") - set(primary_arch ${SWIFT_PRIMARY_VARIANT_ARCH}) - endif() - - if(NOT "${image_inspection_shared_sdk}" STREQUAL "" AND NOT "${primary_arch}" STREQUAL "") - set(is_image_inspection_required TRUE) - add_image_inspection_shared(${image_inspection_shared_sdk} ${primary_arch} ${image_inspection_shared_file} ${linkfile_src}) - endif() -endforeach() - -if(is_image_inspection_required) - add_custom_target(static_binary_magic ALL DEPENDS ${static_binary_lnk_file_list}) - add_dependencies(stdlib static_binary_magic) add_dependencies(stdlib ${static_binary_lnk_file_list}) + add_custom_target(static_binary_magic ALL DEPENDS ${static_binary_lnk_file_list}) endif() add_swift_target_library(swiftRuntime OBJECT_LIBRARY From f43ceebd9ca25b8dbb901c73a373819182a29a3c Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 7 Jun 2023 19:04:23 +0000 Subject: [PATCH 2/5] [static-stdlib] Move static-executable-args.lnk under stdlib/public/Resources/linux This is a preparatory change for adding a static executable support for WASI --- .../public/Resources/linux}/static-executable-args.lnk | 0 stdlib/public/runtime/CMakeLists.txt | 5 +++-- 2 files changed, 3 insertions(+), 2 deletions(-) rename {utils => stdlib/public/Resources/linux}/static-executable-args.lnk (100%) diff --git a/utils/static-executable-args.lnk b/stdlib/public/Resources/linux/static-executable-args.lnk similarity index 100% rename from utils/static-executable-args.lnk rename to stdlib/public/Resources/linux/static-executable-args.lnk diff --git a/stdlib/public/runtime/CMakeLists.txt b/stdlib/public/runtime/CMakeLists.txt index 2152ed7819060..f3de14fc2429b 100644 --- a/stdlib/public/runtime/CMakeLists.txt +++ b/stdlib/public/runtime/CMakeLists.txt @@ -106,18 +106,19 @@ set(sdk "${SWIFT_HOST_VARIANT_SDK}") if(SWIFT_BUILD_STATIC_STDLIB AND "${sdk}" STREQUAL "LINUX") set(static_binary_lnk_file_list) string(TOLOWER "${sdk}" lowercase_sdk) + set(static_binary_lnk_src "${SWIFT_SOURCE_DIR}/stdlib/public/Resources/${lowercase_sdk}/static-executable-args.lnk") # Generate the static-executable-args.lnk file used for ELF systems (eg linux) set(linkfile "${lowercase_sdk}/static-executable-args.lnk") add_custom_command_target(swift_static_binary_${sdk}_args COMMAND "${CMAKE_COMMAND}" -E copy - "${SWIFT_SOURCE_DIR}/utils/static-executable-args.lnk" + "${static_binary_lnk_src}" "${SWIFTSTATICLIB_DIR}/${linkfile}" OUTPUT "${SWIFTSTATICLIB_DIR}/${linkfile}" DEPENDS - "${SWIFT_SOURCE_DIR}/utils/static-executable-args.lnk") + "${static_binary_lnk_src}") list(APPEND static_binary_lnk_file_list ${swift_static_binary_${sdk}_args}) swift_install_in_component(FILES "${SWIFTSTATICLIB_DIR}/${linkfile}" From d53706917e280a46436746578b546db8116515d1 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Fri, 9 Jun 2023 15:43:23 +0000 Subject: [PATCH 3/5] [static-stdlib] NFC: Generalize the static-executable-args.lnk file generation This patch makes the build system to copy the lnk files for each stdlib targets if needed instead of only for the Linux target. --- stdlib/public/runtime/CMakeLists.txt | 48 ++++++++++++++++------------ 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/stdlib/public/runtime/CMakeLists.txt b/stdlib/public/runtime/CMakeLists.txt index f3de14fc2429b..1dab12fc87277 100644 --- a/stdlib/public/runtime/CMakeLists.txt +++ b/stdlib/public/runtime/CMakeLists.txt @@ -102,28 +102,34 @@ set(swift_runtime_library_compile_flags ${swift_runtime_compile_flags}) list(APPEND swift_runtime_library_compile_flags -DswiftCore_EXPORTS) list(APPEND swift_runtime_library_compile_flags -I${SWIFT_SOURCE_DIR}/stdlib/include/llvm/Support -I${SWIFT_SOURCE_DIR}/include) -set(sdk "${SWIFT_HOST_VARIANT_SDK}") -if(SWIFT_BUILD_STATIC_STDLIB AND "${sdk}" STREQUAL "LINUX") +if(SWIFT_BUILD_STATIC_STDLIB) set(static_binary_lnk_file_list) - string(TOLOWER "${sdk}" lowercase_sdk) - set(static_binary_lnk_src "${SWIFT_SOURCE_DIR}/stdlib/public/Resources/${lowercase_sdk}/static-executable-args.lnk") - - # Generate the static-executable-args.lnk file used for ELF systems (eg linux) - set(linkfile "${lowercase_sdk}/static-executable-args.lnk") - add_custom_command_target(swift_static_binary_${sdk}_args - COMMAND - "${CMAKE_COMMAND}" -E copy - "${static_binary_lnk_src}" - "${SWIFTSTATICLIB_DIR}/${linkfile}" - OUTPUT - "${SWIFTSTATICLIB_DIR}/${linkfile}" - DEPENDS - "${static_binary_lnk_src}") - - list(APPEND static_binary_lnk_file_list ${swift_static_binary_${sdk}_args}) - swift_install_in_component(FILES "${SWIFTSTATICLIB_DIR}/${linkfile}" - DESTINATION "lib/swift_static/${lowercase_sdk}" - COMPONENT stdlib) + + foreach(sdk ${SWIFT_SDKS}) + if(NOT "${sdk}" STREQUAL "LINUX") + continue() + endif() + + string(TOLOWER "${sdk}" lowercase_sdk) + set(static_binary_lnk_src "${SWIFT_SOURCE_DIR}/stdlib/public/Resources/${lowercase_sdk}/static-executable-args.lnk") + + # Generate the static-executable-args.lnk file used for ELF systems (eg linux) + set(linkfile "${lowercase_sdk}/static-executable-args.lnk") + add_custom_command_target(swift_static_binary_${sdk}_args + COMMAND + "${CMAKE_COMMAND}" -E copy + "${static_binary_lnk_src}" + "${SWIFTSTATICLIB_DIR}/${linkfile}" + OUTPUT + "${SWIFTSTATICLIB_DIR}/${linkfile}" + DEPENDS + "${static_binary_lnk_src}") + + list(APPEND static_binary_lnk_file_list ${swift_static_binary_${sdk}_args}) + swift_install_in_component(FILES "${SWIFTSTATICLIB_DIR}/${linkfile}" + DESTINATION "lib/swift_static/${lowercase_sdk}" + COMPONENT stdlib) + endforeach() add_dependencies(stdlib ${static_binary_lnk_file_list}) add_custom_target(static_binary_magic ALL DEPENDS ${static_binary_lnk_file_list}) endif() From 59862743638b390b253bb74f26ba9712f95172af Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Fri, 9 Jun 2023 15:47:16 +0000 Subject: [PATCH 4/5] [static-stdlib] Add static executable support for WASI target This patch adds static-executble-args.lnk file for WASI target --- .../public/Resources/wasi/static-executable-args.lnk | 11 +++++++++++ stdlib/public/runtime/CMakeLists.txt | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 stdlib/public/Resources/wasi/static-executable-args.lnk diff --git a/stdlib/public/Resources/wasi/static-executable-args.lnk b/stdlib/public/Resources/wasi/static-executable-args.lnk new file mode 100644 index 0000000000000..1500f94f891a8 --- /dev/null +++ b/stdlib/public/Resources/wasi/static-executable-args.lnk @@ -0,0 +1,11 @@ +-static +-lswiftSwiftOnoneSupport +-ldl +-lstdc++ +-lm +-lwasi-emulated-mman +-lwasi-emulated-signal +-lwasi-emulated-process-clocks +-Xlinker --error-limit=0 +-Xlinker --no-gc-sections +-Xlinker --threads=1 diff --git a/stdlib/public/runtime/CMakeLists.txt b/stdlib/public/runtime/CMakeLists.txt index 1dab12fc87277..ed270d9b8a747 100644 --- a/stdlib/public/runtime/CMakeLists.txt +++ b/stdlib/public/runtime/CMakeLists.txt @@ -106,7 +106,7 @@ if(SWIFT_BUILD_STATIC_STDLIB) set(static_binary_lnk_file_list) foreach(sdk ${SWIFT_SDKS}) - if(NOT "${sdk}" STREQUAL "LINUX") + if(NOT "${sdk}" STREQUAL "LINUX" AND NOT "${sdk}" STREQUAL "WASI") continue() endif() From c1c0c90bd3d2ef4c860ee193ccd6abed493e050b Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Sun, 11 Jun 2023 11:15:03 +0000 Subject: [PATCH 5/5] [wasm] Link pthread stub library explicitly This part was not intended to be upstreamed for now because we should not hack pthread ideally --- stdlib/public/Resources/wasi/static-executable-args.lnk | 1 + 1 file changed, 1 insertion(+) diff --git a/stdlib/public/Resources/wasi/static-executable-args.lnk b/stdlib/public/Resources/wasi/static-executable-args.lnk index 1500f94f891a8..a18d5fc3668aa 100644 --- a/stdlib/public/Resources/wasi/static-executable-args.lnk +++ b/stdlib/public/Resources/wasi/static-executable-args.lnk @@ -1,5 +1,6 @@ -static -lswiftSwiftOnoneSupport +-lswiftWasiPthread -ldl -lstdc++ -lm