Map Kotlin/Native compilation to the supported-platform KPM variants
This commit is contained in:
-2
@@ -10,9 +10,7 @@ import org.gradle.api.plugins.JavaPluginConvention
|
|||||||
import org.gradle.api.tasks.compile.JavaCompile
|
import org.gradle.api.tasks.compile.JavaCompile
|
||||||
import org.gradle.api.tasks.TaskProvider
|
import org.gradle.api.tasks.TaskProvider
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
|
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
|
||||||
|
|
||||||
open class KotlinJvmCompilation(
|
open class KotlinJvmCompilation(
|
||||||
|
|||||||
+9
-5
@@ -7,10 +7,12 @@
|
|||||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinMappedJvmCompilationFactory
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinMappedJvmCompilationFactory
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinMappedJvmTargetConfigurator
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmAwareTargetWithTestsConfigurator
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel
|
||||||
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
|
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
|
||||||
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTargetConfigurator
|
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTargetConfigurator
|
||||||
|
|
||||||
@@ -30,10 +32,12 @@ class KotlinJvmTargetPreset(
|
|||||||
KotlinMappedJvmCompilationFactory(forTarget)
|
KotlinMappedJvmCompilationFactory(forTarget)
|
||||||
else KotlinJvmCompilationFactory(forTarget)
|
else KotlinJvmCompilationFactory(forTarget)
|
||||||
|
|
||||||
override fun createKotlinTargetConfigurator() =
|
override fun createKotlinTargetConfigurator(): AbstractKotlinTargetConfigurator<KotlinJvmTarget> {
|
||||||
if (PropertiesProvider(project).experimentalKpmModelMapping)
|
val configurator = KotlinJvmTargetConfigurator()
|
||||||
KotlinMappedJvmTargetConfigurator()
|
return if (project.hasKpmModel)
|
||||||
else KotlinJvmTargetConfigurator()
|
KpmAwareTargetWithTestsConfigurator(configurator)
|
||||||
|
else configurator
|
||||||
|
}
|
||||||
|
|
||||||
override val platformType: KotlinPlatformType
|
override val platformType: KotlinPlatformType
|
||||||
get() = KotlinPlatformType.jvm
|
get() = KotlinPlatformType.jvm
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp
|
|||||||
import org.jetbrains.kotlin.konan.target.HostManager
|
import org.jetbrains.kotlin.konan.target.HostManager
|
||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
|
|
||||||
class KotlinNativeCompilationFactory(
|
open class KotlinNativeCompilationFactory(
|
||||||
val target: KotlinNativeTarget
|
val target: KotlinNativeTarget
|
||||||
) : KotlinCompilationFactory<KotlinNativeCompilation> {
|
) : KotlinCompilationFactory<KotlinNativeCompilation> {
|
||||||
|
|
||||||
|
|||||||
+4
@@ -140,6 +140,10 @@ open class KotlinNativeTarget @Inject constructor(
|
|||||||
String::class.java
|
String::class.java
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal val isKpm: Boolean
|
||||||
|
get() = project.hasKpmModel &&
|
||||||
|
AbstractKotlinNativeTargetPreset.kpmVariantClass(konanTarget) != null
|
||||||
}
|
}
|
||||||
|
|
||||||
private val hostManager by lazy { HostManager() }
|
private val hostManager by lazy { HostManager() }
|
||||||
|
|||||||
+40
-8
@@ -13,6 +13,8 @@ import org.jetbrains.kotlin.compilerRunner.konanHome
|
|||||||
import org.jetbrains.kotlin.compilerRunner.konanVersion
|
import org.jetbrains.kotlin.compilerRunner.konanVersion
|
||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter
|
import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.internal.*
|
import org.jetbrains.kotlin.gradle.targets.native.internal.*
|
||||||
import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader
|
import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader
|
||||||
@@ -65,10 +67,15 @@ abstract class AbstractKotlinNativeTargetPreset<T : KotlinNativeTarget>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract fun createTargetConfigurator(): KotlinTargetConfigurator<T>
|
protected abstract fun createTargetConfigurator(): AbstractKotlinTargetConfigurator<T>
|
||||||
|
|
||||||
protected abstract fun instantiateTarget(name: String): T
|
protected abstract fun instantiateTarget(name: String): T
|
||||||
|
|
||||||
|
private val kpmVariantClass = kpmVariantClass(konanTarget)
|
||||||
|
|
||||||
|
protected val isKpm: Boolean
|
||||||
|
get() = project.hasKpmModel && kpmVariantClass != null
|
||||||
|
|
||||||
override fun createTarget(name: String): T {
|
override fun createTarget(name: String): T {
|
||||||
setupNativeCompiler()
|
setupNativeCompiler()
|
||||||
|
|
||||||
@@ -77,7 +84,10 @@ abstract class AbstractKotlinNativeTargetPreset<T : KotlinNativeTarget>(
|
|||||||
disambiguationClassifier = name
|
disambiguationClassifier = name
|
||||||
preset = this@AbstractKotlinNativeTargetPreset
|
preset = this@AbstractKotlinNativeTargetPreset
|
||||||
|
|
||||||
val compilationFactory = KotlinNativeCompilationFactory(this)
|
val compilationFactory =
|
||||||
|
if (isKpm)
|
||||||
|
KotlinMappedNativeCompilationFactory(this, checkNotNull(kpmVariantClass))
|
||||||
|
else KotlinNativeCompilationFactory(this)
|
||||||
compilations = project.container(compilationFactory.itemClass, compilationFactory)
|
compilations = project.container(compilationFactory.itemClass, compilationFactory)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,6 +116,16 @@ abstract class AbstractKotlinNativeTargetPreset<T : KotlinNativeTarget>(
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val KOTLIN_NATIVE_HOME_PRIVATE_PROPERTY = "konanHome"
|
private const val KOTLIN_NATIVE_HOME_PRIVATE_PROPERTY = "konanHome"
|
||||||
|
|
||||||
|
// FIXME: codegen
|
||||||
|
internal fun kpmVariantClass(konanTarget: KonanTarget): Class<out KotlinNativeVariantInternal>? = when (konanTarget) {
|
||||||
|
KonanTarget.IOS_ARM64 -> KotlinIosArm64Variant::class.java
|
||||||
|
KonanTarget.IOS_X64 -> KotlinIosX64Variant::class.java
|
||||||
|
KonanTarget.LINUX_X64 -> KotlinLinuxX64Variant::class.java
|
||||||
|
KonanTarget.MACOS_ARM64 -> KotlinMacosArm64Variant::class.java
|
||||||
|
KonanTarget.MACOS_X64 -> KotlinMacosX64Variant::class.java
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -113,8 +133,12 @@ abstract class AbstractKotlinNativeTargetPreset<T : KotlinNativeTarget>(
|
|||||||
open class KotlinNativeTargetPreset(name: String, project: Project, konanTarget: KonanTarget) :
|
open class KotlinNativeTargetPreset(name: String, project: Project, konanTarget: KonanTarget) :
|
||||||
AbstractKotlinNativeTargetPreset<KotlinNativeTarget>(name, project, konanTarget) {
|
AbstractKotlinNativeTargetPreset<KotlinNativeTarget>(name, project, konanTarget) {
|
||||||
|
|
||||||
override fun createTargetConfigurator(): KotlinTargetConfigurator<KotlinNativeTarget> =
|
override fun createTargetConfigurator(): AbstractKotlinTargetConfigurator<KotlinNativeTarget> {
|
||||||
KotlinNativeTargetConfigurator()
|
val configurator = KotlinNativeTargetConfigurator<KotlinNativeTarget>()
|
||||||
|
return if (isKpm)
|
||||||
|
KpmAwareTargetConfigurator(configurator)
|
||||||
|
else configurator
|
||||||
|
}
|
||||||
|
|
||||||
override fun instantiateTarget(name: String): KotlinNativeTarget {
|
override fun instantiateTarget(name: String): KotlinNativeTarget {
|
||||||
return project.objects.newInstance(KotlinNativeTarget::class.java, project, konanTarget)
|
return project.objects.newInstance(KotlinNativeTarget::class.java, project, konanTarget)
|
||||||
@@ -124,8 +148,12 @@ open class KotlinNativeTargetPreset(name: String, project: Project, konanTarget:
|
|||||||
open class KotlinNativeTargetWithHostTestsPreset(name: String, project: Project, konanTarget: KonanTarget) :
|
open class KotlinNativeTargetWithHostTestsPreset(name: String, project: Project, konanTarget: KonanTarget) :
|
||||||
AbstractKotlinNativeTargetPreset<KotlinNativeTargetWithHostTests>(name, project, konanTarget) {
|
AbstractKotlinNativeTargetPreset<KotlinNativeTargetWithHostTests>(name, project, konanTarget) {
|
||||||
|
|
||||||
override fun createTargetConfigurator(): KotlinNativeTargetWithHostTestsConfigurator =
|
override fun createTargetConfigurator(): AbstractKotlinTargetConfigurator<KotlinNativeTargetWithHostTests> {
|
||||||
KotlinNativeTargetWithHostTestsConfigurator()
|
val configurator = KotlinNativeTargetWithHostTestsConfigurator()
|
||||||
|
return if (isKpm)
|
||||||
|
KpmAwareTargetWithTestsConfigurator(configurator)
|
||||||
|
else configurator
|
||||||
|
}
|
||||||
|
|
||||||
override fun instantiateTarget(name: String): KotlinNativeTargetWithHostTests =
|
override fun instantiateTarget(name: String): KotlinNativeTargetWithHostTests =
|
||||||
project.objects.newInstance(KotlinNativeTargetWithHostTests::class.java, project, konanTarget)
|
project.objects.newInstance(KotlinNativeTargetWithHostTests::class.java, project, konanTarget)
|
||||||
@@ -134,8 +162,12 @@ open class KotlinNativeTargetWithHostTestsPreset(name: String, project: Project,
|
|||||||
open class KotlinNativeTargetWithSimulatorTestsPreset(name: String, project: Project, konanTarget: KonanTarget) :
|
open class KotlinNativeTargetWithSimulatorTestsPreset(name: String, project: Project, konanTarget: KonanTarget) :
|
||||||
AbstractKotlinNativeTargetPreset<KotlinNativeTargetWithSimulatorTests>(name, project, konanTarget) {
|
AbstractKotlinNativeTargetPreset<KotlinNativeTargetWithSimulatorTests>(name, project, konanTarget) {
|
||||||
|
|
||||||
override fun createTargetConfigurator(): KotlinNativeTargetWithSimulatorTestsConfigurator =
|
override fun createTargetConfigurator(): AbstractKotlinTargetConfigurator<KotlinNativeTargetWithSimulatorTests> {
|
||||||
KotlinNativeTargetWithSimulatorTestsConfigurator()
|
val configurator = KotlinNativeTargetWithSimulatorTestsConfigurator()
|
||||||
|
return if (isKpm)
|
||||||
|
KpmAwareTargetConfigurator(configurator)
|
||||||
|
else configurator
|
||||||
|
}
|
||||||
|
|
||||||
override fun instantiateTarget(name: String): KotlinNativeTargetWithSimulatorTests =
|
override fun instantiateTarget(name: String): KotlinNativeTargetWithSimulatorTests =
|
||||||
project.objects.newInstance(KotlinNativeTargetWithSimulatorTests::class.java, project, konanTarget)
|
project.objects.newInstance(KotlinNativeTargetWithSimulatorTests::class.java, project, konanTarget)
|
||||||
|
|||||||
Reference in New Issue
Block a user