[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 package org.jetbrains.kotlin.dependencies
import org.gradle.api.DefaultTask 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.provider.Property
import org.gradle.api.tasks.Internal import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.UntrackedTask 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 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") @UntrackedTask(because = "Output is large and work avoidance is performed in DependencyProcessor anyway")
abstract class NativeDependenciesDownloader : DefaultTask() { abstract class NativeDependenciesDownloader : DefaultTask() {
/** /**
* [DependencyProcessor] that will perform downloading * Target for which to download dependency.
*/ */
@get:Internal @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 @TaskAction
fun downloadAndExtract() { 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(), owner.dependenciesDirectory.apply { finalizeValue() }.asFile.get(),
loader, loader,
owner.repositoryURL.apply { finalizeValue() }.get(), owner.repositoryURL.apply { finalizeValue() }.get(),
keepUnstable = false) { url, currentBytes, totalBytes -> keepUnstable = false) { _, _, _ ->
// TODO: Consider using logger. error("This is used as dependency resolver only, downloading cannot be performed")
print("\nDownloading dependency for $_target: $url (${currentBytes}/${totalBytes}). ")
}.apply {
showInfo = project.logger.isEnabled(LogLevel.INFO)
} }
} }
@@ -116,7 +113,9 @@ abstract class NativeDependenciesDownloaderExtension @Inject constructor(private
val task = project.tasks.register<NativeDependenciesDownloader>("nativeDependencies${_target.name.capitalized}") { val task = project.tasks.register<NativeDependenciesDownloader>("nativeDependencies${_target.name.capitalized}") {
description = "Download dependencies for $_target" description = "Download dependencies for $_target"
group = "native dependencies" group = "native dependencies"
dependencyProcessor.set(this@Target.dependencyProcessor) target.set(this@Target.target)
dependenciesDirectory.set(owner.dependenciesDirectory)
repositoryURL.set(owner.repositoryURL)
} }
init { init {