Fix Android NDK targets

Android NDK dirs omit vendor part of triple,
so we have to respect its decision.
This commit is contained in:
Sergey Bogolepov
2021-04-09 13:11:14 +07:00
parent 3e9ef56c31
commit 81d4c19d8b
3 changed files with 17 additions and 5 deletions
@@ -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(
@@ -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",
@@ -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}")
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"
}