From 3718907c6a958fa3a2ef2c25d26f5742412900a5 Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Mon, 5 Apr 2021 17:40:30 +0700 Subject: [PATCH] Use -target instead of -arch in ClangArgs Explicit target selection helps Clang to correctly set things up in case of Apple Silicon simulator target. --- kotlin-native/konan/konan.properties | 11 --------- .../kotlin/konan/target/ClangArgs.kt | 23 ++++++++++--------- .../kotlin/konan/target/Configurables.kt | 1 - 3 files changed, 12 insertions(+), 23 deletions(-) diff --git a/kotlin-native/konan/konan.properties b/kotlin-native/konan/konan.properties index d772dd7f5df..cd3845373f1 100644 --- a/kotlin-native/konan/konan.properties +++ b/kotlin-native/konan/konan.properties @@ -110,7 +110,6 @@ stripFlags.macos_x64 = -S linkerDynamicFlags.macos_x64 = -dylib osVersionMinFlagLd.macos_x64 = -macosx_version_min -osVersionMinFlagClang.macos_x64 = -mmacosx-version-min osVersionMin.macos_x64 = 10.11 runtimeDefinitions.macos_x64 = KONAN_OSX=1 KONAN_MACOSX=1 KONAN_X64=1 KONAN_OBJC_INTEROP=1 \ KONAN_CORE_SYMBOLICATION=1 @@ -151,7 +150,6 @@ stripFlags.macos_arm64 = -S linkerDynamicFlags.macos_arm64 = -dylib osVersionMinFlagLd.macos_arm64 = -macosx_version_min -osVersionMinFlagClang.macos_arm64 = -mmacosx-version-min osVersionMin.macos_arm64 = 11.0 runtimeDefinitions.macos_arm64 = KONAN_OSX=1 KONAN_MACOSX=1 KONAN_ARM64=1 KONAN_OBJC_INTEROP=1 \ KONAN_CORE_SYMBOLICATION=1 @@ -187,7 +185,6 @@ linkerDynamicFlags.ios_arm32 = -dylib linkerKonanFlags.ios_arm32 = -lSystem -lc++ -lobjc -framework Foundation -sdk_version 14.0 linkerOptimizationFlags.ios_arm32 = -dead_strip osVersionMinFlagLd.ios_arm32 = -iphoneos_version_min -osVersionMinFlagClang.ios_arm32 = -miphoneos-version-min osVersionMin.ios_arm32 = 9.0 # Regarding KONAN_NO_64BIT_ATOMIC: # While not 100% correct here, using atomic ops on iOS armv7 requires 8 byte alignment, @@ -222,7 +219,6 @@ linkerDynamicFlags.ios_arm64 = -dylib linkerKonanFlags.ios_arm64 = -lSystem -lc++ -lobjc -framework Foundation -sdk_version 14.0 linkerOptimizationFlags.ios_arm64 = -dead_strip osVersionMinFlagLd.ios_arm64 = -iphoneos_version_min -osVersionMinFlagClang.ios_arm64 = -miphoneos-version-min osVersionMin.ios_arm64 = 9.0 runtimeDefinitions.ios_arm64 = KONAN_OBJC_INTEROP=1 KONAN_IOS=1 KONAN_ARM64=1 \ KONAN_REPORT_BACKTRACE_TO_IOS_CRASH_LOG=1 MACHSIZE=64 @@ -249,7 +245,6 @@ linkerNoDebugFlags.ios_x64 = -S stripFlags.ios_x64 = -S linkerDynamicFlags.ios_x64 = -dylib osVersionMinFlagLd.ios_x64 = -ios_simulator_version_min -osVersionMinFlagClang.ios_x64 = -mios-simulator-version-min osVersionMin.ios_x64 = 9.0 runtimeDefinitions.ios_x64 = KONAN_OBJC_INTEROP=1 KONAN_IOS=1 KONAN_X64=1 \ KONAN_CORE_SYMBOLICATION=1 @@ -275,7 +270,6 @@ linkerNoDebugFlags.tvos_x64 = -S stripFlags.tvos_x64 = -S linkerDynamicFlags.tvos_x64 = -dylib osVersionMinFlagLd.tvos_x64 = -tvos_simulator_version_min -osVersionMinFlagClang.tvos_x64 = -mtvos-simulator-version-min osVersionMin.tvos_x64 = 9.0 runtimeDefinitions.tvos_x64 = KONAN_OBJC_INTEROP=1 KONAN_TVOS=1 KONAN_X64=1 \ KONAN_CORE_SYMBOLICATION=1 @@ -301,7 +295,6 @@ linkerDynamicFlags.tvos_arm64 = -dylib linkerKonanFlags.tvos_arm64 = -lSystem -lc++ -lobjc -framework Foundation -sdk_version 14.0 linkerOptimizationFlags.tvos_arm64 = -dead_strip osVersionMinFlagLd.tvos_arm64 = -tvos_version_min -osVersionMinFlagClang.tvos_arm64 = -mtvos-version-min osVersionMin.tvos_arm64 = 9.0 runtimeDefinitions.tvos_arm64 = KONAN_OBJC_INTEROP=1 KONAN_TVOS=1 KONAN_ARM64=1 \ KONAN_REPORT_BACKTRACE_TO_IOS_CRASH_LOG=1 MACHSIZE=64 @@ -327,7 +320,6 @@ linkerNoDebugFlags.watchos_arm32 = -S stripFlags.watchos_arm32 = -S linkerDynamicFlags.watchos_arm32 = -dylib osVersionMinFlagLd.watchos_arm32 = -watchos_version_min -osVersionMinFlagClang.watchos_arm32 = -mwatchos-version-min osVersionMin.watchos_arm32 = 5.0 # Regarding KONAN_NO_64BIT_ATOMIC=1: see explanation for ios_arm32 above. runtimeDefinitions.watchos_arm32 = KONAN_OBJC_INTEROP=1 KONAN_WATCHOS KONAN_ARM32=1 \ @@ -356,7 +348,6 @@ linkerNoDebugFlags.watchos_arm64 = -S stripFlags.watchos_arm64 = -S linkerDynamicFlags.watchos_arm64 = -dylib osVersionMinFlagLd.watchos_arm64 = -watchos_version_min -osVersionMinFlagClang.watchos_arm64 = -mwatchos-version-min osVersionMin.watchos_arm64 = 5.0 # Regarding KONAN_NO_64BIT_ATOMIC=1: see explanation for ios_arm32 above. runtimeDefinitions.watchos_arm64 = KONAN_OBJC_INTEROP=1 KONAN_WATCHOS KONAN_ARM32=1 \ @@ -388,7 +379,6 @@ linkerNoDebugFlags.watchos_x86 = -S stripFlags.watchos_x86 = -S linkerDynamicFlags.watchos_x86 = -dylib osVersionMinFlagLd.watchos_x86 = -watchos_simulator_version_min -osVersionMinFlagClang.watchos_x86 = -mwatchos-simulator-version-min osVersionMin.watchos_x86 = 5.0 runtimeDefinitions.watchos_x86 = KONAN_OBJC_INTEROP=1 KONAN_WATCHOS=1 KONAN_NO_64BIT_ATOMIC=1 \ KONAN_X86=1 KONAN_CORE_SYMBOLICATION=1 @@ -414,7 +404,6 @@ linkerNoDebugFlags.watchos_x64 = -S stripFlags.watchos_x64 = -S linkerDynamicFlags.watchos_x64 = -dylib osVersionMinFlagLd.watchos_x64 = -watchos_simulator_version_min -osVersionMinFlagClang.watchos_x64 = -mwatchos-simulator-version-min osVersionMin.watchos_x64 = 7.0 runtimeDefinitions.watchos_x64 = KONAN_OBJC_INTEROP=1 KONAN_WATCHOS=1 \ KONAN_X64=1 KONAN_CORE_SYMBOLICATION=1 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 5ec0126aba5..4b1cd2ba4aa 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 @@ -49,17 +49,7 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con if (configurables is GccConfigurables) { add(listOf("--gcc-toolchain=${configurables.absoluteGccToolchain}")) } - if (configurables !is AppleConfigurables) { - add(listOf("-target", configurables.targetTriple.toString())) - } if (configurables is AppleConfigurables) { - val arch = when (target) { - // TODO: LLVM 8 doesn't support arm64_32. - // We can use armv7k because they are compatible at bitcode level. - KonanTarget.WATCHOS_ARM64 -> "armv7k" - else -> configurables.arch - } - add(listOf("-arch", arch)) add(listOf("-stdlib=libc++")) val osVersionMin = when (target) { // Here we workaround Clang 8 limitation: macOS major version should be 10. @@ -68,7 +58,18 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con KonanTarget.MACOS_ARM64 -> "10.16" else -> configurables.osVersionMin } - add(listOf("${configurables.osVersionMinFlagClang}=$osVersionMin")) + val targetArg = targetTriple.copy( + architecture = when (targetTriple.architecture) { + // TODO: LLVM 8 doesn't support arm64_32. + // We can use armv7k because they are compatible at bitcode level. + "arm64_32" -> "armv7k" + else -> targetTriple.architecture + }, + os = "${targetTriple.os}$osVersionMin" + ) + add(listOf("-target", targetArg.toString())) + } else { + add(listOf("-target", configurables.targetTriple.toString())) } val hasCustomSysroot = configurables is ZephyrConfigurables || configurables is WasmConfigurables diff --git a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Configurables.kt b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Configurables.kt index 9bf00691b9d..8b1ba264aa0 100644 --- a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Configurables.kt +++ b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Configurables.kt @@ -99,7 +99,6 @@ interface AppleConfigurables : Configurables, ClangFlags { val arch get() = targetTriple.architecture val osVersionMin get() = targetString("osVersionMin")!! val osVersionMinFlagLd get() = targetString("osVersionMinFlagLd")!! - val osVersionMinFlagClang get() = targetString("osVersionMinFlagClang")!! val stripFlags get() = targetList("stripFlags") val additionalToolsDir get() = hostString("additionalToolsDir") val absoluteAdditionalToolsDir get() = absolute(additionalToolsDir)