swift: update from 5.3.3 to 5.4

This commit is contained in:
Butta 2021-01-14 20:42:45 +05:30 committed by buttaface
parent 29c684a712
commit b6df5e7f6c
28 changed files with 940 additions and 1350 deletions

View File

@ -2,8 +2,8 @@ TERMUX_PKG_HOMEPAGE=https://github.com/apple/swift-corelibs-libdispatch
TERMUX_PKG_DESCRIPTION="The libdispatch project, for concurrency on multicore hardware"
TERMUX_PKG_LICENSE="Apache-2.0"
TERMUX_PKG_MAINTAINER="@buttaface"
_VERSION=5.3.3
_VERSION=5.4
TERMUX_PKG_VERSION=1:${_VERSION}
TERMUX_PKG_SRCURL=https://github.com/apple/swift-corelibs-libdispatch/archive/swift-${_VERSION}-RELEASE.tar.gz
TERMUX_PKG_SHA256=84a482afefdcda26c7dc83e3b75e662ed7705786a34a6b4958c0cdc6cace2c46
TERMUX_PKG_SHA256=bafbcc1feaf8ac3a82edffde27b85820936cbfd0d194c9c1a320a13c356083c0
TERMUX_PKG_DEPENDS="libc++, libblocksruntime"

View File

@ -2,7 +2,7 @@ TERMUX_PKG_HOMEPAGE=https://github.com/apple/swift-llbuild
TERMUX_PKG_DESCRIPTION="A low-level build system, used by the Swift Package Manager"
TERMUX_PKG_LICENSE="Apache-2.0, NCSA"
TERMUX_PKG_MAINTAINER="@buttaface"
TERMUX_PKG_VERSION=5.3
TERMUX_PKG_VERSION=5.4
TERMUX_PKG_SRCURL=https://github.com/apple/swift-llbuild/archive/swift-${TERMUX_PKG_VERSION}-RELEASE.tar.gz
TERMUX_PKG_SHA256=6fddae33feb77cc13c797069cb91ac091af54cb6b267267f0de2bb45ceef1b78
TERMUX_PKG_SHA256=91d3e454fff11b14bf89e6ab2b61bacb39395f92d5aab336923670aaa0a7e2fc
TERMUX_PKG_DEPENDS="libc++, libandroid-spawn, libsqlite"

View File

@ -2,10 +2,10 @@ diff --git a/lib/llvm/Support/CMakeLists.txt b/lib/llvm/Support/CMakeLists.txt
index 8e79e18..a844183 100644
--- a/lib/llvm/Support/CMakeLists.txt
+++ b/lib/llvm/Support/CMakeLists.txt
@@ -45,3 +45,6 @@ endif()
execinfo)
@@ -65,5 +65,5 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
endif()
+if(${CMAKE_SYSTEM_NAME} MATCHES "Android")
if(${CMAKE_SYSTEM_NAME} MATCHES "Android|Darwin|Linux")
- target_link_libraries(llvmSupport PRIVATE curses)
+ target_link_libraries(llvmSupport PRIVATE android-spawn curses)
+endif()
endif()

View File

