Skip to content

Commit b79d05c

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 eb8a8f4 commit b79d05c

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
@@ -113,7 +113,7 @@ set(SWIFT_NATIVE_CLANG_TOOLS_PATH "" CACHE STRING
113113
set(SWIFT_NATIVE_SWIFT_TOOLS_PATH "" CACHE STRING
114114
"Path to the directory that contains Swift tools that are executable on the build machine")
115115

116-
set(SWIFT_ANDROID_NDK_PATH "/home/zhuowei/ndk" CACHE STRING
116+
set(SWIFT_ANDROID_NDK_PATH "$ENV{ANDROID_NDK_HOME}" CACHE STRING
117117
"Path to the directory that contains the Android NDK tools that are executable on the build machine")
118118
# The following only works with the Ninja generator in CMake >= 3.0.
119119
set(SWIFT_PARALLEL_COMPILE_JOBS "" CACHE STRING
@@ -427,8 +427,12 @@ if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
427427

428428
is_sdk_requested(ANDROID swift_build_android)
429429
if(swift_build_android AND ${swift_can_crosscompile_stdlib})
430+
if("${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
431+
message(FATAL_ERROR "environmental variable ANDROID_NDK_HOME not set")
432+
endif()
430433
configure_sdk_unix(ANDROID "Android" "android" "android" "armv7" "armv7-none-linux-androideabi")
431-
set(SWIFT_SDK_ANDROID_PATH "/home/zhuowei/ndk/platforms/android-16/arch-arm")
434+
set(SWIFT_SDK_ANDROID_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-16/arch-arm")
435+
432436
set(SWIFT_PRIMARY_VARIANT_SDK_default "ANDROID")
433437
set(SWIFT_PRIMARY_VARIANT_ARCH_default "armv7")
434438
endif()

cmake/modules/AddSwift.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ function(_add_variant_link_flags
180180
"-ldl"
181181
"-L${SWIFT_ANDROID_NDK_PATH}/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.8"
182182
"${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so"
183-
"-L/home/zhuowei/libiconv-libicu-android/armeabi-v7a")
183+
"-L${CMAKE_SOURCE_DIR}/../libiconv-libicu-android/armeabi-v7a")
184184
else()
185185
list(APPEND result "-lobjc")
186186
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
@@ -1077,6 +1077,16 @@ void Driver::buildOutputInfo(const ToolChain &TC, const DerivedArgList &Args,
10771077
});
10781078
}
10791079
}
1080+
} else if (TC.getTriple().isAndroid()) {
1081+
const char* ndkhome = getenv("ANDROID_NDK_HOME");
1082+
if (!ndkhome) {
1083+
llvm::errs() <<
1084+
"ANDROID_NDK_HOME environmental variable not set; "
1085+
"won't be able to build Android programs. Please "
1086+
"set it to the path of the NDK\n";
1087+
} else {
1088+
OI.SDKPath = std::string(ndkhome) + "/platforms/android-16/arch-arm";
1089+
}
10801090
}
10811091

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

lib/Driver/ToolChains.cpp

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

1115+
if (getTriple().isAndroid()) {
1116+
// FIXME: Android: hard-coded paths to arm; needs to fix for arm64, x86
1117+
Arguments.push_back("-target");
1118+
Arguments.push_back("armv7-none-linux-androideabi");
1119+
//Arguments.push_back(context.Args.MakeArgString(getTriple().str()));
1120+
1121+
const char* ndkhome = getenv("ANDROID_NDK_HOME");
1122+
assert(ndkhome && "ANDROID_NDK_HOME needs to be set to NDK "
1123+
"install directory for linking");
1124+
1125+
auto libgccpath = Twine(ndkhome) + "/toolchains/"
1126+
"arm-linux-androideabi-4.8/prebuilt/linux-x86_64/"
1127+
"lib/gcc/arm-linux-androideabi/4.8";
1128+
Arguments.push_back("-L");
1129+
Arguments.push_back(context.Args.MakeArgString(libgccpath));
1130+
1131+
auto libcxxpath = Twine(ndkhome) + "/sources/"
1132+
"cxx-stl/llvm-libc++/libs/armeabi-v7a";
1133+
Arguments.push_back("-L");
1134+
Arguments.push_back(context.Args.MakeArgString(libcxxpath));
1135+
1136+
Arguments.push_back("-lgcc");
1137+
Arguments.push_back("-lc");
1138+
}
1139+
11151140
// FIXME: We probably shouldn't be adding an rpath here unless we know ahead
11161141
// of time the standard library won't be copied.
11171142
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)