diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmCompilation.kt index 838d0e7b15f..4fc9161eef6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmCompilation.kt @@ -10,9 +10,7 @@ import org.gradle.api.plugins.JavaPluginConvention import org.gradle.api.tasks.compile.JavaCompile import org.gradle.api.tasks.TaskProvider 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.KotlinTarget import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget open class KotlinJvmCompilation( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetPreset.kt index a9f1e65ada6..10644eda525 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetPreset.kt @@ -7,10 +7,12 @@ package org.jetbrains.kotlin.gradle.plugin.mpp 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.PropertiesProvider 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.KotlinJvmTargetConfigurator @@ -30,10 +32,12 @@ class KotlinJvmTargetPreset( KotlinMappedJvmCompilationFactory(forTarget) else KotlinJvmCompilationFactory(forTarget) - override fun createKotlinTargetConfigurator() = - if (PropertiesProvider(project).experimentalKpmModelMapping) - KotlinMappedJvmTargetConfigurator() - else KotlinJvmTargetConfigurator() + override fun createKotlinTargetConfigurator(): AbstractKotlinTargetConfigurator { + val configurator = KotlinJvmTargetConfigurator() + return if (project.hasKpmModel) + KpmAwareTargetWithTestsConfigurator(configurator) + else configurator + } override val platformType: KotlinPlatformType get() = KotlinPlatformType.jvm diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilationFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilationFactory.kt index b4936686984..0c7387e4daa 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilationFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilationFactory.kt @@ -9,7 +9,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.KonanTarget -class KotlinNativeCompilationFactory( +open class KotlinNativeCompilationFactory( val target: KotlinNativeTarget ) : KotlinCompilationFactory { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt index d7a8fee10dd..cb1cd2a5ccf 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt @@ -140,6 +140,10 @@ open class KotlinNativeTarget @Inject constructor( String::class.java ) } + + internal val isKpm: Boolean + get() = project.hasKpmModel && + AbstractKotlinNativeTargetPreset.kpmVariantClass(konanTarget) != null } private val hostManager by lazy { HostManager() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt index 71121106390..96e44d56d2f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt @@ -13,6 +13,8 @@ import org.jetbrains.kotlin.compilerRunner.konanHome import org.jetbrains.kotlin.compilerRunner.konanVersion import org.jetbrains.kotlin.gradle.plugin.* 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.internal.* import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader @@ -65,10 +67,15 @@ abstract class AbstractKotlinNativeTargetPreset( } } - protected abstract fun createTargetConfigurator(): KotlinTargetConfigurator + protected abstract fun createTargetConfigurator(): AbstractKotlinTargetConfigurator 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 { setupNativeCompiler() @@ -77,7 +84,10 @@ abstract class AbstractKotlinNativeTargetPreset( disambiguationClassifier = name preset = this@AbstractKotlinNativeTargetPreset - val compilationFactory = KotlinNativeCompilationFactory(this) + val compilationFactory = + if (isKpm) + KotlinMappedNativeCompilationFactory(this, checkNotNull(kpmVariantClass)) + else KotlinNativeCompilationFactory(this) compilations = project.container(compilationFactory.itemClass, compilationFactory) } @@ -106,6 +116,16 @@ abstract class AbstractKotlinNativeTargetPreset( companion object { private const val KOTLIN_NATIVE_HOME_PRIVATE_PROPERTY = "konanHome" + + // FIXME: codegen + internal fun kpmVariantClass(konanTarget: KonanTarget): Class? = 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( open class KotlinNativeTargetPreset(name: String, project: Project, konanTarget: KonanTarget) : AbstractKotlinNativeTargetPreset(name, project, konanTarget) { - override fun createTargetConfigurator(): KotlinTargetConfigurator = - KotlinNativeTargetConfigurator() + override fun createTargetConfigurator(): AbstractKotlinTargetConfigurator { + val configurator = KotlinNativeTargetConfigurator() + return if (isKpm) + KpmAwareTargetConfigurator(configurator) + else configurator + } override fun instantiateTarget(name: String): KotlinNativeTarget { 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) : AbstractKotlinNativeTargetPreset(name, project, konanTarget) { - override fun createTargetConfigurator(): KotlinNativeTargetWithHostTestsConfigurator = - KotlinNativeTargetWithHostTestsConfigurator() + override fun createTargetConfigurator(): AbstractKotlinTargetConfigurator { + val configurator = KotlinNativeTargetWithHostTestsConfigurator() + return if (isKpm) + KpmAwareTargetWithTestsConfigurator(configurator) + else configurator + } override fun instantiateTarget(name: String): KotlinNativeTargetWithHostTests = 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) : AbstractKotlinNativeTargetPreset(name, project, konanTarget) { - override fun createTargetConfigurator(): KotlinNativeTargetWithSimulatorTestsConfigurator = - KotlinNativeTargetWithSimulatorTestsConfigurator() + override fun createTargetConfigurator(): AbstractKotlinTargetConfigurator { + val configurator = KotlinNativeTargetWithSimulatorTestsConfigurator() + return if (isKpm) + KpmAwareTargetConfigurator(configurator) + else configurator + } override fun instantiateTarget(name: String): KotlinNativeTargetWithSimulatorTests = project.objects.newInstance(KotlinNativeTargetWithSimulatorTests::class.java, project, konanTarget)