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",
|
"ios_sim" to "ios_sim",
|
||||||
"raspberrypi" to "raspberrypi",
|
"raspberrypi" to "raspberrypi",
|
||||||
"android_arm32" to "android_arm32",
|
"android_arm32" to "android_arm32",
|
||||||
|
"android_arm64" to "android_arm64",
|
||||||
"mingw" to "mingw"
|
"mingw" to "mingw"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+3
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
|
|||||||
|
|
||||||
enum class KonanTarget(val suffix: String, var enabled: Boolean = false) {
|
enum class KonanTarget(val suffix: String, var enabled: Boolean = false) {
|
||||||
ANDROID_ARM32("android_arm32"),
|
ANDROID_ARM32("android_arm32"),
|
||||||
|
ANDROID_ARM64("android_arm64"),
|
||||||
IPHONE("ios"),
|
IPHONE("ios"),
|
||||||
IPHONE_SIM("ios_sim"),
|
IPHONE_SIM("ios_sim"),
|
||||||
LINUX("linux"),
|
LINUX("linux"),
|
||||||
@@ -40,6 +41,7 @@ class TargetManager(val config: CompilerConfiguration) {
|
|||||||
KonanTarget.LINUX.enabled = true
|
KonanTarget.LINUX.enabled = true
|
||||||
KonanTarget.RASPBERRYPI.enabled = true
|
KonanTarget.RASPBERRYPI.enabled = true
|
||||||
KonanTarget.ANDROID_ARM32.enabled = true
|
KonanTarget.ANDROID_ARM32.enabled = true
|
||||||
|
KonanTarget.ANDROID_ARM64.enabled = true
|
||||||
}
|
}
|
||||||
KonanTarget.MINGW -> {
|
KonanTarget.MINGW -> {
|
||||||
KonanTarget.MINGW.enabled = true
|
KonanTarget.MINGW.enabled = true
|
||||||
@@ -49,6 +51,7 @@ class TargetManager(val config: CompilerConfiguration) {
|
|||||||
KonanTarget.IPHONE.enabled = true
|
KonanTarget.IPHONE.enabled = true
|
||||||
KonanTarget.IPHONE_SIM.enabled = true
|
KonanTarget.IPHONE_SIM.enabled = true
|
||||||
KonanTarget.ANDROID_ARM32.enabled = true
|
KonanTarget.ANDROID_ARM32.enabled = true
|
||||||
|
KonanTarget.ANDROID_ARM64.enabled = true
|
||||||
}
|
}
|
||||||
else ->
|
else ->
|
||||||
error("Unknown host platform: $host")
|
error("Unknown host platform: $host")
|
||||||
|
|||||||
+1
-1
@@ -170,7 +170,7 @@ internal class LinkStage(val context: Context) {
|
|||||||
LinuxBasedPlatform(distribution)
|
LinuxBasedPlatform(distribution)
|
||||||
KonanTarget.MACBOOK, KonanTarget.IPHONE, KonanTarget.IPHONE_SIM ->
|
KonanTarget.MACBOOK, KonanTarget.IPHONE, KonanTarget.IPHONE_SIM ->
|
||||||
MacOSBasedPlatform(distribution)
|
MacOSBasedPlatform(distribution)
|
||||||
KonanTarget.ANDROID_ARM32 ->
|
KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64 ->
|
||||||
AndroidPlatform(distribution)
|
AndroidPlatform(distribution)
|
||||||
KonanTarget.MINGW ->
|
KonanTarget.MINGW ->
|
||||||
MingwPlatform(distribution)
|
MingwPlatform(distribution)
|
||||||
|
|||||||
@@ -149,12 +149,34 @@ dependencies.linux-android_arm32 = \
|
|||||||
|
|
||||||
quadruple.android_arm32 = arm-linux-androideabi
|
quadruple.android_arm32 = arm-linux-androideabi
|
||||||
entrySelector.android_arm32 = -Wl,--defsym -Wl,main=Konan_main
|
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
|
llvmLtoOptFlags.android_arm32 = -O3 -function-sections
|
||||||
llvmLtoNooptFlags.android_arm32 = -O1
|
llvmLtoNooptFlags.android_arm32 = -O1
|
||||||
targetSysRoot.android_arm32 = target-sysroot-21-android_arm32
|
targetSysRoot.android_arm32 = target-sysroot-21-android_arm32
|
||||||
libffiDir.android_arm32 = libffi-3.2.1-2-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.
|
# Windows x86-64, based on mingw-w64.
|
||||||
llvmVersion.mingw = 3.9.1
|
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",
|
"-D__ANDROID__", "-DUSE_GCC_UNWIND=1", "-DUSE_ELF_SYMBOLS=1", "-DELFSIZE=32",
|
||||||
// HACKS!
|
// HACKS!
|
||||||
"-I$android_arm32SysrootDir/usr/include/c++/4.9.x",
|
"-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()) {
|
if (isLinux()) {
|
||||||
binDir = "$gccToolchainDir/$gnuTriplet/bin"
|
binDir = "$gccToolchainDir/$gnuTriplet/bin"
|
||||||
|
|||||||
Vendored
+2
@@ -264,6 +264,8 @@ if (isLinux() || isMac()) {
|
|||||||
|
|
||||||
dependencyTask("android_arm32", SYSROOT)
|
dependencyTask("android_arm32", SYSROOT)
|
||||||
dependencyTask("android_arm32", LIBFFI)
|
dependencyTask("android_arm32", LIBFFI)
|
||||||
|
dependencyTask("android_arm64", SYSROOT)
|
||||||
|
dependencyTask("android_arm64", LIBFFI)
|
||||||
}
|
}
|
||||||
|
|
||||||
task update(type: Copy) {
|
task update(type: Copy) {
|
||||||
|
|||||||
Reference in New Issue
Block a user