Skip to content

Commit 47d94da

Browse files
committed
[android] Support building the host tools and with the static stdlib
1 parent 509f905 commit 47d94da

File tree

2 files changed

+43
-15
lines changed

2 files changed

+43
-15
lines changed

stdlib/public/runtime/CMakeLists.txt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ add_swift_target_library(swiftRuntime OBJECT_LIBRARY
116116

117117
set(ELFISH_SDKS)
118118
set(COFF_SDKS)
119-
foreach(sdk ${SWIFT_CONFIGURED_SDKS})
119+
foreach(sdk ${SWIFT_SDKS})
120120
if("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "ELF")
121121
list(APPEND ELFISH_SDKS ${sdk})
122122
elseif("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "COFF")
@@ -144,7 +144,7 @@ add_swift_target_library(swiftImageRegistrationObjectCOFF
144144
SWIFT_COMPILE_FLAGS ${SWIFT_STANDARD_LIBRARY_SWIFT_FLAGS}
145145
INSTALL_IN_COMPONENT none)
146146

147-
foreach(sdk ${SWIFT_CONFIGURED_SDKS})
147+
foreach(sdk ${SWIFT_SDKS})
148148
foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES})
149149
set(arch_subdir "${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${arch}")
150150
set(arch_suffix "${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}")
@@ -224,11 +224,18 @@ foreach(sdk ${SWIFT_CONFIGURED_SDKS})
224224
set(libicu_data_a ${ICU_UC_LIBDIR}/libicudata.a)
225225
endif()
226226
endif()
227+
set(libpthread -lpthread)
228+
set(android_libraries)
229+
if(sdk STREQUAL ANDROID)
230+
set(android_libraries -llog)
231+
set(libpthread)
232+
endif()
227233

228234
set(linkfile ${lowercase_sdk}/static-stdlib-args.lnk)
229235
file(WRITE "${SWIFTSTATICLIB_DIR}/${linkfile}" "
230236
-ldl
231-
-lpthread
237+
${libpthread}
238+
${android_libraries}
232239
-lswiftCore
233240
${libicu_i18n_a}
234241
${libicu_uc_a}

utils/build-script-impl

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -452,17 +452,35 @@ function set_build_options_for_host() {
452452
SWIFT_HOST_VARIANT_ARCH=$architecture
453453

454454
case ${host} in
455-
android-aarch64)
456-
SWIFT_HOST_TRIPLE="aarch64-unknown-linux-android"
457-
llvm_target_arch="AArch64"
458-
;;
459-
android-armv7)
460-
SWIFT_HOST_TRIPLE="armv7-unknown-linux-androideabi"
461-
llvm_target_arch="ARM"
462-
;;
463-
android-x86_64)
464-
SWIFT_HOST_TRIPLE="x86_64-unknown-linux-android${ANDROID_API_LEVEL}"
465-
llvm_target_arch="X86"
455+
android-*)
456+
# Clang uses a different sysroot natively on Android in the Termux
457+
# app, which the Termux build scripts pass in through a $PREFIX
458+
# variable.
459+
if [[ "${PREFIX}" ]] ; then
460+
llvm_cmake_options+=(
461+
-DDEFAULT_SYSROOT:STRING="$(dirname ${PREFIX})"
462+
)
463+
fi
464+
# Android doesn't support building all of compiler-rt yet.
465+
if [[ ! $(is_cross_tools_host "${host}") ]] ; then
466+
llvm_cmake_options+=(
467+
-DCOMPILER_RT_INCLUDE_TESTS:BOOL=FALSE
468+
)
469+
fi
470+
case ${host} in
471+
android-aarch64)
472+
SWIFT_HOST_TRIPLE="aarch64-unknown-linux-android"
473+
llvm_target_arch="AArch64"
474+
;;
475+
android-armv7)
476+
SWIFT_HOST_TRIPLE="armv7-unknown-linux-androideabi"
477+
llvm_target_arch="ARM"
478+
;;
479+
android-x86_64)
480+
SWIFT_HOST_TRIPLE="x86_64-unknown-linux-android${ANDROID_API_LEVEL}"
481+
llvm_target_arch="X86"
482+
;;
483+
esac
466484
;;
467485
linux-armv6)
468486
SWIFT_HOST_TRIPLE="armv6-unknown-linux-gnueabihf"
@@ -1756,7 +1774,8 @@ for host in "${ALL_HOSTS[@]}"; do
17561774
)
17571775
fi
17581776

1759-
if [[ ! "${SKIP_BUILD_ANDROID}" ]]; then
1777+
if [[ ! "${SKIP_BUILD_ANDROID}" ]] ||
1778+
[[ $(is_cross_tools_host ${host}) && "${host}" == "android-"* ]]; then
17601779
cmake_options=(
17611780
"${cmake_options[@]}"
17621781
-DSWIFT_ANDROID_NDK_PATH:STRING="${ANDROID_NDK}"
@@ -2447,6 +2466,8 @@ for host in "${ALL_HOSTS[@]}"; do
24472466
elif [[ "$(uname -s)" == "Haiku" ]] ; then
24482467
HOST_CXX_HEADERS_DIR="/boot/system/develop/headers/c++"
24492468
elif [[ "${ANDROID_DATA}" ]] ; then
2469+
# This means we're building natively on Android in the Termux
2470+
# app, which supplies the $PREFIX variable.
24502471
HOST_CXX_HEADERS_DIR="$PREFIX/include/c++"
24512472
else # Linux
24522473
HOST_CXX_HEADERS_DIR="/usr/include/c++"

0 commit comments

Comments
 (0)