Fix Android NDK targets
Android NDK dirs omit vendor part of triple, so we have to respect its decision.
This commit is contained in:
@@ -98,7 +98,7 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con
|
|||||||
|
|
||||||
KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64,
|
KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64,
|
||||||
KonanTarget.ANDROID_X86, KonanTarget.ANDROID_X64 -> {
|
KonanTarget.ANDROID_X86, KonanTarget.ANDROID_X64 -> {
|
||||||
val clangTarget = targetTriple.toString()
|
val clangTarget = targetTriple.withoutVendor()
|
||||||
val architectureDir = Android.architectureDirForTarget(target)
|
val architectureDir = Android.architectureDirForTarget(target)
|
||||||
val toolchainSysroot = "$absoluteTargetToolchain/sysroot"
|
val toolchainSysroot = "$absoluteTargetToolchain/sysroot"
|
||||||
listOf(
|
listOf(
|
||||||
|
|||||||
@@ -109,8 +109,8 @@ class AndroidLinker(targetProperties: AndroidConfigurables)
|
|||||||
: LinkerFlags(targetProperties), AndroidConfigurables by targetProperties {
|
: LinkerFlags(targetProperties), AndroidConfigurables by targetProperties {
|
||||||
|
|
||||||
private val clangTarget = when (val targetString = targetProperties.targetTriple.toString()) {
|
private val clangTarget = when (val targetString = targetProperties.targetTriple.toString()) {
|
||||||
"arm-unknown-linux-androideabi" -> "armv7a-unknown-linux-androideabi"
|
"arm-unknown-linux-androideabi" -> "armv7a-linux-androideabi"
|
||||||
else -> targetString
|
else -> targetProperties.targetTriple.withoutVendor()
|
||||||
}
|
}
|
||||||
private val prefix = "$absoluteTargetToolchain/bin/${clangTarget}${Android.API}"
|
private val prefix = "$absoluteTargetToolchain/bin/${clangTarget}${Android.API}"
|
||||||
private val clang = if (HostManager.hostIsMingw) "$prefix-clang.cmd" else "$prefix-clang"
|
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 toolchainSysroot = "${absoluteTargetToolchain}/sysroot"
|
||||||
val architectureDir = Android.architectureDirForTarget(target)
|
val architectureDir = Android.architectureDirForTarget(target)
|
||||||
val apiSysroot = "$absoluteTargetSysRoot/$architectureDir"
|
val apiSysroot = "$absoluteTargetSysRoot/$architectureDir"
|
||||||
val clangTarget = targetTriple.toString()
|
val clangTarget = targetTriple.withoutVendor()
|
||||||
val libDirs = listOf(
|
val libDirs = listOf(
|
||||||
"--sysroot=$apiSysroot",
|
"--sysroot=$apiSysroot",
|
||||||
if (target == KonanTarget.ANDROID_X64) "-L$apiSysroot/usr/lib64" else "-L$apiSysroot/usr/lib",
|
if (target == KonanTarget.ANDROID_X64) "-L$apiSysroot/usr/lib64" else "-L$apiSysroot/usr/lib",
|
||||||
|
|||||||
+12
@@ -65,3 +65,15 @@ val TargetTriple.isSimulator: Boolean
|
|||||||
*/
|
*/
|
||||||
fun TargetTriple.withOSVersion(osVersion: String): TargetTriple =
|
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"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user