Map Kotlin/Native compilation to the supported-platform KPM variants
This commit is contained in:
+2
-2
@@ -71,8 +71,8 @@ interface KotlinTargetConfigurator<KotlinTargetType : KotlinTarget> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
abstract class AbstractKotlinTargetConfigurator<KotlinTargetType : KotlinTarget>(
|
abstract class AbstractKotlinTargetConfigurator<KotlinTargetType : KotlinTarget>(
|
||||||
protected val createDefaultSourceSets: Boolean,
|
internal val createDefaultSourceSets: Boolean,
|
||||||
protected val createTestCompilation: Boolean
|
internal val createTestCompilation: Boolean
|
||||||
) : KotlinTargetConfigurator<KotlinTargetType> {
|
) : KotlinTargetConfigurator<KotlinTargetType> {
|
||||||
|
|
||||||
protected open fun setupCompilationDependencyFiles(compilation: KotlinCompilation<KotlinCommonOptions>) {
|
protected open fun setupCompilationDependencyFiles(compilation: KotlinCompilation<KotlinCommonOptions>) {
|
||||||
|
|||||||
+4
-1
@@ -300,7 +300,10 @@ class GradleModuleVariantResolver : ModuleVariantResolver {
|
|||||||
// FIXME check composite builds, it's likely that resolvedVariantProvider fails on them?
|
// FIXME check composite builds, it's likely that resolvedVariantProvider fails on them?
|
||||||
val resolvedGradleVariantName = resolvedVariantProvider.getResolvedVariantName(dependencyModuleId, compileClasspath)
|
val resolvedGradleVariantName = resolvedVariantProvider.getResolvedVariantName(dependencyModuleId, compileClasspath)
|
||||||
val kotlinVariantName = when (dependencyModule) {
|
val kotlinVariantName = when (dependencyModule) {
|
||||||
is KotlinGradleModule -> dependencyModule.variants.single { resolvedGradleVariantName in it.gradleVariantNames }.name
|
is KotlinGradleModule -> {
|
||||||
|
dependencyModule.variants.singleOrNull { resolvedGradleVariantName in it.gradleVariantNames }?.name
|
||||||
|
?: return VariantResolution.Unknown(requestingVariant, dependencyModule)
|
||||||
|
}
|
||||||
else -> resolvedGradleVariantName?.let(::kotlinVariantNameFromPublishedVariantName)
|
else -> resolvedGradleVariantName?.let(::kotlinVariantNameFromPublishedVariantName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-5
@@ -6,16 +6,13 @@
|
|||||||
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.KotlinCompilation
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinOnlyTargetConfigurator
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetPreset
|
|
||||||
|
|
||||||
abstract class KotlinOnlyTargetPreset<R : KotlinOnlyTarget<T>, T : KotlinCompilation<*>>(
|
abstract class KotlinOnlyTargetPreset<R : KotlinOnlyTarget<T>, T : KotlinCompilation<*>>(
|
||||||
protected val project: Project
|
protected val project: Project
|
||||||
) : KotlinTargetPreset<R> {
|
) : KotlinTargetPreset<R> {
|
||||||
|
|
||||||
protected abstract fun createKotlinTargetConfigurator(): KotlinOnlyTargetConfigurator<T, R>
|
protected abstract fun createKotlinTargetConfigurator(): AbstractKotlinTargetConfigurator<R>
|
||||||
|
|
||||||
protected open fun provideTargetDisambiguationClassifier(target: KotlinOnlyTarget<T>): String? =
|
protected open fun provideTargetDisambiguationClassifier(target: KotlinOnlyTarget<T>): String? =
|
||||||
target.targetName
|
target.targetName
|
||||||
|
|||||||
+1
-41
@@ -9,24 +9,14 @@ import groovy.lang.Closure
|
|||||||
import org.gradle.api.artifacts.Configuration
|
import org.gradle.api.artifacts.Configuration
|
||||||
import org.gradle.api.plugins.BasePluginConvention
|
import org.gradle.api.plugins.BasePluginConvention
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.attributes.AttributeContainer
|
|
||||||
import org.gradle.api.file.FileCollection
|
import org.gradle.api.file.FileCollection
|
||||||
import org.gradle.api.plugins.BasePluginExtension
|
import org.gradle.api.plugins.BasePluginExtension
|
||||||
import org.gradle.api.tasks.TaskProvider
|
|
||||||
import org.gradle.api.tasks.bundling.Jar
|
|
||||||
import org.gradle.api.tasks.bundling.Zip
|
|
||||||
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.dsl.KotlinJvmOptionsImpl
|
||||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.unambiguousNameInProject
|
import org.jetbrains.kotlin.gradle.plugin.mpp.filterModuleName
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.kpm.FragmentMappedKotlinSourceSet
|
|
||||||
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.tasks.locateTask
|
|
||||||
import org.jetbrains.kotlin.project.model.refinesClosure
|
|
||||||
import java.util.concurrent.Callable
|
|
||||||
|
|
||||||
open class KotlinJvmVariant(
|
open class KotlinJvmVariant(
|
||||||
containingModule: KotlinGradleModule,
|
containingModule: KotlinGradleModule,
|
||||||
@@ -78,33 +68,3 @@ class KotlinMappedJvmCompilationFactory(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class KotlinMappedJvmTargetConfigurator : KotlinJvmTargetConfigurator() {
|
|
||||||
override fun defineConfigurationsForTarget(target: KotlinJvmTarget) = Unit // done in KPM
|
|
||||||
override fun configureCompilationDefaults(target: KotlinJvmTarget) {
|
|
||||||
// everything else is done in KPM, but KPM doesn't have resources processing yet
|
|
||||||
target.compilations.all { compilation ->
|
|
||||||
configureResourceProcessing(
|
|
||||||
compilation,
|
|
||||||
target.project.files(Callable { compilation.allKotlinSourceSets.map { it.resources } })
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun configureCompilations(target: KotlinJvmTarget) {
|
|
||||||
target.compilations.create(KotlinCompilation.MAIN_COMPILATION_NAME)
|
|
||||||
target.compilations.create(KotlinCompilation.TEST_COMPILATION_NAME)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun configureArchivesAndComponent(target: KotlinJvmTarget) = Unit // done in KPM
|
|
||||||
|
|
||||||
override fun createArchiveTasks(target: KotlinJvmTarget): TaskProvider<out Zip> =
|
|
||||||
checkNotNull(
|
|
||||||
target.project.locateTask<Jar>(
|
|
||||||
target.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME)
|
|
||||||
.compilationDetails.let { it as VariantMappedCompilationDetails<*> }
|
|
||||||
.variant.let { it as KotlinJvmVariant }
|
|
||||||
.outputsJarTaskName
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
+16
-1
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
|||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.artifacts.Configuration
|
import org.gradle.api.artifacts.Configuration
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.DefaultCInteropSettings
|
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeCompileOptions
|
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeCompileOptions
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.publishedConfigurationName
|
import org.jetbrains.kotlin.gradle.plugin.mpp.publishedConfigurationName
|
||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
@@ -210,3 +210,18 @@ internal class KotlinNativeVariantCompilationData(
|
|||||||
|
|
||||||
override val kotlinOptions: KotlinCommonOptions = NativeCompileOptions { variant.languageSettings }
|
override val kotlinOptions: KotlinCommonOptions = NativeCompileOptions { variant.languageSettings }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal class KotlinMappedNativeCompilationFactory(
|
||||||
|
target: KotlinNativeTarget,
|
||||||
|
private val variantClass: Class<out KotlinNativeVariantInternal>
|
||||||
|
) : KotlinNativeCompilationFactory(target) {
|
||||||
|
override fun create(name: String): KotlinNativeCompilation {
|
||||||
|
val module = target.project.kpmModules.maybeCreate(name)
|
||||||
|
val variant = module.fragments.create(target.name, variantClass)
|
||||||
|
|
||||||
|
return KotlinNativeCompilation(
|
||||||
|
target.konanTarget,
|
||||||
|
VariantMappedCompilationDetails(variant, target)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
+68
@@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 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.gradle.plugin.mpp.pm20
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
|
import java.util.concurrent.Callable
|
||||||
|
|
||||||
|
internal open class KpmAwareTargetConfigurator<T : KotlinTarget>(
|
||||||
|
private val legacyModelTargetConfigurator: AbstractKotlinTargetConfigurator<T>,
|
||||||
|
) : AbstractKotlinTargetConfigurator<T>(true, legacyModelTargetConfigurator.createDefaultSourceSets),
|
||||||
|
KotlinTargetConfigurator<T> by legacyModelTargetConfigurator {
|
||||||
|
// NB: this override enforces calls to other overridden functions; without it, the delegate would call its own ones
|
||||||
|
override fun configureTarget(target: T) = super<AbstractKotlinTargetConfigurator>.configureTarget(target)
|
||||||
|
|
||||||
|
override fun defineConfigurationsForTarget(target: T) = Unit // done in KPM
|
||||||
|
|
||||||
|
override fun configureCompilationDefaults(target: T) {
|
||||||
|
// everything else is done in KPM, but KPM doesn't have resources processing yet
|
||||||
|
target.compilations.all { compilation ->
|
||||||
|
if (compilation is KotlinCompilationWithResources<*>) {
|
||||||
|
configureResourceProcessing(
|
||||||
|
compilation,
|
||||||
|
target.project.files(Callable { compilation.allKotlinSourceSets.map { it.resources } })
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun configureCompilations(target: T) {
|
||||||
|
target.compilations.create(KotlinCompilation.MAIN_COMPILATION_NAME)
|
||||||
|
if (legacyModelTargetConfigurator.createTestCompilation) {
|
||||||
|
target.compilations.create(KotlinCompilation.TEST_COMPILATION_NAME)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun configureArchivesAndComponent(target: T) = Unit // done in KPM
|
||||||
|
|
||||||
|
override fun configureBuild(target: T) {
|
||||||
|
legacyModelTargetConfigurator.configureBuild(target)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun configureSourceSet(target: T) {
|
||||||
|
legacyModelTargetConfigurator.configureSourceSet(target)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class KpmAwareTargetWithTestsConfigurator<R : KotlinTargetTestRun<*>, T : KotlinTargetWithTests<*, R>, C>(
|
||||||
|
private val legacyModelTargetWithTestsConfigurator: C
|
||||||
|
) :
|
||||||
|
KpmAwareTargetConfigurator<T>(legacyModelTargetWithTestsConfigurator),
|
||||||
|
KotlinTargetWithTestsConfigurator<R, T>
|
||||||
|
|
||||||
|
where C : AbstractKotlinTargetConfigurator<T>,
|
||||||
|
C : KotlinTargetWithTestsConfigurator<R, T> {
|
||||||
|
|
||||||
|
override fun configureTarget(target: T) {
|
||||||
|
super<KotlinTargetWithTestsConfigurator>.configureTarget(target)
|
||||||
|
}
|
||||||
|
|
||||||
|
override val testRunClass: Class<R>
|
||||||
|
get() = legacyModelTargetWithTestsConfigurator.testRunClass
|
||||||
|
|
||||||
|
override fun createTestRun(name: String, target: T): R =
|
||||||
|
legacyModelTargetWithTestsConfigurator.createTestRun(name, target)
|
||||||
|
}
|
||||||
+1
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.DefaultKotlinCompilationOutput
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.MavenPublicationCoordinatesProvider
|
import org.jetbrains.kotlin.gradle.plugin.mpp.MavenPublicationCoordinatesProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.ComputedCapability
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.ComputedCapability
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.disambiguateName
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.disambiguateName
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.newDependencyFilesHolder
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.publishedConfigurationName
|
import org.jetbrains.kotlin.gradle.plugin.mpp.publishedConfigurationName
|
||||||
import org.jetbrains.kotlin.gradle.utils.dashSeparatedName
|
import org.jetbrains.kotlin.gradle.utils.dashSeparatedName
|
||||||
import org.jetbrains.kotlin.project.model.KotlinAttributeKey
|
import org.jetbrains.kotlin.project.model.KotlinAttributeKey
|
||||||
|
|||||||
Reference in New Issue
Block a user