From 81d4c19d8bedbc716a3b53517828d661cd4fccfc Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Fri, 9 Apr 2021 13:11:14 +0700 Subject: [PATCH] Fix Android NDK targets Android NDK dirs omit vendor part of triple, so we have to respect its decision. --- .../org/jetbrains/kotlin/konan/target/ClangArgs.kt | 2 +- .../org/jetbrains/kotlin/konan/target/Linker.kt | 6 +++--- .../jetbrains/kotlin/konan/target/TargetTriple.kt | 14 +++++++++++++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt index 4b1cd2ba4aa..5f0d7e939cb 100644 --- a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt +++ b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt @@ -98,7 +98,7 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64, KonanTarget.ANDROID_X86, KonanTarget.ANDROID_X64 -> { - val clangTarget = targetTriple.toString() + val clangTarget = targetTriple.withoutVendor() val architectureDir = Android.architectureDirForTarget(target) val toolchainSysroot = "$absoluteTargetToolchain/sysroot" listOf( diff --git a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt index b6ebf81cad9..11b057dd0db 100644 --- a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt +++ b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt @@ -109,8 +109,8 @@ class AndroidLinker(targetProperties: AndroidConfigurables) : LinkerFlags(targetProperties), AndroidConfigurables by targetProperties { private val clangTarget = when (val targetString = targetProperties.targetTriple.toString()) { - "arm-unknown-linux-androideabi" -> "armv7a-unknown-linux-androideabi" - else -> targetString + "arm-unknown-linux-androideabi" -> "armv7a-linux-androideabi" + else -> targetProperties.targetTriple.withoutVendor() } private val prefix = "$absoluteTargetToolchain/bin/${clangTarget}${Android.API}" private val clang = if (HostManager.hostIsMingw) "$prefix-clang.cmd" else "$prefix-clang" @@ -136,7 +136,7 @@ class AndroidLinker(targetProperties: AndroidConfigurables) val toolchainSysroot = "${absoluteTargetToolchain}/sysroot" val architectureDir = Android.architectureDirForTarget(target) val apiSysroot = "$absoluteTargetSysRoot/$architectureDir" - val clangTarget = targetTriple.toString() + val clangTarget = targetTriple.withoutVendor() val libDirs = listOf( "--sysroot=$apiSysroot", if (target == KonanTarget.ANDROID_X64) "-L$apiSysroot/usr/lib64" else "-L$apiSysroot/usr/lib", diff --git a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/TargetTriple.kt b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/TargetTriple.kt index a2a04d67156..7347d92c4ef 100644 --- a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/TargetTriple.kt +++ b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/TargetTriple.kt @@ -64,4 +64,16 @@ val TargetTriple.isSimulator: Boolean * Useful for precise target specification in Clang and Swift. */ fun TargetTriple.withOSVersion(osVersion: String): TargetTriple = - copy(os = "${os}${osVersion}") \ No newline at end of file + copy(os = "${os}${osVersion}") + +/** + * Triple without vendor (second) component. + * + * TODO: Actually, this method should return [TargetTriple], + * but this class is not that flexible yet. + */ +fun TargetTriple.withoutVendor(): String { + val envSuffix = environment?.let { "-$environment" } + ?: "" + return "$architecture-$os$envSuffix" +} \ No newline at end of file