@ -2,11 +2,10 @@ TERMUX_PKG_HOMEPAGE=https://swift.org/
TERMUX_PKG_DESCRIPTION="Swift is a high-performance system programming language"
TERMUX_PKG_LICENSE="Apache-2.0, NCSA"
TERMUX_PKG_MAINTAINER="@buttaface"
TERMUX_PKG_VERSION=5.3.3
TERMUX_PKG_REVISION=2
TERMUX_PKG_VERSION=5.4
SWIFT_RELEASE="RELEASE"
TERMUX_PKG_SRCURL=https://github.com/apple/swift/archive/swift-$TERMUX_PKG_VERSION-$SWIFT_RELEASE.tar.gz
TERMUX_PKG_SHA256=f32b9dd541fbf3a412123138eb8aaf0fa793d866779c6c3cd5df6621788258c3
TERMUX_PKG_SHA256=421dafdb0dd4c55cdfed4d8736e965b42a0d97f690bb13528947f9cc3f7ddca9
TERMUX_PKG_HOSTBUILD=true
TERMUX_PKG_DEPENDS="binutils-gold, clang, libc++, ndk-sysroot, libandroid-glob, libandroid-spawn, libcurl, libicu, libicu-static, libsqlite, libuuid, libxml2, libdispatch, llbuild"
TERMUX_PKG_BUILD_DEPENDS="cmake, ninja, perl, pkg-config, python2, rsync"
@ -32,32 +31,51 @@ termux_step_post_get_source() {
mv .temp swift
declare -A library_checksums
library_checksums[swift-cmark]=24316b173df877c02ea6f3a080b2bf69e8b644a301d3510e9c13fa1059b279e9
library_checksums[llvm-project]=fe3fb21653263c3dd4b9e02794169445f5460751b155a4c7277a37145ce057f3
library_checksums[swift-corelibs-libdispatch]=84a482afefdcda26c7dc83e3b75e662ed7705786a34a6b4958c0cdc6cace2c46
library_checksums[swift-corelibs-foundation]=a11ef4cf6e26d9055bbf0d9c56fe018578b8e1ca1f1733f982b5bb95a01ee11a
library_checksums[swift-corelibs-xctest]=64812585a4acdf9eaf481039455102b87a33e6f762abef3891ecc9c4a222883c
library_checksums[swift-llbuild]=560a6f12292de156be23a22ea0932f95e300443ad1d422e03a7dacb689e74e78
library_checksums[swift-package-manager]=ad79ddfff3c0bdafa28594206f02ac22956a0e98067fd3fc546c355b9e571c5a
library_checksums[swift-cmark]=ca30ea99bdad03b80939c74899ddcd7cc7e2a55d36fe357f98ff7f620442142e
library_checksums[llvm-project]=1b49d4e87f445f5dbf044e2e29690650618bea811acb82fa2b2eaab5a766a907
library_checksums[swift-corelibs-libdispatch]=bafbcc1feaf8ac3a82edffde27b85820936cbfd0d194c9c1a320a13c356083c0
library_checksums[swift-corelibs-foundation]=28f2033b6bdaf0d6d0984fb3f85fafad351b0511a5b99293b2b3ba561cb27f05
library_checksums[swift-corelibs-xctest]=aaf8a15b9ff5fde88ba594364a39534f2302ed9c6c5c251c54c93f71f0860c26
library_checksums[swift-llbuild]=91d3e454fff11b14bf89e6ab2b61bacb39395f92d5aab336923670aaa0a7e2fc
library_checksums[swift-argument-parser]=49acf58c698e2671976820b8baf7ccc74ebedf842007d5e1d7711c2f123b3db1
library_checksums[Yams]=4b31dfa768206a76cb683a695e611572e62e4aa34cdaa248c5a74509cbccd730
library_checksums[swift-driver]=b12cd6c4f8500a543af139cf2b75fb9c432a773aaba97d04a98d73caa1e659a0
library_checksums[swift-tools-support-core]=cc89ac700acbf0fd3cbc722768229ba65f5e9a7e58201d13071ff2c416381508
library_checksums[swift-package-manager]=53a9afee939ccc36bfcd019a57e3d5ffe36ffa027645f99fd3fae893d4bc69a7
for library in "${!library_checksums[@]}"; do \
if [ "$library" = "swift-argument-parser" ]; then
GH_ORG="apple"
SRC_VERSION="0.3.0"
TAR_NAME=$SRC_VERSION
elif [ "$library" = "Yams" ]; then
GH_ORG="jpsim"
SRC_VERSION="3.0.1"
TAR_NAME=$SRC_VERSION
else
GH_ORG="apple"
SRC_VERSION=$SWIFT_RELEASE
TAR_NAME=swift-$TERMUX_PKG_VERSION-$SWIFT_RELEASE
fi
termux_download \
https://github.com/apple/$library/archive/swift-$TERMUX_PKG_VERSION-$SWIFT_RELEASE.tar.gz \
$TERMUX_PKG_CACHEDIR/$library-$TERMUX_PKG_VERSION.tar.gz \
https://github.com/$GH_ORG/$library/archive/$TAR_NAME.tar.gz \
$TERMUX_PKG_CACHEDIR/$library-$SRC_VERSION.tar.gz \
${library_checksums[$library]}
tar xf $TERMUX_PKG_CACHEDIR/$library-$TERMUX_PKG_VERSION.tar.gz
mv $library-swift-${TERMUX_PKG_VERSION}-$SWIFT_RELEASE $library
tar xf $TERMUX_PKG_CACHEDIR/$library-$SRC_VERSION.tar.gz
mv $library-$TAR_NAME $library
done
mv swift-cmark cmark
mv swift-llbuild llbuild
mv Yams yams
mv swift-package-manager swiftpm
if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then
termux_download \
https://swift.org/builds/swift-$TERMUX_PKG_VERSION-release/ubuntu2004/swift-$TERMUX_PKG_VERSION-$SWIFT_RELEASE/$SWIFT_BIN.tar.gz \
$TERMUX_PKG_CACHEDIR/$SWIFT_BIN.tar.gz \
e2624f2b56cd63011aa1a185ea3fa9aedf157efe86e6b21b3eacc569a948e75e
751ea4f939612c705e09f6da9bc45aac8d918956429c97274c806a99ac3b03c4
fi
fi
# The Swift compiler searches for the clang headers so symlink against them.
@ -73,7 +91,7 @@ termux_step_host_build() {
# Natively compile llvm-tblgen and some other files needed later.
SWIFT_BUILD_ROOT=$TERMUX_PKG_BUILDDIR $TERMUX_PKG_SRCDIR/swift/utils/build-script \
-R --no-assertions -j $TERMUX_MAKE_PROCESSES $SWIFT_PATH_FLAGS \
--skip-build-cmark --skip-build-llvm --skip-build-swift \
--skip-build-cmark --skip-build-llvm --skip-build-swift --build-toolchain-only \
--host-cc=$TERMUX_STANDALONE_TOOLCHAIN/bin/clang \
--host-cxx=$TERMUX_STANDALONE_TOOLCHAIN/bin/clang++
@ -96,8 +114,7 @@ termux_step_pre_configure() {
sed "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" \
$TERMUX_PKG_BUILDER_DIR/swiftpm-Utilities-bootstrap | \
sed "s%\@TERMUX_PKG_BUILDDIR\@%${TERMUX_PKG_BUILDDIR}%g" | \
sed "s%\@SWIFT_ARCH\@%${SWIFT_ARCH}%g" | patch -p1
sed "s%\@TERMUX_PKG_BUILDDIR\@%${TERMUX_PKG_BUILDDIR}%g" | patch -p1
if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then
sed "s%\@TERMUX_STANDALONE_TOOLCHAIN\@%${TERMUX_STANDALONE_TOOLCHAIN}%g" \
@ -112,16 +129,9 @@ termux_step_pre_configure() {
termux_step_make() {
if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then
export TERMUX_SWIFTPM_FLAGS="-target $CCTERMUX_HOST_PLATFORM \
-sdk $TERMUX_STANDALONE_TOOLCHAIN/sysroot \
-L$TERMUX_STANDALONE_TOOLCHAIN/lib/gcc/$TERMUX_HOST_PLATFORM/4.9.x \
-tools-directory $TERMUX_STANDALONE_TOOLCHAIN/$TERMUX_HOST_PLATFORM/bin \
-Xlinker -rpath -Xlinker $TERMUX_PREFIX/lib"
export TERMUX_SWIFT_FLAGS="$TERMUX_SWIFTPM_FLAGS -resource-dir \
$TERMUX_PKG_BUILDDIR/swift-android-$SWIFT_ARCH/lib/swift"
SWIFT_BUILD_FLAGS="$SWIFT_BUILD_FLAGS --android
--android-ndk $TERMUX_STANDALONE_TOOLCHAIN --android-arch $SWIFT_ARCH
--android-api-level $TERMUX_PKG_API_LEVEL --android-icu-uc $TERMUX_PREFIX/lib/libicuuc.so
--android-icu-uc $TERMUX_PREFIX/lib/libicuuc.so
--android-icu-uc-include $TERMUX_PREFIX/include/
--android-icu-i18n $TERMUX_PREFIX/lib/libicui18n.so
--android-icu-i18n-include $TERMUX_PREFIX/include/
@ -133,8 +143,9 @@ termux_step_make() {
fi
SWIFT_BUILD_ROOT=$TERMUX_PKG_BUILDDIR $TERMUX_PKG_SRCDIR/swift/utils/build-script \
$SWIFT_BUILD_FLAGS --xctest -b -p --build-swift-static-stdlib --install-swift \
--swift-install-components=$SWIFT_COMPONENTS --llvm-install-components=IndexStore \
$SWIFT_BUILD_FLAGS --xctest -b -p --android-api-level $TERMUX_PKG_API_LEVEL \
--build-swift-static-stdlib --swift-install-components=$SWIFT_COMPONENTS \
--llvm-install-components=IndexStore --install-llvm --install-swift \
--install-libdispatch --install-foundation --install-xctest --install-llbuild \
--install-swiftpm
}

View File

@ -1,19 +0,0 @@
diff --git a/llbuild/Package.swift b/llbuild/Package.swift
index 6141342..5e86282 100644
--- a/llbuild/Package.swift
+++ b/llbuild/Package.swift
@@ -1,4 +1,4 @@
-// swift-tools-version:5.0
+// swift-tools-version:5.2
// This file defines Swift package manager support for llbuild. See:
// https://github.com/apple/swift-package-manager/tree/master/Documentation
@@ -150,7 +150,7 @@ let package = Package(
name: "llvmSupport",
dependencies: ["llvmDemangle"],
path: "lib/llvm/Support",
- linkerSettings: [.linkedLibrary("ncurses", .when(platforms: [.linux, .macOS]))]
+ linkerSettings: [.linkedLibrary("ncurses", .when(platforms: [.linux, .macOS, .android]))]
),
],
cxxLanguageStandard: .cxx14

View File

@ -1,65 +0,0 @@
commit f7576a7bef5ca33c5598ad6b63a37f6d4c69aa98
Date: Fri, 2 Oct 2020 14:03:49 +0530
Subject: [android] Add support for building the toolchain for ARMv7
diff --git a/swift/cmake/modules/AddSwift.cmake b/swift/cmake/modules/AddSwift.cmake
index ec61d2abb836..0b9ce10842ac 100644
--- a/swift/cmake/modules/AddSwift.cmake
+++ b/swift/cmake/modules/AddSwift.cmake
@@ -291,6 +291,15 @@ function(_add_host_variant_c_compile_flags target)
endif()
endif()
+ # The LLVM backend is built with these defines on most 32-bit platforms,
+ # llvm/llvm-project@66395c9, which can cause incompatibilities with the Swift
+ # frontend if not built the same way.
+ if("${CFLAGS_ARCH}" MATCHES "armv6|armv7|i686" AND
+ NOT (CFLAGS_SDK STREQUAL ANDROID AND SWIFT_ANDROID_API_LEVEL LESS 24))
+ list(APPEND result
+ "-D_LARGEFILE_SOURCE"
+ "-D_FILE_OFFSET_BITS=64")
+ endif()
set("${CFLAGS_RESULT_VAR_NAME}" "${result}" PARENT_SCOPE)
endfunction()
diff --git a/swift/lib/ClangImporter/ImportType.cpp b/swift/lib/ClangImporter/ImportType.cpp
index f58dbb837e5d..70bd70dff9ac 100644
--- a/swift/lib/ClangImporter/ImportType.cpp
+++ b/swift/lib/ClangImporter/ImportType.cpp
@@ -556,7 +556,7 @@ namespace {
if (size > 4096)
return Type();
- SmallVector<TupleTypeElt, 8> elts{size, elementType};
+ SmallVector<TupleTypeElt, 8> elts{static_cast<size_t>(size), elementType};
return TupleType::get(elts, elementType->getASTContext());
}
diff --git a/swift/stdlib/public/runtime/Float16Support.cpp b/swift/stdlib/public/runtime/Float16Support.cpp
index d7377400ba0b..9d8c4940054d 100644
--- a/swift/stdlib/public/runtime/Float16Support.cpp
+++ b/swift/stdlib/public/runtime/Float16Support.cpp
@@ -29,7 +29,7 @@
// Android NDK <r21 do not provide `__aeabi_d2h` in the compiler runtime,
// provide shims in that case.
-#if (defined(ANDROID) && defined(__ARM_ARCH_7A__) && defined(__ARM_EABI__)) || \
+#if (defined(__ANDROID__) && defined(__ARM_ARCH_7A__) && defined(__ARM_EABI__)) || \
((defined(__i686__) || defined(__x86_64__)) && !defined(__APPLE__))
#include "../SwiftShims/Visibility.h"
diff --git a/swift/utils/build-script-impl b/swift/utils/build-script-impl
index 2bb99c886a66..1977b72fd995 100755
--- a/swift/utils/build-script-impl
+++ b/swift/utils/build-script-impl
@@ -454,6 +454,10 @@ function set_build_options_for_host() {
SWIFT_HOST_TRIPLE="aarch64-unknown-linux-android"
llvm_target_arch="AArch64"
;;
+ android-armv7)
+ SWIFT_HOST_TRIPLE="armv7-unknown-linux-androideabi"
+ llvm_target_arch="ARM"
+ ;;
linux-armv6)
SWIFT_HOST_TRIPLE="armv6-unknown-linux-gnueabihf"
llvm_target_arch="ARM"

View File

@ -1,52 +0,0 @@
diff --git a/swift/utils/build-script b/swift/utils/build-script
index b1d060328bc..218c9215260 100755
--- a/swift/utils/build-script
+++ b/swift/utils/build-script
@@ -799,8 +807,9 @@
self._execute_merged_host_lipo_core_action()
# Non-build-script-impl products...
- # Note: currently only supports building for the host.
- for host_target in [self.args.host_target]:
+ for host_target in all_host_names:
+ if self.args.skip_local_build and host_target == self.args.host_target:
+ continue
for product_class in product_classes:
if product_class.is_build_script_impl_product():
continue
diff --git a/swift/utils/gen-static-stdlib-link-args b/swift/utils/gen-static-stdlib-link-args
index 0fa009d67d3..abd98c2493f 100755
--- a/swift/utils/gen-static-stdlib-link-args
+++ b/swift/utils/gen-static-stdlib-link-args
@@ -60,9 +60,8 @@ function write_linkfile {
fi
cat >$OUTPUTFILE <<EOF
-ldl
--lpthread
-lswiftCore
--lswiftImageInspectionShared
+-llog
$ICU_LIBS
-lstdc++
-lm
diff --git a/swift/utils/swift_build_support/swift_build_support/products/swiftpm.py b/swift/utils/swift_build_support/swift_build_support/products/swiftpm.py
index 475483618f1..2bea230012b 100644
--- a/swift/utils/swift_build_support/swift_build_support/products/swiftpm.py
+++ b/swift/utils/swift_build_support/swift_build_support/products/swiftpm.py
@@ -56,6 +56,7 @@ class SwiftPM(product.Product):
# Pass Cross compile host info
if self.has_cross_compile_hosts(self.args):
+ helper_cmd += ['--skip-cmake-bootstrap']
helper_cmd += ['--cross-compile-hosts']
for cross_compile_host in self.args.cross_compile_hosts:
helper_cmd += [cross_compile_host]
@@ -83,7 +86,7 @@ class SwiftPM(product.Product):
@classmethod
def get_install_destdir(self, args, host_target, build_dir):
install_destdir = args.install_destdir
- if self.has_cross_compile_hosts(args):
+ if False:
build_root = os.path.dirname(build_dir)
install_destdir = '%s/intermediate-install/%s' % (build_root, host_target)
return install_destdir

View File

@ -1,128 +1,30 @@
diff --git a/swift/CMakeLists.txt b/swift/CMakeLists.txt
index 7490e1df821..9a5ec99cba0 100644
index b7503ecdd6..c643c2c9a5 100644
--- a/swift/CMakeLists.txt
+++ b/swift/CMakeLists.txt
@@ -944,7 +944,7 @@
message(STATUS "Doxygen: enabled")
@@ -165,6 +165,8 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL Windows AND NOT CMAKE_HOST_SYSTEM_NAME STREQUA
set(SWIFT_USE_LINKER_default "lld")
elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
set(SWIFT_USE_LINKER_default "")
+elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "ANDROID")
+ set(SWIFT_USE_LINKER_default "lld")
else()
set(SWIFT_USE_LINKER_default "gold")
endif()
diff --git a/swift/localization/CMakeLists.txt b/swift/localization/CMakeLists.txt
index 07a3585a66c..461a98b6856 100644
--- a/swift/localization/CMakeLists.txt
+++ b/swift/localization/CMakeLists.txt
@@ -1,3 +1,4 @@
+if("${SWIFT_NATIVE_SWIFT_TOOLS_PATH}" STREQUAL "${SWIFT_RUNTIME_OUTPUT_INTDIR}")
set(diagnostic_witness "${CMAKE_BINARY_DIR}/share/swift/diagnostics/generated")
-if(SWIFT_BUILD_SYNTAXPARSERLIB OR SWIFT_BUILD_SOURCEKIT)
+if((SWIFT_BUILD_SYNTAXPARSERLIB OR SWIFT_BUILD_SOURCEKIT) AND ${SWIFT_HOST_VARIANT_SDK} MATCHES "OSX|WINDOWS")
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
if(CMAKE_C_COMPILER_ID STREQUAL Clang AND
CMAKE_C_COMPILER_VERSION VERSION_GREATER 3.8
diff --git a/swift/cmake/modules/AddSwift.cmake b/swift/cmake/modules/AddSwift.cmake
index b40bd4d881e..8c51c6b6857 100644
--- a/swift/cmake/modules/AddSwift.cmake
+++ b/swift/cmake/modules/AddSwift.cmake
@@ -480,10 +480,10 @@ function(_add_variant_link_flags)
list(APPEND library_search_directories
${CMAKE_BINARY_DIR}/winsdk_lib_${LFLAGS_ARCH}_symlinks)
elseif("${LFLAGS_SDK}" STREQUAL "HAIKU")
- list(APPEND link_libraries "bsd" "atomic")
+ list(APPEND link_libraries "bsd")
list(APPEND result "-Wl,-Bsymbolic")
elseif("${LFLAGS_SDK}" STREQUAL "ANDROID")
- list(APPEND link_libraries "dl" "log" "atomic")
+ list(APPEND link_libraries "dl" "log")
# We need to add the math library, which is linked implicitly by libc++
list(APPEND result "-lm")
diff --git a/swift/lib/Driver/CMakeLists.txt b/swift/lib/Driver/CMakeLists.txt
index 448f5044b70..e665dfcfefe 100644
--- a/swift/lib/Driver/CMakeLists.txt
+++ b/swift/lib/Driver/CMakeLists.txt
@@ -27,42 +27,3 @@ target_link_libraries(swiftDriver PRIVATE
swiftAST
swiftBasic
swiftOption)
-
-# Generate the static-stdlib-args.lnk file used by -static-stdlib option
-# for 'GenericUnix' (eg linux)
-if(SWIFT_BUILD_STATIC_STDLIB)
- set(static_stdlib_lnk_file_list)
- foreach(sdk ${SWIFT_CONFIGURED_SDKS})
- if("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "ELF")
- string(TOLOWER "${sdk}" lowercase_sdk)
- if(SWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_STATICLIB)
- set(ICU_STATICLIB "TRUE")
- else()
- set(ICU_STATICLIB "FALSE")
- 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()
- set(linkfile "${lowercase_sdk}/static-stdlib-args.lnk")
- add_custom_command_target(swift_static_stdlib_${sdk}_args
- COMMAND
- "${SWIFT_SOURCE_DIR}/utils/gen-static-stdlib-link-args"
- "${sdk}"
- "${SWIFTSTATICLIB_DIR}/${linkfile}"
- "${ICU_STATICLIB}"
- "${ICU_UC_LIBDIR}"
- "${ICU_I18N_LIBDIR}"
- OUTPUT
- "${SWIFTSTATICLIB_DIR}/${linkfile}"
- DEPENDS
- "${SWIFT_SOURCE_DIR}/utils/gen-static-stdlib-link-args")
-
- list(APPEND static_stdlib_lnk_file_list ${swift_static_stdlib_${sdk}_args})
- swift_install_in_component(FILES "${SWIFTSTATICLIB_DIR}/${linkfile}"
- DESTINATION "lib/swift_static/${lowercase_sdk}"
- COMPONENT stdlib)
- endif()
- endforeach()
- add_custom_target(swift_static_lnk_args ALL DEPENDS ${static_stdlib_lnk_file_list})
- add_dependencies(stdlib swift_static_lnk_args)
-endif()
diff --git a/swift/stdlib/CMakeLists.txt b/swift/stdlib/CMakeLists.txt
index 9f3cf240d3d..d2ce14d5f47 100644
--- a/swift/stdlib/CMakeLists.txt
+++ b/swift/stdlib/CMakeLists.txt
@@ -83,6 +83,43 @@ if(SWIFT_BUILD_STATIC_STDLIB)
else()
list(APPEND SWIFT_STDLIB_LIBRARY_BUILD_TYPES STATIC)
endif()
+
+ # Generate the static-stdlib-args.lnk file used by -static-stdlib option
+ # for 'GenericUnix' (eg linux)
+ set(static_stdlib_lnk_file_list)
+ foreach(sdk ${SWIFT_SDKS})
+ if("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "ELF")
+ string(TOLOWER "${sdk}" lowercase_sdk)
+ if(SWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_STATICLIB)
+ set(ICU_STATICLIB "TRUE")
+ else()
+ set(ICU_STATICLIB "FALSE")
+ 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()
+ set(linkfile "${lowercase_sdk}/static-stdlib-args.lnk")
+ add_custom_command_target(swift_static_stdlib_${sdk}_args
+ COMMAND
+ "${SWIFT_SOURCE_DIR}/utils/gen-static-stdlib-link-args"
+ "${sdk}"
+ "${SWIFTSTATICLIB_DIR}/${linkfile}"
+ "${ICU_STATICLIB}"
+ "${ICU_UC_LIBDIR}"
+ "${ICU_I18N_LIBDIR}"
+ OUTPUT
+ "${SWIFTSTATICLIB_DIR}/${linkfile}"
+ DEPENDS
+ "${SWIFT_SOURCE_DIR}/utils/gen-static-stdlib-link-args")
+
+ list(APPEND static_stdlib_lnk_file_list ${swift_static_stdlib_${sdk}_args})
+ swift_install_in_component(FILES "${SWIFTSTATICLIB_DIR}/${linkfile}"
+ DESTINATION "lib/swift_static/${lowercase_sdk}"
+ COMPONENT stdlib)
+ endif()
+ endforeach()
+ add_custom_target(swift_static_lnk_args ALL DEPENDS ${static_stdlib_lnk_file_list})
+ add_dependencies(stdlib swift_static_lnk_args)
endif()
function(swift_create_stdlib_targets name variant define_all_alias)
add_custom_command(
@@ -32,3 +33,4 @@ swift_install_in_component(
PATTERN "*.db"
PATTERN "*.yaml"
)
+endif()
diff --git a/swift/stdlib/public/Platform/CMakeLists.txt b/swift/stdlib/public/Platform/CMakeLists.txt
index 8ded40c5791..c811000b1d1 100644
--- a/swift/stdlib/public/Platform/CMakeLists.txt
@ -160,6 +62,20 @@ index 8ded40c5791..c811000b1d1 100644
"-DGLIBC_INCLUDE_PATH=${absolute_libc_include_path}"
"-DGLIBC_ARCH_INCLUDE_PATH=${absolute_libc_arch_include_path}")
diff --git a/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake b/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake
index 38191b01a64..1f851d3409c 100644
--- a/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake
+++ b/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake
@@ -397,6 +397,9 @@ function(_add_target_variant_link_flags)
list(APPEND result "-Wl,-Bsymbolic")
elseif("${LFLAGS_SDK}" STREQUAL "ANDROID")
list(APPEND link_libraries "dl" "log")
+ if(LFLAGS_ARCH STREQUAL "armv7")
+ list(APPEND link_libraries "atomic")
+ endif()
# We need to add the math library, which is linked implicitly by libc++
list(APPEND result "-lm")
diff --git a/swift/stdlib/public/SwiftShims/CMakeLists.txt b/swift/stdlib/public/SwiftShims/CMakeLists.txt
index 23ac72bcda5..23aecfc9bc5 100644
--- a/swift/stdlib/public/SwiftShims/CMakeLists.txt
@ -187,13 +103,13 @@ index 7a77e125f95..7eddfea2054 100644
@@ -79,6 +79,9 @@ function(add_sourcekit_default_compiler_flags target)
endif()
target_compile_options(${target} PRIVATE
${c_compile_flags} -fblocks)
-fblocks)
+ # Look in Termux sysroot for dispatch/dispatch.h from libdispatch
+ target_include_directories("${target}" SYSTEM PRIVATE
+ ${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include)
target_link_options(${target} PRIVATE
${link_flags})
target_link_directories(${target} PRIVATE
endfunction()
# Add a new SourceKit library.
@@ -165,7 +168,7 @@ macro(add_sourcekit_library name)
endif()
endif()
@ -202,7 +118,7 @@ index 7a77e125f95..7eddfea2054 100644
+ if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux" AND NOT "${SWIFT_HOST_VARIANT_SDK}" STREQUAL "ANDROID")
if(SOURCEKITLIB_SHARED)
set_target_properties(${name} PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE)
set_target_properties(${name} PROPERTIES INSTALL_RPATH "$ORIGIN/../lib/swift/linux:/usr/lib/swift/linux")
set_target_properties(${name} PROPERTIES INSTALL_RPATH "$ORIGIN/../lib/swift/linux")
diff --git a/swift/tools/libSwiftSyntaxParser/CMakeLists.txt b/swift/tools/libSwiftSyntaxParser/CMakeLists.txt
index 42dda212164..2338df9072a 100644
--- a/swift/tools/libSwiftSyntaxParser/CMakeLists.txt
@ -217,17 +133,3 @@ index 42dda212164..2338df9072a 100644
target_link_libraries(libSwiftSyntaxParser PRIVATE
swiftParse)
set_target_properties(libSwiftSyntaxParser
diff --git a/swift/tools/swift-ide-test/CMakeLists.txt b/swift/tools/swift-ide-test/CMakeLists.txt
index 095e97d5f15..dae9946aba8 100644
--- a/swift/tools/swift-ide-test/CMakeLists.txt
+++ b/swift/tools/swift-ide-test/CMakeLists.txt
@@ -13,7 +13,8 @@ target_link_libraries(swift-ide-test
# If libxml2 is available, make it available for swift-ide-test.
if(LibXml2_FOUND)
- include_directories(SYSTEM ${LIBXML2_INCLUDE_DIR})
+ # No way to not build this, so look in Termux sysroot for iconv.h from libiconv
+ include_directories(SYSTEM ${LIBXML2_INCLUDE_DIR} ${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include)
target_link_libraries(swift-ide-test PRIVATE ${LIBXML2_LIBRARIES})
target_compile_definitions(swift-ide-test PRIVATE SWIFT_HAVE_LIBXML=1)
if("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "OpenBSD" AND NOT CMAKE_CROSSCOMPILING)

View File

@ -0,0 +1,13 @@
--- a/swift-corelibs-foundation/Sources/Foundation/CMakeLists.txt 2020-12-13 15:31:11.444709471 +0000
+++ b/swift-corelibs-foundation/Sources/Foundation/CMakeLists.txt 2020-12-13 15:31:45.594845323 +0000
@@ -145,8 +145,10 @@
$<$<PLATFORM_ID:Windows>:pathcch>
CoreFoundation
uuid
+ android-spawn
PUBLIC
swiftDispatch)
+target_link_directories(Foundation PUBLIC ${CMAKE_FIND_ROOT_PATH}/usr/lib)
set_target_properties(Foundation PROPERTIES
INSTALL_RPATH "$ORIGIN"
BUILD_RPATH "$<TARGET_FILE_DIR:swiftDispatch>"

View File

@ -0,0 +1,43 @@
From 0f8ab3e42a4a052dec0e4b66c252fd83e8e5ba7c Mon Sep 17 00:00:00 2001
Date: Wed, 2 Dec 2020 18:33:48 +0530
Subject: [PATCH] [android] Put in fixes for librt and armv7-a
Android doesn't have a separate librt, it's just part of libc. Also, the static
build wasn't working for armv7-a, because the test executables wouldn't link
with the multiple definition errors listed in android/ndk#176, so use the
workaround given there.
diff --git a/swift-corelibs-libdispatch/CMakeLists.txt b/swift-corelibs-libdispatch/CMakeLists.txt
index 75c419c13..36da01122 100644
--- a/swift-corelibs-libdispatch/CMakeLists.txt
+++ b/swift-corelibs-libdispatch/CMakeLists.txt
@@ -113,7 +113,9 @@ if(__BUILTIN_TRAP)
set(HAVE_NORETURN_BUILTIN_TRAP 1)
endif()
-find_package(LibRT)
+if(NOT CMAKE_SYSTEM_NAME STREQUAL Android)
+ find_package(LibRT)
+endif()
check_function_exists(_pthread_workqueue_init HAVE__PTHREAD_WORKQUEUE_INIT)
check_function_exists(getprogname HAVE_GETPROGNAME)
diff --git a/swift-corelibs-libdispatch/tests/CMakeLists.txt b/swift-corelibs-libdispatch/tests/CMakeLists.txt
index a27603559..0176a062b 100644
--- a/swift-corelibs-libdispatch/tests/CMakeLists.txt
+++ b/swift-corelibs-libdispatch/tests/CMakeLists.txt
@@ -88,6 +88,14 @@ function(add_unit_test name)
target_compile_options(${name} PRIVATE -fblocks)
target_compile_options(${name} PRIVATE -Wall -Wno-deprecated-declarations)
endif()
+ # Without this flag, cross-compiling static test executables for Android armv7
+ # fails with the multiple definition errors seen in android/ndk#176, so I
+ # pulled in this workaround noted there. The tests build and run with this
+ # flag applied.
+ if(NOT BUILD_SHARED_LIBS AND CMAKE_SYSTEM_NAME STREQUAL Android AND
+ CMAKE_SYSTEM_PROCESSOR STREQUAL armv7-a)
+ target_link_options(${name} PRIVATE "LINKER:--allow-multiple-definition")
+ endif()
target_link_libraries(${name}
PRIVATE
dispatch

View File

@ -1,10 +1,3 @@
commit 25ee7e8f610bf71816717f45946ee8e543889e89
Date: Wed May 6 12:06:09 2020 +0530
[CMake] fix runpath for ELF platforms
Remove the absolute path to the host toolchain's stdlib from libXCTest.so and add $ORIGIN.
diff --git a/swift-corelibs-xctest/CMakeLists.txt b/swift-corelibs-xctest/CMakeLists.txt
index 531e7c0..589930f 100644
--- a/swift-corelibs-xctest/CMakeLists.txt

View File

@ -0,0 +1,48 @@
diff --git a/swift/stdlib/cmake/modules/SwiftSource.cmake b/swift/stdlib/cmake/modules/SwiftSource.cmake
index 21e90e30d7b..1d9706d1332 100644
--- a/swift/stdlib/cmake/modules/SwiftSource.cmake
+++ b/swift/stdlib/cmake/modules/SwiftSource.cmake
@@ -232,7 +232,12 @@ function(_add_target_variant_swift_compile_flags
endif()
swift_optimize_flag_for_build_type("${build_type}" optimize_flag)
- list(APPEND result "${optimize_flag}")
+ #Workaround for Swift armv7 optimization bug
+ if("${arch}" MATCHES "arm")
+ list(APPEND result "-Onone")
+ else()
+ list(APPEND result "${optimize_flag}")
+ endif()
is_build_type_with_debuginfo("${build_type}" debuginfo)
if(debuginfo)
diff --git a/swift/stdlib/public/runtime/Metadata.cpp b/swift/stdlib/public/runtime/Metadata.cpp
index 2e466715ffd..c870edc4507 100644
--- a/swift/stdlib/public/runtime/Metadata.cpp
+++ b/swift/stdlib/public/runtime/Metadata.cpp
@@ -754,6 +754,7 @@ MetadataResponse swift::swift_getCanonicalSpecializedMetadata(
MetadataState::Complete};
}
+#if !defined(__arm__)
if (auto *token =
description
->getCanonicalMetadataPrespecializationCachingOnceToken()) {
@@ -761,6 +762,7 @@ MetadataResponse swift::swift_getCanonicalSpecializedMetadata(
// NOTE: If there is no token, then there are no canonical prespecialized
// metadata records, either.
}
+#endif
const void *const *arguments =
reinterpret_cast<const void *const *>(candidate->getGenericArgs());
auto &cache = getCache(*description);
@@ -802,7 +804,9 @@ MetadataResponse swift::swift_getCanonicalPrespecializedGenericMetadata(
const TypeContextDescriptor *description, swift_once_t *token) {
description = swift_auth_data_non_address(
description, SpecialPointerAuthDiscriminators::TypeDescriptor);
+#if !defined(__arm__)
cacheCanonicalSpecializedMetadata(description, token);
+#endif
return _swift_getGenericMetadata(request, arguments, description);
}

View File

@ -0,0 +1,117 @@
commit 47d94da23587b7343b1fcddf44c2db24f2ed5331
Date: Fri Dec 4 21:08:59 2020 +0530
[android] Support building the host tools and with the static stdlib
diff --git a/swift/stdlib/public/runtime/CMakeLists.txt b/swift/stdlib/public/runtime/CMakeLists.txt
index fd8e29ae1a85..b1bc4ea4a92a 100644
--- a/swift/stdlib/public/runtime/CMakeLists.txt
+++ b/swift/stdlib/public/runtime/CMakeLists.txt
@@ -116,7 +116,7 @@ add_swift_target_library(swiftRuntime OBJECT_LIBRARY
set(ELFISH_SDKS)
set(COFF_SDKS)
-foreach(sdk ${SWIFT_CONFIGURED_SDKS})
+foreach(sdk ${SWIFT_SDKS})
if("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "ELF")
list(APPEND ELFISH_SDKS ${sdk})
elseif("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "COFF")
@@ -144,7 +144,7 @@ add_swift_target_library(swiftImageRegistrationObjectCOFF
SWIFT_COMPILE_FLAGS ${SWIFT_STANDARD_LIBRARY_SWIFT_FLAGS}
INSTALL_IN_COMPONENT none)
-foreach(sdk ${SWIFT_CONFIGURED_SDKS})
+foreach(sdk ${SWIFT_SDKS})
foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES})
set(arch_subdir "${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${arch}")
set(arch_suffix "${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}")
@@ -224,11 +224,18 @@ foreach(sdk ${SWIFT_CONFIGURED_SDKS})
set(libicu_data_a ${ICU_UC_LIBDIR}/libicudata.a)
endif()
endif()
+ set(libpthread -lpthread)
+ set(android_libraries)
+ if(${sdk} STREQUAL ANDROID)
+ set(android_libraries -llog)
+ set(libpthread)
+ endif()
set(linkfile ${lowercase_sdk}/static-stdlib-args.lnk)
file(WRITE "${SWIFTSTATICLIB_DIR}/${linkfile}" "
-ldl
--lpthread
+${libpthread}
+${android_libraries}
-lswiftCore
${libicu_i18n_a}
${libicu_uc_a}
diff --git a/swift/utils/build-script-impl b/swift/utils/build-script-impl
index 268d23de155a..d33ab94d1bd8 100755
--- a/swift/utils/build-script-impl
+++ b/swift/utils/build-script-impl
@@ -452,17 +452,35 @@ function set_build_options_for_host() {
SWIFT_HOST_VARIANT_ARCH=$architecture
case ${host} in
- android-aarch64)
- SWIFT_HOST_TRIPLE="aarch64-unknown-linux-android${ANDROID_API_LEVEL}"
- llvm_target_arch="AArch64"
- ;;
- android-armv7)
- SWIFT_HOST_TRIPLE="armv7-unknown-linux-androideabi${ANDROID_API_LEVEL}"
- llvm_target_arch="ARM"
- ;;
- android-x86_64)
- SWIFT_HOST_TRIPLE="x86_64-unknown-linux-android${ANDROID_API_LEVEL}"
- llvm_target_arch="X86"
+ android-*)
+ # Clang uses a different sysroot natively on Android in the Termux
+ # app, which the Termux build scripts pass in through a $PREFIX
+ # variable.
+ if [[ "${PREFIX}" ]] ; then
+ llvm_cmake_options+=(
+ -DDEFAULT_SYSROOT:STRING="$(dirname ${PREFIX})"
+ )
+ fi
+ # Android doesn't support building all of compiler-rt yet.
+ if [[ ! $(is_cross_tools_host "${host}") ]] ; then
+ llvm_cmake_options+=(
+ -DCOMPILER_RT_INCLUDE_TESTS:BOOL=FALSE
+ )
+ fi
+ case ${host} in
+ android-aarch64)
+ SWIFT_HOST_TRIPLE="aarch64-unknown-linux-android${ANDROID_API_LEVEL}"
+ llvm_target_arch="AArch64"
+ ;;
+ android-armv7)
+ SWIFT_HOST_TRIPLE="armv7-unknown-linux-androideabi${ANDROID_API_LEVEL}"
+ llvm_target_arch="ARM"
+ ;;
+ android-x86_64)
+ SWIFT_HOST_TRIPLE="x86_64-unknown-linux-android${ANDROID_API_LEVEL}"
+ llvm_target_arch="X86"
+ ;;
+ esac
;;
linux-armv6)
SWIFT_HOST_TRIPLE="armv6-unknown-linux-gnueabihf"
@@ -1756,7 +1774,8 @@ for host in "${ALL_HOSTS[@]}"; do
)
fi
- if [[ ! "${SKIP_BUILD_ANDROID}" ]]; then
+ if [[ ! "${SKIP_BUILD_ANDROID}" ]] ||
+ [[ $(is_cross_tools_host ${host}) && "${host}" == "android-"* ]]; then
cmake_options=(
"${cmake_options[@]}"
-DSWIFT_ANDROID_NDK_PATH:STRING="${ANDROID_NDK}"
@@ -2447,6 +2466,8 @@ for host in "${ALL_HOSTS[@]}"; do
elif [[ "$(uname -s)" == "Haiku" ]] ; then
HOST_CXX_HEADERS_DIR="/boot/system/develop/headers/c++"
elif [[ "${ANDROID_DATA}" ]] ; then
+ # This means we're building natively on Android in the Termux
+ # app, which supplies the $PREFIX variable.
HOST_CXX_HEADERS_DIR="$PREFIX/include/c++"
else # Linux
HOST_CXX_HEADERS_DIR="/usr/include/c++"

View File

@ -1,16 +1,50 @@
commit 9ed67668564257c27e49ff7a07fac0b23f27ba85
Date: Mon, 26 Oct 2020 23:13:22 +0530
Subject: [build-script] Move --native-{clang,llvm,swift}-tools-path
flags into the Python build-script
Also, fix two places where the LLVM path was wrongly employed to set up clang,
and use the Swift path in install_toolchain_path().
diff --git a/swift/CMakeLists.txt b/swift/CMakeLists.txt
index 8be6f4a7abd7..77e81153a232 100644
--- a/swift/CMakeLists.txt
+++ b/swift/CMakeLists.txt
@@ -481,10 +481,12 @@ if(SWIFT_PATH_TO_CMARK_BUILD)
endif()
message(STATUS "")
-if("${SWIFT_NATIVE_LLVM_TOOLS_PATH}" STREQUAL "")
- set(SWIFT_CROSS_COMPILING FALSE)
+# Check if a prebuilt clang path was passed in, as this variable will be
+# assigned if not, in SwiftSharedCMakeConfig.
+if("${SWIFT_NATIVE_CLANG_TOOLS_PATH}" STREQUAL "")
+ set(SWIFT_PREBUILT_CLANG FALSE)
else()
- set(SWIFT_CROSS_COMPILING TRUE)
+ set(SWIFT_PREBUILT_CLANG TRUE)
endif()
include(SwiftSharedCMakeConfig)
diff --git a/swift/cmake/modules/SwiftSharedCMakeConfig.cmake b/swift/cmake/modules/SwiftSharedCMakeConfig.cmake
index c4c15084fe90..9ee086565891 100644
--- a/swift/cmake/modules/SwiftSharedCMakeConfig.cmake
+++ b/swift/cmake/modules/SwiftSharedCMakeConfig.cmake
@@ -58,7 +58,7 @@ macro(swift_common_standalone_build_config_llvm product)
fix_imported_targets_for_xcode("${LLVM_EXPORTED_TARGETS}")
endif()
- if(NOT CMAKE_CROSSCOMPILING AND NOT SWIFT_CROSS_COMPILING)
+ if(NOT CMAKE_CROSSCOMPILING)
set(${product}_NATIVE_LLVM_TOOLS_PATH "${LLVM_TOOLS_BINARY_DIR}")
endif()
@@ -159,7 +159,7 @@ endmacro()
macro(swift_common_standalone_build_config_clang product)
find_package(Clang CONFIG REQUIRED NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
- if (NOT CMAKE_CROSSCOMPILING)
+ if (NOT CMAKE_CROSSCOMPILING AND NOT SWIFT_PREBUILT_CLANG)
set(${product}_NATIVE_CLANG_TOOLS_PATH "${LLVM_TOOLS_BINARY_DIR}")
endif()
diff --git a/swift/stdlib/CMakeLists.txt b/swift/stdlib/CMakeLists.txt
index 81cad0966a1d..a0e3b138809f 100644
index edf7c19f4b7a..91d9f4c28a51 100644
--- a/swift/stdlib/CMakeLists.txt
+++ b/swift/stdlib/CMakeLists.txt
@@ -102,11 +102,11 @@ else()
@@ -112,11 +112,11 @@ else()
# If we use Clang-cl or MSVC, CMake provides default compiler and linker flags that are incompatible
# with the frontend of Clang or Clang++.
if(SWIFT_COMPILER_IS_MSVC_LIKE)
@ -26,11 +60,76 @@ index 81cad0966a1d..a0e3b138809f 100644
endif()
if(CMAKE_C_COMPILER_LAUNCHER MATCHES ".*distcc")
diff --git a/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake b/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake
index 2a6e1d1df071..d5df9c57dd33 100644
--- a/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake
+++ b/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake
@@ -1669,7 +1669,8 @@ function(add_swift_target_library name)
list(APPEND SWIFTLIB_SWIFT_COMPILE_FLAGS "-warn-implicit-overrides")
endif()
- if(NOT SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER AND NOT BUILD_STANDALONE)
+ if(NOT SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER AND NOT BUILD_STANDALONE AND
+ NOT SWIFT_PREBUILT_CLANG)
list(APPEND SWIFTLIB_DEPENDS clang)
endif()
diff --git a/swift/stdlib/public/SwiftShims/CMakeLists.txt b/swift/stdlib/public/SwiftShims/CMakeLists.txt
index 926020372fb2..5ee8a9c92069 100644
--- a/swift/stdlib/public/SwiftShims/CMakeLists.txt
+++ b/swift/stdlib/public/SwiftShims/CMakeLists.txt
@@ -111,7 +111,8 @@ endif()
# First extract the "version" used for Clang's resource directory.
string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" CLANG_VERSION
"${LLVM_PACKAGE_VERSION}")
-if(NOT SWIFT_INCLUDE_TOOLS AND SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER)
+if(NOT SWIFT_INCLUDE_TOOLS AND
+ (SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER OR SWIFT_PREBUILT_CLANG))
if(SWIFT_COMPILER_IS_MSVC_LIKE)
execute_process(COMMAND ${CMAKE_C_COMPILER} /clang:-print-resource-dir
OUTPUT_VARIABLE clang_headers_location
diff --git a/swift/unittests/runtime/CMakeLists.txt b/swift/unittests/runtime/CMakeLists.txt
index 60f9944e1e64..2ca86bf2b407 100644
--- a/swift/unittests/runtime/CMakeLists.txt
+++ b/swift/unittests/runtime/CMakeLists.txt
@@ -13,11 +13,11 @@ if(("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "${SWIFT_PRIMARY_VARIANT_SDK}") AND
# If we use Clang-cl or MSVC, CMake provides default compiler and linker flags that are incompatible
# with the frontend of Clang or Clang++.
if(SWIFT_COMPILER_IS_MSVC_LIKE)
- set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang-cl")
- set(CMAKE_C_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang-cl")
+ set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_CLANG_TOOLS_PATH}/clang-cl")
+ set(CMAKE_C_COMPILER "${SWIFT_NATIVE_CLANG_TOOLS_PATH}/clang-cl")
else()
- set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang++")
- set(CMAKE_C_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang")
+ set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_CLANG_TOOLS_PATH}/clang++")
+ set(CMAKE_C_COMPILER "${SWIFT_NATIVE_CLANG_TOOLS_PATH}/clang")
endif()
if(CMAKE_C_COMPILER_LAUNCHER MATCHES ".*distcc")
diff --git a/swift/utils/build-presets.ini b/swift/utils/build-presets.ini
index 5330b5acba18..dcba1e6d7b74 100644
--- a/swift/utils/build-presets.ini
+++ b/swift/utils/build-presets.ini
@@ -2283,10 +2283,9 @@ skip-build-cmark
skip-build-benchmarks
skip-test-cmark
-# This triggers the stdlib standalone build: Don't build tools (the compiler),
-# assume we are working with the host compiler.
+# This triggers the stdlib standalone build: don't build the native tools from
+# scratch, ie the compiler.
build-swift-tools=0
-build-runtime-with-host-compiler=1
# Then set the paths to our native tools. If compiling against a toolchain,
# these should all be the ./usr/bin directory.
diff --git a/swift/utils/build-script b/swift/utils/build-script
index 639f790fe354..9ccb8ef6e2dc 100755
index ab9809b1351c..f544478b2a57 100755
--- a/swift/utils/build-script
+++ b/swift/utils/build-script
@@ -704,6 +704,18 @@ class BuildScriptInvocation(object):
@@ -707,6 +707,18 @@ class BuildScriptInvocation(object):
impl_args += [
"--host-libtool", toolchain.libtool,
]
@ -49,8 +148,26 @@ index 639f790fe354..9ccb8ef6e2dc 100755
# If we have extra_swift_args, combine all of them together and then
# add them as one command.
diff --git a/swift/utils/build-script-impl b/swift/utils/build-script-impl
index 268d23de155a..7ac53c1e5a91 100755
--- a/swift/utils/build-script-impl
+++ b/swift/utils/build-script-impl
@@ -1485,13 +1485,6 @@ for host in "${ALL_HOSTS[@]}"; do
fi
fi
- if [[ "${NATIVE_CLANG_TOOLS_PATH}" ]] ; then
- common_cmake_options_host+=(
- -DCMAKE_C_COMPILER="${NATIVE_CLANG_TOOLS_PATH}/clang"
- -DCMAKE_CXX_COMPILER="${NATIVE_CLANG_TOOLS_PATH}/clang++"
- )
- fi
-
llvm_cmake_options=(
"${llvm_cmake_options[@]}"
-DCMAKE_INSTALL_PREFIX:PATH="$(get_host_install_prefix ${host})"
diff --git a/swift/utils/build_swift/build_swift/driver_arguments.py b/swift/utils/build_swift/build_swift/driver_arguments.py
index cb1c5c0b0e38..73fbd7c95e18 100644
index 28a3ec0e6ab2..aab24712b801 100644
--- a/swift/utils/build_swift/build_swift/driver_arguments.py
+++ b/swift/utils/build_swift/build_swift/driver_arguments.py
@@ -374,6 +374,15 @@ def create_argument_parser():
@ -69,13 +186,40 @@ index cb1c5c0b0e38..73fbd7c95e18 100644
option('--cmake-c-launcher', store_path(executable=True),
default=os.environ.get('C_COMPILER_LAUNCHER', None),
help='the absolute path to set CMAKE_C_COMPILER_LAUNCHER')
diff --git a/swift/utils/build_swift/tests/expected_options.py b/swift/utils/build_swift/tests/expected_options.py
index 8f13cca65b9c..9ecfc4714312 100644
--- a/swift/utils/build_swift/tests/expected_options.py
+++ b/swift/utils/build_swift/tests/expected_options.py
@@ -189,6 +189,9 @@
'lto_type': None,
'maccatalyst': False,
'maccatalyst_ios_tests': False,
+ 'native_clang_tools_path': None,
+ 'native_llvm_tools_path': None,
+ 'native_swift_tools_path': None,
'dump_config': False,
'show_sdks': False,
'skip_build': False,
@@ -653,6 +656,9 @@ class BuildScriptImplOption(_BaseOption):
PathOption('--install-symroot'),
PathOption('--install-destdir'),
EnableOption('--install-all'),
+ PathOption('--native-clang-tools-path'),
+ PathOption('--native-llvm-tools-path'),
+ PathOption('--native-swift-tools-path'),
PathOption('--symbols-package'),
PathOption('--cmake-c-launcher'),
PathOption('--cmake-cxx-launcher'),
diff --git a/swift/utils/swift_build_support/swift_build_support/products/product.py b/swift/utils/swift_build_support/swift_build_support/products/product.py
index ba6f673bb6c9..001e2bf03083 100644
index ba6f673bb6c9..075b934d10ac 100644
--- a/swift/utils/swift_build_support/swift_build_support/products/product.py
+++ b/swift/utils/swift_build_support/swift_build_support/products/product.py
@@ -169,6 +169,9 @@ def install_toolchain_path(self, host_target):
@@ -167,8 +167,11 @@ def install_toolchain_path(self, host_target):
"""toolchain_path() -> string
Returns the path to the toolchain that is being created as part of this
build.
- build.
+ build, or to a native prebuilt toolchain that was passed in.
"""
+ if self.args.native_swift_tools_path is not None:
+ return os.path.split(self.args.native_swift_tools_path)[0]

View File

@ -1,378 +0,0 @@
commit d42869c1e6fbb5caf87428662825840b2e70a19d
Date: Thu, 29 Oct 2020 20:54:59 +0530
Subject: [android] Move to the NDK's unified sysroot
Since the NDK is removing the platforms/ and sysroot/ directories in the next
release, switch to the unified sysroot in toolchains/llvm/ and take advantage
of a bunch of simplification that's now possible.
diff --git a/swift/cmake/modules/AddSwift.cmake b/swift/cmake/modules/AddSwift.cmake
index 0e019d8d30..00e0b794e7 100644
--- a/swift/cmake/modules/AddSwift.cmake
+++ b/swift/cmake/modules/AddSwift.cmake
@@ -123,6 +123,10 @@ function(_add_variant_c_compile_link_flags)
endif()
endif()
+ if("${CFLAGS_SDK}" STREQUAL "ANDROID")
+ set(DEPLOYMENT_VERSION ${SWIFT_ANDROID_API_LEVEL})
+ endif()
+
# MSVC, clang-cl, gcc don't understand -target.
if(CMAKE_C_COMPILER_ID MATCHES "^Clang|AppleClang$" AND
NOT SWIFT_COMPILER_IS_MSVC_LIKE)
@@ -343,16 +343,6 @@ function(_add_host_variant_c_compile_flags)
list(APPEND result -funwind-tables)
endif()
- if("${CFLAGS_SDK}" STREQUAL "ANDROID")
- list(APPEND result -nostdinc++)
- swift_android_libcxx_include_paths(CFLAGS_CXX_INCLUDES)
- swift_android_include_for_arch("${CFLAGS_ARCH}" "${CFLAGS_ARCH}_INCLUDE")
- foreach(path IN LISTS CFLAGS_CXX_INCLUDES ${CFLAGS_ARCH}_INCLUDE)
- list(APPEND result "SHELL:${CMAKE_INCLUDE_SYSTEM_FLAG_C}${path}")
- endforeach()
- list(APPEND result "-D__ANDROID_API__=${SWIFT_ANDROID_API_LEVEL}")
- endif()
-
if("${CFLAGS_SDK}" STREQUAL "LINUX")
if(${CFLAGS_ARCH} STREQUAL x86_64)
# this is the minimum architecture that supports 16 byte CAS, which is necessary to avoid a dependency to libatomic
@@ -441,11 +431,6 @@ function(_add_host_variant_link_flags)
list(APPEND link_libraries
${SWIFT_ANDROID_${LFLAGS_ARCH}_ICU_I18N}
${SWIFT_ANDROID_${LFLAGS_ARCH}_ICU_UC})
-
- swift_android_lib_for_arch(${LFLAGS_ARCH} ${LFLAGS_ARCH}_LIB)
- foreach(path IN LISTS ${LFLAGS_ARCH}_LIB)
- list(APPEND library_search_directories ${path})
- endforeach()
else()
# If lto is enabled, we need to add the object path flag so that the LTO code
# generator leaves the intermediate object file in a place where it will not
diff --git a/swift/cmake/modules/AddSwiftUnittests.cmake b/swift/cmake/modules/AddSwiftUnittests.cmake
index e088997741..daaba3e026 100644
--- a/swift/cmake/modules/AddSwiftUnittests.cmake
+++ b/swift/cmake/modules/AddSwiftUnittests.cmake
@@ -43,9 +43,6 @@ function(add_swift_unittest test_dirname)
set_target_properties(${test_dirname} PROPERTIES
BUILD_RPATH ${SWIFT_LIBRARY_OUTPUT_INTDIR}/swift/macosx)
elseif("${SWIFT_HOST_VARIANT}" STREQUAL "android")
- swift_android_lib_for_arch(${SWIFT_HOST_VARIANT_ARCH} android_system_libs)
- set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_DIRECTORIES
- "${android_system_libs}")
set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_LIBRARIES "log")
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
diff --git a/swift/cmake/modules/SwiftAndroidSupport.cmake b/swift/cmake/modules/SwiftAndroidSupport.cmake
index 9379031947..a8b0a48c7e 100644
--- a/swift/cmake/modules/SwiftAndroidSupport.cmake
+++ b/swift/cmake/modules/SwiftAndroidSupport.cmake
@@ -1,72 +1,42 @@
-function(swift_android_libcxx_include_paths var)
- if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
- set(${var}
- "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/include"
- "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++abi/include"
- PARENT_SCOPE)
- elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
- set(${var}
- "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include/c++/v1"
- PARENT_SCOPE)
+function(swift_android_prebuilt_host_name prebuilt_var_name)
+ # Get the prebuilt suffix to create the correct toolchain path when using the NDK
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
+ set(${prebuilt_var_name} darwin-x86_64 PARENT_SCOPE)
+ elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Linux)
+ set(${prebuilt_var_name} linux-x86_64 PARENT_SCOPE)
+ elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows)
+ set(${prebuilt_var_name} Windows-x86_64 PARENT_SCOPE)
else()
- message(SEND_ERROR "Couldn't set libc++ include paths for Android")
+ message(SEND_ERROR "cannot cross-compile to android from ${CMAKE_HOST_SYSTEM_NAME}")
endif()
endfunction()
-function(swift_android_include_for_arch arch var)
- set(paths)
+function(swift_android_sysroot sysroot_var_name)
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
- list(APPEND paths
- "${SWIFT_ANDROID_NDK_PATH}/sources/android/support/include"
- "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include"
- "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}")
+ swift_android_prebuilt_host_name(prebuilt_build)
+ set(${sysroot_var_name} "${SWIFT_ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/${prebuilt_build}/sysroot" PARENT_SCOPE)
elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
- list(APPEND paths
- "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include"
- "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}")
+ set(${sysroot_var_name} "${SWIFT_ANDROID_NATIVE_SYSROOT}" PARENT_SCOPE)
else()
- message(SEND_ERROR "Couldn't set ${arch} include paths for Android")
+ message(SEND_ERROR "Couldn't find Android sysroot")
endif()
- set(${var} ${paths} PARENT_SCOPE)
endfunction()
-function(swift_android_lib_for_arch arch var)
- set(_prebuilt "${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_PREBUILT_PATH}")
- set(_host "${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}")
-
- set(paths)
+function(swift_android_tools_path arch path_var_name)
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
- if(arch STREQUAL armv7)
- list(APPEND paths "${_prebuilt}/${_host}/lib/armv7-a")
- elseif(arch STREQUAL aarch64)
- list(APPEND paths "${_prebuilt}/${_host}/lib64")
- elseif(arch STREQUAL i686)
- list(APPEND paths "${_prebuilt}/${_host}/lib")
- elseif(arch STREQUAL x86_64)
- list(APPEND paths "${_prebuilt}/${_host}/lib64")
+ swift_android_prebuilt_host_name(prebuilt_build)
+ if("${arch}" STREQUAL "i686")
+ set(ndk_prebuilt_path
+ "${SWIFT_ANDROID_NDK_PATH}/toolchains/x86-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${prebuilt_build}")
+ elseif("${arch}" STREQUAL "x86_64")
+ set(ndk_prebuilt_path
+ "${SWIFT_ANDROID_NDK_PATH}/toolchains/x86_64-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${prebuilt_build}")
else()
- message(SEND_ERROR "unknown architecture (${arch}) for android")
+ set(ndk_prebuilt_path
+ "${SWIFT_ANDROID_NDK_PATH}/toolchains/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${prebuilt_build}")
endif()
- list(APPEND paths "${_prebuilt}/lib/gcc/${_host}/${SWIFT_ANDROID_NDK_GCC_VERSION}.x")
- elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
- list(APPEND paths "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/lib")
- if("${arch}" MATCHES armv7)
- list(APPEND paths "/system/lib")
- elseif("${arch}" MATCHES aarch64)
- list(APPEND paths "/system/lib64")
- else()
- message(SEND_ERROR "unknown architecture (${arch}) when compiling for Android host")
- endif()
- else()
- message(SEND_ERROR "Couldn't set ${arch} library paths for Android")
- endif()
-
- set(${var} ${paths} PARENT_SCOPE)
-endfunction()
-function(swift_android_tools_path arch path_var_name)
- if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
- set(${path_var_name} "${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_PREBUILT_PATH}/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}/bin" PARENT_SCOPE)
+ set(${path_var_name} "${ndk_prebuilt_path}/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}/bin" PARENT_SCOPE)
elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
set(${path_var_name} "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/bin" PARENT_SCOPE)
else()
@@ -77,19 +49,7 @@ endfunction ()
function(swift_android_cxx_libraries_for_arch arch libraries_var_name)
set(link_libraries)
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
- if("${arch}" MATCHES armv7)
- set(cxx_arch armeabi-v7a)
- elseif("${arch}" MATCHES aarch64)
- set(cxx_arch arm64-v8a)
- elseif("${arch}" MATCHES i686)
- set(cxx_arch x86)
- elseif("${arch}" MATCHES x86_64)
- set(cxx_arch x86_64)
- else()
- message(SEND_ERROR "unknown architecture (${arch}) when cross-compiling for Android")
- endif()
-
- set(android_libcxx_path "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/${cxx_arch}")
+ set(android_libcxx_path "${SWIFT_SDK_ANDROID_ARCH_${arch}_PATH}/usr/lib/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}")
list(APPEND link_libraries ${android_libcxx_path}/libc++abi.a
${android_libcxx_path}/libc++_shared.so)
elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
diff --git a/swift/cmake/modules/SwiftConfigureSDK.cmake b/swift/cmake/modules/SwiftConfigureSDK.cmake
index b55e6e6b98..a654794467 100644
--- a/swift/cmake/modules/SwiftConfigureSDK.cmake
+++ b/swift/cmake/modules/SwiftConfigureSDK.cmake
@@ -55,12 +55,6 @@ function(_report_sdk prefix)
if(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
message(STATUS " Sysroot: ${SWIFT_ANDROID_NATIVE_SYSROOT}")
endif()
- foreach(arch ${SWIFT_SDK_${prefix}_ARCHITECTURES})
- swift_android_include_for_arch(${arch} ${arch}_INCLUDE)
- swift_android_lib_for_arch(${arch} ${arch}_LIB)
- message(STATUS " ${arch} INCLUDE: ${${arch}_INCLUDE}")
- message(STATUS " ${arch} LIB: ${${arch}_LIB}")
- endforeach()
else()
foreach(arch ${SWIFT_SDK_${prefix}_ARCHITECTURES})
message(STATUS " ${arch} Path: ${SWIFT_SDK_${prefix}_ARCH_${arch}_PATH}")
@@ -271,76 +265,32 @@ macro(configure_sdk_unix name architectures)
foreach(arch ${architectures})
if("${prefix}" STREQUAL "ANDROID")
- if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
- set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include" CACHE STRING "Path to C library headers")
- set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include" CACHE STRING "Path to C library architecture headers")
- elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
- set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include" CACHE STRING "Path to C library headers")
- set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include" CACHE STRING "Path to C library architecture headers")
- else()
- message(SEND_ERROR "Couldn't find LIBC_INCLUDE_DIRECTORY for Android")
- endif()
+ swift_android_sysroot(android_sysroot)
+ set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${android_sysroot}")
+ set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY "${android_sysroot}/usr/include" CACHE STRING "Path to C library headers")
+ set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY "${android_sysroot}/usr/include" CACHE STRING "Path to C library architecture headers")
if("${arch}" STREQUAL "armv7")
set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE "arm-linux-androideabi")
set(SWIFT_SDK_ANDROID_ARCH_${arch}_ALT_SPELLING "arm")
- if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
- set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-arm")
- elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
- set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NATIVE_SYSROOT}")
- else()
- message(SEND_ERROR "Couldn't find SWIFT_SDK_ANDROID_ARCH_armv7_PATH")
- endif()
set(SWIFT_SDK_ANDROID_ARCH_${arch}_TRIPLE "armv7-none-linux-androideabi")
# The Android ABI isn't part of the module triple.
set(SWIFT_SDK_ANDROID_ARCH_${arch}_MODULE "armv7-none-linux-android")
elseif("${arch}" STREQUAL "aarch64")
set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE "aarch64-linux-android")
set(SWIFT_SDK_ANDROID_ARCH_${arch}_ALT_SPELLING "aarch64")
- if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
- set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-arm64")
- elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
- set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NATIVE_SYSROOT}")
- else()
- message(SEND_ERROR "Couldn't find SWIFT_SDK_ANDROID_ARCH_aarch64_PATH")
- endif()
set(SWIFT_SDK_ANDROID_ARCH_${arch}_TRIPLE "aarch64-unknown-linux-android")
elseif("${arch}" STREQUAL "i686")
set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE "i686-linux-android")
set(SWIFT_SDK_ANDROID_ARCH_${arch}_ALT_SPELLING "i686")
- set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-x86")
set(SWIFT_SDK_ANDROID_ARCH_${arch}_TRIPLE "i686-unknown-linux-android")
elseif("${arch}" STREQUAL "x86_64")
set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE "x86_64-linux-android")
set(SWIFT_SDK_ANDROID_ARCH_${arch}_ALT_SPELLING "x86_64")
- set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-x86_64")
set(SWIFT_SDK_ANDROID_ARCH_${arch}_TRIPLE "x86_64-unknown-linux-android")
else()
message(FATAL_ERROR "unknown arch for android SDK: ${arch}")
endif()
-
- # Get the prebuilt suffix to create the correct toolchain path when using the NDK
- if(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
- set(_swift_android_prebuilt_build darwin-x86_64)
- elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Linux)
- set(_swift_android_prebuilt_build linux-x86_64)
- elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows)
- set(_swift_android_prebuilt_build Windows-x86_64)
- elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Android)
- # When building natively on an Android host, there's no NDK or prebuilt suffix.
- else()
- message(SEND_ERROR "cannot cross-compile to android from ${CMAKE_HOST_SYSTEM_NAME}")
- endif()
- if("${arch}" STREQUAL "i686")
- set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_PREBUILT_PATH
- "${SWIFT_ANDROID_NDK_PATH}/toolchains/x86-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${_swift_android_prebuilt_build}")
- elseif("${arch}" STREQUAL "x86_64")
- set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_PREBUILT_PATH
- "${SWIFT_ANDROID_NDK_PATH}/toolchains/x86_64-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${_swift_android_prebuilt_build}")
- else()
- set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_PREBUILT_PATH
- "${SWIFT_ANDROID_NDK_PATH}/toolchains/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${_swift_android_prebuilt_build}")
- endif()
else()
set(SWIFT_SDK_${prefix}_ARCH_${arch}_PATH "/" CACHE STRING "CMAKE_SYSROOT for ${prefix} ${arch}")
diff --git a/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake b/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake
index a2f682ece6..d2f6c27890 100644
--- a/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake
+++ b/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake
@@ -55,6 +55,10 @@ function(_add_target_variant_c_compile_link_flags)
endif()
endif()
+ if("${CFLAGS_SDK}" STREQUAL "ANDROID")
+ set(DEPLOYMENT_VERSION ${SWIFT_ANDROID_API_LEVEL})
+ endif()
+
# MSVC, clang-cl, gcc don't understand -target.
if(CMAKE_C_COMPILER_ID MATCHES "^Clang|AppleClang$" AND
NOT SWIFT_COMPILER_IS_MSVC_LIKE)
@@ -274,16 +278,6 @@ function(_add_target_variant_c_compile_flags)
list(APPEND result -funwind-tables)
endif()
- if("${CFLAGS_SDK}" STREQUAL "ANDROID")
- list(APPEND result -nostdinc++)
- swift_android_libcxx_include_paths(CFLAGS_CXX_INCLUDES)
- swift_android_include_for_arch("${CFLAGS_ARCH}" "${CFLAGS_ARCH}_INCLUDE")
- foreach(path IN LISTS CFLAGS_CXX_INCLUDES ${CFLAGS_ARCH}_INCLUDE)
- list(APPEND result "SHELL:${CMAKE_INCLUDE_SYSTEM_FLAG_C}${path}")
- endforeach()
- list(APPEND result "-D__ANDROID_API__=${SWIFT_ANDROID_API_LEVEL}")
- endif()
-
if("${CFLAGS_SDK}" STREQUAL "LINUX")
if(${CFLAGS_ARCH} STREQUAL x86_64)
# this is the minimum architecture that supports 16 byte CAS, which is necessary to avoid a dependency to libatomic
@@ -363,11 +357,6 @@ function(_add_target_variant_link_flags)
list(APPEND link_libraries
${SWIFT_ANDROID_${LFLAGS_ARCH}_ICU_I18N}
${SWIFT_ANDROID_${LFLAGS_ARCH}_ICU_UC})
-
- swift_android_lib_for_arch(${LFLAGS_ARCH} ${LFLAGS_ARCH}_LIB)
- foreach(path IN LISTS ${LFLAGS_ARCH}_LIB)
- list(APPEND library_search_directories ${path})
- endforeach()
else()
# If lto is enabled, we need to add the object path flag so that the LTO code
# generator leaves the intermediate object file in a place where it will not
diff --git a/swift/stdlib/cmake/modules/SwiftSource.cmake b/swift/stdlib/cmake/modules/SwiftSource.cmake
index 41850e3f54..bb504ee93a 100644
--- a/swift/stdlib/cmake/modules/SwiftSource.cmake
+++ b/swift/stdlib/cmake/modules/SwiftSource.cmake
@@ -184,9 +184,7 @@ function(_add_target_variant_swift_compile_flags
${ARGN})
# On Windows, we don't set SWIFT_SDK_WINDOWS_PATH_ARCH_{ARCH}_PATH, so don't include it.
- # On Android the sdk is split to two different paths for includes and libs, so these
- # need to be set manually.
- if (NOT "${sdk}" STREQUAL "WINDOWS" AND NOT "${sdk}" STREQUAL "ANDROID")
+ if (NOT "${sdk}" STREQUAL "WINDOWS")
list(APPEND result "-sdk" "${SWIFT_SDK_${sdk}_ARCH_${arch}_PATH}")
endif()
@@ -206,13 +204,6 @@ function(_add_target_variant_swift_compile_flags
"-target" "${SWIFT_SDK_${sdk}_ARCH_${arch}_TRIPLE}")
endif()
- if("${sdk}" STREQUAL "ANDROID")
- swift_android_include_for_arch(${arch} ${arch}_swift_include)
- foreach(path IN LISTS ${arch}_swift_include)
- list(APPEND result "\"${CMAKE_INCLUDE_FLAG_C}${path}\"")
- endforeach()
- endif()
-
if(NOT BUILD_STANDALONE)
list(APPEND result "-resource-dir" "${SWIFTLIB_DIR}")
endif()
diff --git a/swift/utils/build-script-impl b/swift/utils/build-script-impl
index cb68af1031..51d031cd39 100755
--- a/swift/utils/build-script-impl
+++ b/swift/utils/build-script-impl
@@ -470,11 +470,11 @@ function set_build_options_for_host() {
case ${host} in
android-aarch64)
- SWIFT_HOST_TRIPLE="aarch64-unknown-linux-android"
+ SWIFT_HOST_TRIPLE="aarch64-unknown-linux-android${ANDROID_API_LEVEL}"
llvm_target_arch="AArch64"
;;
android-armv7)
- SWIFT_HOST_TRIPLE="armv7-unknown-linux-androideabi"
+ SWIFT_HOST_TRIPLE="armv7-unknown-linux-androideabi${ANDROID_API_LEVEL}"
llvm_target_arch="ARM"
;;
linux-armv6)

