diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/ExecClang.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/ExecClang.kt index efcc134f3d9..cd7b92832c8 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/ExecClang.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/ExecClang.kt @@ -79,12 +79,39 @@ abstract class ExecClang @Inject constructor( // The target can be specified as KonanTarget or as a // (nullable, which means host) target name. + // FIXME: See KT-65542 for details + private fun fixBrokenMacroExpansionInXcode15_3(target: String?) = fixBrokenMacroExpansionInXcode15_3(platformManager.targetManager(target).target) + + private fun fixBrokenMacroExpansionInXcode15_3(target: KonanTarget): List { + return when (target) { + KonanTarget.MACOS_ARM64, KonanTarget.MACOS_X64 -> hashMapOf( + "TARGET_OS_OSX" to "1", + ) + KonanTarget.IOS_ARM64 -> hashMapOf( + "TARGET_OS_EMBEDDED" to "1", + "TARGET_OS_IPHONE" to "1", + "TARGET_OS_IOS" to "1", + ) + KonanTarget.TVOS_ARM64 -> hashMapOf( + "TARGET_OS_EMBEDDED" to "1", + "TARGET_OS_IPHONE" to "1", + "TARGET_OS_TV" to "1", + ) + KonanTarget.WATCHOS_ARM64, KonanTarget.WATCHOS_ARM32, KonanTarget.WATCHOS_DEVICE_ARM64 -> hashMapOf( + "TARGET_OS_EMBEDDED" to "1", + "TARGET_OS_IPHONE" to "1", + "TARGET_OS_WATCH" to "1", + ) + else -> emptyMap() + }.map { "-D${it.key}=${it.value}" } + } + fun execKonanClang(target: String?, action: Action): ExecResult { - return this.execClang(clangArgsForCppRuntime(target), action) + return this.execClang(clangArgsForCppRuntime(target) + fixBrokenMacroExpansionInXcode15_3(target), action) } fun execKonanClang(target: KonanTarget, action: Action): ExecResult { - return this.execClang(clangArgsForCppRuntime(target), action) + return this.execClang(clangArgsForCppRuntime(target) + fixBrokenMacroExpansionInXcode15_3(target), action) } /**