10abdbef1c
Required for Gradle 7+ #KTI-559
123 lines
4.2 KiB
Groovy
123 lines
4.2 KiB
Groovy
/*
|
|
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
|
* that can be found in the LICENSE file.
|
|
*/
|
|
import groovy.transform.stc.ClosureParams
|
|
import groovy.transform.stc.FromString
|
|
import org.jetbrains.kotlin.konan.target.*
|
|
import static org.jetbrains.kotlin.konan.target.KonanTarget.*
|
|
import org.jetbrains.kotlin.konan.util.Named
|
|
import org.jetbrains.kotlin.konan.properties.KonanPropertiesLoader
|
|
import org.jetbrains.kotlin.konan.util.ArchiveType
|
|
import org.jetbrains.kotlin.konan.util.DependencyProcessor
|
|
|
|
import static org.jetbrains.kotlin.konan.util.VisibleNamedKt.getVisibleName
|
|
|
|
buildscript {
|
|
apply from: "$rootDir/kotlin-native/gradle/kotlinGradlePlugin.gradle"
|
|
|
|
repositories {
|
|
maven {
|
|
url = 'https://cache-redirector.jetbrains.com/jcenter'
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Downloads dependencies from the given URL into the given directory.
|
|
* The set of dependencies is determined by konanPropertiesLoader.
|
|
*/
|
|
class NativeDep extends DefaultTask {
|
|
static final String baseUrl = "https://cache-redirector.jetbrains.com/download.jetbrains.com/kotlin/native"
|
|
|
|
@Internal
|
|
KonanPropertiesLoader konanPropertiesLoader = null
|
|
|
|
@Internal
|
|
final File getBaseOutDir() {
|
|
final File res = project.rootProject.project(":kotlin-native").ext.dependenciesDir
|
|
res.mkdirs()
|
|
return res
|
|
}
|
|
|
|
@TaskAction
|
|
void downloadAndExtract() {
|
|
def downloader = new DependencyProcessor(baseOutDir, konanPropertiesLoader, baseUrl, false, ArchiveType.systemDefault, { url, currentBytes, totalBytes ->
|
|
print("\n$name Downloading dependency: $url (${currentBytes}/${totalBytes}). ")
|
|
})
|
|
downloader.showInfo = project.logger.isEnabled(LogLevel.INFO)
|
|
downloader.run()
|
|
}
|
|
}
|
|
|
|
enum DependencyKind {
|
|
LLVM( "llvm", { it.llvmHome }, { "llvmDir" } ),
|
|
LIBFFI( "libffi", { it.libffiDir } )
|
|
|
|
|
|
DependencyKind(String name,
|
|
@ClosureParams(value = FromString.class, options = "KonanPropertiesLoader") Closure<String> dirGetter,
|
|
@ClosureParams(value = FromString.class, options = "KonanTarget") Closure<String> propertyNameGetter =
|
|
{target -> "${target.visibleName}${name.capitalize()}Dir"}) {
|
|
this.name = name
|
|
this.dirGetter = dirGetter
|
|
this.propertyNameGetter = propertyNameGetter
|
|
}
|
|
|
|
private String name
|
|
private Closure<String> dirGetter // KonanProperties -> String
|
|
private Closure<String> propertyNameGetter // KonanTarget -> String
|
|
|
|
String getDirectory(KonanPropertiesLoader properties) {
|
|
return dirGetter(properties)
|
|
}
|
|
|
|
String getPropertyName(KonanTarget target) {
|
|
return propertyNameGetter(target)
|
|
}
|
|
|
|
String toString() { return name }
|
|
}
|
|
|
|
def platformManager = rootProject.project(":kotlin-native").ext.platformManager
|
|
|
|
platformManager.enabled.each { target ->
|
|
def loader = platformManager.loader(target)
|
|
|
|
task "${target}Dependencies"(type: NativeDep) {
|
|
konanPropertiesLoader = loader
|
|
}
|
|
|
|
// Also resolves all dependencies:
|
|
final DependencyProcessor dependencyProcessor = new DependencyProcessor(
|
|
rootProject.project(":kotlin-native").ext.dependenciesDir,
|
|
loader.properties,
|
|
loader.dependencies,
|
|
NativeDep.baseUrl,
|
|
false,
|
|
ArchiveType.systemDefault,
|
|
{ url, currentBytes, totalBytes ->
|
|
print("\n(no-task) Downloading dependency: $url (${currentBytes}/${totalBytes}). ")
|
|
})
|
|
|
|
DependencyKind.values().each { kind ->
|
|
def dir = kind.getDirectory(loader)
|
|
if (dir != null) {
|
|
String path = dependencyProcessor.resolve(dir).canonicalPath
|
|
rootProject.project(":kotlin-native").ext.set(kind.getPropertyName(target), path)
|
|
}
|
|
}
|
|
}
|
|
|
|
task update {
|
|
dependsOn tasks.withType(NativeDep)
|
|
mustRunAfter(tasks.withType(NativeDep))
|
|
}
|
|
rootProject.project(":kotlin-native").ext.nativeDependencies = tasks.withType(NativeDep)
|
|
|
|
task rmDotKonan(type: Delete) {
|
|
def dir = System.getenv("KONAN_DATA_DIR") ?: "${System.getProperty("user.home")}/.konan"
|
|
delete dir
|
|
}
|
|
|