[K/N][build] Rewrite endorsed libraries build to kts

This commit is contained in:
Pavel Punegov
2022-02-09 18:04:10 +03:00
parent 361d922119
commit 423e5a6530
3 changed files with 97 additions and 119 deletions
@@ -1,109 +0,0 @@
import org.jetbrains.kotlin.UtilsKt
import org.jetbrains.kotlin.gradle.plugin.konan.tasks.KonanCacheTask
import org.jetbrains.kotlin.EndorsedLibraryInfo
import org.jetbrains.kotlin.UtilsKt
import org.jetbrains.kotlin.konan.target.HostManager
apply plugin: 'konan'
buildscript {
repositories {
if (UtilsKt.getCacheRedirectorEnabled(project))
maven { url 'https://cache-redirector.jetbrains.com/jcenter' }
else
jcenter()
}
}
if (HostManager.host.name == "macos_arm64") {
JvmToolchain.configureJvmToolchain(project, JdkMajorVersion.JDK_17)
}
ext {
endorsedLibraries = [
new EndorsedLibraryInfo(project('kotlinx.cli'), "org.jetbrains.kotlinx.kotlinx-cli")
].collectEntries { [it.project, it] }
}
Collection<EndorsedLibraryInfo> endorsedLibrariesList = ext.endorsedLibraries.values()
tasks.named("clean") {
doFirst {
delete buildDir
}
}
task jvmJar {
endorsedLibrariesList.each { library ->
dependsOn "$library.projectName:jvmJar"
}
}
// Build all default libraries.
targetList.each { target ->
task("${target}EndorsedLibraries") {
endorsedLibrariesList.each { library ->
dependsOn task("${target}${library.name}EndorsedLibraries", type: Copy) {
dependsOn "$library.projectName:${target}${library.name}"
destinationDir project.file("${project.buildDir}/${library.name}")
from(library.project.file("build/${target}${library.name}")) {
include('**')
eachFile {
if (name == 'manifest') {
def existingManifest = file("$destinationDir/$path")
if (existingManifest.exists()) {
UtilsKt.mergeManifestsByTargets(project, file, existingManifest)
exclude()
}
}
}
}
}
}
}
if (target in cacheableTargetNames) {
def cacheTask = task("${target}Cache", type: Copy) {
destinationDir project.file("${project.buildDir}/cache/$target")
endorsedLibrariesList.each { library ->
from(library.project.file("build/cache/$target")) {
include('**')
}
}
}
endorsedLibrariesList.each { library ->
cacheTask.dependsOn "${library.projectName}:${target}${library.taskName}Cache"
}
}
}
endorsedLibrariesList.each { library ->
task("${library.taskName}CommonSources", type: Zip) {
destinationDirectory = file("${UtilsKt.getKotlinNativeDist(project)}/sources")
archiveFileName = "${library.name}-common-sources.zip"
includeEmptyDirs = false
include('**/*.kt')
from(library.project.file('src/main/kotlin'))
}
task("${library.taskName}NativeSources", type: Zip) {
destinationDirectory = file("${UtilsKt.getKotlinNativeDist(project)}/sources")
archiveFileName = "${library.name}-native-sources.zip"
includeEmptyDirs = false
include('**/*.kt')
from(library.project.file('src/main/kotlin-native'))
}
}
task endorsedLibsSources {
endorsedLibrariesList.each { library ->
dependsOn "${library.taskName}CommonSources"
dependsOn "${library.taskName}NativeSources"
}
}
@@ -0,0 +1,93 @@
import org.jetbrains.kotlin.EndorsedLibraryInfo
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.kotlinNativeDist
import org.jetbrains.kotlin.mergeManifestsByTargets
if (HostManager.host == KonanTarget.MACOS_ARM64) {
project.configureJvmToolchain(JdkMajorVersion.JDK_17)
}
val endorsedLibraries = listOf(EndorsedLibraryInfo(project("kotlinx.cli"), "org.jetbrains.kotlinx.kotlinx-cli"))
extra["endorsedLibraries"] = endorsedLibraries.associateBy { it.project }
tasks.register("jvmJar") {
endorsedLibraries.forEach { library ->
dependsOn("${library.projectName}:jvmJar")
}
}
val targetList: List<String> by project
val cacheableTargetNames: List<String> by project
// Build all default libraries.
targetList.forEach { target ->
tasks.create("${target}EndorsedLibraries") {
endorsedLibraries.forEach { library ->
dependsOn(tasks.register("${target}${library.name}EndorsedLibraries", Copy::class.java) {
dependsOn("${library.projectName}:${target}${library.taskName}")
destinationDir = project.file("${project.buildDir}/${library.name}")
from(library.project.file("build/${target}${library.name}")) {
include("**")
eachFile {
if (name == "manifest") {
val existingManifest = file("$destinationDir/$path")
if (existingManifest.exists()) {
project.mergeManifestsByTargets(file, existingManifest)
exclude()
}
}
}
}
})
}
}
if (target in cacheableTargetNames) {
val cacheTask = tasks.register("${target}Cache", Copy::class.java) {
destinationDir = project.file("${project.buildDir}/cache/$target")
endorsedLibraries.forEach { library ->
from(library.project.file("build/cache/$target")) {
include("**")
}
}
}
endorsedLibraries.forEach { library ->
cacheTask.configure {
dependsOn("${library.projectName}:${target}${library.taskName}Cache")
}
}
}
}
endorsedLibraries.forEach { library ->
tasks.register("${library.taskName}CommonSources", Zip::class.java) {
destinationDirectory.set(file("${project.kotlinNativeDist}/sources"))
archiveFileName.set("${library.name}-common-sources.zip")
includeEmptyDirs = false
include("**/*.kt")
from(library.project.file("src/main/kotlin"))
}
tasks.register("${library.taskName}NativeSources", Zip::class.java) {
destinationDirectory.set(file("${project.kotlinNativeDist}/sources"))
archiveFileName.set("${library.name}-native-sources.zip")
includeEmptyDirs = false
include("**/*.kt")
from(library.project.file("src/main/kotlin-native"))
}
}
tasks.register("endorsedLibsSources") {
endorsedLibraries.forEach { library ->
dependsOn("${library.taskName}CommonSources")
dependsOn("${library.taskName}NativeSources")
}
}
@@ -61,7 +61,6 @@ val targetList: List<String> by project
val endorsedLibraries: Map<Project, EndorsedLibraryInfo> by project(":kotlin-native:endorsedLibraries").ext
val library = endorsedLibraries[project] ?: throw IllegalStateException("Library for $project is not set")
lateinit var buildTask: TaskProvider<Task>
konanArtifacts {
library(library.name) {
@@ -87,12 +86,8 @@ konanArtifacts {
commonSrcDir(commonSrc)
srcDir(nativeSrc)
buildTask = project.findKonanBuildTask(library.name, project.platformManager.hostPlatform.target).apply {
configure {
dependsOn(":kotlin-native:distCompiler")
dependsOn(":kotlin-native:distRuntime")
}
}
dependsOn(":kotlin-native:distCompiler")
dependsOn(":kotlin-native:distRuntime")
}
}
@@ -100,9 +95,8 @@ val hostName: String by project
val cacheableTargetNames: List<String> by project
targetList.forEach { targetName ->
val copyTask = tasks.register("${targetName}${library.name}", Copy::class.java) {
require(::buildTask.isInitialized)
dependsOn(buildTask)
val copyTask = tasks.register("${targetName}${library.taskName}", Copy::class.java) {
dependsOn(project.findKonanBuildTask(library.name, project.platformManager.hostPlatform.target))
destinationDir = buildDir.resolve("$targetName${library.name}")