/* * 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 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("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( KonanTarget.MACOS_X64, whitelist = file("macos_llvm_whitelist"), blacklist = null ) { compression = Compression.GZIP } createLlvmPackingTask( KonanTarget.LINUX_X64, whitelist = file("linux_llvm_whitelist"), blacklist = file("linux_llvm_blacklist") ) { compression = Compression.GZIP } createLlvmPackingTask( KonanTarget.MINGW_X64, whitelist = file("mingw_llvm_whitelist"), blacklist = file("mingw_llvm_blacklist") ) {}