[stdlib-mpp] Publish wasm artifacts through variants of stdlib KT-60909
This commit is contained in:
committed by
Space Team
parent
73b4a81663
commit
9640e32483
@@ -325,8 +325,6 @@ extra["compilerArtifactsForIde"] = listOfNotNull(
|
|||||||
":plugins:parcelize:parcelize-runtime",
|
":plugins:parcelize:parcelize-runtime",
|
||||||
":kotlin-stdlib-common",
|
":kotlin-stdlib-common",
|
||||||
":kotlin-stdlib",
|
":kotlin-stdlib",
|
||||||
":kotlin-stdlib-wasm-js",
|
|
||||||
":kotlin-stdlib-wasm-wasi",
|
|
||||||
":kotlin-test",
|
":kotlin-test",
|
||||||
":kotlin-daemon",
|
":kotlin-daemon",
|
||||||
":kotlin-compiler",
|
":kotlin-compiler",
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import org.gradle.jvm.tasks.Jar
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetAttribute
|
||||||
import org.jetbrains.kotlin.gradle.tasks.UsesKotlinJavaToolchain
|
import org.jetbrains.kotlin.gradle.tasks.UsesKotlinJavaToolchain
|
||||||
import plugins.configureDefaultPublishing
|
import plugins.configureDefaultPublishing
|
||||||
import plugins.configureKotlinPomAttributes
|
import plugins.configureKotlinPomAttributes
|
||||||
@@ -23,9 +24,20 @@ description = "Kotlin Standard Library"
|
|||||||
|
|
||||||
configureJvmToolchain(JdkMajorVersion.JDK_1_8)
|
configureJvmToolchain(JdkMajorVersion.JDK_1_8)
|
||||||
|
|
||||||
val configurationBuiltins = configurations.create("builtins") {
|
fun resolvingConfiguration(name: String, configure: Action<Configuration> = Action {}) =
|
||||||
isCanBeResolved = true
|
configurations.create(name) {
|
||||||
isCanBeConsumed = false
|
isCanBeResolved = true
|
||||||
|
isCanBeConsumed = false
|
||||||
|
configure(this)
|
||||||
|
}
|
||||||
|
fun outgoingConfiguration(name: String, configure: Action<Configuration> = Action {}) =
|
||||||
|
configurations.create(name) {
|
||||||
|
isCanBeResolved = false
|
||||||
|
isCanBeConsumed = true
|
||||||
|
configure(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
val configurationBuiltins = resolvingConfiguration("builtins") {
|
||||||
attributes.attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, project.objects.named(LibraryElements.JAR))
|
attributes.attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, project.objects.named(LibraryElements.JAR))
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
@@ -776,6 +788,49 @@ tasks {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// republishing artifacts from kotlin-stdlib-wasm-* projects
|
||||||
|
// TODO: replace with wasm targets compilation in this project
|
||||||
|
fun wasmOutgoingConfigurations(target: KotlinWasmTargetAttribute) {
|
||||||
|
val targetName = target.toString().replaceFirstChar { it.uppercase() }
|
||||||
|
val klib = resolvingConfiguration("wasm${targetName}Klib")
|
||||||
|
val sources = resolvingConfiguration("wasm${targetName}Sources")
|
||||||
|
dependencies {
|
||||||
|
klib(project(":kotlin-stdlib-wasm-$target", configuration = "wasmRuntimeElements"))
|
||||||
|
sources(project(":kotlin-stdlib-wasm-$target", configuration = "wasmSourcesElements"))
|
||||||
|
}
|
||||||
|
listOf(KotlinUsages.KOTLIN_API, KotlinUsages.KOTLIN_RUNTIME).map { usage ->
|
||||||
|
val name = usage.substringAfter("kotlin-")
|
||||||
|
val configuration = outgoingConfiguration("wasm${targetName}${name.replaceFirstChar { it.uppercase() }}Elements") {
|
||||||
|
attributes {
|
||||||
|
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.LIBRARY))
|
||||||
|
attribute(TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE, objects.named("non-jvm"))
|
||||||
|
attribute(Usage.USAGE_ATTRIBUTE, objects.named(usage))
|
||||||
|
attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm)
|
||||||
|
attribute(KotlinWasmTargetAttribute.wasmTargetAttribute, target)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
artifacts.add(configuration.name, provider { klib.singleFile }) {
|
||||||
|
builtBy(klib)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val outSources = outgoingConfiguration("wasm${targetName}SourcesElements") {
|
||||||
|
attributes {
|
||||||
|
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION))
|
||||||
|
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named(DocsType.SOURCES))
|
||||||
|
attribute(TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE, objects.named("non-jvm"))
|
||||||
|
attribute(Usage.USAGE_ATTRIBUTE, objects.named(KotlinUsages.KOTLIN_RUNTIME))
|
||||||
|
attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm)
|
||||||
|
attribute(KotlinWasmTargetAttribute.wasmTargetAttribute, target)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
artifacts.add(outSources.name, provider { sources.singleFile }) {
|
||||||
|
builtBy(sources)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
wasmOutgoingConfigurations(KotlinWasmTargetAttribute.js)
|
||||||
|
wasmOutgoingConfigurations(KotlinWasmTargetAttribute.wasi)
|
||||||
|
|
||||||
|
|
||||||
// region ==== Publishing ====
|
// region ==== Publishing ====
|
||||||
|
|
||||||
@@ -845,24 +900,6 @@ publishing {
|
|||||||
attribute(KotlinPlatformType.attribute, KotlinPlatformType.native)
|
attribute(KotlinPlatformType.attribute, KotlinPlatformType.native)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// empty variant for wasm
|
|
||||||
// TODO: replace with wasm target
|
|
||||||
variant("wasmApiElements") {
|
|
||||||
attributes {
|
|
||||||
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.LIBRARY))
|
|
||||||
attribute(TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE, objects.named("non-jvm"))
|
|
||||||
attribute(Usage.USAGE_ATTRIBUTE, objects.named(KotlinUsages.KOTLIN_API))
|
|
||||||
attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
variant("wasmRuntimeElements") {
|
|
||||||
attributes {
|
|
||||||
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.LIBRARY))
|
|
||||||
attribute(TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE, objects.named("non-jvm"))
|
|
||||||
attribute(Usage.USAGE_ATTRIBUTE, objects.named(KotlinUsages.KOTLIN_RUNTIME))
|
|
||||||
attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// we cannot publish legacy common artifact with metadata in kotlin-stdlib-common
|
// we cannot publish legacy common artifact with metadata in kotlin-stdlib-common
|
||||||
@@ -888,8 +925,27 @@ publishing {
|
|||||||
variant("jsSourcesElements")
|
variant("jsSourcesElements")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val wasmJs = module("wasmJsModule") {
|
||||||
|
mavenPublication {
|
||||||
|
artifactId = "$artifactBaseName-wasm-js"
|
||||||
|
configureKotlinPomAttributes(project, "Kotlin Standard Library for experimental WebAssembly JS platform", packaging = "klib")
|
||||||
|
}
|
||||||
|
variant("wasmJsApiElements")
|
||||||
|
variant("wasmJsRuntimeElements")
|
||||||
|
variant("wasmJsSourcesElements")
|
||||||
|
}
|
||||||
|
val wasmWasi = module("wasmWasiModule") {
|
||||||
|
mavenPublication {
|
||||||
|
artifactId = "$artifactBaseName-wasm-wasi"
|
||||||
|
configureKotlinPomAttributes(project, "Kotlin Standard Library for experimental WebAssembly WASI platform", packaging = "klib")
|
||||||
|
}
|
||||||
|
variant("wasmWasiApiElements")
|
||||||
|
variant("wasmWasiRuntimeElements")
|
||||||
|
variant("wasmWasiSourcesElements")
|
||||||
|
}
|
||||||
|
|
||||||
// Makes all variants from accompanying artifacts visible through `available-at`
|
// Makes all variants from accompanying artifacts visible through `available-at`
|
||||||
rootModule.include(js)
|
rootModule.include(js, wasmJs, wasmWasi)
|
||||||
}
|
}
|
||||||
|
|
||||||
publications {
|
publications {
|
||||||
@@ -897,6 +953,13 @@ publishing {
|
|||||||
val jsModule by existing(MavenPublication::class)
|
val jsModule by existing(MavenPublication::class)
|
||||||
configureSbom("Main", "kotlin-stdlib", setOf("jvmRuntimeClasspath"), rootModule)
|
configureSbom("Main", "kotlin-stdlib", setOf("jvmRuntimeClasspath"), rootModule)
|
||||||
configureSbom("Js", "kotlin-stdlib-js", setOf("jsRuntimeClasspath"), jsModule)
|
configureSbom("Js", "kotlin-stdlib-js", setOf("jsRuntimeClasspath"), jsModule)
|
||||||
|
|
||||||
|
val wasmJsModule by existing(MavenPublication::class)
|
||||||
|
val wasmWasiModule by existing(MavenPublication::class)
|
||||||
|
// an arbitrary empty classpath configuration is used for the following sboms
|
||||||
|
// TODO: replace with classpath configurations of the corresponding target compilations when they are migrated here (though empty as well)
|
||||||
|
configureSbom("Wasm-Js", "kotlin-stdlib-wasm-js", setOf("metadataCompileClasspath"), wasmJsModule)
|
||||||
|
configureSbom("Wasm-Wasi", "kotlin-stdlib-wasm-wasi", setOf("metadataCompileClasspath"), wasmWasiModule)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,30 @@
|
|||||||
"sourceSet": [
|
"sourceSet": [
|
||||||
"commonMain"
|
"commonMain"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wasmJsApiElements",
|
||||||
|
"sourceSet": [
|
||||||
|
"commonMain"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wasmJsRuntimeElements",
|
||||||
|
"sourceSet": [
|
||||||
|
"commonMain"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wasmWasiApiElements",
|
||||||
|
"sourceSet": [
|
||||||
|
"commonMain"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wasmWasiRuntimeElements",
|
||||||
|
"sourceSet": [
|
||||||
|
"commonMain"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"sourceSets": [
|
"sourceSets": [
|
||||||
|
|||||||
@@ -23,25 +23,3 @@ configureWasmStdLib(
|
|||||||
) { extensionBody ->
|
) { extensionBody ->
|
||||||
kotlin(extensionBody)
|
kotlin(extensionBody)
|
||||||
}
|
}
|
||||||
|
|
||||||
afterEvaluate {
|
|
||||||
// cleanup default publications
|
|
||||||
// TODO: remove after mpp plugin allows avoiding their creation at all, KT-29273
|
|
||||||
publishing {
|
|
||||||
publications.removeAll { it.name != "Main" }
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.withType<AbstractPublishToMaven> {
|
|
||||||
if (publication.name != "Main") this.enabled = false
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.named("publish") {
|
|
||||||
doFirst {
|
|
||||||
publishing.publications {
|
|
||||||
if (singleOrNull()?.name != "Main") {
|
|
||||||
throw GradleException("kotlin-stdlib-wasm should have only one publication, found $size: ${joinToString { it.name }}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -21,25 +21,3 @@ configureWasmStdLib(
|
|||||||
) { extensionBody ->
|
) { extensionBody ->
|
||||||
kotlin(extensionBody)
|
kotlin(extensionBody)
|
||||||
}
|
}
|
||||||
|
|
||||||
afterEvaluate {
|
|
||||||
// cleanup default publications
|
|
||||||
// TODO: remove after mpp plugin allows avoiding their creation at all, KT-29273
|
|
||||||
publishing {
|
|
||||||
publications.removeAll { it.name != "Main" }
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.withType<AbstractPublishToMaven> {
|
|
||||||
if (publication.name != "Main") this.enabled = false
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.named("publish") {
|
|
||||||
doFirst {
|
|
||||||
publishing.publications {
|
|
||||||
if (singleOrNull()?.name != "Main") {
|
|
||||||
throw GradleException("kotlin-stdlib-wasm should have only one publication, found $size: ${joinToString { it.name }}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+5
@@ -1,6 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
|
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<!-- This module was also published with a richer model, Gradle metadata, -->
|
||||||
|
<!-- which should be used instead. Do not delete the following line which -->
|
||||||
|
<!-- is to indicate to Gradle or any Gradle module metadata file consumer -->
|
||||||
|
<!-- that they should prefer consuming it instead. -->
|
||||||
|
<!-- do_not_remove: published-with-gradle-metadata -->
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.jetbrains.kotlin</groupId>
|
<groupId>org.jetbrains.kotlin</groupId>
|
||||||
<artifactId>kotlin-stdlib-wasm-js</artifactId>
|
<artifactId>kotlin-stdlib-wasm-js</artifactId>
|
||||||
|
|||||||
+5
@@ -1,6 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
|
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<!-- This module was also published with a richer model, Gradle metadata, -->
|
||||||
|
<!-- which should be used instead. Do not delete the following line which -->
|
||||||
|
<!-- is to indicate to Gradle or any Gradle module metadata file consumer -->
|
||||||
|
<!-- that they should prefer consuming it instead. -->
|
||||||
|
<!-- do_not_remove: published-with-gradle-metadata -->
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.jetbrains.kotlin</groupId>
|
<groupId>org.jetbrains.kotlin</groupId>
|
||||||
<artifactId>kotlin-stdlib-wasm-wasi</artifactId>
|
<artifactId>kotlin-stdlib-wasm-wasi</artifactId>
|
||||||
|
|||||||
@@ -64,8 +64,6 @@ val kotlinGradlePluginAndItsRequired = arrayOf(
|
|||||||
":kotlin-stdlib",
|
":kotlin-stdlib",
|
||||||
":kotlin-stdlib-jdk7",
|
":kotlin-stdlib-jdk7",
|
||||||
":kotlin-stdlib-jdk8",
|
":kotlin-stdlib-jdk8",
|
||||||
":kotlin-stdlib-wasm-js",
|
|
||||||
":kotlin-stdlib-wasm-wasi",
|
|
||||||
":kotlin-dom-api-compat",
|
":kotlin-dom-api-compat",
|
||||||
":examples:annotation-processor-example",
|
":examples:annotation-processor-example",
|
||||||
":kotlin-assignment-compiler-plugin.embeddable",
|
":kotlin-assignment-compiler-plugin.embeddable",
|
||||||
|
|||||||
@@ -160,19 +160,4 @@ fun Project.configureWasmStdLib(
|
|||||||
tasks.named("compileTestDevelopmentExecutableKotlinWasm", KotlinJsIrLink::class.java) {
|
tasks.named("compileTestDevelopmentExecutableKotlinWasm", KotlinJsIrLink::class.java) {
|
||||||
kotlinOptions.freeCompilerArgs += listOf("-Xwasm-enable-array-range-checks")
|
kotlinOptions.freeCompilerArgs += listOf("-Xwasm-enable-array-range-checks")
|
||||||
}
|
}
|
||||||
|
|
||||||
val runtimeElements = configurations.create("runtimeElements") { }
|
|
||||||
|
|
||||||
configurations.create("apiElements") { }
|
|
||||||
|
|
||||||
publish(sbom = false) {
|
|
||||||
pom.packaging = "klib"
|
|
||||||
artifact(tasks.named("wasmJar")) {
|
|
||||||
extension = "klib"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
configureSbom(
|
|
||||||
gradleConfigurations = setOf(runtimeElements.name)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user