[K/N] Fix CC in Xcode usage ^KTI-1553

- Perform all calls to xcrun in XcodeValueSource.
- Use the fully computed Xcode instance as the current Xcode instance.
- Hide all of this inside a Gradle plugin and apply it to kotlin-native
  project.
This commit is contained in:
Alexander Shabalin
2024-02-20 11:50:42 +01:00
committed by Space Team
parent f246d1c037
commit 5c2017fa5f
3 changed files with 57 additions and 0 deletions
@@ -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<Project> {
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<Xcode> = project.providers.of(XcodeValueSource::class) {}
Xcode.xcodeOverride = xcodeProvider.get()
}
}
@@ -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<Xcode, ValueSourceParameters.None> {
override fun obtain(): Xcode = XcodeSnapshot(Xcode.defaultCurrent())
}