Skip to content

Commit 9bcdf1f

Browse files
ilgonmicdkrasnoff
authored andcommitted
Adopt #3
1 parent 1cb1d90 commit 9bcdf1f

File tree

7 files changed

+98
-79
lines changed

7 files changed

+98
-79
lines changed

build.gradle.kts

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,18 @@ val kotlinComposeWasmStdlibFile: Configuration by configurations.creating {
5050
}
5151
}
5252

53+
val composeWasmStaticResources: Configuration by configurations.creating {
54+
isTransitive = false
55+
isCanBeResolved = true
56+
isCanBeConsumed = false
57+
attributes {
58+
attribute(
59+
Category.CATEGORY_ATTRIBUTE,
60+
objects.categoryComposeWasmResources
61+
)
62+
}
63+
}
64+
5365
dependencies {
5466
annotationProcessor("org.springframework:spring-context-indexer")
5567
implementation("com.google.code.gson:gson")
@@ -77,6 +89,7 @@ dependencies {
7789
testImplementation(libs.kotlinx.coroutines.test)
7890

7991
kotlinComposeWasmStdlibFile(project(":cache-maker"))
92+
composeWasmStaticResources(project(":resource-server"))
8093
}
8194

8295
fun Project.generateProperties(
@@ -104,7 +117,11 @@ fun Project.generateProperties(
104117
val propertiesGenerator by tasks.registering(PropertiesGenerator::class) {
105118
dependsOn(kotlinComposeWasmStdlibFile)
106119
propertiesFile.fileValue(rootDir.resolve("src/main/resources/${propertyFile}"))
107-
hashableFile.set(kotlinComposeWasmStdlibFile.singleFile)
120+
hashableFile.fileProvider(
121+
provider {
122+
kotlinComposeWasmStdlibFile.singleFile
123+
}
124+
)
108125
generateProperties().forEach { (name, value) ->
109126
propertiesMap.put(name, value)
110127
}
@@ -113,7 +130,12 @@ val propertiesGenerator by tasks.registering(PropertiesGenerator::class) {
113130
val lambdaPropertiesGenerator by tasks.registering(PropertiesGenerator::class) {
114131
dependsOn(kotlinComposeWasmStdlibFile)
115132
propertiesFile.set(layout.buildDirectory.file("tmp/propertiesGenerator/${propertyFile}"))
116-
hashableFile.set(kotlinComposeWasmStdlibFile.singleFile)
133+
hashableFile.fileProvider(
134+
provider {
135+
kotlinComposeWasmStdlibFile.singleFile
136+
}
137+
)
138+
117139
generateProperties(lambdaPrefix).forEach { (name, value) ->
118140
propertiesMap.put(name, value)
119141
}
@@ -159,6 +181,11 @@ val buildLambda by tasks.creating(Zip::class) {
159181
}
160182
}
161183

184+
val prepareComposeWasmResources by tasks.registering(Sync::class) {
185+
from(composeWasmStaticResources)
186+
into(layout.buildDirectory.dir("compose-wasm-resources"))
187+
}
188+
162189
tasks.named<Copy>("processResources") {
163190
dependsOn(propertiesGenerator)
164191
}

buildSrc/src/main/kotlin/CategoryAttribute.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@ import org.gradle.api.attributes.Category
22
import org.gradle.api.model.ObjectFactory
33

44
val ObjectFactory.categoryComposeCache
5-
get() = named(Category::class.java, "compose-cache")
5+
get() = named(Category::class.java, "compose-cache")
6+
7+
val ObjectFactory.categoryComposeWasmResources
8+
get() = named(Category::class.java, "compose-wasm-resources")

cache-maker/Dockerfile

Lines changed: 0 additions & 20 deletions
This file was deleted.

cache-maker/build.gradle.kts

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,32 @@
1+
@file:OptIn(ExperimentalWasmDsl::class)
2+
3+
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
4+
import org.jetbrains.kotlin.gradle.targets.js.binaryen.BinaryenExec
5+
import org.jetbrains.kotlin.gradle.targets.js.binaryen.BinaryenRootEnvSpec
6+
import org.jetbrains.kotlin.gradle.targets.js.ir.JsIrBinary
7+
import org.jetbrains.kotlin.gradle.targets.js.ir.WasmBinary
8+
19
plugins {
210
kotlin("multiplatform")
311
}
412

513
kotlin {
614
wasmJs {
715
outputModuleName.set("stdlib")
8-
binaries.executable().forEach {
9-
it.linkTask.configure {
16+
binaries.executable().forEach { binary: JsIrBinary ->
17+
binary.linkTask.configure {
1018
compilerOptions.freeCompilerArgs.add("-Xir-dce=false")
1119
compilerOptions.freeCompilerArgs.add("-Xwasm-multimodule-mode=master")
1220
}
21+
22+
(binary as WasmBinary).optimizeTask.configure {
23+
inputFileProperty.fileProvider(
24+
binary.mainFile.map {
25+
val file = it.asFile
26+
file.resolveSibling("${file.nameWithoutExtension}_master.wasm")
27+
}
28+
)
29+
}
1330
}
1431
}
1532

@@ -23,28 +40,19 @@ kotlin {
2340
}
2441
}
2542

26-
val composeWasmStdlib: Provider<Directory> = layout.buildDirectory
27-
.dir("compose-wasm-stdlib-output")
28-
val composeWasmStdlibTypeInfo: Provider<RegularFile> = composeWasmStdlib
29-
.map { it.file("stdlib_master.wasm") }
30-
31-
val buildComposeWasmStdlibModule by tasks.registering(Exec::class) {
32-
33-
inputs.files(configurations.named("wasmJsRuntimeClasspath"))
34-
35-
workingDir = rootDir
36-
executable = "${project.name}/docker-build-incremental-cache.sh"
37-
38-
val outputDir = composeWasmStdlib
43+
val compileProductionExecutableKotlinWasmJsOptimize: TaskProvider<BinaryenExec> by tasks.existing(BinaryenExec::class) {
44+
}
3945

40-
inputs.file(layout.projectDirectory.file("Dockerfile"))
41-
inputs.file(layout.projectDirectory.file("docker-build-incremental-cache.sh"))
42-
outputs.dir(outputDir)
46+
val composeWasmStdlib: Provider<Directory> = compileProductionExecutableKotlinWasmJsOptimize
47+
.flatMap { it.outputDirectory.locationOnly }
48+
val composeWasmStdlibFile: Provider<RegularFile> = composeWasmStdlib
49+
.map { it.file("stdlib_master.wasm") }
4350

44-
args(lambdaPrefix, outputDir.get().asFile.normalize().absolutePath)
51+
rootProject.plugins.withType<org.jetbrains.kotlin.gradle.targets.js.binaryen.BinaryenRootPlugin> {
52+
rootProject.the<BinaryenRootEnvSpec>().version = "122"
4553
}
4654

47-
val kotlinComposeWasmStdlibTypeInfo: Configuration by configurations.creating {
55+
val kotlinComposeWasmStdlibFile: Configuration by configurations.creating {
4856
isTransitive = false
4957
isCanBeResolved = false
5058
isCanBeConsumed = true
@@ -56,7 +64,7 @@ val kotlinComposeWasmStdlibTypeInfo: Configuration by configurations.creating {
5664
}
5765
}
5866

59-
kotlinComposeWasmStdlibTypeInfo.outgoing.variants.create("stdlib") {
67+
kotlinComposeWasmStdlibFile.outgoing.variants.create("stdlib") {
6068
attributes {
6169
attribute(
6270
CacheAttribute.cacheAttribute,
@@ -65,20 +73,20 @@ kotlinComposeWasmStdlibTypeInfo.outgoing.variants.create("stdlib") {
6573
}
6674

6775
artifact(composeWasmStdlib) {
68-
builtBy(buildComposeWasmStdlibModule)
76+
builtBy(compileProductionExecutableKotlinWasmJsOptimize)
6977
}
7078
}
7179

72-
kotlinComposeWasmStdlibTypeInfo.outgoing.variants.create("typeinfo") {
80+
kotlinComposeWasmStdlibFile.outgoing.variants.create("wasm-file") {
7381
attributes {
7482
attribute(
7583
CacheAttribute.cacheAttribute,
7684
CacheAttribute.WASM
7785
)
7886
}
7987

80-
artifact(composeWasmStdlibTypeInfo) {
81-
builtBy(buildComposeWasmStdlibModule)
88+
artifact(composeWasmStdlibFile) {
89+
builtBy(compileProductionExecutableKotlinWasmJsOptimize)
8290
}
8391
}
8492

cache-maker/docker-build-incremental-cache.sh

Lines changed: 0 additions & 24 deletions
This file was deleted.

gradle/libs.versions.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
[versions]
22
kotlin = "2.2.0"
3-
kotlinWasmStdlibCompiler = "2.2.0-dev-8507"
43
kotlinIdeVersion = "1.9.20-506"
54
kotlinIdeVersionWithSuffix = "231-1.9.20-506-IJ8109.175"
65
spring-boot = "3.5.3"

resource-server/build.gradle.kts

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,11 @@ val propertiesGenerator by tasks.registering(PropertiesGenerator::class) {
7373

7474
propertiesFile.fileValue(applicationPropertiesPath)
7575

76-
val composeWasmStdlibTypeInfo: FileCollection = kotlinComposeWasmStdlibFile
76+
val composeWasmStdlibFile: FileCollection = kotlinComposeWasmStdlibFile
7777

7878
hashableFile.fileProvider(
7979
provider {
80-
composeWasmStdlibTypeInfo.singleFile
80+
composeWasmStdlibFile.singleFile
8181
}
8282
)
8383
}
@@ -89,29 +89,32 @@ tasks.withType<KotlinCompile> {
8989

9090
val skikoVersion = libs.versions.skiko
9191

92-
tasks.named<Copy>("processResources") {
92+
val prepareComposeWasmResources by tasks.registering(Sync::class) {
9393
dependsOn(kotlinComposeWasmStdlibFile)
9494
dependsOn(propertiesGenerator)
9595
val archiveOperation = project.serviceOf<ArchiveOperations>()
96+
97+
into(layout.buildDirectory.dir("tmp/prepareResources"))
98+
9699
from(resourceDependency.map {
97100
archiveOperation.zipTree(it)
98101
}) {
99-
into("com/compiler/server")
100102
rename("skiko\\.(.*)", "skiko-${skikoVersion.get()}.\$1")
103+
include("skiko.mjs", "skiko.wasm")
101104
}
102105

103106
val propertiesFile = propertiesGenerator.flatMap { it.propertiesFile }
104107

105108
from(kotlinComposeWasmStdlib) {
106-
into("com/compiler/server")
109+
include("stdlib_master.uninstantiated.mjs", "stdlib_master.wasm")
107110

108111
rename { original ->
109112
val properties = FileInputStream(propertiesFile.get().asFile).use {
110113
Properties().apply {
111114
load(it)
112115
}
113116
}
114-
val regex = Regex("stdlib_master\\.(.*)")
117+
val regex = Regex("stdlib_master\\.uninstantiated\\.(.*)")
115118
regex.find(original)?.groupValues?.get(1)?.let { extension ->
116119
"stdlib-${properties["dependencies.compose.wasm"]}.$extension"
117120
} ?: original
@@ -120,10 +123,33 @@ tasks.named<Copy>("processResources") {
120123
}
121124
}
122125

126+
tasks.named<Copy>("processResources") {
127+
dependsOn(prepareComposeWasmResources)
128+
from(prepareComposeWasmResources) {
129+
into("com/compiler/server")
130+
}
131+
}
132+
123133
tasks.withType<Test> {
124134
useJUnitPlatform()
125135
javaLauncher.set(javaToolchains.launcherFor {
126136
languageVersion.set(JavaLanguageVersion.of(17))
127137
vendor.set(JvmVendorSpec.AMAZON)
128138
})
139+
}
140+
141+
val composeWasmStaticResources: Configuration by configurations.creating {
142+
isTransitive = false
143+
isCanBeResolved = false
144+
isCanBeConsumed = true
145+
attributes {
146+
attribute(
147+
Category.CATEGORY_ATTRIBUTE,
148+
objects.categoryComposeWasmResources
149+
)
150+
}
151+
152+
outgoing.artifact(prepareComposeWasmResources) {
153+
builtBy(prepareComposeWasmResources)
154+
}
129155
}

0 commit comments

Comments
 (0)