Reduce number of tasks realized eagerly from Konan Plugin

This commit is contained in:
cristiangarcia
2023-07-05 23:13:47 +02:00
committed by Space Team
parent 817e3de8f5
commit 0946039661
3 changed files with 20 additions and 23 deletions
@@ -134,7 +134,7 @@ abstract class KonanBuildingConfig<T : KonanBuildingTask>(
dependsOn(it.value)
}
}.also {
project.compileAllTask.dependsOn(it)
project.compileAllTask.configure { dependsOn(it) }
}
protected fun createTargetAliasTaskIfDeclared(targetName: String): TaskProvider<Task>? {
@@ -32,6 +32,7 @@ import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.publish.maven.internal.publication.MavenPublicationInternal
import org.gradle.api.tasks.Exec
import org.gradle.api.tasks.TaskProvider
import org.gradle.jvm.toolchain.JavaLanguageVersion
import org.gradle.jvm.toolchain.JavaLauncher
import org.gradle.jvm.toolchain.JavaToolchainService
@@ -135,9 +136,6 @@ internal val Project.konanTargets: List<KonanTarget>
internal val Project.konanExtension: KonanExtension
get() = extensions.getByName(KonanPlugin.KONAN_EXTENSION_NAME) as KonanExtension
internal val Project.konanCompilerDownloadTask
get() = tasks.getByName(KonanPlugin.KONAN_DOWNLOAD_TASK_NAME)
internal val Project.requestedTargets
get() = findProperty(KonanPlugin.ProjectProperty.KONAN_BUILD_TARGETS)?.let {
it.toString().trim().split("\\s+".toRegex())
@@ -147,22 +145,21 @@ internal val Project.jvmArgs
get() = (findProperty(KonanPlugin.ProjectProperty.KONAN_JVM_ARGS) as String?)?.split("\\s+".toRegex()).orEmpty()
internal val Project.compileAllTask
get() = getOrCreateTask(COMPILE_ALL_TASK_NAME)
get() = getOrRegisterTask(COMPILE_ALL_TASK_NAME)
internal fun Project.targetIsRequested(target: KonanTarget): Boolean {
val targets = requestedTargets
return (targets.isEmpty() || targets.contains(target.visibleName) || targets.contains("all"))
}
/** Looks for task with given name in the given project. Throws [UnknownTaskException] if there's not such task. */
private fun Project.getTask(name: String): Task = tasks.getByPath(name)
/**
* Looks for task with given name in the given project.
* If such task isn't found, will create it. Returns created/found task.
* If such task isn't found, will register it. Returns registered/found task.
*/
private fun Project.getOrCreateTask(name: String): Task = with(tasks) {
findByPath(name) ?: create(name, DefaultTask::class.java)
private fun Project.getOrRegisterTask(name: String): TaskProvider<out Task> = if (tasks.names.contains(name)) {
tasks.named(name)
} else {
tasks.register(name, DefaultTask::class.java)
}
internal fun Project.konanCompilerName(): String =
@@ -309,8 +306,6 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
companion object {
internal const val ARTIFACTS_CONTAINER_NAME = "konanArtifacts"
internal const val KONAN_DOWNLOAD_TASK_NAME = "checkKonanCompiler"
internal const val KONAN_GENERATE_CMAKE_TASK_NAME = "generateCMake"
internal const val COMPILE_ALL_TASK_NAME = "compileKonan"
internal const val KONAN_EXTENSION_NAME = "konan"
@@ -372,15 +367,15 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
project.setProperty(ProjectProperty.DOWNLOAD_COMPILER, true)
}
// Create and set up aggregate building tasks.
val compileKonanTask = project.getOrCreateTask(COMPILE_ALL_TASK_NAME).apply {
// Register and set up aggregate building tasks.
val compileKonanTask = project.getOrRegisterTask(COMPILE_ALL_TASK_NAME).configure {
group = BasePlugin.BUILD_GROUP
description = "Compiles all the Kotlin/Native artifacts"
}
project.getTask("build").apply {
project.tasks.named("build").configure {
dependsOn(compileKonanTask)
}
project.getTask("clean").apply {
project.tasks.named("clean").configure {
doLast { project.cleanKonan() }
}
@@ -406,13 +401,13 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
}
}
val runTask = project.getOrCreateTask("run")
val runTask = project.getOrRegisterTask("run")
project.afterEvaluate {
project.konanArtifactsContainer
.filterIsInstance(KonanProgram::class.java)
.forEach { program ->
program.tasks().forEach { compile ->
compile.configure { this@configure.runTask?.let { runTask.dependsOn(it) } }
compile.configure { this@configure.runTask?.let { runTask.configure { dependsOn(it) } } }
}
}
}
+6 -4
View File
@@ -1,6 +1,8 @@
description = 'Kotlin Common Standard Library'
plugins {
id("kotlin-platform-common")
}
apply plugin: 'kotlin-platform-common'
description = 'Kotlin Common Standard Library'
RepoArtifacts.publish(project)
@@ -62,13 +64,13 @@ compileTestKotlinCommon {
}
}
jar {
tasks.named("jar", Jar) {
LibrariesCommon.manifestAttributes(project, manifest, 'Main')
}
RepoArtifacts.sourcesJar(project)
RepoArtifacts.javadocJar(project)
sourcesJar.dependsOn(":prepare:build.version:writeStdlibVersion")
tasks.named("sourcesJar").configure { it.dependsOn(":prepare:build.version:writeStdlibVersion") }
classes.setDependsOn(classes.dependsOn.findAll { it != "compileJava" })