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>(
|
||||
protected val createDefaultSourceSets: Boolean,
|
||||
protected val createTestCompilation: Boolean
|
||||
internal val createDefaultSourceSets: Boolean,
|
||||
internal val createTestCompilation: Boolean
|
||||
) : KotlinTargetConfigurator<KotlinTargetType> {
|
||||
|
||||
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?
|
||||
val resolvedGradleVariantName = resolvedVariantProvider.getResolvedVariantName(dependencyModuleId, compileClasspath)
|
||||
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)
|
||||
}
|
||||
|
||||
|
||||
+2
-5
@@ -6,16 +6,13 @@
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinOnlyTargetConfigurator
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetPreset
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
|
||||
abstract class KotlinOnlyTargetPreset<R : KotlinOnlyTarget<T>, T : KotlinCompilation<*>>(
|
||||
protected val project: Project
|
||||
) : KotlinTargetPreset<R> {
|
||||
|
||||
protected abstract fun createKotlinTargetConfigurator(): KotlinOnlyTargetConfigurator<T, R>
|
||||
protected abstract fun createKotlinTargetConfigurator(): AbstractKotlinTargetConfigurator<R>
|
||||
|
||||
protected open fun provideTargetDisambiguationClassifier(target: KotlinOnlyTarget<T>): String? =
|
||||
target.targetName
|
||||
|
||||
+1
-41
@@ -9,24 +9,14 @@ import groovy.lang.Closure
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.plugins.BasePluginConvention
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.attributes.AttributeContainer
|
||||
import org.gradle.api.file.FileCollection
|
||||
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.KotlinJvmOptionsImpl
|
||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.unambiguousNameInProject
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.kpm.FragmentMappedKotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.filterModuleName
|
||||
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(
|
||||
containingModule: KotlinGradleModule,
|
||||
@@ -77,34 +67,4 @@ class KotlinMappedJvmCompilationFactory(
|
||||
VariantMappedCompilationDetailsWithRuntime(variant, target),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
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.artifacts.Configuration
|
||||
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.publishedConfigurationName
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
@@ -210,3 +210,18 @@ internal class KotlinNativeVariantCompilationData(
|
||||
|
||||
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.pm20.util.ComputedCapability
|
||||
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.utils.dashSeparatedName
|
||||
import org.jetbrains.kotlin.project.model.KotlinAttributeKey
|
||||
|
||||
Reference in New Issue
Block a user