Support for Android ARM64 on Mac (#627)

This commit is contained in:
Nikolay Igotti
2017-06-02 15:05:15 +03:00
committed by GitHub
parent 94add3cc20
commit dd81d529ee
6 changed files with 43 additions and 7 deletions
@@ -88,6 +88,7 @@ private val knownTargets = mapOf(
"ios_sim" to "ios_sim",
"raspberrypi" to "raspberrypi",
"android_arm32" to "android_arm32",
"android_arm64" to "android_arm64",
"mingw" to "mingw"
)
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
enum class KonanTarget(val suffix: String, var enabled: Boolean = false) {
ANDROID_ARM32("android_arm32"),
ANDROID_ARM64("android_arm64"),
IPHONE("ios"),
IPHONE_SIM("ios_sim"),
LINUX("linux"),
@@ -40,6 +41,7 @@ class TargetManager(val config: CompilerConfiguration) {
KonanTarget.LINUX.enabled = true
KonanTarget.RASPBERRYPI.enabled = true
KonanTarget.ANDROID_ARM32.enabled = true
KonanTarget.ANDROID_ARM64.enabled = true
}
KonanTarget.MINGW -> {
KonanTarget.MINGW.enabled = true
@@ -49,6 +51,7 @@ class TargetManager(val config: CompilerConfiguration) {
KonanTarget.IPHONE.enabled = true
KonanTarget.IPHONE_SIM.enabled = true
KonanTarget.ANDROID_ARM32.enabled = true
KonanTarget.ANDROID_ARM64.enabled = true
}
else ->
error("Unknown host platform: $host")
@@ -170,7 +170,7 @@ internal class LinkStage(val context: Context) {
LinuxBasedPlatform(distribution)
KonanTarget.MACBOOK, KonanTarget.IPHONE, KonanTarget.IPHONE_SIM ->
MacOSBasedPlatform(distribution)
KonanTarget.ANDROID_ARM32 ->
KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64 ->
AndroidPlatform(distribution)
KonanTarget.MINGW ->
MingwPlatform(distribution)
+24 -2
View File
@@ -149,12 +149,34 @@ dependencies.linux-android_arm32 = \
quadruple.android_arm32 = arm-linux-androideabi
entrySelector.android_arm32 = -Wl,--defsym -Wl,main=Konan_main
llvmLtoFlags.android_arm32 = -exported-symbol=Konan_main -emulated-tls
llvmLtoFlags.android_arm32 = -exported-symbol=Konan_main -emulated-tls -relocation-model=pic
llvmLtoOptFlags.android_arm32 = -O3 -function-sections
llvmLtoNooptFlags.android_arm32 = -O1
targetSysRoot.android_arm32 = target-sysroot-21-android_arm32
libffiDir.android_arm32 = libffi-3.2.1-2-android_arm32
linkerKonanFlags.android_arm32 = -lm -latomic -lstdc++
linkerKonanFlags.android_arm32 = -lm -latomic -lstdc++ -landroid
# Android ARM64, based on NDK for android-21.
targetToolchain.osx-android_arm64 = target-toolchain-21-osx-android_arm64
# TODO: split dependencies to host-dependent and host-independent parts.
dependencies.osx-android_arm64 = \
clang-llvm-3.9.0-darwin-macos \
target-sysroot-21-android_arm64 \
target-toolchain-21-osx-android_arm64 \
libffi-3.2.1-2-android_arm64
targetToolchain.linux-android_arm64 = target-toolchain-21-linux-android_arm64
dependencies.linux-android_arm64 = \
clang-llvm-3.9.0-linux-x86-64 \
target-sysroot-21-android_arm64 \
target-toolchain-21-linux-android_arm64 \
libffi-3.2.1-2-android_arm64
quadruple.android_arm64 = aarch64-linux-android
entrySelector.android_arm64 = -Wl,--defsym -Wl,main=Konan_main
llvmLtoFlags.android_arm64 = -exported-symbol=Konan_main -emulated-tls -relocation-model=pic
targetSysRoot.android_arm64 = target-sysroot-21-android_arm64
libffiDir.android_arm64 = libffi-3.2.1-2-android_arm64
linkerKonanFlags.android_arm64 = -lm -latomic -lstdc++ -landroid
# Windows x86-64, based on mingw-w64.
llvmVersion.mingw = 3.9.1
+12 -4
View File
@@ -138,11 +138,19 @@ void setupCompilationFlags() {
"-D__ANDROID__", "-DUSE_GCC_UNWIND=1", "-DUSE_ELF_SYMBOLS=1", "-DELFSIZE=32",
// HACKS!
"-I$android_arm32SysrootDir/usr/include/c++/4.9.x",
"-I$android_arm32SysrootDir/usr/include/c++/4.9.x/arm-linux-androideabi"]
]
}
"-I$android_arm32SysrootDir/usr/include/c++/4.9.x/arm-linux-androideabi"],
"android_arm64":
["-target", getTargetArg("android_arm64"),
"--sysroot=$android_arm64SysrootDir",
"-D__ANDROID__", "-DUSE_GCC_UNWIND=1", "-DUSE_ELF_SYMBOLS=1", "-DELFSIZE=64",
// HACKS!
"-I$android_arm64SysrootDir/usr/include/c++/4.9.x",
"-I$android_arm64SysrootDir/usr/include/c++/4.9.x/aarch64-linux-android"]
ext.targetList = ext.targetArgs.keySet() as List
]
}
ext.targetList = ext.targetArgs.keySet() as List
if (isLinux()) {
binDir = "$gccToolchainDir/$gnuTriplet/bin"
+2
View File
@@ -264,6 +264,8 @@ if (isLinux() || isMac()) {
dependencyTask("android_arm32", SYSROOT)
dependencyTask("android_arm32", LIBFFI)
dependencyTask("android_arm64", SYSROOT)
dependencyTask("android_arm64", LIBFFI)
}
task update(type: Copy) {