Support Android x86. (#3314)

This commit is contained in:
Nikolay Igotti
2019-09-05 11:36:07 +03:00
committed by GitHub
parent e44d7706dc
commit 58bb4e698b
6 changed files with 80 additions and 38 deletions
@@ -60,7 +60,7 @@ private class LlvmPipelineConfiguration(context: Context) {
KonanTarget.ANDROID_ARM32 -> "arm7tdmi"
KonanTarget.ANDROID_ARM64 -> "cortex-a57"
KonanTarget.ANDROID_X64 -> "x86-64"
KonanTarget.ANDROID_X86 -> TODO("implement me")
KonanTarget.ANDROID_X86 -> "i686"
KonanTarget.LINUX_MIPS32 -> "mips32r2"
KonanTarget.LINUX_MIPSEL32 -> "mips32r2"
KonanTarget.WATCHOS_ARM64 -> TODO("implement me")
+62 -28
View File
@@ -372,33 +372,6 @@ targetSysRoot.android_arm32 = target-sysroot-1-android_ndk
linkerKonanFlags.android_arm32 = -lm -lstdc++ -landroid -llog -latomic
# Android ARM64, based on NDK.
targetToolchain.macos_x64-android_x64 = target-toolchain-1-osx-android_ndk
dependencies.macos_x64-android_x64 = \
clang-llvm-6.0.1-darwin-macos \
target-sysroot-1-android_ndk \
target-toolchain-1-osx-android_ndk \
libffi-3.2.1-3-darwin-macos
targetToolchain.linux_x64-android_x64 = target-toolchain-1-linux-android_ndk
dependencies.linux_x64-android_x64 = \
clang-llvm-6.0.1-linux-x86-64 \
target-sysroot-1-android_ndk \
target-toolchain-1-linux-android_ndk \
libffi-3.2.1-2-linux-x86-64
targetToolchain.mingw_x64-android_x64 = target-toolchain-1-windows-android_ndk
dependencies.mingw_x64-android_x64 = \
msys2-mingw-w64-x86_64-gcc-7.3.0-clang-llvm-lld-6.0.1-2 \
target-sysroot-1-android_ndk \
target-toolchain-1-windows-android_ndk \
libffi-3.2.1-mingw-w64-x86-64
quadruple.android_arm64 = aarch64-linux-android
entrySelector.android_arm64 = -Wl,--defsym -Wl,main=Konan_main
clangFlags.android_arm64 = -cc1 -target-cpu cortex-a57 -emit-obj -disable-llvm-passes -x ir -femulated-tls -mrelocation-model pic
targetSysRoot.android_arm64 = target-sysroot-1-android_ndk
linkerKonanFlags.android_arm64 = -lm -lstdc++ -landroid -llog -latomic
linkerNoDebugFlags.android_arm64 = -Wl,-S
# Android X64, based on NDK.
targetToolchain.macos_x64-android_arm64 = target-toolchain-1-osx-android_ndk
dependencies.macos_x64-android_arm64 = \
clang-llvm-6.0.1-darwin-macos \
@@ -418,12 +391,73 @@ dependencies.mingw_x64-android_arm64 = \
target-toolchain-1-windows-android_ndk \
libffi-3.2.1-mingw-w64-x86-64
quadruple.android_arm64 = aarch64-linux-android
entrySelector.android_arm64 = -Wl,--defsym -Wl,main=Konan_main
clangFlags.android_arm64 = -cc1 -target-cpu cortex-a57 -emit-obj -disable-llvm-passes -x ir -femulated-tls -mrelocation-model pic
clangOptFlags.android_arm64 = -O3 -ffunction-sections
clangNooptFlags.android_arm64 = -O1
targetSysRoot.android_arm64 = target-sysroot-1-android_ndk
linkerKonanFlags.android_arm64 = -lm -lstdc++ -landroid -llog -latomic
linkerNoDebugFlags.android_arm64 = -Wl,-S
# Android X86, based on NDK.
targetToolchain.macos_x64-android_x86 = target-toolchain-1-osx-android_ndk
dependencies.macos_x64-android_x86 = \
clang-llvm-6.0.1-darwin-macos \
target-sysroot-1-android_ndk \
target-toolchain-1-osx-android_ndk \
libffi-3.2.1-3-darwin-macos
targetToolchain.linux_x64-android_x86 = target-toolchain-1-linux-android_ndk
dependencies.linux_x64-android_x86 = \
clang-llvm-6.0.1-linux-x86-64 \
target-sysroot-1-android_ndk \
target-toolchain-1-linux-android_ndk \
libffi-3.2.1-2-linux-x86-64
targetToolchain.mingw_x64-android_x86 = target-toolchain-1-windows-android_ndk
dependencies.mingw_x64-android_x86 = \
msys2-mingw-w64-x86_64-gcc-7.3.0-clang-llvm-lld-6.0.1-2 \
target-sysroot-1-android_ndk \
target-toolchain-1-windows-android_ndk \
libffi-3.2.1-mingw-w64-x86-64
quadruple.android_x86 = i686-linux-android
entrySelector.android_x86 = -Wl,--defsym -Wl,main=Konan_main
clangFlags.android_x86 = -cc1 -target-cpu i686 -emit-obj -disable-llvm-passes -x ir -femulated-tls -mrelocation-model pic
clangOptFlags.android_x86 = -O3 -ffunction-sections
clangNooptFlags.android_x86 = -O1
targetSysRoot.android_x86 = target-sysroot-1-android_ndk
linkerKonanFlags.android_x86 = -lm -lstdc++ -landroid -llog -latomic
linkerNoDebugFlags.android_x86 = -Wl,-S
# Android X64, based on NDK.
targetToolchain.macos_x64-android_x64 = target-toolchain-1-osx-android_ndk
dependencies.macos_x64-android_x64 = \
clang-llvm-6.0.1-darwin-macos \
target-sysroot-1-android_ndk \
target-toolchain-1-osx-android_ndk \
libffi-3.2.1-3-darwin-macos
targetToolchain.linux_x64-android_x64 = target-toolchain-1-linux-android_ndk
dependencies.linux_x64-android_x64 = \
clang-llvm-6.0.1-linux-x86-64 \
target-sysroot-1-android_ndk \
target-toolchain-1-linux-android_ndk \
libffi-3.2.1-2-linux-x86-64
targetToolchain.mingw_x64-android_x64 = target-toolchain-1-windows-android_ndk
dependencies.mingw_x64-android_x64 = \
msys2-mingw-w64-x86_64-gcc-7.3.0-clang-llvm-lld-6.0.1-2 \
target-sysroot-1-android_ndk \
target-toolchain-1-windows-android_ndk \
libffi-3.2.1-mingw-w64-x86-64
quadruple.android_x64 = x86_64-linux-android
entrySelector.android_x64 = -Wl,--defsym -Wl,main=Konan_main
clangFlags.android_x64 = -cc1 -target-cpu x86-64 -emit-obj -disable-llvm-passes -x ir -femulated-tls -mrelocation-model pic
clangOptFlags.android_x64 = -O3 -ffunction-sections
clangNooptFlags.android_x64 = -O1
targetSysRoot.android_x64 = target-sysroot-1-android_ndk
linkerKonanFlags.android_x64 = -lm -lstdc++ -landroid -llog -latomic
linkerNoDebugFlags.android_ax64 = -Wl,-S
linkerNoDebugFlags.android_x64 = -Wl,-S
# Windows x86-64, based on mingw-w64.
llvmHome.mingw_x64 = msys2-mingw-w64-x86_64-gcc-7.3.0-clang-llvm-lld-6.0.1-2
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.konan.file.File
internal object Android {
const val API = "21"
private val architectureMap = mapOf(
// KonanTarget.X86 to "x86",
KonanTarget.ANDROID_X86 to "x86",
KonanTarget.ANDROID_X64 to "x86_64",
KonanTarget.ANDROID_ARM32 to "arm",
KonanTarget.ANDROID_ARM64 to "arm64"
@@ -85,7 +85,8 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con
KonanTarget.IOS_X64 ->
listOf("-stdlib=libc++", "-isysroot", absoluteTargetSysRoot, "-miphoneos-version-min=9.0.0")
KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64, KonanTarget.ANDROID_X64 -> {
KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64,
KonanTarget.ANDROID_X86, KonanTarget.ANDROID_X64 -> {
val clangTarget = targetArg!!
val architectureDir = Android.architectureDirForTarget(target)
val toolchainSysroot = "$absoluteTargetToolchain/sysroot"
@@ -113,7 +114,6 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con
"-Xclang", "-isystem$absoluteTargetSysRoot/include/compat",
"-Xclang", "-isystem$absoluteTargetSysRoot/include/libc")
KonanTarget.ANDROID_X86 -> TODO("implement me")
KonanTarget.WATCHOS_ARM64 -> TODO("implement me")
KonanTarget.WATCHOS_ARM32 -> TODO("implement me")
KonanTarget.WATCHOS_X64 -> TODO("implement me")
@@ -251,6 +251,15 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con
"-DKONAN_ARM64=1",
"-DKONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1")
KonanTarget.ANDROID_X86 ->
listOf("-D__ANDROID__",
"-DUSE_GCC_UNWIND=1",
"-DUSE_ELF_SYMBOLS=1",
"-DELFSIZE=32",
"-DKONAN_ANDROID=1",
"-DKONAN_X86=1",
"-DKONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1")
KonanTarget.ANDROID_X64 ->
listOf("-D__ANDROID__",
"-DUSE_GCC_UNWIND=1",
@@ -271,7 +280,6 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con
"-DKONAN_NO_MEMMEM",
"-DKONAN_NO_CTORS_SECTION=1")
KonanTarget.ANDROID_X86 -> TODO("implement me")
KonanTarget.WATCHOS_ARM64 -> TODO("implement me")
KonanTarget.WATCHOS_ARM32 -> TODO("implement me")
KonanTarget.WATCHOS_X64 -> TODO("implement me")
@@ -44,13 +44,13 @@ fun loadConfigurables(target: KonanTarget, properties: Properties, baseDir: Stri
LinuxMIPSConfigurablesImpl(target, properties, baseDir)
KonanTarget.MACOS_X64, KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64, KonanTarget.IOS_X64 ->
AppleConfigurablesImpl(target, properties, baseDir)
KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64, KonanTarget.ANDROID_X64 ->
KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64,
KonanTarget.ANDROID_X86, KonanTarget.ANDROID_X64 ->
AndroidConfigurablesImpl(target, properties, baseDir)
KonanTarget.MINGW_X64, KonanTarget.MINGW_X86 ->
MingwConfigurablesImpl(target, properties, baseDir)
KonanTarget.WASM32 ->
WasmConfigurablesImpl(target, properties, baseDir)
KonanTarget.ANDROID_X86-> TODO("unimplemented: $target")
KonanTarget.WATCHOS_ARM64, KonanTarget.WATCHOS_ARM32, KonanTarget.WATCHOS_X64, KonanTarget.WATCHOS_X86-> TODO("unimplemented: $target")
KonanTarget.TVOS_ARM64, KonanTarget.TVOS_X64 -> TODO("unimplemented: $target")
is KonanTarget.ZEPHYR ->
@@ -439,13 +439,13 @@ fun linker(configurables: Configurables): LinkerFlags =
LinuxBasedLinker(configurables as LinuxMIPSConfigurables)
KonanTarget.MACOS_X64, KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64, KonanTarget.IOS_X64 ->
MacOSBasedLinker(configurables as AppleConfigurables)
KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64, KonanTarget.ANDROID_X64 ->
KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64,
KonanTarget.ANDROID_X86, KonanTarget.ANDROID_X64 ->
AndroidLinker(configurables as AndroidConfigurables)
KonanTarget.MINGW_X64, KonanTarget.MINGW_X86 ->
MingwLinker(configurables as MingwConfigurables)
KonanTarget.WASM32 ->
WasmLinker(configurables as WasmConfigurables)
KonanTarget.ANDROID_X86 -> TODO("implement me")
KonanTarget.WATCHOS_ARM64 -> TODO("implement me")
KonanTarget.WATCHOS_ARM32 -> TODO("implement me")
KonanTarget.WATCHOS_X64 -> TODO("implement me")
@@ -49,7 +49,7 @@ class PlatformManager(distribution: Distribution = Distribution(), experimental:
* TODO: Don't forget to delete this field and replace all its usages to `enabled`.
*/
val filteredOutEnabledButNotSupported
get() = enabled.filterNot { it == KonanTarget.ANDROID_X86 || it == KonanTarget.WATCHOS_X64 ||
get() = enabled.filterNot { it == KonanTarget.WATCHOS_X64 ||
it == KonanTarget.WATCHOS_X86|| it == KonanTarget.WATCHOS_ARM64 || it == KonanTarget.WATCHOS_ARM32 ||
it == KonanTarget.TVOS_X64 || it == KonanTarget.TVOS_ARM64}
}