View File

@ -0,0 +1,62 @@
commit 86c40574f594f4f7b4b25bb02cc2389e1328c200
Date: Fri Nov 13 17:22:09 2020 +0530
[build] Don't build test targets in tools/ if SWIFT_INCLUDE_TESTS is turned off
diff --git a/swift/tools/CMakeLists.txt b/swift/tools/CMakeLists.txt
index 2bd8352bf273..ea610709e2f5 100644
--- a/swift/tools/CMakeLists.txt
+++ b/swift/tools/CMakeLists.txt
@@ -16,13 +16,10 @@ endif()
add_swift_tool_subdirectory(driver)
add_swift_tool_subdirectory(sil-opt)
add_swift_tool_subdirectory(swift-dependency-tool)
-add_swift_tool_subdirectory(swift-ide-test)
-add_swift_tool_subdirectory(swift-remoteast-test)
add_swift_tool_subdirectory(swift-demangle)
add_swift_tool_subdirectory(swift-demangle-yamldump)
add_swift_tool_subdirectory(swift-def-to-yaml-converter)
add_swift_tool_subdirectory(swift-serialize-diagnostics)
-add_swift_tool_subdirectory(lldb-moduleimport-test)
add_swift_tool_subdirectory(sil-func-extractor)
add_swift_tool_subdirectory(sil-llvm-gen)
add_swift_tool_subdirectory(sil-nm)
@@ -30,11 +27,19 @@ add_swift_tool_subdirectory(sil-passpipeline-dumper)
add_swift_tool_subdirectory(swift-llvm-opt)
add_swift_tool_subdirectory(swift-api-digester)
add_swift_tool_subdirectory(swift-ast-script)
-add_swift_tool_subdirectory(swift-syntax-test)
add_swift_tool_subdirectory(swift-refactor)
if(SWIFT_BUILD_SYNTAXPARSERLIB)
add_swift_tool_subdirectory(libSwiftSyntaxParser)
- add_swift_tool_subdirectory(swift-syntax-parser-test)
+ if(SWIFT_INCLUDE_TESTS)
+ add_swift_tool_subdirectory(swift-syntax-parser-test)
+ endif()
+endif()
+
+if(SWIFT_INCLUDE_TESTS)
+ add_swift_tool_subdirectory(swift-ide-test)
+ add_swift_tool_subdirectory(swift-remoteast-test)
+ add_swift_tool_subdirectory(lldb-moduleimport-test)
+ add_swift_tool_subdirectory(swift-syntax-test)
endif()
if(LLVM_USE_SANITIZE_COVERAGE)
diff --git a/swift/tools/SourceKit/tools/CMakeLists.txt b/swift/tools/SourceKit/tools/CMakeLists.txt
index 739078c36e52..75cf0861b11e 100644
--- a/swift/tools/SourceKit/tools/CMakeLists.txt
+++ b/swift/tools/SourceKit/tools/CMakeLists.txt
@@ -5,8 +5,10 @@ include_directories(
)
add_swift_lib_subdirectory(sourcekitd)
-add_swift_tool_subdirectory(sourcekitd-test)
if(LibEdit_FOUND AND LibEdit_HAS_UNICODE)
add_swift_tool_subdirectory(sourcekitd-repl)
endif()
-add_swift_tool_subdirectory(complete-test)
+if(SWIFT_INCLUDE_TESTS)
+ add_swift_tool_subdirectory(sourcekitd-test)
+ add_swift_tool_subdirectory(complete-test)
+endif()

