cc631f1f99
This patch uses a path to a jar containing compiler classes to determine the distribution path instead of relying on the konan.home system property. However this property still may be used to specify the distribution path e.g. when the distribution isn't fully built and the compiler is executed from classes located in a build directory.
90 lines
3.0 KiB
Kotlin
90 lines
3.0 KiB
Kotlin
/*
|
|
* Copyright 2010-2020 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 org.jetbrains.kotlin.konan.properties.KonanPropertiesLoader
|
|
import org.jetbrains.kotlin.konan.util.DependencyProcessor
|
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
|
import org.jetbrains.kotlin.konan.target.Distribution
|
|
import org.jetbrains.kotlin.konan.target.presetName
|
|
|
|
/**
|
|
* Creates an archive with LLVM distribution without files
|
|
* that are not required for Kotlin/Native.
|
|
*
|
|
* For example, it excludes binaries that are part of LLVM testing infrastructure.
|
|
*/
|
|
inline fun <reified T: AbstractArchiveTask> createLlvmPackingTask(
|
|
host: KonanTarget,
|
|
whitelist: File?,
|
|
blacklist: File?,
|
|
crossinline additionalConfiguration: T.() -> Unit
|
|
) {
|
|
val distribution = Distribution(rootProject.projectDir.absolutePath)
|
|
val reducedLlvmAppendix = distribution.properties
|
|
.getProperty("reducedLlvmAppendix")
|
|
val propertiesLoader = object : KonanPropertiesLoader(
|
|
host = host,
|
|
target = host,
|
|
properties = distribution.properties,
|
|
baseDir = DependencyProcessor.defaultDependenciesRoot.absolutePath
|
|
) {}
|
|
|
|
val hostName = host.presetName.capitalize()
|
|
val downloadTaskName = "downloadLlvmFor$hostName"
|
|
|
|
tasks.create(downloadTaskName) {
|
|
doFirst {
|
|
propertiesLoader.downloadDependencies()
|
|
}
|
|
}
|
|
tasks.create<T>("packLlvmFor$hostName") {
|
|
dependsOn(downloadTaskName)
|
|
additionalConfiguration()
|
|
|
|
description = "Packs LLVM dependency for $hostName into archive"
|
|
group = "Distribution packing"
|
|
|
|
// > When both inclusion and exclusion are used,
|
|
// > only files/directories that match at least one of the include patterns
|
|
// > and don't match any of the exclude patterns are used.
|
|
//
|
|
// See: https://ant.apache.org/manual/dirtasks.html
|
|
whitelist?.let {
|
|
it.readLines()
|
|
.filter { !it.startsWith("#") && it.isNotBlank() }
|
|
.forEach(this::include)
|
|
}
|
|
blacklist?.let {
|
|
it.readLines()
|
|
.filter { !it.startsWith("#") && it.isNotBlank() }
|
|
.forEach(this::exclude)
|
|
}
|
|
from(propertiesLoader.absoluteLlvmHome)
|
|
destinationDirectory.set(buildDir.resolve("artifacts"))
|
|
archiveBaseName.set(propertiesLoader.llvmHome)
|
|
archiveAppendix.set(reducedLlvmAppendix)
|
|
}
|
|
}
|
|
|
|
createLlvmPackingTask<Tar>(
|
|
KonanTarget.MACOS_X64,
|
|
whitelist = file("macos_llvm_whitelist"),
|
|
blacklist = null
|
|
) {
|
|
compression = Compression.GZIP
|
|
}
|
|
|
|
createLlvmPackingTask<Tar>(
|
|
KonanTarget.LINUX_X64,
|
|
whitelist = file("linux_llvm_whitelist"),
|
|
blacklist = file("linux_llvm_blacklist")
|
|
) {
|
|
compression = Compression.GZIP
|
|
}
|
|
|
|
createLlvmPackingTask<Zip>(
|
|
KonanTarget.MINGW_X64,
|
|
whitelist = file("mingw_llvm_whitelist"),
|
|
blacklist = file("mingw_llvm_blacklist")
|
|
) {} |