Support for Android ARM64 on Mac (#627)
This commit is contained in:
+1
@@ -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"
|
||||
)
|
||||
|
||||
|
||||
+3
@@ -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")
|
||||
|
||||
+1
-1
@@ -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)
|
||||
|
||||
@@ -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
@@ -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"
|
||||
|
||||
Vendored
+2
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user