diff --git a/CMakeLists.txt b/CMakeLists.txt index 4538e4675d457..484d6f01aca24 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,9 +29,6 @@ ENABLE_LANGUAGE(C) include(SwiftUtils) include(CheckSymbolExists) -# WebAssembly: hack: use llvm-ar for creating static libraries; Ubuntu's GNU ar doesn't work with wasm-ld -set(CMAKE_AR "${SWIFT_WASM_WASI_SDK_PATH}/bin/llvm-ar") - # # User-configurable options that control the inclusion and default build # behavior for components which may not strictly be necessary (tools, examples, @@ -660,13 +657,6 @@ endif() # Configure SDKs. # -if(XCODE) - # FIXME: Cannot cross-compile the standard library using Xcode. Xcode - # insists on passing -mmacosx-version-min to the compiler, and we need - # to pass -mios-version-min. Clang sees both options and complains. - set(SWIFT_SDKS "OSX") -endif() - # FIXME: the parameters we specify in SWIFT_SDKS are lacking architecture specifics, # so we need to hard-code it. For example, the SDK for Android is just 'ANDROID', # which we assume below to be armv7. @@ -814,6 +804,11 @@ if(swift_build_wasm AND NOT "${SWIFT_HOST_VARIANT_SDK}" STREQUAL "WASM") # message(FATAL_ERROR "A Darwin or Linux host is required to build the Swift runtime for Android") #endif() + if (NOT ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Darwin")) + # WebAssembly: hack: use llvm-ar for creating static libraries; Ubuntu's GNU ar doesn't work with wasm-ld + set(CMAKE_AR "${SWIFT_WASM_WASI_SDK_PATH}/bin/llvm-ar") + endif() + if("${SWIFT_SDK_WASM_ARCHITECTURES}" STREQUAL "") set(SWIFT_SDK_WASM_ARCHITECTURES wasm32) endif() diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 4f706adb0f3bc..6ec599535f197 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -41,8 +41,11 @@ jobs: sourcedir="$PWD" cd swift utils/update-checkout --clone --scheme wasm + git checkout $BUILD_SOURCEBRANCHNAME || git checkout $SYSTEM_PULLREQUEST_SOURCEBRANCH utils/build-script --release --wasm \ --llvm-targets-to-build "X86;WebAssembly" \ + --build-swift-dynamic-sdk-overlay false \ + --build-swift-static-sdk-overlay false \ --wasm-wasi-sdk "/opt/wasi-sdk" \ --wasm-icu-uc "todo" \ --wasm-icu-uc-include "$sourcedir/icu_out/include" \ @@ -61,16 +64,9 @@ jobs: - task: PublishBuildArtifacts@1 inputs: pathtoPublish: $(Build.ArtifactStagingDirectory) - artifactName: swiftwasm-sdk - - task: GitHubRelease@0 - inputs: - gitHubConnection: swiftwasm-release - tagSource: manual - tag: $(Build.BuildNumber) - assets: | - $(Build.ArtifactStagingDirectory)/* + artifactName: swiftwasm-sdk-linux -- job: macOS +- job: macOS_Ninja timeoutInMinutes: 0 pool: vmImage: 'macOS-10.14' @@ -92,8 +88,13 @@ jobs: - checkout: self path: swift-source/swift - script: | - wget -O wasisdk.deb "https://github.com/swiftwasm/wasi-sdk/releases/download/20190421.6/wasi-sdk_3.19gefb17cb478f9.m_amd64.deb" - sudo dpkg -i wasisdk.deb + wget -O wasi-sdk.tar.gz https://github.com/swiftwasm/wasi-sdk/releases/download/20190421.6/wasi-sdk-3.19gefb17cb478f9.m-linux.tar.gz + tar xfz wasi-sdk.tar.gz + mv wasi-sdk-3.19gefb17cb478f9+m/opt/wasi-sdk ./wasi-sdk + # Link sysroot/usr/include to sysroot/include because Darwin sysroot doesn't + # find header files in sysroot/include but sysroot/usr/include + mkdir wasi-sdk/share/sysroot/usr/ + ln -s ../include wasi-sdk/share/sysroot/usr/include wget -O icu.tar.xz "https://github.com/swiftwasm/icu4c-wasi/releases/download/20190421.3/icu4c-wasi.tar.xz" tar xf icu.tar.xz workingDirectory: $(Pipeline.Workspace)/swift-source @@ -102,11 +103,78 @@ jobs: sourcedir="$PWD" cd swift utils/update-checkout --clone --scheme wasm + git checkout $BUILD_SOURCEBRANCHNAME || git checkout $SYSTEM_PULLREQUEST_SOURCEBRANCH utils/build-script --release --wasm \ + --verbose \ + --skip-build-benchmarks \ + --build-swift-dynamic-sdk-overlay false \ + --build-swift-static-sdk-overlay false \ --llvm-targets-to-build "X86;WebAssembly" \ - --stdlib-deployment-targets "macosx-x86_64" \ - --extra-cmake-options="-DSWIFT_WASM_WASI_SDK_PATH=/usr/local/opt/llvm" \ - --wasm-wasi-sdk "/opt/wasi-sdk" \ + --wasm-wasi-sdk "$sourcedir/wasi-sdk" \ + --wasm-icu-uc "todo" \ + --wasm-icu-uc-include "$sourcedir/icu_out/include" \ + --wasm-icu-i18n "todo" \ + --wasm-icu-i18n-include "todo" \ + --wasm-icu-data "todo" \ + --build-swift-static-stdlib \ + --install-swift \ + --install-prefix="/opt/swiftwasm-sdk" \ + --install-destdir="$sourcedir/install" \ + --installable-package="$sourcedir/swiftwasm-mac.tar.gz" + + cp "$sourcedir/swiftwasm-mac.tar.gz" "$BUILD_ARTIFACTSTAGINGDIRECTORY/" + displayName: Build swiftc + timeoutInMinutes: 0 + workingDirectory: $(Pipeline.Workspace)/swift-source + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory) + artifactName: swiftwasm-sdk-macos +- job: macOS_Xcode + timeoutInMinutes: 0 + pool: + vmImage: 'macOS-10.14' + steps: + - script: | + brew install ninja + + displayName: Install dependencies via apt-get + - script: | + wget -O cmake-3.15.3-Darwin-x86_64.tar.gz "https://github.com/Kitware/CMake/releases/download/v3.15.3/cmake-3.15.3-Linux-x86_64.s://github.com/Kitware/CMake/releases/download/v3.15.3/cmake-3.15.3-Darwin-x86_64.tar.gz" + tar xfvz cmake-3.15.3-Darwin-x86_64.tar.gz + sudo ln -sf ./cmake-3.15.3-Darwin-x86_64/CMake.app/Contents/bin/* /usr/local/bin + cmake --version + displayName: Install CMake v3.15.3 + - script: | + mkdir -p swift-source/swift + displayName: Create swift-source workspace + workingDirectory: $(Pipeline.Workspace) + - checkout: self + path: swift-source/swift + - script: | + wget -O wasi-sdk.tar.gz https://github.com/swiftwasm/wasi-sdk/releases/download/20190421.6/wasi-sdk-3.19gefb17cb478f9.m-linux.tar.gz + tar xfz wasi-sdk.tar.gz + mv wasi-sdk-3.19gefb17cb478f9+m/opt/wasi-sdk ./wasi-sdk + # Link sysroot/usr/include to sysroot/include because Darwin sysroot doesn't + # find header files in sysroot/include but sysroot/usr/include + mkdir wasi-sdk/share/sysroot/usr/ + ln -s ../include wasi-sdk/share/sysroot/usr/include + wget -O icu.tar.xz "https://github.com/swiftwasm/icu4c-wasi/releases/download/20190421.3/icu4c-wasi.tar.xz" + tar xf icu.tar.xz + workingDirectory: $(Pipeline.Workspace)/swift-source + displayName: Install wasi-sdk and icu4c-wasi + - script: | + sourcedir="$PWD" + cd swift + utils/update-checkout --clone --scheme wasm + git checkout $BUILD_SOURCEBRANCHNAME || git checkout $SYSTEM_PULLREQUEST_SOURCEBRANCH + utils/build-script --release --wasm --xcode \ + --verbose \ + --skip-build-benchmarks \ + --build-swift-dynamic-sdk-overlay false \ + --build-swift-static-sdk-overlay false \ + --llvm-targets-to-build "X86;WebAssembly" \ + --wasm-wasi-sdk "$sourcedir/wasi-sdk" \ --wasm-icu-uc "todo" \ --wasm-icu-uc-include "$sourcedir/icu_out/include" \ --wasm-icu-i18n "todo" \ @@ -125,11 +193,20 @@ jobs: - task: PublishBuildArtifacts@1 inputs: pathtoPublish: $(Build.ArtifactStagingDirectory) - artifactName: swiftwasm-sdk + artifactName: swiftwasm-sdk-macos +- job: UploadArtifacts + dependsOn: + - Ubuntu + - macOS_Ninja + steps: + - task: DownloadBuildArtifacts@0 + inputs: + downloadType: 'specific' + itemPattern: '**' + downloadPath: $(Build.ArtifactStagingDirectory) - task: GitHubRelease@0 inputs: gitHubConnection: swiftwasm-release tagSource: manual tag: $(Build.BuildNumber) - assets: | - $(Build.ArtifactStagingDirectory)/* + assets: $(Build.ArtifactStagingDirectory)/*/* diff --git a/cmake/modules/FindICU.cmake b/cmake/modules/FindICU.cmake index 1b5c53a22b5b1..8c9c1c2b55249 100644 --- a/cmake/modules/FindICU.cmake +++ b/cmake/modules/FindICU.cmake @@ -24,7 +24,7 @@ foreach(MODULE ${ICU_FIND_COMPONENTS}) HINTS ${PC_ICU_${MODULE}_LIBRARY_DIRS}) endforeach() -foreach(sdk ANDROID;FREEBSD;LINUX;WINDOWS;HAIKU) +foreach(sdk ANDROID;FREEBSD;LINUX;WINDOWS;HAIKU;WASM) foreach(MODULE ${ICU_FIND_COMPONENTS}) string(TOUPPER "${MODULE}" MODULE) if("${SWIFT_${sdk}_${SWIFT_HOST_VARIANT_ARCH}_ICU_${MODULE}_INCLUDE}" STREQUAL "") diff --git a/fakeld b/fakeld index 1df157004de91..152fba307e4e0 100755 --- a/fakeld +++ b/fakeld @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python import sys def outputname(): for i in range(len(sys.argv)): diff --git a/lib/Driver/CMakeLists.txt b/lib/Driver/CMakeLists.txt index fe06fa38591c7..27654b876fac1 100644 --- a/lib/Driver/CMakeLists.txt +++ b/lib/Driver/CMakeLists.txt @@ -37,7 +37,7 @@ if(SWIFT_BUILD_STATIC_STDLIB) set(ICU_STATICLIB "TRUE") else() set(ICU_STATICLIB "FALSE") - find_package(ICU REQUIRED COMPONENTS uc i18n) + #find_package(ICU REQUIRED COMPONENTS uc i18n) get_filename_component(ICU_UC_LIBDIR "${ICU_UC_LIBRARIES}" DIRECTORY) get_filename_component(ICU_I18N_LIBDIR "${ICU_I18N_LIBRARIES}" DIRECTORY) endif() diff --git a/stdlib/public/runtime/CMakeLists.txt b/stdlib/public/runtime/CMakeLists.txt index 6597190d10f99..8bf8f06ef12ff 100644 --- a/stdlib/public/runtime/CMakeLists.txt +++ b/stdlib/public/runtime/CMakeLists.txt @@ -197,6 +197,10 @@ add_swift_target_library(swiftImageRegistrationObjectCOFF TARGET_SDKS ${COFF_SDKS} INSTALL_IN_COMPONENT none) +if(WASM IN_LIST SWIFT_CONFIGURED_SDKS) + set(CMAKE_OSX_SYSROOT "${SWIFT_WASM_WASI_SDK_PATH}") +endif() + foreach(sdk ${SWIFT_CONFIGURED_SDKS}) foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES}) set(arch_subdir "${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${arch}") diff --git a/utils/swift_build_support/swift_build_support/targets.py b/utils/swift_build_support/swift_build_support/targets.py index 130e1a5f6c7bc..d142754ebe1bb 100644 --- a/utils/swift_build_support/swift_build_support/targets.py +++ b/utils/swift_build_support/swift_build_support/targets.py @@ -228,10 +228,6 @@ def host_target(): if machine == 'x86_64': return StdlibDeploymentTarget.Haiku.x86_64 - elif system == 'Wasm': - if machine == 'wasm32': - return StdlibDeploymentTarget.Wasm.wasm32 - raise NotImplementedError('System "%s" with architecture "%s" is not ' 'supported' % (system, machine))