Make NativeDistributionCommonizerTask configuration cache compatible
^KT-43293 In Progress
This commit is contained in:
+2
-31
@@ -5,12 +5,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.compilerRunner
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.tasks.Classpath
|
||||
import org.gradle.api.tasks.Input
|
||||
import org.jetbrains.kotlin.gradle.plugin.KLIB_COMMONIZER_CLASSPATH_CONFIGURATION_NAME
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
|
||||
import java.io.File
|
||||
|
||||
internal class KotlinNativeCommonizerToolRunner(
|
||||
@@ -20,17 +14,9 @@ internal class KotlinNativeCommonizerToolRunner(
|
||||
|
||||
class Settings(
|
||||
val kotlinPluginVersion: String,
|
||||
classpathProvider: () -> Set<File>,
|
||||
val classpath: Set<File>,
|
||||
val customJvmArgs: List<String>
|
||||
) {
|
||||
val classpath by lazy(classpathProvider)
|
||||
|
||||
constructor(project: Project) : this(
|
||||
kotlinPluginVersion = project.getKotlinPluginVersion(),
|
||||
classpathProvider = { buildClasspath(project) },
|
||||
customJvmArgs = getCustomJvmArgs(project)
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
override val displayName get() = "Kotlin/Native KLIB commonizer"
|
||||
|
||||
@@ -47,18 +33,3 @@ internal class KotlinNativeCommonizerToolRunner(
|
||||
override fun getCustomJvmArgs() = settings.customJvmArgs
|
||||
}
|
||||
|
||||
private fun buildClasspath(project: Project): Set<File> {
|
||||
try {
|
||||
return project.configurations.getByName(KLIB_COMMONIZER_CLASSPATH_CONFIGURATION_NAME).resolve() as Set<File>
|
||||
} catch (e: Exception) {
|
||||
project.logger.error(
|
||||
"Could not resolve KLIB commonizer classpath. Check if Kotlin Gradle plugin repository is configured in $project."
|
||||
)
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
private fun getCustomJvmArgs(project: Project): List<String> = PropertiesProvider(project)
|
||||
.commonizerJvmArgs
|
||||
?.split("\\s+".toRegex())
|
||||
.orEmpty()
|
||||
|
||||
+3
-1
@@ -316,8 +316,10 @@ internal class PropertiesProvider private constructor(private val project: Proje
|
||||
/**
|
||||
* Allows a user to specify additional arguments of a JVM executing KLIB commonizer.
|
||||
*/
|
||||
val commonizerJvmArgs: String?
|
||||
val commonizerJvmArgs: List<String>
|
||||
get() = propertyWithDeprecatedVariant("kotlin.mpp.commonizerJvmArgs", "kotlin.commonizer.jvmArgs")
|
||||
?.split("\\s+".toRegex())
|
||||
.orEmpty()
|
||||
|
||||
/**
|
||||
* Enables experimental commonization of user defined c-interop libraries.
|
||||
|
||||
+30
-3
@@ -5,7 +5,10 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.targets.native.internal
|
||||
|
||||
import org.gradle.api.file.ConfigurableFileCollection
|
||||
import org.gradle.api.model.ObjectFactory
|
||||
import org.gradle.api.provider.ListProperty
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.tasks.*
|
||||
import org.gradle.process.ExecOperations
|
||||
@@ -24,13 +27,16 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.kotlinSourceSetsIncludingDefault
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.withDependsOnClosure
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropCommonizerTask.CInteropGist
|
||||
import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
|
||||
import org.jetbrains.kotlin.gradle.utils.chainedFinalizeValueOnRead
|
||||
import org.jetbrains.kotlin.gradle.utils.listProperty
|
||||
import org.jetbrains.kotlin.gradle.utils.property
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
import java.io.File
|
||||
import javax.inject.Inject
|
||||
|
||||
@CacheableTask
|
||||
internal open class CInteropCommonizerTask
|
||||
@Inject constructor (
|
||||
@Inject constructor(
|
||||
private val objectFactory: ObjectFactory,
|
||||
private val execOperations: ExecOperations,
|
||||
) : AbstractCInteropCommonizerTask() {
|
||||
@@ -76,7 +82,28 @@ internal open class CInteropCommonizerTask
|
||||
|
||||
override val outputDirectory: File = project.buildDir.resolve("classes/kotlin/commonizer")
|
||||
|
||||
private val runnerSettings = KotlinNativeCommonizerToolRunner.Settings(project)
|
||||
@get:Internal
|
||||
internal val kotlinPluginVersion: Property<String> = objectFactory
|
||||
.property<String>()
|
||||
.chainedFinalizeValueOnRead()
|
||||
|
||||
@get:Internal
|
||||
internal val commonizerClasspath: ConfigurableFileCollection = objectFactory.fileCollection()
|
||||
|
||||
@get:Internal
|
||||
internal val customJvmArgs: ListProperty<String> = objectFactory
|
||||
.listProperty<String>()
|
||||
.chainedFinalizeValueOnRead()
|
||||
|
||||
private val runnerSettings: Provider<KotlinNativeCommonizerToolRunner.Settings> = kotlinPluginVersion
|
||||
.zip(customJvmArgs) { pluginVersion, customJvmArgs ->
|
||||
commonizerClasspath
|
||||
KotlinNativeCommonizerToolRunner.Settings(
|
||||
pluginVersion,
|
||||
commonizerClasspath.files,
|
||||
customJvmArgs
|
||||
)
|
||||
}
|
||||
|
||||
private val konanHome = project.file(project.konanHome)
|
||||
private val commonizerLogLevel = project.commonizerLogLevel
|
||||
@@ -135,7 +162,7 @@ internal open class CInteropCommonizerTask
|
||||
|
||||
val commonizerRunner = KotlinNativeCommonizerToolRunner(
|
||||
context = KotlinToolRunner.GradleExecutionContext.fromTaskContext(objectFactory, execOperations, logger),
|
||||
settings = runnerSettings
|
||||
settings = runnerSettings.get()
|
||||
)
|
||||
|
||||
GradleCliCommonizer(commonizerRunner).commonizeLibraries(
|
||||
|
||||
+14
@@ -10,7 +10,9 @@ import org.gradle.api.Task
|
||||
import org.gradle.api.tasks.Delete
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.jetbrains.kotlin.gradle.internal.isInIdeaSync
|
||||
import org.jetbrains.kotlin.gradle.plugin.KLIB_COMMONIZER_CLASSPATH_CONFIGURATION_NAME
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.Idea222Api
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.ideaImportDependsOn
|
||||
import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
|
||||
@@ -73,6 +75,12 @@ internal val Project.commonizeCInteropTask: TaskProvider<CInteropCommonizerTask>
|
||||
configureTask = {
|
||||
group = "interop"
|
||||
description = "Invokes the commonizer on c-interop bindings of the project"
|
||||
|
||||
kotlinPluginVersion.set(getKotlinPluginVersion())
|
||||
commonizerClasspath.from(
|
||||
configurations.getByName(KLIB_COMMONIZER_CLASSPATH_CONFIGURATION_NAME)
|
||||
)
|
||||
customJvmArgs.set(PropertiesProvider(project).commonizerJvmArgs)
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -117,6 +125,12 @@ internal val Project.commonizeNativeDistributionTask: TaskProvider<NativeDistrib
|
||||
configureTask = {
|
||||
group = "interop"
|
||||
description = "Invokes the commonizer on platform libraries provided by the Kotlin/Native distribution"
|
||||
|
||||
kotlinPluginVersion.set(getKotlinPluginVersion())
|
||||
commonizerClasspath.from(
|
||||
configurations.getByName(KLIB_COMMONIZER_CLASSPATH_CONFIGURATION_NAME)
|
||||
)
|
||||
customJvmArgs.set(PropertiesProvider(project).commonizerJvmArgs)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
+31
-3
@@ -7,7 +7,11 @@ package org.jetbrains.kotlin.gradle.targets.native.internal
|
||||
|
||||
import org.gradle.api.DefaultTask
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.file.ConfigurableFileCollection
|
||||
import org.gradle.api.model.ObjectFactory
|
||||
import org.gradle.api.provider.ListProperty
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.tasks.*
|
||||
import org.gradle.process.ExecOperations
|
||||
import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
||||
@@ -19,6 +23,9 @@ import org.jetbrains.kotlin.compilerRunner.registerCommonizerClasspathConfigurat
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
|
||||
import org.jetbrains.kotlin.gradle.utils.*
|
||||
import org.jetbrains.kotlin.gradle.utils.chainedFinalizeValueOnRead
|
||||
import org.jetbrains.kotlin.gradle.utils.property
|
||||
import org.jetbrains.kotlin.konan.library.KONAN_DISTRIBUTION_COMMONIZED_LIBS_DIR
|
||||
import org.jetbrains.kotlin.konan.library.KONAN_DISTRIBUTION_KLIB_DIR
|
||||
import java.io.File
|
||||
@@ -26,7 +33,7 @@ import java.net.URLEncoder
|
||||
import javax.inject.Inject
|
||||
|
||||
internal open class NativeDistributionCommonizerTask
|
||||
@Inject constructor (
|
||||
@Inject constructor(
|
||||
private val objectFactory: ObjectFactory,
|
||||
private val execOperations: ExecOperations,
|
||||
) : DefaultTask() {
|
||||
@@ -37,7 +44,28 @@ internal open class NativeDistributionCommonizerTask
|
||||
project.collectAllSharedCommonizerTargetsFromBuild()
|
||||
}
|
||||
|
||||
private val runnerSettings = KotlinNativeCommonizerToolRunner.Settings(project)
|
||||
@get:Internal
|
||||
internal val kotlinPluginVersion: Property<String> = objectFactory
|
||||
.property<String>()
|
||||
.chainedFinalizeValueOnRead()
|
||||
|
||||
@get:Internal
|
||||
internal val commonizerClasspath: ConfigurableFileCollection = objectFactory.fileCollection()
|
||||
|
||||
@get:Internal
|
||||
internal val customJvmArgs: ListProperty<String> = objectFactory
|
||||
.listProperty<String>()
|
||||
.chainedFinalizeValueOnRead()
|
||||
|
||||
private val runnerSettings: Provider<KotlinNativeCommonizerToolRunner.Settings> = kotlinPluginVersion
|
||||
.zip(customJvmArgs) { pluginVersion, customJvmArgs ->
|
||||
commonizerClasspath
|
||||
KotlinNativeCommonizerToolRunner.Settings(
|
||||
pluginVersion,
|
||||
commonizerClasspath.files,
|
||||
customJvmArgs
|
||||
)
|
||||
}
|
||||
|
||||
private val logLevel = project.commonizerLogLevel
|
||||
|
||||
@@ -62,7 +90,7 @@ internal open class NativeDistributionCommonizerTask
|
||||
protected fun run() {
|
||||
val commonizerRunner = KotlinNativeCommonizerToolRunner(
|
||||
context = KotlinToolRunner.GradleExecutionContext.fromTaskContext(objectFactory, execOperations, logger),
|
||||
settings = runnerSettings
|
||||
settings = runnerSettings.get()
|
||||
)
|
||||
|
||||
commonizerCache.writeCacheForUncachedTargets(commonizerTargets) { todoOutputTargets ->
|
||||
|
||||
+6
-1
@@ -78,6 +78,11 @@ internal fun <PropType : Any?, T : Property<PropType>> T.chainedFinalizeValueOnR
|
||||
finalizeValueOnRead()
|
||||
}
|
||||
|
||||
internal fun <PropType : Any?, T : ListProperty<PropType>> T.chainedFinalizeValueOnRead(): T =
|
||||
apply {
|
||||
finalizeValueOnRead()
|
||||
}
|
||||
|
||||
// Before 5.0 fileProperty is created via ProjectLayout
|
||||
// https://docs.gradle.org/current/javadoc/org/gradle/api/model/ObjectFactory.html#fileProperty--
|
||||
internal fun Project.newFileProperty(initialize: (() -> File)? = null): RegularFileProperty {
|
||||
@@ -105,4 +110,4 @@ internal inline fun <reified T> Project.listProperty(noinline itemsProvider: ()
|
||||
objects.listProperty(T::class.java).apply { set(provider(itemsProvider)) }
|
||||
|
||||
internal inline fun <reified T> Project.setProperty(noinline itemsProvider: () -> Iterable<T>): SetProperty<T> =
|
||||
objects.setProperty(T::class.java).apply { set(provider(itemsProvider)) }
|
||||
objects.setProperty(T::class.java).apply { set(provider(itemsProvider)) }
|
||||
|
||||
Reference in New Issue
Block a user