[Gradle] Moved downloading konan dependencies from compiler to Gradle
^KT-65823 Fixed
This commit is contained in:
committed by
Space Team
parent
8ae6e98295
commit
f525d03e67
@@ -19,12 +19,14 @@ package org.jetbrains.kotlin.konan.target
|
||||
import org.jetbrains.kotlin.konan.properties.KonanPropertiesLoader
|
||||
import org.jetbrains.kotlin.konan.properties.Properties
|
||||
import org.jetbrains.kotlin.konan.util.InternalServer
|
||||
import org.jetbrains.kotlin.konan.util.ProgressCallback
|
||||
|
||||
class AppleConfigurablesImpl(
|
||||
target: KonanTarget,
|
||||
properties: Properties,
|
||||
dependenciesDir: String?
|
||||
) : AppleConfigurables, KonanPropertiesLoader(target, properties, dependenciesDir) {
|
||||
dependenciesDir: String?,
|
||||
progressCallback: ProgressCallback,
|
||||
) : AppleConfigurables, KonanPropertiesLoader(target, properties, dependenciesDir, progressCallback = progressCallback) {
|
||||
|
||||
private val sdkDependency = this.targetSysRoot!!
|
||||
private val toolchainDependency = this.targetToolchain!!
|
||||
@@ -45,10 +47,13 @@ class AppleConfigurablesImpl(
|
||||
XcodePartsProvider.InternalServer -> absolute(additionalToolsDir)
|
||||
}
|
||||
|
||||
override val dependencies get() = super.dependencies + when (xcodePartsProvider) {
|
||||
is XcodePartsProvider.Local -> emptyList()
|
||||
XcodePartsProvider.InternalServer -> listOf(sdkDependency, toolchainDependency, xcodeAddonDependency)
|
||||
}
|
||||
override val dependencies
|
||||
get() = super.dependencies +
|
||||
if (InternalServer.isAvailable) listOf(
|
||||
sdkDependency,
|
||||
toolchainDependency,
|
||||
xcodeAddonDependency
|
||||
) else emptyList()
|
||||
|
||||
private val xcodePartsProvider by lazy {
|
||||
if (InternalServer.isAvailable) {
|
||||
|
||||
@@ -17,34 +17,42 @@
|
||||
package org.jetbrains.kotlin.konan.target
|
||||
|
||||
import org.jetbrains.kotlin.konan.properties.*
|
||||
import org.jetbrains.kotlin.konan.util.ProgressCallback
|
||||
|
||||
class GccConfigurablesImpl(target: KonanTarget, properties: Properties, dependenciesRoot: String?)
|
||||
: GccConfigurables, KonanPropertiesLoader(target, properties, dependenciesRoot), ConfigurablesWithEmulator {
|
||||
class GccConfigurablesImpl(target: KonanTarget, properties: Properties, dependenciesRoot: String?, progressCallback: ProgressCallback) : GccConfigurables,
|
||||
KonanPropertiesLoader(target, properties, dependenciesRoot, progressCallback = progressCallback), ConfigurablesWithEmulator {
|
||||
override val dependencies: List<String>
|
||||
get() = super.dependencies + listOfNotNull(emulatorDependency)
|
||||
}
|
||||
|
||||
class AndroidConfigurablesImpl(target: KonanTarget, properties: Properties, dependenciesRoot: String?)
|
||||
: AndroidConfigurables, KonanPropertiesLoader(target, properties, dependenciesRoot)
|
||||
|
||||
class WasmConfigurablesImpl(target: KonanTarget, properties: Properties, dependenciesRoot: String?)
|
||||
: WasmConfigurables, KonanPropertiesLoader(target, properties, dependenciesRoot)
|
||||
|
||||
class ZephyrConfigurablesImpl(target: KonanTarget, properties: Properties, dependenciesRoot: String?)
|
||||
: ZephyrConfigurables, KonanPropertiesLoader(target, properties, dependenciesRoot)
|
||||
|
||||
|
||||
fun loadConfigurables(target: KonanTarget, properties: Properties, dependenciesRoot: String?): Configurables = when (target.family) {
|
||||
Family.LINUX -> GccConfigurablesImpl(target, properties, dependenciesRoot)
|
||||
|
||||
Family.TVOS, Family.WATCHOS, Family.IOS, Family.OSX -> AppleConfigurablesImpl(target, properties, dependenciesRoot)
|
||||
|
||||
Family.ANDROID -> AndroidConfigurablesImpl(target, properties, dependenciesRoot)
|
||||
|
||||
Family.MINGW -> MingwConfigurablesImpl(target, properties, dependenciesRoot)
|
||||
|
||||
Family.WASM -> WasmConfigurablesImpl(target, properties, dependenciesRoot)
|
||||
|
||||
Family.ZEPHYR -> ZephyrConfigurablesImpl(target, properties, dependenciesRoot)
|
||||
}
|
||||
|
||||
class AndroidConfigurablesImpl(target: KonanTarget, properties: Properties, dependenciesRoot: String?, progressCallback: ProgressCallback) : AndroidConfigurables,
|
||||
KonanPropertiesLoader(target, properties, dependenciesRoot, progressCallback = progressCallback)
|
||||
|
||||
class WasmConfigurablesImpl(target: KonanTarget, properties: Properties, dependenciesRoot: String?, progressCallback: ProgressCallback) : WasmConfigurables,
|
||||
KonanPropertiesLoader(target, properties, dependenciesRoot, progressCallback = progressCallback)
|
||||
|
||||
class ZephyrConfigurablesImpl(target: KonanTarget, properties: Properties, dependenciesRoot: String?, progressCallback: ProgressCallback) : ZephyrConfigurables,
|
||||
KonanPropertiesLoader(target, properties, dependenciesRoot, progressCallback = progressCallback)
|
||||
|
||||
|
||||
fun loadConfigurables(
|
||||
target: KonanTarget,
|
||||
properties: Properties,
|
||||
dependenciesRoot: String?,
|
||||
progressCallback: ProgressCallback = { url, currentBytes, totalBytes ->
|
||||
print("\n(KonanProperties) Downloading dependency: $url (${currentBytes}/${totalBytes}). ")
|
||||
},
|
||||
): Configurables = when (target.family) {
|
||||
Family.LINUX -> GccConfigurablesImpl(target, properties, dependenciesRoot, progressCallback)
|
||||
|
||||
Family.TVOS, Family.WATCHOS, Family.IOS, Family.OSX -> AppleConfigurablesImpl(target, properties, dependenciesRoot, progressCallback)
|
||||
|
||||
Family.ANDROID -> AndroidConfigurablesImpl(target, properties, dependenciesRoot, progressCallback)
|
||||
|
||||
Family.MINGW -> MingwConfigurablesImpl(target, properties, dependenciesRoot, progressCallback)
|
||||
|
||||
Family.WASM -> WasmConfigurablesImpl(target, properties, dependenciesRoot, progressCallback)
|
||||
|
||||
Family.ZEPHYR -> ZephyrConfigurablesImpl(target, properties, dependenciesRoot, progressCallback)
|
||||
}
|
||||
|
||||
|
||||
@@ -21,15 +21,16 @@ import org.jetbrains.kotlin.konan.target.Configurables
|
||||
import org.jetbrains.kotlin.konan.target.HostManager
|
||||
import org.jetbrains.kotlin.konan.util.ArchiveType
|
||||
import org.jetbrains.kotlin.konan.util.DependencyProcessor
|
||||
import org.jetbrains.kotlin.konan.util.ProgressCallback
|
||||
import java.io.File
|
||||
|
||||
interface TargetableExternalStorage {
|
||||
fun targetString(key: String): String?
|
||||
fun targetString(key: String): String?
|
||||
fun targetList(key: String): List<String>
|
||||
fun hostString(key: String): String?
|
||||
fun hostList(key: String): List<String>
|
||||
fun hostTargetString(key: String): String?
|
||||
fun hostTargetList(key: String): List<String>
|
||||
fun hostString(key: String): String?
|
||||
fun hostList(key: String): List<String>
|
||||
fun hostTargetString(key: String): String?
|
||||
fun hostTargetList(key: String): List<String>
|
||||
fun absolute(value: String?): String
|
||||
fun downloadDependencies()
|
||||
}
|
||||
@@ -39,21 +40,24 @@ abstract class KonanPropertiesLoader(
|
||||
val properties: Properties,
|
||||
private val dependenciesRoot: String?,
|
||||
private val host: KonanTarget = HostManager.host,
|
||||
private val progressCallback: ProgressCallback,
|
||||
) : Configurables {
|
||||
|
||||
|
||||
private val predefinedLlvmDistributions: Set<String> =
|
||||
properties.propertyList("predefinedLlvmDistributions").toSet()
|
||||
properties.propertyList("predefinedLlvmDistributions").toSet()
|
||||
|
||||
private val predefinedLibffiVersions: Set<String> =
|
||||
properties.propertyList("predefinedLibffiVersions").toSet()
|
||||
properties.propertyList("predefinedLibffiVersions").toSet()
|
||||
|
||||
private fun getPredefinedDependencyOrNull(
|
||||
dependencyName: String,
|
||||
dependencyAccessor: () -> String?,
|
||||
predefinedDependencies: Set<String>
|
||||
dependencyName: String,
|
||||
dependencyAccessor: () -> String?,
|
||||
predefinedDependencies: Set<String>,
|
||||
): String? {
|
||||
// Store into variable to avoid repeated resolve.
|
||||
val dependency = dependencyAccessor()
|
||||
?: error("Undefined $dependencyName!")
|
||||
?: error("Undefined $dependencyName!")
|
||||
return when (dependency) {
|
||||
in predefinedDependencies -> dependency
|
||||
else -> null
|
||||
@@ -61,8 +65,8 @@ abstract class KonanPropertiesLoader(
|
||||
}
|
||||
|
||||
private fun compilerDependencies(): List<String> = listOfNotNull(
|
||||
getPredefinedDependencyOrNull("LLVM home", this::llvmHome, predefinedLlvmDistributions),
|
||||
getPredefinedDependencyOrNull("libffi version", this::libffiDir, predefinedLibffiVersions)
|
||||
getPredefinedDependencyOrNull("LLVM home", this::llvmHome, predefinedLlvmDistributions),
|
||||
getPredefinedDependencyOrNull("libffi version", this::libffiDir, predefinedLibffiVersions)
|
||||
)
|
||||
|
||||
open val dependencies: List<String>
|
||||
@@ -73,38 +77,30 @@ abstract class KonanPropertiesLoader(
|
||||
}
|
||||
|
||||
// TODO: We may want to add caching to avoid repeated resolve.
|
||||
override fun targetString(key: String): String?
|
||||
= properties.targetString(key, target)
|
||||
override fun targetList(key: String): List<String>
|
||||
= properties.targetList(key, target)
|
||||
override fun hostString(key: String): String?
|
||||
= properties.hostString(key, host)
|
||||
override fun hostList(key: String): List<String>
|
||||
= properties.hostList(key, host)
|
||||
override fun hostTargetString(key: String): String?
|
||||
= properties.hostTargetString(key, target, host)
|
||||
override fun hostTargetList(key: String): List<String>
|
||||
= properties.hostTargetList(key, target, host)
|
||||
override fun targetString(key: String): String? = properties.targetString(key, target)
|
||||
override fun targetList(key: String): List<String> = properties.targetList(key, target)
|
||||
override fun hostString(key: String): String? = properties.hostString(key, host)
|
||||
override fun hostList(key: String): List<String> = properties.hostList(key, host)
|
||||
override fun hostTargetString(key: String): String? = properties.hostTargetString(key, target, host)
|
||||
override fun hostTargetList(key: String): List<String> = properties.hostTargetList(key, target, host)
|
||||
|
||||
override fun absolute(value: String?): String =
|
||||
dependencyProcessor!!.resolve(value!!).absolutePath
|
||||
private val dependencyProcessor by lazy {
|
||||
dependencyProcessor!!.resolve(value!!).absolutePath
|
||||
|
||||
private val dependencyProcessor by lazy {
|
||||
dependenciesRoot?.let {
|
||||
DependencyProcessor(
|
||||
dependenciesRoot = File(dependenciesRoot),
|
||||
properties = this,
|
||||
archiveType = defaultArchiveTypeByHost(host)
|
||||
){ url, currentBytes, totalBytes ->
|
||||
print("\n(KonanProperties) Downloading dependency: $url (${currentBytes}/${totalBytes}). ")
|
||||
}
|
||||
archiveType = defaultArchiveTypeByHost(host),
|
||||
customProgressCallback = progressCallback
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun defaultArchiveTypeByHost(host: KonanTarget): ArchiveType = when (host) {
|
||||
KonanTarget.LINUX_X64,
|
||||
KonanTarget.MACOS_X64,
|
||||
KonanTarget.MACOS_ARM64 -> ArchiveType.TAR_GZ
|
||||
KonanTarget.LINUX_X64, KonanTarget.MACOS_X64, KonanTarget.MACOS_ARM64 -> ArchiveType.TAR_GZ
|
||||
KonanTarget.MINGW_X64 -> ArchiveType.ZIP
|
||||
else -> error("$host can't be a host platform!")
|
||||
}
|
||||
@@ -9,10 +9,11 @@ import org.jetbrains.kotlin.konan.util.InternalServer
|
||||
import java.nio.file.Path
|
||||
import org.jetbrains.kotlin.konan.properties.KonanPropertiesLoader
|
||||
import org.jetbrains.kotlin.konan.properties.Properties
|
||||
import org.jetbrains.kotlin.konan.util.ProgressCallback
|
||||
import java.nio.file.Paths
|
||||
|
||||
class MingwConfigurablesImpl(target: KonanTarget, properties: Properties, dependenciesRoot: String?) : MingwConfigurables,
|
||||
KonanPropertiesLoader(target, properties, dependenciesRoot) {
|
||||
class MingwConfigurablesImpl(target: KonanTarget, properties: Properties, dependenciesRoot: String?, progressCallback : ProgressCallback) : MingwConfigurables,
|
||||
KonanPropertiesLoader(target, properties, dependenciesRoot, progressCallback = progressCallback) {
|
||||
override val windowsKit: WindowsKit by lazy {
|
||||
when (windowsSdkPartsProvider) {
|
||||
WindowsSdkPartsProvider.InternalServer -> createCustomWindowsKitPath(Paths.get(absolute(windowsKitParts)))
|
||||
|
||||
@@ -65,9 +65,6 @@ private fun Properties.findCandidates(dependencies: List<String>): Map<String, L
|
||||
|
||||
|
||||
private val KonanPropertiesLoader.dependenciesUrl : String get() = properties.dependenciesUrl
|
||||
private val KonanPropertiesLoader.airplaneMode : Boolean get() = properties.airplaneMode
|
||||
private val KonanPropertiesLoader.downloadingAttempts : Int get() = properties.downloadingAttempts
|
||||
private val KonanPropertiesLoader.downloadingAttemptIntervalMs : Long get() = properties.downloadingAttemptIntervalMs
|
||||
|
||||
sealed class DependencySource {
|
||||
data class Local(val path: File) : DependencySource()
|
||||
|
||||
Reference in New Issue
Block a user