Files
kotlin-fork/prepare/ide-plugin-dependencies/kotlin-backend-native-for-ide/build.gradle.kts
T
Alexander Shabalin 24ede14e37 [K/N] Convert :kotlin-native:backend.native buildscript to kts
Use folder structure from the rest of the project and build it by
the bootstrap compiler.
2024-03-05 21:47:43 +00:00

107 lines
3.8 KiB
Kotlin

import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.kotlin.dsl.support.serviceOf
plugins {
kotlin("jvm")
}
idePluginDependency {
if (!kotlinBuildProperties.isKotlinNativeEnabled) return@idePluginDependency
description = "Stripped down variant of Kotlin Backend Native for IDE (AppCode KMM)"
val jarBaseName = property("archivesBaseName") as String
val proguardLibraryJars by configurations.creating {
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_API))
}
}
val embedded by configurations
val backendNativeSourcesConfiguration by configurations.creating {
isVisible = false
isCanBeResolved = true
isCanBeConsumed = false
attributes {
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION))
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named(DocsType.SOURCES))
}
}
dependencies {
embedded(project(":kotlin-native:backend.native")) { isTransitive = false }
embedded(project(":compiler:ir.serialization.native")) { isTransitive = false }
embedded(project(":compiler:fir:native")) { isTransitive = false }
proguardLibraryJars(project(":native:kotlin-native-utils")) { isTransitive = false }
proguardLibraryJars(project(":kotlin-stdlib"))
proguardLibraryJars(commonDependency("org.jetbrains.kotlin:kotlin-reflect"))
proguardLibraryJars(project(":native:cli-native"))
backendNativeSourcesConfiguration(project(":kotlin-native:backend.native"))
backendNativeSourcesConfiguration(project(":native:cli-native"))
}
noDefaultJar()
val shadowJar by task<ShadowJar> {
configurations = listOf(embedded)
duplicatesStrategy = DuplicatesStrategy.FAIL
destinationDirectory.set(layout.buildDirectory.dir("libs"))
archiveClassifier.set("shadow")
}
val proguard by task<CacheableProguardTask> {
dependsOn(shadowJar)
configuration(fileFrom(projectDir, "backend-native-for-ide.pro"))
injars(mapOf("filter" to "!META-INF/versions/**"), shadowJar.get().outputs.files)
outjars(layout.buildDirectory.file("libs/$jarBaseName-$version-after-proguard.jar"))
javaLauncher.set(project.getToolchainLauncherFor(JdkMajorVersion.JDK_1_8))
libraryjars(mapOf("filter" to "!META-INF/versions/**"), proguardLibraryJars)
libraryjars(
files(
javaLauncher.map {
firstFromJavaHomeThatExists(
"jre/lib/rt.jar",
"../Classes/classes.jar",
jdkHome = it.metadata.installationPath.asFile
)!!
},
javaLauncher.map {
firstFromJavaHomeThatExists(
"jre/lib/jsse.jar",
"../Classes/jsse.jar",
jdkHome = it.metadata.installationPath.asFile
)!!
},
javaLauncher.map {
org.gradle.internal.jvm.Jvm.forHome(it.metadata.installationPath.asFile).toolsJar!!
}
)
)
}
val resultJar by task<Jar> {
dependsOn(proguard)
manifest.attributes.apply {
put("Implementation-Vendor", "JetBrains")
put("Implementation-Title", jarBaseName)
put("Implementation-Version", version)
}
from {
zipTree(proguard.get().singleOutputFile())
}
}
setPublishableArtifact(resultJar)
publish()
sourcesJar {
val archiveOperations = serviceOf<ArchiveOperations>()
from(backendNativeSourcesConfiguration.map { archiveOperations.zipTree(it) })
dependsOn(backendNativeSourcesConfiguration)
}
}