diff --git a/utils/android/README.md b/utils/android/README.md new file mode 100644 index 0000000000000..28ad49b365caa --- /dev/null +++ b/utils/android/README.md @@ -0,0 +1,16 @@ + +# Build Android Toolchain + +This toolchain will generate the .so and .swiftmodule files of the Swift standard library and Foundation framework for the Android environment, armv7 architecture. Those files are needed when building any Swift library to be included in an application for Android. + +To build the toolchain run: + +``` +android$ ./build-toolchain +``` + +It will be built on: + +``` +path/to/swift-source/swift-android-toolchain +``` diff --git a/utils/android/build-toolchain b/utils/android/build-toolchain index 2d51dc7aacf87..dc51a3cad6680 100755 --- a/utils/android/build-toolchain +++ b/utils/android/build-toolchain @@ -12,29 +12,37 @@ set -e -cd "$(dirname $0)/../.." || exit -SRC_DIR=$PWD +SWIFT_PATH="$( cd "$(dirname $0)/../../.." && pwd )" -ANDROID_NDK_DIR="${ANDROID_NDK_DIR:?Please set the Android NDK directory in the ANDROID_NDK_DIR environment variable}" -ANDROID_ICU_DIR="${ANDROID_ICU_DIR:?Please set the libiconv-libicu-android directory in the ANDROID_ICU_DIR environment variable}" +ANDROID_NDK_PATH="${ANDROID_NDK_PATH:?Please set the Android NDK path in the ANDROID_NDK_PATH environment variable}" +ANDROID_ICU_PATH=${SWIFT_PATH}/libiconv-libicu-android -SWIFT_TOOLCHAIN_DIR="${SRC_DIR}/../swift-android-toolchain" -SWIFT_LINUX_DIR="${SRC_DIR}/../build/Ninja-ReleaseAssert/swift-linux-x86_64" +[ -e ${ANDROID_ICU_PATH} ] || exit 1 -./utils/build-script \ +SWIFT_ANDROID_TOOLCHAIN_PATH="${SWIFT_PATH}/swift-android-toolchain" + +rm -rf ${SWIFT_ANDROID_TOOLCHAIN_PATH} + +${SWIFT_PATH}/swift/utils/build-script \ -R \ --android \ - --android-ndk "${ANDROID_NDK_DIR}" \ + --android-ndk ${ANDROID_NDK_PATH} \ --android-api-level 21 \ - --android-icu-uc "${ANDROID_ICU_DIR}/armeabi-v7a" \ - --android-icu-uc-include "${ANDROID_ICU_DIR}/armeabi-v7a/icu/source/common" \ - --android-icu-i18n "${ANDROID_ICU_DIR}/armeabi-v7a" \ - --android-icu-i18n-include "${ANDROID_ICU_DIR}/armeabi-v7a/icu/source/i18n" || exit - -test -e ${SWIFT_LINUX_DIR} || exit -rm -rf ${SWIFT_TOOLCHAIN_DIR} -mkdir -p ${SWIFT_TOOLCHAIN_DIR}/usr - -cp -r ${SWIFT_LINUX_DIR}/{bin,lib,include} ${SWIFT_TOOLCHAIN_DIR}/usr -cp ${ANDROID_ICU_DIR}/armeabi-v7a/*.so ${SWIFT_TOOLCHAIN_DIR}/usr/lib/swift/android + --android-icu-uc "${ANDROID_ICU_PATH}/armeabi-v7a" \ + --android-icu-uc-include "${ANDROID_ICU_PATH}/armeabi-v7a/icu/source/common" \ + --android-icu-i18n "${ANDROID_ICU_PATH}/armeabi-v7a" \ + --android-icu-i18n-include "${ANDROID_ICU_PATH}/armeabi-v7a/icu/source/i18n" \ + --libdispatch --install-libdispatch \ + --foundation --install-foundation \ + --llbuild --install-llbuild \ + --lldb --install-lldb \ + --swiftpm --install-swiftpm \ + --xctest --install-xctest \ + --install-swift \ + '--swift-install-components=autolink-driver;compiler;clang-builtin-headers;stdlib;swift-remote-mirror;sdk-overlay;dev' \ + --install-prefix=/usr \ + --install-destdir=${SWIFT_ANDROID_TOOLCHAIN_PATH} + +${SWIFT_PATH}/swift-corelibs-libdispatch/build-android +${SWIFT_PATH}/swift-corelibs-foundation/build-android