[K/N][build] Add providers to klib install and cache tasks

This commit is contained in:
Pavel Punegov
2023-08-31 18:35:08 +02:00
committed by Space Team
parent b1a85d45c6
commit e01cea6669
5 changed files with 17 additions and 23 deletions
@@ -4,6 +4,7 @@
*/ */
import org.jetbrains.kotlin.* import org.jetbrains.kotlin.*
import org.jetbrains.kotlin.gradle.plugin.konan.tasks.KonanKlibInstallTask
import org.jetbrains.kotlin.gradle.plugin.tasks.KonanCompileNativeBinary import org.jetbrains.kotlin.gradle.plugin.tasks.KonanCompileNativeBinary
import org.jetbrains.kotlin.konan.target.Architecture import org.jetbrains.kotlin.konan.target.Architecture
import org.jetbrains.kotlin.konan.target.Family import org.jetbrains.kotlin.konan.target.Family
@@ -6,11 +6,11 @@
package org.jetbrains.kotlin.gradle.plugin.konan.tasks package org.jetbrains.kotlin.gradle.plugin.konan.tasks
import org.gradle.api.DefaultTask import org.gradle.api.DefaultTask
import org.gradle.api.file.Directory import org.gradle.api.file.DirectoryProperty
import org.gradle.api.provider.Property import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.* import org.gradle.api.tasks.*
import org.jetbrains.kotlin.gradle.plugin.konan.KonanCliCompilerRunner import org.jetbrains.kotlin.gradle.plugin.konan.KonanCliCompilerRunner
import org.jetbrains.kotlin.gradle.plugin.konan.konanHome
import org.jetbrains.kotlin.konan.library.defaultResolver import org.jetbrains.kotlin.konan.library.defaultResolver
import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.target.CompilerOutputKind
import org.jetbrains.kotlin.konan.target.Distribution import org.jetbrains.kotlin.konan.target.Distribution
@@ -24,9 +24,9 @@ enum class KonanCacheKind(val outputKind: CompilerOutputKind) {
DYNAMIC(CompilerOutputKind.DYNAMIC_CACHE) DYNAMIC(CompilerOutputKind.DYNAMIC_CACHE)
} }
open class KonanCacheTask: DefaultTask() { abstract class KonanCacheTask : DefaultTask() {
@get:InputDirectory @get:InputDirectory
var originalKlib: File? = null abstract val originalKlib: DirectoryProperty
@get:Input @get:Input
lateinit var klibUniqName: String lateinit var klibUniqName: String
@@ -54,11 +54,11 @@ open class KonanCacheTask: DefaultTask() {
private fun readKlibUniqNameFromManifest(): String { private fun readKlibUniqNameFromManifest(): String {
val konanHome = compilerDistributionPath.get().absolutePath val konanHome = compilerDistributionPath.get().absolutePath
val resolver = defaultResolver( val resolver = defaultResolver(
emptyList(), emptyList(),
PlatformManager(konanHome).targetByName(target), PlatformManager(konanHome).targetByName(target),
Distribution(konanHome) Distribution(konanHome)
) )
return resolver.resolve(originalKlib!!.absolutePath).uniqueName return resolver.resolve(originalKlib.asFile.get().absolutePath).uniqueName
} }
@get:Input @get:Input
@@ -94,12 +94,12 @@ open class KonanCacheTask: DefaultTask() {
val additionalCacheFlags = PlatformManager(konanHome).let { val additionalCacheFlags = PlatformManager(konanHome).let {
it.targetByName(target).let(it::loader).additionalCacheFlags it.targetByName(target).let(it::loader).additionalCacheFlags
} }
requireNotNull(originalKlib) require(originalKlib.isPresent)
val args = mutableListOf( val args = mutableListOf(
"-g", "-g",
"-target", target, "-target", target,
"-produce", cacheKind.outputKind.name.toLowerCase(), "-produce", cacheKind.outputKind.name.toLowerCase(),
"-Xadd-cache=${originalKlib?.absolutePath}", "-Xadd-cache=${originalKlib.asFile.get().absolutePath}",
"-Xcache-directory=${cacheDirectory.absolutePath}" "-Xcache-directory=${cacheDirectory.absolutePath}"
) )
if (makePerFileCache) if (makePerFileCache)
@@ -3,16 +3,14 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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 package org.jetbrains.kotlin.gradle.plugin.konan.tasks
import groovy.lang.Closure
import org.gradle.api.Task
import org.gradle.api.DefaultTask import org.gradle.api.DefaultTask
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
import org.gradle.api.tasks.* import org.gradle.api.tasks.*
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.gradle.plugin.konan.KonanKlibRunner import org.jetbrains.kotlin.gradle.plugin.konan.KonanKlibRunner
import org.jetbrains.kotlin.kotlinNativeDist
import java.io.File import java.io.File
open class KonanKlibInstallTask : DefaultTask() { open class KonanKlibInstallTask : DefaultTask() {
@@ -22,10 +20,6 @@ open class KonanKlibInstallTask : DefaultTask() {
@get:Internal @get:Internal
var repo: File = project.rootDir var repo: File = project.rootDir
@get:Input
val repoPath
get() = repo.absolutePath
val installDir: Provider<File> val installDir: Provider<File>
@OutputDirectory @OutputDirectory
get() = project.provider { get() = project.provider {
+2 -2
View File
@@ -3,7 +3,7 @@
* that can be found in the LICENSE file. * that can be found in the LICENSE file.
*/ */
import org.jetbrains.kotlin.KonanKlibInstallTask import org.jetbrains.kotlin.gradle.plugin.konan.tasks.KonanKlibInstallTask
import org.jetbrains.kotlin.gradle.plugin.konan.tasks.KonanCacheTask import org.jetbrains.kotlin.gradle.plugin.konan.tasks.KonanCacheTask
import org.jetbrains.kotlin.gradle.plugin.tasks.KonanInteropTask import org.jetbrains.kotlin.gradle.plugin.tasks.KonanInteropTask
import org.jetbrains.kotlin.konan.target.* import org.jetbrains.kotlin.konan.target.*
@@ -97,7 +97,7 @@ konanTargetList.forEach { target ->
if (target in cacheableTargets) { if (target in cacheableTargets) {
val cacheTask = tasks.register("${libName}Cache", KonanCacheTask::class.java) { val cacheTask = tasks.register("${libName}Cache", KonanCacheTask::class.java) {
this.target = targetName this.target = targetName
originalKlib = klibInstallTask.get().installDir.get() originalKlib.fileProvider(klibInstallTask.flatMap { it.installDir })
klibUniqName = artifactName klibUniqName = artifactName
cacheRoot = file("$konanHome/klib/cache").absolutePath cacheRoot = file("$konanHome/klib/cache").absolutePath
+2 -3
View File
@@ -534,7 +534,7 @@ konanArtifacts {
} }
targetList.forEach { targetName -> targetList.forEach { targetName ->
tasks.register("${targetName}Stdlib", Copy::class.java) { val stdlibTask = tasks.register("${targetName}Stdlib", Copy::class.java) {
require(::stdlibBuildTask.isInitialized) require(::stdlibBuildTask.isInitialized)
dependsOn(stdlibBuildTask) dependsOn(stdlibBuildTask)
dependsOn("${targetName}Runtime") dependsOn("${targetName}Runtime")
@@ -569,11 +569,10 @@ targetList.forEach { targetName ->
if (targetName in cacheableTargetNames) { if (targetName in cacheableTargetNames) {
tasks.register("${targetName}StdlibCache", KonanCacheTask::class.java) { tasks.register("${targetName}StdlibCache", KonanCacheTask::class.java) {
target = targetName target = targetName
originalKlib = project.buildDir.resolve("${targetName}Stdlib") originalKlib.fileProvider(stdlibTask.map { it.destinationDir })
klibUniqName = "stdlib" klibUniqName = "stdlib"
cacheRoot = project.buildDir.resolve("cache/$targetName").absolutePath cacheRoot = project.buildDir.resolve("cache/$targetName").absolutePath
dependsOn("${targetName}Stdlib")
dependsOn(":kotlin-native:${targetName}CrossDistRuntime") dependsOn(":kotlin-native:${targetName}CrossDistRuntime")
} }
} }