From 4a76eafdc1465088c77ba131d5f471965d646780 Mon Sep 17 00:00:00 2001 From: Karl Date: Thu, 19 Dec 2019 16:08:31 +0100 Subject: [PATCH] Remove fakeld (#26) * Remove fakeld It isn't needed if we don't try to build dynamic libraries for WASM. * Don't build StdlibUnittestFoundationExtras when cross-compiling on Darwin * Build static SDK overlay on WASI --- CMakeLists.txt | 10 +++------- build-linux.sh | 3 +++ build-mac.sh | 3 ++- cmake/modules/AddSwift.cmake | 10 +++++++--- fakeld | 9 --------- stdlib/private/CMakeLists.txt | 3 ++- 6 files changed, 17 insertions(+), 21 deletions(-) delete mode 100755 fakeld diff --git a/CMakeLists.txt b/CMakeLists.txt index 0248830db36eb..c9c5789db7aa6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -784,13 +784,9 @@ endif() # Should we cross-compile the standard library for WebAssembly (WASI)? is_sdk_requested(WASI swift_build_wasm) if(swift_build_wasm AND NOT "${SWIFT_HOST_VARIANT_SDK}" STREQUAL "WASI") - #if ("${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") - # message(FATAL_ERROR "You must set SWIFT_ANDROID_NDK_PATH to cross-compile the Swift runtime for Android") - #endif() - #if (NOT ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Darwin" OR "${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Linux")) - # message(FATAL_ERROR "A Darwin or Linux host is required to build the Swift runtime for Android") - #endif() - + if(SWIFT_BUILD_DYNAMIC_SDK_OVERLAY OR SWIFT_BUILD_DYNAMIC_STDLIB) + message(FATAL_ERROR "Unable to build dynamic overlay/stdlib for WASI. WASM does not support dynamic linking.") + endif() if("${SWIFT_SDK_WASI_ARCHITECTURES}" STREQUAL "") set(SWIFT_SDK_WASI_ARCHITECTURES wasm32) endif() diff --git a/build-linux.sh b/build-linux.sh index d5bad958f906d..c13e91b796dfc 100755 --- a/build-linux.sh +++ b/build-linux.sh @@ -12,6 +12,9 @@ export sourcedir=$PWD/.. -DCMAKE_RANLIB='$sourcedir/wasi-sdk/bin/llvm-ranlib' \ " \ --build-stdlib-deployment-targets "wasi-wasm32" \ + --build-swift-dynamic-sdk-overlay false \ + --build-swift-dynamic-stdlib false \ + --build-swift-static-sdk-overlay \ --build-swift-static-stdlib \ --install-destdir="$sourcedir/install" \ --install-prefix="/opt/swiftwasm-sdk" \ diff --git a/build-mac.sh b/build-mac.sh index b9dd3a718ded2..ba621a52b1636 100755 --- a/build-mac.sh +++ b/build-mac.sh @@ -15,7 +15,8 @@ export sourcedir=$PWD/.. " \ --build-stdlib-deployment-targets "wasi-wasm32" \ --build-swift-dynamic-sdk-overlay false \ - --build-swift-static-sdk-overlay false \ + --build-swift-dynamic-stdlib false \ + --build-swift-static-sdk-overlay \ --build-swift-static-stdlib \ --llvm-targets-to-build "X86;WebAssembly" \ --stdlib-deployment-targets "wasi-wasm32" \ diff --git a/cmake/modules/AddSwift.cmake b/cmake/modules/AddSwift.cmake index 886d8172c1ca3..25a918c31d94a 100644 --- a/cmake/modules/AddSwift.cmake +++ b/cmake/modules/AddSwift.cmake @@ -582,9 +582,7 @@ function(_add_variant_link_flags) if(NOT SWIFT_COMPILER_IS_MSVC_LIKE) # FIXME: On Apple platforms, find_program needs to look for "ld64.lld" find_program(LDLLD_PATH "ld.lld") - if("${SWIFT_SDK_${LFLAGS_SDK}_OBJECT_FORMAT}" STREQUAL "WASM") - list(APPEND result "-fuse-ld=${CMAKE_SOURCE_DIR}/fakeld") - elseif((SWIFT_ENABLE_LLD_LINKER AND LDLLD_PATH AND NOT APPLE) OR + if((SWIFT_ENABLE_LLD_LINKER AND LDLLD_PATH AND NOT APPLE) OR ("${LFLAGS_SDK}" STREQUAL "WINDOWS" AND NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WINDOWS")) list(APPEND result "-fuse-ld=lld") @@ -1404,6 +1402,12 @@ function(_add_swift_library_single target name) list(APPEND c_compile_flags -D_WINDLL) endif() endif() + # Double-check that we're not trying to build a dynamic library for WASM. + if(SWIFTLIB_SINGLE_SDK MATCHES WASM) + if(libkind STREQUAL SHARED) + message(FATAL_ERROR "WASM does not support shared libraries.") + endif() + endif() _add_variant_link_flags( SDK "${SWIFTLIB_SINGLE_SDK}" ARCH "${SWIFTLIB_SINGLE_ARCHITECTURE}" diff --git a/fakeld b/fakeld deleted file mode 100755 index 1df157004de91..0000000000000 --- a/fakeld +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env python3 -import sys -def outputname(): - for i in range(len(sys.argv)): - if sys.argv[i] == "-o": - return sys.argv[i + 1] - return "a.out" -with open(outputname(), "wb") as outfile: - pass diff --git a/stdlib/private/CMakeLists.txt b/stdlib/private/CMakeLists.txt index 45cf31363574b..9e900d1178773 100644 --- a/stdlib/private/CMakeLists.txt +++ b/stdlib/private/CMakeLists.txt @@ -18,7 +18,8 @@ if(SWIFT_BUILD_SDK_OVERLAY) add_subdirectory(OSLog) - if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + list_intersect("${SWIFT_APPLE_PLATFORMS}" "${SWIFT_SDKS}" building_darwin_sdks) + if(building_darwin_sdks) add_subdirectory(StdlibUnittestFoundationExtras) if (SWIFT_INCLUDE_TESTS) add_subdirectory(SwiftReflectionTest)