diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/xcode/XcodeOverridePlugin.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/xcode/XcodeOverridePlugin.kt new file mode 100644 index 00000000000..cf29d75ceb0 --- /dev/null +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/xcode/XcodeOverridePlugin.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.xcode + +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.provider.Provider +import org.gradle.kotlin.dsl.* +import org.jetbrains.kotlin.konan.target.* +import org.jetbrains.kotlin.konan.util.DependencyProcessor + +open class XcodeOverridePlugin : Plugin { + override fun apply(project: Project) { + // Only for macOS hosts. + if (!HostManager.hostIsMac) + return + // Only if we use regular Xcode installation. + if (DependencyProcessor.isInternalSeverAvailable) + return + val xcodeProvider: Provider = project.providers.of(XcodeValueSource::class) {} + Xcode.xcodeOverride = xcodeProvider.get() + } +} diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/xcode/XcodeValueSource.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/xcode/XcodeValueSource.kt new file mode 100644 index 00000000000..ffe737c0410 --- /dev/null +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/xcode/XcodeValueSource.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.xcode + +import org.gradle.api.provider.ValueSource +import org.gradle.api.provider.ValueSourceParameters +import org.jetbrains.kotlin.konan.target.* + +private class XcodeSnapshot(original: Xcode) : Xcode { + override val additionalTools = original.additionalTools + override val appletvosSdk = original.appletvosSdk + override val appletvsimulatorSdk = original.appletvsimulatorSdk + override val iphoneosSdk = original.iphoneosSdk + override val iphonesimulatorSdk = original.iphonesimulatorSdk + override val macosxSdk = original.macosxSdk + override val simulatorRuntimes = original.simulatorRuntimes + override val toolchain = original.toolchain + override val version = original.version + override val watchosSdk = original.watchosSdk + override val watchsimulatorSdk = original.watchsimulatorSdk +} + +abstract class XcodeValueSource: ValueSource { + override fun obtain(): Xcode = XcodeSnapshot(Xcode.defaultCurrent()) +} diff --git a/kotlin-native/build.gradle b/kotlin-native/build.gradle index aef469a2b6a..30ddb1eb983 100644 --- a/kotlin-native/build.gradle +++ b/kotlin-native/build.gradle @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.cpp.CompilationDatabasePlugin import org.jetbrains.kotlin.cpp.CppUsage import org.jetbrains.kotlin.cpp.GitClangFormatPlugin import org.jetbrains.kotlin.CompareDistributionSignatures +import org.jetbrains.kotlin.xcode.XcodeOverridePlugin import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import org.apache.tools.ant.filters.ReplaceTokens import org.jetbrains.kotlin.UtilsKt @@ -44,6 +45,8 @@ buildscript { defaultTasks 'clean', 'dist' +apply plugin: XcodeOverridePlugin + if (PlatformInfo.isMac()) { PlatformInfo.checkXcodeVersion(project) }