[K/N] Make NativeDependenciesDownloader compatible with CC ^KTI-1553

This commit is contained in:
Alexander Shabalin
2024-02-22 12:48:36 +01:00
committed by Space Team
parent e4acb396ba
commit b1f59e5f0d
2 changed files with 40 additions and 9 deletions
@@ -6,10 +6,16 @@
package org.jetbrains.kotlin.dependencies
import org.gradle.api.DefaultTask
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.logging.LogLevel
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.UntrackedTask
import org.gradle.kotlin.dsl.getByType
import org.jetbrains.kotlin.konan.properties.KonanPropertiesLoader
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.target.PlatformManager
import org.jetbrains.kotlin.konan.util.DependencyProcessor
/**
@@ -20,13 +26,39 @@ import org.jetbrains.kotlin.konan.util.DependencyProcessor
@UntrackedTask(because = "Output is large and work avoidance is performed in DependencyProcessor anyway")
abstract class NativeDependenciesDownloader : DefaultTask() {
/**
* [DependencyProcessor] that will perform downloading
* Target for which to download dependency.
*/
@get:Internal
abstract val dependencyProcessor: Property<DependencyProcessor>
abstract val target: Property<KonanTarget>
/**
* Root directory where to place all dependencies.
*/
@get:Internal
abstract val dependenciesDirectory: DirectoryProperty
/**
* Dependency repository.
*/
@get:Internal
abstract val repositoryURL: Property<String>
private val platformManager = project.extensions.getByType<PlatformManager>()
@TaskAction
fun downloadAndExtract() {
dependencyProcessor.get().run()
val loader = platformManager.loader(target.get())
check(loader is KonanPropertiesLoader)
val dependencyProcessor =
DependencyProcessor(
dependenciesDirectory.asFile.get(),
loader,
repositoryURL.get(),
keepUnstable = false) { url, currentBytes, totalBytes ->
// TODO: Consider using logger.
print("\nDownloading dependency for ${target.get()}: $url (${currentBytes}/${totalBytes}). ")
}
dependencyProcessor.showInfo = logger.isEnabled(LogLevel.INFO)
dependencyProcessor.run()
}
}
@@ -103,11 +103,8 @@ abstract class NativeDependenciesDownloaderExtension @Inject constructor(private
owner.dependenciesDirectory.apply { finalizeValue() }.asFile.get(),
loader,
owner.repositoryURL.apply { finalizeValue() }.get(),
keepUnstable = false) { url, currentBytes, totalBytes ->
// TODO: Consider using logger.
print("\nDownloading dependency for $_target: $url (${currentBytes}/${totalBytes}). ")
}.apply {
showInfo = project.logger.isEnabled(LogLevel.INFO)
keepUnstable = false) { _, _, _ ->
error("This is used as dependency resolver only, downloading cannot be performed")
}
}
@@ -116,7 +113,9 @@ abstract class NativeDependenciesDownloaderExtension @Inject constructor(private
val task = project.tasks.register<NativeDependenciesDownloader>("nativeDependencies${_target.name.capitalized}") {
description = "Download dependencies for $_target"
group = "native dependencies"
dependencyProcessor.set(this@Target.dependencyProcessor)
target.set(this@Target.target)
dependenciesDirectory.set(owner.dependenciesDirectory)
repositoryURL.set(owner.repositoryURL)
}
init {