Skip to content

Commit 3c4a49d

Browse files
zhuoweimodocache
authored andcommitted
android: detect NDK path from environmental variable, starting to fix Swift default linker flags, attempt at copying libicu libraries automatically (doesn't work)
1 parent 04dfc29 commit 3c4a49d

File tree

6 files changed

+57
-6
lines changed

6 files changed

+57
-6
lines changed

CMakeLists.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ set(SWIFT_NATIVE_SWIFT_TOOLS_PATH "" CACHE STRING
125125
option(SWIFT_ENABLE_LTO
126126
"If set to true, build the swift compiler with link time optimization enabled" FALSE)
127127

128-
set(SWIFT_ANDROID_NDK_PATH "/home/zhuowei/ndk" CACHE STRING
128+
set(SWIFT_ANDROID_NDK_PATH "$ENV{ANDROID_NDK_HOME}" CACHE STRING
129129
"Path to the directory that contains the Android NDK tools that are executable on the build machine")
130130

131131
# The following only works with the Ninja generator in CMake >= 3.0.
@@ -448,8 +448,12 @@ if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
448448

449449
is_sdk_requested(ANDROID swift_build_android)
450450
if(swift_build_android AND ${swift_can_crosscompile_stdlib})
451+
if("${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
452+
message(FATAL_ERROR "environmental variable ANDROID_NDK_HOME not set")
453+
endif()
451454
configure_sdk_unix(ANDROID "Android" "android" "android" "armv7" "armv7-none-linux-androideabi")
452-
set(SWIFT_SDK_ANDROID_PATH "/home/zhuowei/ndk/platforms/android-16/arch-arm")
455+
set(SWIFT_SDK_ANDROID_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-16/arch-arm")
456+
453457
set(SWIFT_PRIMARY_VARIANT_SDK_default "ANDROID")
454458
set(SWIFT_PRIMARY_VARIANT_ARCH_default "armv7")
455459
endif()

cmake/modules/AddSwift.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ function(_add_variant_link_flags
200200
"-ldl"
201201
"-L${SWIFT_ANDROID_NDK_PATH}/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.8"
202202
"${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so"
203-
"-L/home/zhuowei/libiconv-libicu-android/armeabi-v7a")
203+
"-L${CMAKE_SOURCE_DIR}/../libiconv-libicu-android/armeabi-v7a")
204204
else()
205205
list(APPEND result "-lobjc")
206206
endif()

cmake/modules/FindICU.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ foreach(MODULE ${ICU_FIND_COMPONENTS})
2727
endif()
2828
endforeach()
2929
message("FIXME Android: ICU")
30-
set(ICU_I18N_INCLUDE_DIR "/home/zhuowei/icu/source/i18n")
31-
set(ICU_UC_INCLUDE_DIR "/home/zhuowei/icu/source/common")
30+
set(ICU_I18N_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/../icu/source/i18n")
31+
set(ICU_UC_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/../icu/source/common")
3232

3333
find_package_handle_standard_args(ICU DEFAULT_MSG ${ICU_REQUIRED})
3434
mark_as_advanced(${ICU_REQUIRED})

lib/Driver/Driver.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1082,6 +1082,16 @@ void Driver::buildOutputInfo(const ToolChain &TC, const DerivedArgList &Args,
10821082
});
10831083
}
10841084
}
1085+
} else if (TC.getTriple().isAndroid()) {
1086+
const char* ndkhome = getenv("ANDROID_NDK_HOME");
1087+
if (!ndkhome) {
1088+
llvm::errs() <<
1089+
"ANDROID_NDK_HOME environmental variable not set; "
1090+
"won't be able to build Android programs. Please "
1091+
"set it to the path of the NDK\n";
1092+
} else {
1093+
OI.SDKPath = std::string(ndkhome) + "/platforms/android-16/arch-arm";
1094+
}
10851095
}
10861096

10871097
if (!OI.SDKPath.empty()) {

lib/Driver/ToolChains.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1211,6 +1211,31 @@ toolchains::GenericUnix::constructInvocation(const LinkJobAction &job,
12111211
Arguments.push_back(context.Args.MakeArgString(LibProfile));
12121212
}
12131213

1214+
if (getTriple().isAndroid()) {
1215+
// FIXME: Android: hard-coded paths to arm; needs to fix for arm64, x86
1216+
Arguments.push_back("-target");
1217+
Arguments.push_back("armv7-none-linux-androideabi");
1218+
//Arguments.push_back(context.Args.MakeArgString(getTriple().str()));
1219+
1220+
const char* ndkhome = getenv("ANDROID_NDK_HOME");
1221+
assert(ndkhome && "ANDROID_NDK_HOME needs to be set to NDK "
1222+
"install directory for linking");
1223+
1224+
auto libgccpath = Twine(ndkhome) + "/toolchains/"
1225+
"arm-linux-androideabi-4.8/prebuilt/linux-x86_64/"
1226+
"lib/gcc/arm-linux-androideabi/4.8";
1227+
Arguments.push_back("-L");
1228+
Arguments.push_back(context.Args.MakeArgString(libgccpath));
1229+
1230+
auto libcxxpath = Twine(ndkhome) + "/sources/"
1231+
"cxx-stl/llvm-libc++/libs/armeabi-v7a";
1232+
Arguments.push_back("-L");
1233+
Arguments.push_back(context.Args.MakeArgString(libcxxpath));
1234+
1235+
Arguments.push_back("-lgcc");
1236+
Arguments.push_back("-lc");
1237+
}
1238+
12141239
// FIXME: We probably shouldn't be adding an rpath here unless we know ahead
12151240
// of time the standard library won't be copied.
12161241
Arguments.push_back("-Xlinker");

stdlib/public/Bionic/CMakeLists.txt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ foreach(input ${sources})
1414
# "${output_dir}/${input}")
1515
list(APPEND commands
1616
COMMAND
17-
"sed" "-e" "s@SYSROOT@/home/zhuowei/ndk/platforms/android-16/arch-arm@g"
17+
"sed" "-e" "s@SYSROOT@${SWIFT_ANDROID_NDK_PATH}/platforms/android-16/arch-arm@g"
1818
"${CMAKE_CURRENT_SOURCE_DIR}/${input}"
1919
">"
2020
"${output_dir}/${input}")
@@ -39,3 +39,15 @@ add_swift_library(swiftGlibc IS_SDK_OVERLAY
3939
TARGET_SDKS ANDROID
4040
INSTALL_IN_COMPONENT stdlib-experimental)
4141

42+
# FIXME: Android: find where this belongs
43+
set(iculibs
44+
"${CMAKE_SOURCE_DIR}/../libiconv-libicu-android/armeabi-v7a/libicudata.so"
45+
"${CMAKE_SOURCE_DIR}/../libiconv-libicu-android/armeabi-v7a/libicuuc.so"
46+
"${CMAKE_SOURCE_DIR}/../libiconv-libicu-android/armeabi-v7a/libicui18n.so"
47+
)
48+
49+
# TODO: Android: copy this during build as well
50+
51+
swift_install_in_component(stdlib
52+
FILES ${iculibs}
53+
DESTINATION "lib/swift/android/armv7")

0 commit comments

Comments
 (0)