[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())
}
+3
View File
@@ -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)
}