View File

@ -1,75 +0,0 @@
commit f84992addb0f7cd54c13762274e898f79d0b0631
Date: Sun, 8 Nov 2020 13:25:13 +0530
Subject: [build] Make it possible to actually build the stdlib with a
prebuilt clang
diff --git a/swift/CMakeLists.txt b/swift/CMakeLists.txt
index 99937910af2b..2cec8d38a493 100644
--- a/swift/CMakeLists.txt
+++ b/swift/CMakeLists.txt
@@ -462,10 +462,12 @@ if(SWIFT_PATH_TO_CMARK_BUILD)
endif()
message(STATUS "")
-if("${SWIFT_NATIVE_LLVM_TOOLS_PATH}" STREQUAL "")
- set(SWIFT_CROSS_COMPILING FALSE)
+# Check if a prebuilt clang path was passed in, as this variable will be
+# assigned if not, in SwiftSharedCMakeConfig.
+if("${SWIFT_NATIVE_CLANG_TOOLS_PATH}" STREQUAL "")
+ set(SWIFT_PREBUILT_CLANG FALSE)
else()
- set(SWIFT_CROSS_COMPILING TRUE)
+ set(SWIFT_PREBUILT_CLANG TRUE)
endif()
include(SwiftSharedCMakeConfig)
diff --git a/swift/cmake/modules/SwiftSharedCMakeConfig.cmake b/swift/cmake/modules/SwiftSharedCMakeConfig.cmake
index c4c15084fe9..9ee08656589 100644
--- a/swift/cmake/modules/SwiftSharedCMakeConfig.cmake
+++ b/swift/cmake/modules/SwiftSharedCMakeConfig.cmake
@@ -58,7 +58,7 @@ macro(swift_common_standalone_build_config_llvm product)
fix_imported_targets_for_xcode("${LLVM_EXPORTED_TARGETS}")
endif()
- if(NOT CMAKE_CROSSCOMPILING AND NOT SWIFT_CROSS_COMPILING)
+ if(NOT CMAKE_CROSSCOMPILING)
set(${product}_NATIVE_LLVM_TOOLS_PATH "${LLVM_TOOLS_BINARY_DIR}")
endif()
@@ -159,7 +159,7 @@ endmacro()
macro(swift_common_standalone_build_config_clang product)
find_package(Clang CONFIG REQUIRED NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
- if (NOT CMAKE_CROSSCOMPILING)
+ if (NOT CMAKE_CROSSCOMPILING AND NOT SWIFT_PREBUILT_CLANG)
set(${product}_NATIVE_CLANG_TOOLS_PATH "${LLVM_TOOLS_BINARY_DIR}")
endif()
diff --git a/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake b/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake
index 7a296b5807d5..ace3fb90370f 100644
--- a/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake
+++ b/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake
@@ -1653,7 +1653,8 @@ function(add_swift_target_library name)
list(APPEND SWIFTLIB_SWIFT_COMPILE_FLAGS "-warn-implicit-overrides")
endif()
- if(NOT SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER AND NOT BUILD_STANDALONE)
+ if(NOT SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER AND NOT BUILD_STANDALONE AND
+ NOT SWIFT_PREBUILT_CLANG)
list(APPEND SWIFTLIB_DEPENDS clang)
endif()
diff --git a/swift/stdlib/public/SwiftShims/CMakeLists.txt b/swift/stdlib/public/SwiftShims/CMakeLists.txt
index 33c49a3f8861..8553f4f00b37 100644
--- a/swift/stdlib/public/SwiftShims/CMakeLists.txt
+++ b/swift/stdlib/public/SwiftShims/CMakeLists.txt
@@ -110,7 +110,8 @@ endif()
# First extract the "version" used for Clang's resource directory.
string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" CLANG_VERSION
"${LLVM_PACKAGE_VERSION}")
-if(NOT SWIFT_INCLUDE_TOOLS AND SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER)
+if(NOT SWIFT_INCLUDE_TOOLS AND
+ (SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER OR SWIFT_PREBUILT_CLANG))
if(SWIFT_COMPILER_IS_MSVC_LIKE)
execute_process(COMMAND ${CMAKE_C_COMPILER} /clang:-print-resource-dir
OUTPUT_VARIABLE clang_headers_location

View File

@ -0,0 +1,29 @@
diff --git a/swift-tools-support-core/Sources/TSCBasic/CMakeLists.txt b/swift-tools-support-core/Sources/TSCBasic/CMakeLists.txt
index bbc43d98..bc5ee576 100644
--- a/swift-tools-support-core/Sources/TSCBasic/CMakeLists.txt
+++ b/swift-tools-support-core/Sources/TSCBasic/CMakeLists.txt
@@ -53,7 +53,7 @@ target_link_libraries(TSCBasic PUBLIC
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
if(Foundation_FOUND)
target_link_libraries(TSCBasic PUBLIC
- Foundation)
+ Foundation android-spawn)
endif()
endif()
target_link_libraries(TSCBasic PRIVATE
diff --git a/swift-tools-support-core/Sources/TSCUtility/FSWatch.swift b/swift-tools-support-core/Sources/TSCUtility/FSWatch.swift
index 0658e55b..9221950b 100644
--- a/swift-tools-support-core/Sources/TSCUtility/FSWatch.swift
+++ b/swift-tools-support-core/Sources/TSCUtility/FSWatch.swift
@@ -429,7 +429,11 @@ public final class Inotify {
private func FD_ZERO(_ set: inout fd_set) {
#if os(Android)
+ #if arch(arm)
+ set.fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
+ #else
set.fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
+ #endif
#else
set.__fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
#endif

View File

@ -1,134 +0,0 @@
commit 32d341e244d4a56185ed04c60542250b5b5047e9
Date: Thu Jul 16 17:23:18 2020 +0530
[build] extend support for building with a prebuilt toolchain to the corelibs and llbuild
diff --git a/swift/utils/build-script-impl b/swift/utils/build-script-impl
index 7f39ff97459..af310ec8cbf 100755
--- a/swift/utils/build-script-impl
+++ b/swift/utils/build-script-impl
@@ -1584,6 +1584,18 @@ for host in "${ALL_HOSTS[@]}"; do
)
fi
+ if [[ "${NATIVE_CLANG_TOOLS_PATH}" ]] ; then
+ CLANG_BIN="${NATIVE_CLANG_TOOLS_PATH}"
+ else
+ CLANG_BIN="$(build_directory_bin ${LOCAL_HOST} llvm)"
+ fi
+
+ if [[ "${NATIVE_SWIFT_TOOLS_PATH}" ]] ; then
+ SWIFTC_BIN="${NATIVE_SWIFT_TOOLS_PATH}/swiftc"
+ else
+ SWIFTC_BIN="$(build_directory_bin ${LOCAL_HOST} swift)/swiftc"
+ fi
+
for product in "${PRODUCTS[@]}"; do
[[ $(should_execute_action "${host}-${product/_static}-build") ]] || continue
@@ -2022,7 +2034,7 @@ for host in "${ALL_HOSTS[@]}"; do
-DCMAKE_C_FLAGS="$(llvm_c_flags ${host})"
-DCMAKE_CXX_FLAGS="$(llvm_c_flags ${host})"
-DCMAKE_BUILD_TYPE:STRING="${LLDB_BUILD_TYPE}"
- -DLLDB_SWIFTC:PATH="$(build_directory ${LOCAL_HOST} swift)/bin/swiftc"
+ -DLLDB_SWIFTC:PATH=${SWIFTC_BIN}
-DLLDB_SWIFT_LIBS:PATH="$(build_directory ${LOCAL_HOST} swift)/lib/swift"
-DCMAKE_INSTALL_PREFIX:PATH="$(get_host_install_prefix ${host})"
-DLLDB_FRAMEWORK_INSTALL_DIR="$(get_host_install_prefix ${host})../System/Library/PrivateFrameworks"
@@ -2073,8 +2085,10 @@ for host in "${ALL_HOSTS[@]}"; do
"${llbuild_cmake_options[@]}"
-DCMAKE_BUILD_TYPE:STRING="${LLBUILD_BUILD_TYPE}"
+ -DCMAKE_C_COMPILER:PATH="${CLANG_BIN}/clang"
+ -DCMAKE_CXX_COMPILER:PATH="${CLANG_BIN}/clang++"
-DCMAKE_INSTALL_PREFIX:PATH="$(get_host_install_prefix ${host})"
- -DCMAKE_Swift_COMPILER:PATH="$(build_directory_bin ${LOCAL_HOST} swift)/swiftc"
+ -DCMAKE_Swift_COMPILER:PATH=${SWIFTC_BIN}
-DCMAKE_Swift_FLAGS:STRING="-module-cache-path \"${module_cache}\""
-DLLBUILD_ENABLE_ASSERTIONS:BOOL=$(true_false "${LLBUILD_ENABLE_ASSERTIONS}")
@@ -2082,7 +2096,7 @@ for host in "${ALL_HOSTS[@]}"; do
-DLIT_EXECUTABLE:PATH="${LLVM_SOURCE_DIR}/utils/lit/lit.py"
-DFILECHECK_EXECUTABLE:PATH="$(build_directory_bin ${LOCAL_HOST} llvm)/FileCheck"
- -DSWIFTC_EXECUTABLE:PATH="$(build_directory_bin ${LOCAL_HOST} swift)/swiftc"
+ -DSWIFTC_EXECUTABLE:PATH=${SWIFTC_BIN}
-DFOUNDATION_BUILD_DIR:PATH="$(build_directory ${host} foundation)"
-DLIBDISPATCH_BUILD_DIR:PATH="$(build_directory ${host} libdispatch)"
-DLIBDISPATCH_SOURCE_DIR:PATH="${LIBDISPATCH_SOURCE_DIR}"
@@ -2106,7 +2120,6 @@ for host in "${ALL_HOSTS[@]}"; do
fi
;;
xctest)
- SWIFTC_BIN="$(build_directory_bin ${LOCAL_HOST} swift)/swiftc"
XCTEST_BUILD_DIR=$(build_directory ${host} xctest)
FOUNDATION_BUILD_DIR=$(build_directory ${host} foundation)
SWIFT_BUILD_DIR=$(build_directory ${host} swift)
@@ -2144,14 +2157,12 @@ for host in "${ALL_HOSTS[@]}"; do
echo "Cleaning the XCTest build directory"
call rm -rf "${XCTEST_BUILD_DIR}"
- LLVM_BIN="$(build_directory_bin ${LOCAL_HOST} llvm)"
-
cmake_options=(
${cmake_options[@]}
-DCMAKE_BUILD_TYPE:STRING="${XCTEST_BUILD_TYPE}"
- -DCMAKE_C_COMPILER:PATH="${LLVM_BIN}/clang"
- -DCMAKE_CXX_COMPILER:PATH="${LLVM_BIN}/clang++"
- -DCMAKE_Swift_COMPILER:PATH="$(build_directory_bin ${LOCAL_HOST} swift)/swiftc"
+ -DCMAKE_C_COMPILER:PATH="${CLANG_BIN}/clang"
+ -DCMAKE_CXX_COMPILER:PATH="${CLANG_BIN}/clang++"
+ -DCMAKE_Swift_COMPILER:PATH=${SWIFTC_BIN}
-DCMAKE_Swift_FLAGS:STRING="-module-cache-path \"${module_cache}\""
-DCMAKE_INSTALL_PREFIX:PATH="$(get_host_install_prefix ${host})"
-DCMAKE_INSTALL_LIBDIR:PATH="lib"
@@ -2163,7 +2174,7 @@ for host in "${ALL_HOSTS[@]}"; do
-DXCTEST_PATH_TO_LIBDISPATCH_SOURCE:PATH=${LIBDISPATCH_SOURCE_DIR}
-DXCTEST_PATH_TO_LIBDISPATCH_BUILD:PATH=$(build_directory ${host} libdispatch)
-DXCTEST_PATH_TO_FOUNDATION_BUILD:PATH=${FOUNDATION_BUILD_DIR}
- -DCMAKE_SWIFT_COMPILER:PATH="$(build_directory_bin ${LOCAL_HOST} swift)/swiftc"
+ -DCMAKE_SWIFT_COMPILER:PATH=${SWIFTC_BIN}
-DCMAKE_PREFIX_PATH:PATH=$(build_directory ${host} llvm)
-DENABLE_TESTING=YES
@@ -2178,9 +2189,6 @@ for host in "${ALL_HOSTS[@]}"; do
# is not yet built at this point.
XCTEST_BUILD_DIR=$(build_directory ${host} xctest)
- SWIFTC_BIN="$(build_directory_bin ${LOCAL_HOST} swift)/swiftc"
- LLVM_BIN="$(build_directory_bin ${LOCAL_HOST} llvm)"
-
if [[ ${host} == "macosx"* ]]; then
echo "Skipping Foundation on OS X -- use the Xcode project instead"
continue
@@ -2220,8 +2228,8 @@ for host in "${ALL_HOSTS[@]}"; do
cmake_options=(
${cmake_options[@]}
-DCMAKE_BUILD_TYPE:STRING=${FOUNDATION_BUILD_TYPE}
- -DCMAKE_C_COMPILER:PATH=${LLVM_BIN}/clang
- -DCMAKE_CXX_COMPILER:PATH=${LLVM_BIN}/clang++
+ -DCMAKE_C_COMPILER:PATH=${CLANG_BIN}/clang
+ -DCMAKE_CXX_COMPILER:PATH=${CLANG_BIN}/clang++
-DCMAKE_SWIFT_COMPILER:PATH=${SWIFTC_BIN}
-DCMAKE_Swift_COMPILER:PATH=${SWIFTC_BIN}
-DCMAKE_Swift_FLAGS:STRING="-module-cache-path \"${module_cache}\""
@@ -2244,8 +2252,6 @@ for host in "${ALL_HOSTS[@]}"; do
libdispatch|libdispatch_static)
LIBDISPATCH_BUILD_DIR=$(build_directory ${host} ${product})
SWIFT_BUILD_PATH="$(build_directory ${host} swift)"
- SWIFTC_BIN="$(build_directory_bin ${LOCAL_HOST} swift)/swiftc"
- LLVM_BIN="$(build_directory_bin ${LOCAL_HOST} llvm)"
case "${host}" in
macosx-*)
@@ -2264,8 +2270,8 @@ for host in "${ALL_HOSTS[@]}"; do
-DENABLE_SWIFT=YES
${cmake_options[@]}
-DCMAKE_BUILD_TYPE:STRING="${LIBDISPATCH_BUILD_TYPE}"
- -DCMAKE_C_COMPILER:PATH="${LLVM_BIN}/clang"
- -DCMAKE_CXX_COMPILER:PATH="${LLVM_BIN}/clang++"
+ -DCMAKE_C_COMPILER:PATH="${CLANG_BIN}/clang"
+ -DCMAKE_CXX_COMPILER:PATH="${CLANG_BIN}/clang++"
-DCMAKE_SWIFT_COMPILER:PATH="${SWIFTC_BIN}"
-DCMAKE_Swift_COMPILER:PATH="${SWIFTC_BIN}"
-DCMAKE_Swift_FLAGS:STRING="-module-cache-path \"${module_cache}\""

View File

@ -1,18 +1,58 @@
commit 5fa1d36f4b558070fc2bf54ecde19e6a35e4839e
Date: Tue Sep 1 00:45:55 2020 +0530
[build] Add the flags to enable cross-compiling the corelibs
Pass the Swift and CMake flags needed to cross-compile Foundation and so on, with
the first example of Android AArch64. Add a new flag, --cross-compile-deps-path,
which is used to search for cross-compiled libraries, like libcurl, that the
corelibs depend on.
diff --git a/swift/CMakeLists.txt b/swift/CMakeLists.txt
index 4b202c99502..aa7b9e8f715 100644
--- a/swift/CMakeLists.txt
+++ b/swift/CMakeLists.txt
@@ -443,7 +445,7 @@
endif()
set(SWIFT_BUILD_HOST_DISPATCH FALSE)
-if(SWIFT_BUILD_SYNTAXPARSERLIB OR SWIFT_BUILD_SOURCEKIT)
+if(NOT SWIFT_HOST_VARIANT_SDK STREQUAL ANDROID AND SWIFT_INCLUDE_TOOLS AND (SWIFT_BUILD_SYNTAXPARSERLIB OR SWIFT_BUILD_SOURCEKIT))
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
set(SWIFT_BUILD_HOST_DISPATCH TRUE)
endif()
diff --git a/swift/utils/build-script b/swift/utils/build-script
index b4c3f6f6b28..27045d12eac 100755
--- a/swift/utils/build-script
+++ b/swift/utils/build-script
@@ -817,6 +817,7 @@ class BuildScriptInvocation(object):
"""
args = self.args
+ args.build_root = self.workspace.build_root
options = {}
for host_target in [args.host_target] + args.cross_compile_hosts:
@@ -838,6 +839,8 @@ class BuildScriptInvocation(object):
config.swift_benchmark_run_targets),
"SWIFT_TEST_TARGETS": " ".join(
config.swift_test_run_targets),
+ "SWIFT_FLAGS": config.swift_flags,
+ "SWIFT_TARGET_CMAKE_OPTIONS": config.cmake_options,
}
return options
diff --git a/swift/utils/build-script-impl b/swift/utils/build-script-impl
index 6f0c2b5bf71..db6e0ad10d6 100755
index 66a4408d066..2f6e9981252 100755
--- a/swift/utils/build-script-impl
+++ b/swift/utils/build-script-impl
@@ -240,6 +240,7 @@ KNOWN_SETTINGS=(
@@ -137,7 +137,6 @@ KNOWN_SETTINGS=(
common-cmake-options "" "CMake options used for all targets, including LLVM/Clang"
extra-cmake-options "" "Extra options to pass to CMake for all targets"
ninja-cmake-options "" "CMake options used for all ninja targets"
- ninja-cmake-options "" "CMake options used for all ninja targets"
## Build ...
build-llvm "1" "set to 1 to build LLVM and Clang"
@@ -199,6 +198,7 @@
swift-stdlib-single-threaded-runtime "0" "whether to build stdlib as a single-threaded runtime only"
swift-stdlib-os-versioning "1" "whether to build stdlib with availability based on OS versions (Darwin only)"
swift-stdlib-stable-abi "" "should stdlib be built with stable ABI, if not set defaults to true on Darwin, false otherwise"
+ common-swift-flags "" "Flags used for Swift targets other than the stdlib, like the corelibs"
## FREESTANDING Stdlib Options
swift-freestanding-sdk "" "which SDK to use when building the FREESTANDING stdlib"
@@ -224,6 +223,7 @@ KNOWN_SETTINGS=(
cross-compile-hosts "" "space-separated list of targets to cross-compile host Swift tools for"
cross-compile-with-host-tools "" "set to use the clang we build for the host to then build the cross-compile hosts"
cross-compile-install-prefixes "" "semicolon-separated list of install prefixes to use for the cross-compiled hosts. The list expands, so if there are more cross-compile hosts than prefixes, unmatched hosts use the last prefix in the list"
@ -20,39 +60,59 @@ index 6f0c2b5bf71..db6e0ad10d6 100755
skip-merge-lipo-cross-compile-tools "" "set to skip running merge-lipo after installing cross-compiled host Swift tools"
coverage-db "" "If set, coverage database to use when prioritizing testing"
skip-local-host-install "" "If we are cross-compiling multiple targets, skip an install pass locally if the hosts match"
@@ -1621,6 +1622,9 @@ for host in "${ALL_HOSTS[@]}"; do
@@ -1206,6 +1206,8 @@ function calculate_targets_for_host() {
SWIFT_BENCHMARK_TARGETS=($(get_host_specific_variable ${host} SWIFT_BENCHMARK_TARGETS))
SWIFT_RUN_BENCHMARK_TARGETS=($(get_host_specific_variable ${host} SWIFT_RUN_BENCHMARK_TARGETS))
SWIFT_TEST_TARGETS=($(get_host_specific_variable ${host} SWIFT_TEST_TARGETS))
+ SWIFT_FLAGS=($(get_host_specific_variable ${host} SWIFT_FLAGS))
+ SWIFT_TARGET_CMAKE_OPTIONS=($(get_host_specific_variable ${host} SWIFT_TARGET_CMAKE_OPTIONS))
}
@@ -1347,6 +1349,10 @@ function swift_c_flags() {
fi
}
+function common_swift_flags() {
+ echo -n "${SWIFT_FLAGS[@]} ${COMMON_SWIFT_FLAGS} -module-cache-path \"${module_cache}\" "
+}
+
function cmake_config_opt() {
product=$1
if [[ "${CMAKE_GENERATOR}" == "Xcode" ]] ; then
@@ -1631,6 +1637,9 @@ for host in "${ALL_HOSTS[@]}"; do
-DCMAKE_BUILD_TYPE:STRING="${CMARK_BUILD_TYPE}"
"${cmark_cmake_options[@]}"
)
+ if [[ $(is_cross_tools_host ${host}) ]] ; then
+ add_cross_cmake_options ${host} cmake_options
+ cmake_options+=("${SWIFT_TARGET_CMAKE_OPTIONS[@]}")
+ fi
build_targets=(all)
;;
@@ -1725,6 +1729,7 @@ for host in "${ALL_HOSTS[@]}"; do
@@ -1751,6 +1760,7 @@ for host in "${ALL_HOSTS[@]}"; do
-DCLANG_TABLEGEN=$(build_directory "${LOCAL_HOST}" llvm)/bin/clang-tblgen
-DLLVM_NATIVE_BUILD=$(build_directory "${LOCAL_HOST}" llvm)
)
+ add_cross_cmake_options ${host} cmake_options
+ cmake_options+=("${SWIFT_TARGET_CMAKE_OPTIONS[@]}")
fi
;;
@@ -2089,7 +2094,7 @@ for host in "${ALL_HOSTS[@]}"; do
@@ -2161,7 +2171,7 @@ for host in "${ALL_HOSTS[@]}"; do
-DCMAKE_CXX_COMPILER:PATH="${CLANG_BIN}/clang++"
-DCMAKE_INSTALL_PREFIX:PATH="$(get_host_install_prefix ${host})"
-DCMAKE_Swift_COMPILER:PATH=${SWIFTC_BIN}
- -DCMAKE_Swift_FLAGS:STRING="-module-cache-path \"${module_cache}\""
+ -DCMAKE_Swift_FLAGS:STRING="-module-cache-path \"${module_cache}\" $(common_swift_flags ${host})"
+ -DCMAKE_Swift_FLAGS:STRING="$(common_swift_flags)"
-DLLBUILD_ENABLE_ASSERTIONS:BOOL=$(true_false "${LLBUILD_ENABLE_ASSERTIONS}")
-DLLBUILD_SUPPORT_BINDINGS:=Swift
@@ -2105,6 +2110,16 @@ for host in "${ALL_HOSTS[@]}"; do
@@ -2177,6 +2187,16 @@ for host in "${ALL_HOSTS[@]}"; do
-DFoundation_DIR:PATH=$(build_directory ${host} foundation)/cmake/modules
)
+ if [[ $(is_cross_tools_host ${host}) ]] ; then
+ add_cross_cmake_options ${host} cmake_options
+ cmake_options+=("${SWIFT_TARGET_CMAKE_OPTIONS[@]}")
+
+ # CROSS_COMPILE_DEPS_PATH is searched for the SQLite3 dependency.
+ cmake_options+=(
@ -64,40 +124,40 @@ index 6f0c2b5bf71..db6e0ad10d6 100755
# Ensure on Darwin platforms that we consider only the SQLite headers
# from the SDK instead of picking ones found elsewhere
# (e.g. in /usr/include )
@@ -2163,7 +2178,7 @@ for host in "${ALL_HOSTS[@]}"; do
@@ -2234,7 +2254,7 @@ for host in "${ALL_HOSTS[@]}"; do
-DCMAKE_C_COMPILER:PATH="${CLANG_BIN}/clang"
-DCMAKE_CXX_COMPILER:PATH="${CLANG_BIN}/clang++"
-DCMAKE_Swift_COMPILER:PATH=${SWIFTC_BIN}
- -DCMAKE_Swift_FLAGS:STRING="-module-cache-path \"${module_cache}\""
+ -DCMAKE_Swift_FLAGS:STRING="-module-cache-path \"${module_cache}\" $(common_swift_flags ${host})"
+ -DCMAKE_Swift_FLAGS:STRING="$(common_swift_flags)"
-DCMAKE_INSTALL_PREFIX:PATH="$(get_host_install_prefix ${host})"
-DCMAKE_INSTALL_LIBDIR:PATH="lib"
@@ -2179,6 +2194,9 @@ for host in "${ALL_HOSTS[@]}"; do
@@ -2250,6 +2270,9 @@ for host in "${ALL_HOSTS[@]}"; do
-DENABLE_TESTING=YES
)
+ if [[ $(is_cross_tools_host ${host}) ]] ; then
+ add_cross_cmake_options ${host} cmake_options
+ cmake_options+=("${SWIFT_TARGET_CMAKE_OPTIONS[@]}")
+ fi
;;
esac
@@ -2232,7 +2250,7 @@ for host in "${ALL_HOSTS[@]}"; do
@@ -2303,7 +2326,7 @@ for host in "${ALL_HOSTS[@]}"; do
-DCMAKE_CXX_COMPILER:PATH=${CLANG_BIN}/clang++
-DCMAKE_SWIFT_COMPILER:PATH=${SWIFTC_BIN}
-DCMAKE_Swift_COMPILER:PATH=${SWIFTC_BIN}
- -DCMAKE_Swift_FLAGS:STRING="-module-cache-path \"${module_cache}\""
+ -DCMAKE_Swift_FLAGS:STRING="-module-cache-path \"${module_cache}\" $(common_swift_flags ${host})"
+ -DCMAKE_Swift_FLAGS:STRING="$(common_swift_flags)"
-DCMAKE_INSTALL_PREFIX:PATH=$(get_host_install_prefix ${host})
${LIBICU_BUILD_ARGS[@]}
@@ -2248,6 +2266,17 @@ for host in "${ALL_HOSTS[@]}"; do
@@ -2319,6 +2342,21 @@ for host in "${ALL_HOSTS[@]}"; do
-DBUILD_SHARED_LIBS=$([[ ${product} == foundation_static ]] && echo "NO" || echo "YES")
)
+ if [[ $(is_cross_tools_host ${host}) ]] ; then
+ add_cross_cmake_options ${host} cmake_options
+ cmake_options+=("${SWIFT_TARGET_CMAKE_OPTIONS[@]}")
+
+ # CROSS_COMPILE_DEPS_PATH is searched for the ICU, libXML2
+ # and libcurl dependencies.
@ -106,26 +166,91 @@ index 6f0c2b5bf71..db6e0ad10d6 100755
+ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER
+ )
+ fi
+
+ if [[ "${host}" == "android-"* ]]; then
+ cmake_options+=(
+ -DCMAKE_HAVE_LIBC_PTHREAD=True
+ )
+ fi
;;
libdispatch|libdispatch_static)
LIBDISPATCH_BUILD_DIR=$(build_directory ${host} ${product})
@@ -2274,7 +2303,7 @@ for host in "${ALL_HOSTS[@]}"; do
@@ -2345,7 +2383,7 @@ for host in "${ALL_HOSTS[@]}"; do
-DCMAKE_CXX_COMPILER:PATH="${CLANG_BIN}/clang++"
-DCMAKE_SWIFT_COMPILER:PATH="${SWIFTC_BIN}"
-DCMAKE_Swift_COMPILER:PATH="${SWIFTC_BIN}"
- -DCMAKE_Swift_FLAGS:STRING="-module-cache-path \"${module_cache}\""
+ -DCMAKE_Swift_FLAGS:STRING="-module-cache-path \"${module_cache}\" $(common_swift_flags ${host})"
+ -DCMAKE_Swift_FLAGS:STRING="$(common_swift_flags)"
-DCMAKE_INSTALL_PREFIX:PATH="$(get_host_install_prefix ${host})"
-DCMAKE_INSTALL_LIBDIR:PATH="lib"
@@ -2283,6 +2312,9 @@ for host in "${ALL_HOSTS[@]}"; do
@@ -2354,6 +2392,9 @@ for host in "${ALL_HOSTS[@]}"; do
-DENABLE_TESTING=YES
-DBUILD_SHARED_LIBS=$([[ ${product} == libdispatch_static ]] && echo "NO" || echo "YES")
)
+ if [[ $(is_cross_tools_host ${host}) ]] ; then
+ add_cross_cmake_options ${host} cmake_options
+ cmake_options+=("${SWIFT_TARGET_CMAKE_OPTIONS[@]}")
+ fi
;;
esac
diff --git a/swift/utils/swift_build_support/swift_build_support/host_specific_configuration.py b/swift/utils/swift_build_support/swift_build_support/host_specific_configuration.py
index 9bd750657b8..1e24aee8468 100644
--- a/swift/utils/swift_build_support/swift_build_support/host_specific_configuration.py
+++ b/swift/utils/swift_build_support/swift_build_support/host_specific_configuration.py
@@ -72,6 +72,8 @@ class HostSpecificConfiguration(object):
self.swift_test_run_targets = []
self.swift_benchmark_build_targets = []
self.swift_benchmark_run_targets = []
+ self.swift_flags = ''
+ self.cmake_options = ''
for deployment_target_name in stdlib_targets_to_configure:
# Get the target object.
deployment_target = StdlibDeploymentTarget.get_target_for_name(
@@ -194,6 +196,13 @@ class HostSpecificConfiguration(object):
"check-swift{}-optimize_none_with_implicit_dynamic-{}"
.format(subset_suffix, name))
+ # Only pull in these flags when cross-compiling with
+ # --cross-compile-hosts.
+ if deployment_target_name != args.host_target and \
+ host_target != args.host_target:
+ self.swift_flags = deployment_target.swift_flags(args)
+ self.cmake_options = deployment_target.cmake_options(args)
+
def __platforms_to_skip_build(self, args):
platforms_to_skip_build = set()
if not args.build_linux:
diff --git a/swift/utils/swift_build_support/swift_build_support/targets.py b/swift/utils/swift_build_support/swift_build_support/targets.py
index cb42f52c633..61778ad9837 100644
--- a/swift/utils/swift_build_support/swift_build_support/targets.py
+++ b/swift/utils/swift_build_support/swift_build_support/targets.py
@@ -152,6 +152,29 @@ class Target(object):
def name(self):
return "{}-{}".format(self.platform.name, self.arch)
+ def swift_flags(self, args):
+ flags = ''
+ if self.platform.name == 'android':
+ flags = '-target %s-unknown-linux-android%s ' % (self.arch,
+ args.android_api_level)
+ flags += '-resource-dir %s/swift-%s/lib/swift ' % (
+ args.build_root, self.name)
+ flags += '-sdk %s/sysroot ' % (args.android_ndk)
+ flags += '-tools-directory %s/bin' % (args.android_ndk)
+ flags += ' -Xlinker -rpath -Xlinker @TERMUX_PREFIX@/lib'
+
+ return flags
+
+ def cmake_options(self, args):
+ options = ''
+ if self.platform.name == 'android':
+ options = '-DCMAKE_SYSTEM_NAME=Android '
+ options += '-DCMAKE_SYSTEM_VERSION=%s ' % (args.android_api_level)
+ options += '-DCMAKE_SYSTEM_PROCESSOR=%s ' % (args.android_arch if not
+ args.android_arch == 'armv7' else 'armv7-a')
+ options += '-DCMAKE_ANDROID_STANDALONE_TOOLCHAIN:PATH=%s' % (args.android_ndk)
+
+ return options
class StdlibDeploymentTarget(object):
OSX = DarwinPlatform("macosx", archs=["x86_64", "arm64", "arm64e"],

View File

@ -2,31 +2,6 @@ diff --git a/swift/utils/build-script-impl b/swift/utils/build-script-impl
index b1d060328bc..218c9215260 100755
--- a/swift/utils/build-script-impl
+++ b/swift/utils/build-script-impl
@@ -703,6 +705,7 @@ function set_build_options_for_host() {
llvm_cmake_options+=(
-DLLVM_TOOL_COMPILER_RT_BUILD:BOOL="$(false_true ${SKIP_BUILD_COMPILER_RT})"
-DLLVM_BUILD_EXTERNAL_COMPILER_RT:BOOL="$(false_true ${SKIP_BUILD_COMPILER_RT})"
+ -DCOMPILER_RT_INCLUDE_TESTS:BOOL="OFF"
)
fi
@@ -743,6 +743,7 @@ function set_build_options_for_host() {
llvm_cmake_options+=(
-DLLVM_LIT_ARGS="${LLVM_LIT_ARGS} -j ${BUILD_JOBS}"
+ -DDEFAULT_SYSROOT:STRING="$(dirname @TERMUX_PREFIX@)"
)
swift_cmake_options+=(
-DLLVM_LIT_ARGS="${LLVM_LIT_ARGS} -j ${BUILD_JOBS}"
@@ -1028,7 +1032,7 @@ function make_relative_symlink() {
CROSS_COMPILE_HOSTS=($CROSS_COMPILE_HOSTS)
for t in "${CROSS_COMPILE_HOSTS[@]}"; do
case ${t} in
- macosx-arm64* | iphone* | appletv* | watch* | linux-armv6 | linux-armv7 )
+ macosx-arm64* | iphone* | appletv* | watch* | linux-armv6 | linux-armv7 | android-* )
;;
*)
echo "Unknown host to cross-compile for: ${t}"
@@ -1060,7 +1064,7 @@ function get_host_install_destdir() {
# This assumes that all hosts are merged to the lipo.
local host_install_destdir="${INSTALL_DESTDIR}"
@ -36,49 +11,10 @@ index b1d060328bc..218c9215260 100755
fi
else
local host_install_destdir="${INSTALL_DESTDIR}"
@@ -1422,6 +1426,38 @@ function swift_c_flags() {
fi
}
+function common_swift_flags() {
+ local host=$1
+ if [[ $(is_cross_tools_host ${host}) ]] ; then
+ case $host in
+ android-*)
+ echo -n "${TERMUX_SWIFT_FLAGS}"
+ ;;
+ *)
+ echo "error: Swift cross-compilation flags for ${host} have not been set."
+ exit 1
+ ;;
+ esac
+ fi
+}
+
+function add_cross_cmake_options() {
+ local host=$1
+ local -n options=$2
+ case $host in
+ android-*)
+ local NDK_ARCH=$ANDROID_ARCH
+ test $NDK_ARCH == 'armv7' && NDK_ARCH='armv7-a'
+ options+=(
+ -DCMAKE_SYSTEM_NAME=Android
+ -DCMAKE_SYSTEM_VERSION=${ANDROID_API_LEVEL}
+ -DCMAKE_SYSTEM_PROCESSOR=${NDK_ARCH}
+ -DCMAKE_ANDROID_STANDALONE_TOOLCHAIN:PATH=${ANDROID_NDK}
+ )
+ ;;
+ esac
+}
+
function cmake_config_opt() {
product=$1
if [[ "${CMAKE_GENERATOR}" == "Xcode" ]] ; then
@@ -1546,6 +1578,10 @@ for host in "${ALL_HOSTS[@]}"; do
)
if [[ $(is_cross_tools_host ${host}) ]] ; then
add_cross_cmake_options ${host} cmake_options
cmake_options+=("${SWIFT_TARGET_CMAKE_OPTIONS[@]}")
+ cmake_options+=(
+ -DCMAKE_C_FLAGS="$CFLAGS --target=$CCTERMUX_HOST_PLATFORM $CPPFLAGS"
+ -DCMAKE_CXX_FLAGS="$CXXFLAGS --target=$CCTERMUX_HOST_PLATFORM $CPPFLAGS"
@ -89,7 +25,7 @@ index b1d060328bc..218c9215260 100755
@@ -1652,6 +1688,10 @@ for host in "${ALL_HOSTS[@]}"; do
-DLLVM_NATIVE_BUILD=$(build_directory "${LOCAL_HOST}" llvm)
)
add_cross_cmake_options ${host} cmake_options
cmake_options+=("${SWIFT_TARGET_CMAKE_OPTIONS[@]}")
+ cmake_options+=(
+ -DCMAKE_CXX_FLAGS="$CXXFLAGS --target=$CCTERMUX_HOST_PLATFORM $CPPFLAGS"
+ -DCMAKE_EXE_LINKER_FLAGS="$LDFLAGS --target=$CCTERMUX_HOST_PLATFORM"
@ -97,15 +33,6 @@ index b1d060328bc..218c9215260 100755
fi
;;
@@ -1768,7 +1812,7 @@ for host in "${ALL_HOSTS[@]}"; do
)
fi
- if [[ ! "${SKIP_BUILD_ANDROID}" ]]; then
+ if [[ $(is_cross_tools_host ${host}) ]] ; then
cmake_options=(
"${cmake_options[@]}"
-DSWIFT_ANDROID_NDK_PATH:STRING="${ANDROID_NDK}"
@@ -2045,6 +2045,8 @@ for host in "${ALL_HOSTS[@]}"; do
cmake_options+=(
-DCMAKE_FIND_ROOT_PATH:PATH="${CROSS_COMPILE_DEPS_PATH}"
@ -115,24 +42,20 @@ index b1d060328bc..218c9215260 100755
)
fi
@@ -2199,6 +2201,9 @@ for host in "${ALL_HOSTS[@]}"; do
@@ -2199,6 +2201,8 @@ for host in "${ALL_HOSTS[@]}"; do
cmake_options+=(
-DCMAKE_FIND_ROOT_PATH:PATH="${CROSS_COMPILE_DEPS_PATH}"
-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER
+ -DCMAKE_C_FLAGS="$CFLAGS --target=$CCTERMUX_HOST_PLATFORM $CPPFLAGS"
+ -DCMAKE_EXE_LINKER_FLAGS="$LDFLAGS --target=$CCTERMUX_HOST_PLATFORM"
+ -DCMAKE_HAVE_LIBC_PTHREAD=True
)
fi
@@ -2239,6 +2243,14 @@ for host in "${ALL_HOSTS[@]}"; do
if [[ "${host}" == "android-"* ]]; then
@@ -2239,6 +2243,11 @@ for host in "${ALL_HOSTS[@]}"; do
)
if [[ $(is_cross_tools_host ${host}) ]] ; then
add_cross_cmake_options ${host} cmake_options
cmake_options+=("${SWIFT_TARGET_CMAKE_OPTIONS[@]}")
+ cmake_options+=(
+ -DCMAKE_FIND_ROOT_PATH:PATH="${CROSS_COMPILE_DEPS_PATH}"
+ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER
+ -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY
+ -DCMAKE_C_FLAGS="$CFLAGS --target=$CCTERMUX_HOST_PLATFORM $CPPFLAGS"
+ -DCMAKE_EXE_LINKER_FLAGS="$LDFLAGS --target=$CCTERMUX_HOST_PLATFORM"
+ -DCMAKE_SHARED_LINKER_FLAGS="$LDFLAGS --target=$CCTERMUX_HOST_PLATFORM"

View File

@ -0,0 +1,109 @@
diff --git a/swift/utils/build-script b/swift/utils/build-script
index e34ac8ba03..bc4ddb47d9 100755
--- a/swift/utils/build-script
+++ b/swift/utils/build-script
@@ -1005,9 +1005,14 @@ class BuildScriptInvocation(object):
# Core Lipo...
self._execute_merged_host_lipo_core_action()
+ non_darwin_cross_compile_host_names = [target for target in
+ self.args.cross_compile_hosts if not
+ StdlibDeploymentTarget.get_target_for_name(target).platform.is_darwin]
# Non-build-script-impl products...
- # Note: currently only supports building for the host.
- for host_target in [self.args.host_target]:
+ # Note: currently only supports cross-compiling for non-Darwin hosts.
+ for host_target in [self.args.host_target] + non_darwin_cross_compile_host_names:
+ if self.args.skip_local_build and host_target == self.args.host_target:
+ continue
for product_class in product_classes:
if product_class.is_build_script_impl_product():
continue
diff --git a/swift/utils/swift_build_support/swift_build_support/products/product.py b/swift/utils/swift_build_support/swift_build_support/products/product.py
index 075b934d10..7cd51690db 100644
--- a/swift/utils/swift_build_support/swift_build_support/products/product.py
+++ b/swift/utils/swift_build_support/swift_build_support/products/product.py
@@ -174,8 +174,12 @@ class Product(object):
install_destdir = self.args.install_destdir
if self.args.cross_compile_hosts:
- build_root = os.path.dirname(self.build_dir)
- install_destdir = '%s/intermediate-install/%s' % (build_root, host_target)
+ if host_target == self.args.host_target:
+ build_root = os.path.dirname(self.build_dir)
+ install_destdir = '%s/intermediate-install/%s' % (build_root,
+ host_target)
+ else:
+ install_destdir = os.path.join(install_destdir, host_target)
return targets.toolchain_path(install_destdir,
self.args.install_prefix)
diff --git a/swift/utils/swift_build_support/swift_build_support/products/swiftpm.py b/swift/utils/swift_build_support/swift_build_support/products/swiftpm.py
index 25e982e23f..3127069e19 100644
--- a/swift/utils/swift_build_support/swift_build_support/products/swiftpm.py
+++ b/swift/utils/swift_build_support/swift_build_support/products/swiftpm.py
@@ -23,6 +23,7 @@ from . import product
from . import swift
from . import xctest
from .. import shell
+from ..targets import StdlibDeploymentTarget
class SwiftPM(product.Product):
@@ -88,9 +89,18 @@ class SwiftPM(product.Product):
# Pass Cross compile host info
if self.has_cross_compile_hosts(self.args):
+ helper_cmd += ['--skip-cmake-bootstrap']
helper_cmd += ['--cross-compile-hosts']
- for cross_compile_host in self.args.cross_compile_hosts:
- helper_cmd += [cross_compile_host]
+ if host_target == self.args.host_target:
+ for cross_compile_host in self.args.cross_compile_hosts:
+ helper_cmd += [cross_compile_host]
+ else:
+ helper_cmd += [host_target]
+ install_dir = self.args.install_prefix
+ helper_cmd += ['--cross-compile-flags',
+ StdlibDeploymentTarget.get_target_for_name(host_target)
+ .swift_flags(self.args, resource_dir_root=install_dir)]
+
helper_cmd.extend(additional_params)
@@ -122,8 +133,9 @@ class SwiftPM(product.Product):
def get_install_destdir(self, args, host_target, build_dir):
install_destdir = args.install_destdir
if self.has_cross_compile_hosts(args):
- build_root = os.path.dirname(build_dir)
- install_destdir = '%s/intermediate-install/%s' % (build_root, host_target)
+ if host_target == args.host_target:
+ build_root = os.path.dirname(build_dir)
+ install_destdir = '%s/intermediate-install/%s' % (build_root, host_target)
return install_destdir
def install(self, host_target):
diff --git a/swift/utils/swift_build_support/swift_build_support/targets.py b/swift/utils/swift_build_support/swift_build_support/targets.py
index 61778ad983..57df12a555 100644
--- a/swift/utils/swift_build_support/swift_build_support/targets.py
+++ b/swift/utils/swift_build_support/swift_build_support/targets.py
@@ -152,13 +152,16 @@ class Target(object):
def name(self):
return "{}-{}".format(self.platform.name, self.arch)
- def swift_flags(self, args):
+ def swift_flags(self, args, resource_dir_root=""):
flags = ''
if self.platform.name == 'android':
flags = '-target %s-unknown-linux-android%s ' % (self.arch,
args.android_api_level)
- flags += '-resource-dir %s/swift-%s/lib/swift ' % (
- args.build_root, self.name)
+ if resource_dir_root:
+ flags += '-resource-dir %s/lib/swift ' % (resource_dir_root)
+ else:
+ flags += '-resource-dir %s/swift-%s/lib/swift ' % (
+ args.build_root, self.name)
flags += '-sdk %s/sysroot ' % (args.android_ndk)
flags += '-tools-directory %s/bin' % (args.android_ndk)
flags += ' -Xlinker -rpath -Xlinker @TERMUX_PREFIX@/lib'

View File

@ -1,75 +0,0 @@
commit b7d26337e3252f013d271cd001635e260a50eb77
Date: Wed Nov 11 01:24:23 2020 +0530
[android] Add support for x86_64 arch
diff --git a/swift/utils/build-script b/swift/utils/build-script
index 639f790fe35..8b1c1cd4fde 100755
--- a/swift/utils/build-script
+++ b/swift/utils/build-script
@@ -349,6 +349,9 @@ def apply_default_arguments(toolchain, args):
elif args.android_arch == "aarch64":
args.stdlib_deployment_targets.append(
StdlibDeploymentTarget.Android.aarch64.name)
+ elif args.android_arch == "x86_64":
+ args.stdlib_deployment_targets.append(
+ StdlibDeploymentTarget.Android.x86_64.name)
# Infer platform flags from manually-specified configure targets.
# This doesn't apply to Darwin platforms, as they are
diff --git a/swift/utils/build-script-impl b/swift/utils/build-script-impl
index f7fd838905c..b99da016f5c 100755
--- a/swift/utils/build-script-impl
+++ b/swift/utils/build-script-impl
@@ -414,7 +414,8 @@ function verify_host_is_supported() {
| watchsimulator-arm64 \
| watchos-armv7k \
| android-armv7 \
- | android-aarch64)
+ | android-aarch64 \
+ | android-x86_64)
;;
*)
echo "Unknown host tools target: ${host}"
@@ -458,6 +459,10 @@ function set_build_options_for_host() {
SWIFT_HOST_TRIPLE="armv7-unknown-linux-androideabi${ANDROID_API_LEVEL}"
llvm_target_arch="ARM"
;;
+ android-x86_64)
+ SWIFT_HOST_TRIPLE="x86_64-unknown-linux-android${ANDROID_API_LEVEL}"
+ llvm_target_arch="X86"
+ ;;
linux-armv6)
SWIFT_HOST_TRIPLE="armv6-unknown-linux-gnueabihf"
llvm_target_arch="ARM"
diff --git a/swift/utils/build_swift/build_swift/driver_arguments.py b/swift/utils/build_swift/build_swift/driver_arguments.py
index cb1c5c0b0e3..45d76b51951 100644
--- a/swift/utils/build_swift/build_swift/driver_arguments.py
+++ b/swift/utils/build_swift/build_swift/driver_arguments.py
@@ -1087,10 +1087,10 @@ def create_argument_parser():
android.adb.commands.DEVICE_TEMP_DIR))
option('--android-arch', store,
- choices=['armv7', 'aarch64'],
+ choices=['armv7', 'aarch64', 'x86_64'],
default='armv7',
- help='The Android target architecture when building for Android. '
- 'Currently only armv7 and aarch64 are supported. '
+ help='The target architecture when building for Android. '
+ 'Currently, only armv7, aarch64, and x86_64 are supported. '
'%(default)s is the default.')
# -------------------------------------------------------------------------
diff --git a/swift/utils/swift_build_support/swift_build_support/targets.py b/swift/utils/swift_build_support/swift_build_support/targets.py
index 9370a1a82e0..02613404af9 100644
--- a/swift/utils/swift_build_support/swift_build_support/targets.py
+++ b/swift/utils/swift_build_support/swift_build_support/targets.py
@@ -201,7 +201,7 @@ class StdlibDeploymentTarget(object):
Cygwin = Platform("cygwin", archs=["x86_64"])
- Android = AndroidPlatform("android", archs=["armv7", "aarch64"])
+ Android = AndroidPlatform("android", archs=["armv7", "aarch64", "x86_64"])
Windows = Platform("windows", archs=["x86_64"])

View File

@ -1,66 +1,148 @@
diff --git a/swiftpm/Utilities/bootstrap b/swiftpm/Utilities/bootstrap
index f7439427..5f284c48 100755
index ead6af68..95a8427f 100755
--- a/swiftpm/Utilities/bootstrap
+++ b/swiftpm/Utilities/bootstrap
@@ -167,7 +167,7 @@ def parse_build_args(args):
@@ -143,6 +143,9 @@ def add_build_args(parser):
dest="cross_compile_hosts",
help="List of cross compile hosts targets.",
default=[])
+ parser.add_argument(
+ "--cross-compile-flags",
+ help="Swift flags to cross-compile the PackageDescription libraries")
def add_test_args(parser):
"""Configures the parser with the arguments necessary for the test action."""
@@ -195,8 +198,12 @@ def parse_build_args(args):
args.clang_path = get_clang_path(args)
args.cmake_path = get_cmake_path(args)
args.ninja_path = get_ninja_path(args)
- if args.cross_compile_hosts: # Use XCBuild target directory when building for multiple arches.
+ if args.cross_compile_hosts and "macosx-arm64" in args.cross_compile_hosts: # Use XCBuild target directory when building for multiple arches.
args.target_dir = os.path.join(args.build_dir, "apple/Products")
- args.target_dir = os.path.join(args.build_dir, "apple/Products")
+ if args.cross_compile_hosts:
+ if "macosx-arm64" in args.cross_compile_hosts:
+ # Use XCBuild target directory when building for multiple arches.
+ args.target_dir = os.path.join(args.build_dir, "apple/Products")
+ elif re.match('android-', args.cross_compile_hosts):
+ args.target_dir = os.path.join(args.build_dir, get_build_target(args,cross_compile=True))
else:
args.target_dir = os.path.join(args.build_dir, get_build_target(args))
@@ -232,7 +232,7 @@ def get_ninja_path(args):
def get_build_target(args):
args.bootstrap_dir = os.path.join(args.target_dir, "bootstrap")
@@ -270,10 +277,13 @@ def get_ninja_path(args):
else:
return call_output(["which", "ninja"], verbose=args.verbose)
-def get_build_target(args):
+def get_build_target(args, cross_compile=False):
"""Returns the target-triple of the current machine."""
try:
- target_info_json = subprocess.check_output([args.swiftc_path, '-print-target-info'], stderr=subprocess.PIPE, universal_newlines=True).strip()
+ target_info_json = subprocess.check_output([args.swiftc_path, '-print-target-info', '-target', '@SWIFT_ARCH@-unknown-linux-android'], stderr=subprocess.PIPE, universal_newlines=True).strip()
+ if cross_compile:
+ target_info_json = subprocess.check_output([args.swiftc_path, '-print-target-info'] + args.cross_compile_flags.split(), stderr=subprocess.PIPE, universal_newlines=True).strip()
+ else:
+ target_info_json = subprocess.check_output([args.swiftc_path, '-print-target-info'], stderr=subprocess.PIPE, universal_newlines=True).strip()
args.target_info = json.loads(target_info_json)
return args.target_info["target"]["unversionedTriple"]
except Exception as e:
@@ -366,7 +368,13 @@ def build_with_cmake(args, cmake_args, source_path, build_dir):
@@ -307,8 +317,11 @@ def build(args):
build_yams(args)
build_swift_argument_parser(args)
build_swift_driver(args)
+ build_swiftpm_with_cmake(args)
+
+ if args.cross_compile_flags:
+ build_packagedescription_libs_with_cmake(args)
- build_swiftpm_with_cmake(args)
build_swiftpm_with_swiftpm(args,integrated_swift_driver=False)
def test(args):
@@ -441,11 +454,15 @@ def install_binary(args, binary, dest_dir):
# Build functions
# -----------------------------------------------------------
-def build_with_cmake(args, cmake_args, source_path, build_dir, targets=[]):
+def build_with_cmake(args, cmake_args, source_path, build_dir, targets=[], cross_compile=False):
"""Runs CMake if needed, then builds with Ninja."""
cache_path = os.path.join(build_dir, "CMakeCache.txt")
if args.reconfigure or not os.path.isfile(cache_path) or not args.swiftc_path in open(cache_path).read():
- swift_flags = ""
+ if args.cross_compile_hosts:
+ # The termux prefix flag is needed because the Swift flags pass the
+ # standalone toolchain as the sdk, ie the sysroot.
+ swift_flags = os.getenv("TERMUX_SWIFTPM_FLAGS") + " -resource-dir @TERMUX_PREFIX@/lib/swift -Xcc -I@TERMUX_PREFIX@/include"
+ if cross_compile:
+ swift_flags = args.cross_compile_flags + " -Xcc -I@TERMUX_PREFIX@/include"
+ else:
+ swift_flags = ""
+
if args.sysroot:
swift_flags = "-sdk %s" % args.sysroot
@@ -461,6 +463,9 @@ def build_swiftpm_with_cmake(args):
]
else:
cmake_flags = [ "-DFIND_PM_DEPS:BOOL=NO" ]
+ if "android-@SWIFT_ARCH@" in args.cross_compile_hosts:
+ cmake_flags.append("-DCMAKE_SYSTEM_NAME=Android")
+ cmake_flags.append("-DCMAKE_SYSTEM_VERSION=1")
@@ -567,29 +584,37 @@ def add_rpath_for_cmake_build(args, rpath):
note(' '.join(add_rpath_cmd))
subprocess.call(add_rpath_cmd, stderr=subprocess.PIPE)
+def build_packagedescription_libs_with_cmake(args):
+ """Builds the PackageDescription libraries using CMake."""
+ note("Building PackageDescription libraries (with CMake)")
+
+ cmake_flags = ["-DFIND_PM_DEPS:BOOL=NO"]
+ targets = ["PD4", "PD4_2"]
+ if re.match('android-', args.cross_compile_hosts):
+ cmake_flags.append("-DCMAKE_SYSTEM_NAME=Android")
+ cmake_flags.append("-DCMAKE_SYSTEM_VERSION=1")
+
+ build_with_cmake(args, cmake_flags, args.project_root, args.bootstrap_dir,
+ targets, cross_compile=True)
+
def build_swiftpm_with_cmake(args):
"""Builds SwiftPM using CMake."""
note("Building SwiftPM (with CMake)")
- if args.bootstrap:
- cmake_flags = [
- get_llbuild_cmake_arg(args),
- "-DTSC_DIR=" + os.path.join(args.tsc_build_dir, "cmake/modules"),
- "-DYams_DIR=" + os.path.join(args.yams_build_dir, "cmake/modules"),
- "-DArgumentParser_DIR=" + os.path.join(args.swift_argument_parser_build_dir, "cmake/modules"),
- "-DSwiftDriver_DIR=" + os.path.join(args.swift_driver_build_dir, "cmake/modules"),
- "-DFIND_PM_DEPS:BOOL=YES",
- ]
- else:
- cmake_flags = [ "-DFIND_PM_DEPS:BOOL=NO" ]
+ cmake_flags = [
+ get_llbuild_cmake_arg(args),
+ "-DTSC_DIR=" + os.path.join(args.tsc_build_dir, "cmake/modules"),
+ "-DYams_DIR=" + os.path.join(args.yams_build_dir, "cmake/modules"),
+ "-DArgumentParser_DIR=" + os.path.join(args.swift_argument_parser_build_dir, "cmake/modules"),
+ "-DSwiftDriver_DIR=" + os.path.join(args.swift_driver_build_dir, "cmake/modules"),
+ "-DFIND_PM_DEPS:BOOL=YES",
+ ]
if platform.system() == 'Darwin':
cmake_flags.append("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target(args), g_macos_deployment_target))
@@ -622,8 +631,8 @@ def get_swiftpm_flags(args):
cmake_flags.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
- targets = [] if args.bootstrap else ["PD4", "PD4_2"]
-
- build_with_cmake(args, cmake_flags, args.project_root, args.bootstrap_dir, targets)
+ build_with_cmake(args, cmake_flags, args.project_root, args.bootstrap_dir)
if args.llbuild_link_framework:
add_rpath_for_cmake_build(args, args.llbuild_build_dir)
@@ -763,8 +788,10 @@ def get_swiftpm_flags(args):
)
# Don't use GNU strerror_r on Android.
- if 'ANDROID_DATA' in os.environ:
- build_flags.extend(["-Xswiftc", "-Xcc", "-Xswiftc", "-U_GNU_SOURCE"])
+ build_flags.extend(["-Xswiftc", "-Xcc", "-Xswiftc", "-U_GNU_SOURCE"])
+ build_flags.extend(["-Xlinker", "-landroid-spawn"])
+ if 'ANDROID_DATA' in os.environ or re.match(
+ 'android-', args.cross_compile_hosts):
build_flags.extend(["-Xswiftc", "-Xcc", "-Xswiftc", "-U_GNU_SOURCE"])
+ build_flags.extend(["-Xlinker", "-landroid-spawn"])
# On ELF platforms, remove the host toolchain's stdlib absolute rpath from
# installed executables and shared libraries.
@@ -634,6 +643,12 @@ def get_swiftpm_flags(args):
@@ -775,6 +802,12 @@ def get_swiftpm_flags(args):
cross_compile_hosts = args.cross_compile_hosts
if build_target == 'x86_64-apple-macosx' and "macosx-arm64" in cross_compile_hosts:
build_flags += ["--arch", "x86_64", "--arch", "arm64"]
+ elif "android-@SWIFT_ARCH@" in cross_compile_hosts:
+ elif cross_compile_hosts and re.match('android-', cross_compile_hosts):
+ build_flags.extend([
+ "--destination", "@TERMUX_PKG_BUILDDIR@/swiftpm-android-flags.json",
+ "-Xlinker", "-rpath", "-Xlinker", "@TERMUX_PREFIX@/lib",

0
packages/swift/swiftpm-android-flags.json Executable file → Normal file
View File

View File

@ -1,165 +0,0 @@
commit c815b71f466ff1b649f73536a81c52cd1981a34b
Date: Sat, 24 Oct 2020 13:32:23 +0530
Subject: [bootstrap] Add a --skip-cmake-bootstrap flag to use a
prebuilt swift-build
Rather than building with CMake and then using that freshly built swift-build
to build it with itself, add this flag to check for a prebuilt swift-build next
to swiftc and use that instead if it's there. The PackageDescription libraries
are still built using CMake, as this repo's Package.swift only builds the latest
4_2 version.
diff --git a/swiftpm/CMakeLists.txt b/swiftpm/CMakeLists.txt
index 405b3c56..f1fcf16d 100644
--- a/swiftpm/CMakeLists.txt
+++ b/swiftpm/CMakeLists.txt
@@ -31,13 +31,16 @@ endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
option(BUILD_SHARED_LIBS "Build shared libraryes by default" YES)
+option(FIND_PM_DEPS "Search for all external Package Manager dependencies" YES)
+if(FIND_PM_DEPS)
find_package(TSC CONFIG REQUIRED)
find_package(LLBuild CONFIG)
if(NOT LLBuild_FOUND)
find_package(LLBuild REQUIRED)
endif()
+endif()
find_package(dispatch QUIET)
find_package(Foundation QUIET)
diff --git a/swiftpm/Utilities/bootstrap b/swiftpm/Utilities/bootstrap
index 4cc7dd01..cd13cda4 100755
--- a/swiftpm/Utilities/bootstrap
+++ b/swiftpm/Utilities/bootstrap
@@ -113,6 +113,10 @@ def add_build_args(parser):
"--release",
action="store_true",
help="enables building SwiftPM in release mode")
+ parser.add_argument(
+ "--skip-cmake-bootstrap",
+ action="store_true",
+ help="build with prebuilt package manager in toolchain if it exists")
parser.add_argument(
"--libswiftpm-install-dir",
metavar='PATH',
@@ -174,6 +178,8 @@ def parse_build_args(args):
args.bootstrap_dir = os.path.join(args.target_dir, "bootstrap")
args.conf = 'release' if args.release else 'debug'
args.bin_dir = os.path.join(args.target_dir, args.conf)
+ args.bootstrap = not args.skip_cmake_bootstrap or \
+ not os.path.exists(os.path.join(os.path.split(args.swiftc_path)[0], "swift-build"))
def parse_test_args(args):
"""Parses and cleans arguments necessary for the test action."""
@@ -270,7 +276,8 @@ def build(args):
if not args.llbuild_build_dir:
build_llbuild(args)
- build_tsc(args)
+ if args.bootstrap:
+ build_tsc(args)
build_swiftpm_with_cmake(args)
build_swiftpm_with_swiftpm(args)
@@ -376,7 +383,7 @@ def install_binary(args, binary, dest_dir):
# Build functions
# -----------------------------------------------------------
-def build_with_cmake(args, cmake_args, source_path, build_dir):
+def build_with_cmake(args, cmake_args, source_path, build_dir, targets=[]):
"""Runs CMake if needed, then builds with Ninja."""
cache_path = os.path.join(build_dir, "CMakeCache.txt")
if args.reconfigure or not os.path.isfile(cache_path) or not args.swiftc_path in open(cache_path).read():
@@ -404,6 +411,8 @@ def build_with_cmake(args, cmake_args, source_path, build_dir):
if args.verbose:
ninja_cmd.append("-v")
+ ninja_cmd += targets
+
call(ninja_cmd, cwd=build_dir, verbose=args.verbose)
def build_llbuild(args):
@@ -444,16 +453,22 @@ def build_swiftpm_with_cmake(args):
"""Builds SwiftPM using CMake."""
note("Building SwiftPM (with CMake)")
- cmake_flags = [
- get_llbuild_cmake_arg(args),
- "-DTSC_DIR=" + os.path.join(args.tsc_build_dir, "cmake/modules"),
- ]
+ if args.bootstrap:
+ cmake_flags = [
+ get_llbuild_cmake_arg(args),
+ "-DTSC_DIR=" + os.path.join(args.tsc_build_dir, "cmake/modules"),
+ "-DFIND_PM_DEPS:BOOL=YES",
+ ]
+ else:
+ cmake_flags = [ "-DFIND_PM_DEPS:BOOL=NO" ]
if platform.system() == 'Darwin':
cmake_flags.append("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target(args), g_macos_deployment_target))
cmake_flags.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
- build_with_cmake(args, cmake_flags, args.project_root, args.bootstrap_dir)
+ targets = [] if args.bootstrap else ["PD4", "PD4_2"]
+
+ build_with_cmake(args, cmake_flags, args.project_root, args.bootstrap_dir, targets)
if args.llbuild_link_framework:
swift_build = os.path.join(args.bootstrap_dir, "bin/swift-build")
@@ -463,15 +478,21 @@ def build_swiftpm_with_cmake(args):
def build_swiftpm_with_swiftpm(args):
"""Builds SwiftPM using the version of SwiftPM built with CMake."""
- note("Building SwiftPM (with swift-build)")
swiftpm_args = [
"SWIFT_EXEC=" + args.swiftc_path,
- "SWIFTPM_PD_LIBS=" + os.path.join(args.bootstrap_dir, "pm"),
- os.path.join(args.bootstrap_dir, "bin/swift-build"),
- "--disable-sandbox",
]
+ if args.bootstrap:
+ note("Building SwiftPM (with a freshly built swift-build)")
+ swiftpm_args.append("SWIFTPM_PD_LIBS=" + os.path.join(args.bootstrap_dir, "pm"))
+ swiftpm_args.append(os.path.join(args.bootstrap_dir, "bin/swift-build"))
+ else:
+ note("Building SwiftPM (with a prebuilt swift-build)")
+ swiftpm_args.append(os.path.join(os.path.split(args.swiftc_path)[0], "swift-build"))
+
+ swiftpm_args.append("--disable-sandbox")
+
call_swiftpm(args, swiftpm_args)
# Setup symlinks that'll allow using swiftpm from the build directory.
@@ -527,16 +548,17 @@ def get_swiftpm_env_cmd(args):
env_cmd.append("SWIFTCI_USE_LOCAL_DEPS=1")
env_cmd.append("SWIFTPM_MACOS_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
- libs_joined = ":".join([
- os.path.join(args.bootstrap_dir, "lib"),
- os.path.join(args.tsc_build_dir, "lib"),
- os.path.join(args.llbuild_build_dir, "lib"),
- ])
+ if args.bootstrap:
+ libs_joined = ":".join([
+ os.path.join(args.bootstrap_dir, "lib"),
+ os.path.join(args.tsc_build_dir, "lib"),
+ os.path.join(args.llbuild_build_dir, "lib"),
+ ])
- if platform.system() == 'Darwin':
- env_cmd.append("DYLD_LIBRARY_PATH=%s" % libs_joined)
- else:
- env_cmd.append("LD_LIBRARY_PATH=%s" % libs_joined)
+ if platform.system() == 'Darwin':
+ env_cmd.append("DYLD_LIBRARY_PATH=%s" % libs_joined)
+ else:
+ env_cmd.append("LD_LIBRARY_PATH=%s" % libs_joined)
return env_cmd

View File

@ -1,19 +0,0 @@
commit 75be121002348a7f0c3995f6a6ff63fcbe21aaed
Date: Tue Mar 31 01:14:18 2020 +0530
[PackageDescription] Add missing relative SDK rpath to libPackageDescription.so shared libraries (#2661)
diff --git a/swiftpm/Sources/PackageDescription/CMakeLists.txt b/swiftpm/Sources/PackageDescription/CMakeLists.txt
index ee9eda32..ea704129 100644
--- a/swiftpm/Sources/PackageDescription/CMakeLists.txt
+++ b/swiftpm/Sources/PackageDescription/CMakeLists.txt
@@ -47,6 +47,9 @@ foreach(PACKAGE_DESCRIPTION_VERSION 4 4_2)
Foundation)
target_link_options(PD${PACKAGE_DESCRIPTION_VERSION} PRIVATE
"SHELL:-no-toolchain-stdlib-rpath")
+ set_target_properties(PD${PACKAGE_DESCRIPTION_VERSION} PROPERTIES
+ BUILD_WITH_INSTALL_RPATH TRUE
+ INSTALL_RPATH "$ORIGIN/../../$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>")
endif()
if(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)

View File

@ -1,29 +0,0 @@
diff --git a/swiftpm/swift-tools-support-core/Sources/TSCBasic/CMakeLists.txt b/swiftpm/swift-tools-support-core/Sources/TSCBasic/CMakeLists.txt
index bbc43d98..bc5ee576 100644
--- a/swiftpm/swift-tools-support-core/Sources/TSCBasic/CMakeLists.txt
+++ b/swiftpm/swift-tools-support-core/Sources/TSCBasic/CMakeLists.txt
@@ -53,7 +53,7 @@ target_link_libraries(TSCBasic PUBLIC
TSCLibc)
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
target_link_libraries(TSCBasic PUBLIC
- Foundation)
+ Foundation android-spawn)
endif()
# NOTE(compnerd) workaround for CMake not setting up include flags yet
set_target_properties(TSCBasic PROPERTIES
diff --git a/swiftpm/swift-tools-support-core/Sources/TSCUtility/FSWatch.swift b/swiftpm/swift-tools-support-core/Sources/TSCUtility/FSWatch.swift
index 0658e55b..9221950b 100644
--- a/swiftpm/swift-tools-support-core/Sources/TSCUtility/FSWatch.swift
+++ b/swiftpm/swift-tools-support-core/Sources/TSCUtility/FSWatch.swift
@@ -429,7 +429,11 @@ public final class Inotify {
private func FD_ZERO(_ set: inout fd_set) {
#if os(Android)
+ #if arch(arm)
+ set.fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
+ #else
set.fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
+ #endif
#else
set.__fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
#endif