Skip to content

Commit df05ac0

Browse files
committed
Fix web
1 parent 5ec48bb commit df05ac0

File tree

4 files changed

+84
-152
lines changed

4 files changed

+84
-152
lines changed

buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt

Lines changed: 84 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@ import org.gradle.api.Project
3434
import org.gradle.api.artifacts.Configuration
3535
import org.gradle.api.configuration.BuildFeatures
3636
import org.gradle.api.plugins.ExtensionAware
37+
import org.gradle.api.tasks.Copy
3738
import org.gradle.api.tasks.PathSensitivity
3839
import org.gradle.api.tasks.testing.Test
40+
import org.gradle.kotlin.dsl.dependencies
3941
import org.gradle.kotlin.dsl.the
4042
import org.gradle.kotlin.dsl.withType
4143
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
@@ -65,6 +67,7 @@ import org.jetbrains.kotlin.gradle.targets.wasm.yarn.WasmYarnPlugin
6567
import org.jetbrains.kotlin.gradle.targets.wasm.yarn.WasmYarnRootEnvSpec
6668
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
6769
import org.jetbrains.kotlin.konan.target.LinkerOutputKind
70+
import org.tomlj.Toml
6871

6972
/**
7073
* [AndroidXMultiplatformExtension] is an extension that wraps specific functionality of the Kotlin
@@ -722,6 +725,27 @@ abstract class AndroidXMultiplatformExtension(val project: Project) {
722725
block = block,
723726
)
724727

728+
// TODO(buildSrc) web configuration changed temporary
729+
private val toml = Toml.parse(
730+
project.rootProject.projectDir.resolve("gradle/libs.versions.toml").toPath()
731+
)
732+
private val skikoVersion = toml.getTable("versions")!!.getString("skiko")!!
733+
private val skikoWasm = project.configurations.findByName("skikoWasm")
734+
?: project.configurations.create("skikoWasm")
735+
736+
private fun KotlinJsTest.passTestFlagsToEnvironment() {
737+
listOf(
738+
"jetbrains.androidx.web.tests.enableChrome",
739+
"jetbrains.androidx.web.tests.enableChromium",
740+
"jetbrains.androidx.web.tests.enableFirefox",
741+
"jetbrains.androidx.web.tests.enableSafari",
742+
).forEach { propertyName ->
743+
if (project.findProperty(propertyName)?.toString()?.toBoolean() == true) {
744+
environment(propertyName, "1")
745+
}
746+
}
747+
}
748+
725749
private fun <T> Project.configureWebTarget(
726750
platform: PlatformIdentifier,
727751
isEnabled: Boolean,
@@ -731,13 +755,15 @@ abstract class AndroidXMultiplatformExtension(val project: Project) {
731755
if (buildFeatures.isIsolatedProjectsEnabled()) return null
732756
supportedPlatforms.add(platform)
733757
return if (isEnabled) {
734-
createTarget {
758+
val target = createTarget {
735759
block?.execute(this)
736760
binaries.library()
737761
browser {
738762
testTask {
763+
// We need to set up at least one browser here due to kotlin tooling limitations
764+
// Actual browser configuration is set in mpp/karma.config.d/js/config.js
765+
it.passTestFlagsToEnvironment()
739766
it.useKarma {
740-
// TODO(buildSrc) temporary
741767
useChrome()
742768
useFirefox()
743769
useSafari()
@@ -753,17 +779,63 @@ abstract class AndroidXMultiplatformExtension(val project: Project) {
753779
}
754780
}
755781
}
756-
// Do not place the config functions below before the browser DSL as the
757-
// settings will be overridden
758-
configureBinaryen()
759-
configureDefaultIncrementalSyncTask()
760-
configureKotlinJsTests()
761-
configureNode()
762-
763-
// For KotlinWasm/Js, versions of toolchain and stdlib need to be the same:
764-
// https://youtrack.jetbrains.com/issue/KT-71032
765-
configurePinnedKotlinLibraries(platform)
766782
}
783+
784+
if (platform == PlatformIdentifier.JS) {
785+
val resourcesDir = project.layout.buildDirectory.asFile.get().resolve("resources/skiko-js")
786+
787+
// Below code helps configure the tests for k/wasm targets
788+
project.dependencies {
789+
skikoWasm("org.jetbrains.skiko:skiko-js-wasm-runtime:${skikoVersion}")
790+
}
791+
792+
val fetchSkikoWasmRuntime = project.tasks.register("fetchSkikoJsWasmRuntime", Copy::class.java) {
793+
it.destinationDir = project.file(resourcesDir)
794+
it.from(skikoWasm.map { artifact ->
795+
project.zipTree(artifact)
796+
.matching { pattern ->
797+
pattern.include("skiko.wasm", "skiko.mjs", "js-reexport-symbols.mjs")
798+
}
799+
})
800+
}
801+
802+
project.tasks.getByName("jsTestProcessResources").apply {
803+
dependsOn(fetchSkikoWasmRuntime)
804+
}
805+
806+
kotlinExtension.sourceSets.getByName("jsTest").also {
807+
it.resources.setSrcDirs(it.resources.srcDirs)
808+
it.resources.srcDirs(fetchSkikoWasmRuntime.map { it.destinationDir })
809+
}
810+
} else {
811+
val resourcesDir = project.layout.buildDirectory.asFile.get().resolve("resources/skiko-wasm")
812+
813+
// Below code helps configure the tests for k/wasm targets
814+
project.dependencies {
815+
skikoWasm("org.jetbrains.skiko:skiko-js-wasm-runtime:${skikoVersion}")
816+
}
817+
818+
val fetchSkikoWasmRuntime = project.tasks.register("fetchSkikoWasmRuntime", Copy::class.java) {
819+
it.destinationDir = project.file(resourcesDir)
820+
it.from(skikoWasm.map { artifact ->
821+
project.zipTree(artifact)
822+
.matching { pattern ->
823+
pattern.include("skiko.wasm", "skiko.mjs")
824+
}
825+
})
826+
}
827+
828+
project.tasks.getByName("wasmJsTestProcessResources").apply {
829+
dependsOn(fetchSkikoWasmRuntime)
830+
}
831+
832+
kotlinExtension.sourceSets.getByName("wasmJsTest").also {
833+
it.resources.setSrcDirs(it.resources.srcDirs)
834+
it.resources.srcDirs(fetchSkikoWasmRuntime.map { it.destinationDir })
835+
}
836+
}
837+
838+
target
767839
} else null
768840
}
769841

buildSrc/private/src/main/kotlin/org/jetbrains/androidx/build/AndroidXForkMultiplatformExtensionImpl.kt

Lines changed: 0 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -16,154 +16,17 @@
1616

1717
package org.jetbrains.androidx.build
1818

19-
import androidx.build.AndroidXMultiplatformExtension
2019
import androidx.build.multiplatformExtension
2120
import javax.inject.Inject
2221
import org.gradle.api.Project
23-
import org.gradle.api.tasks.Copy
24-
import org.gradle.kotlin.dsl.dependencies
2522
import org.gradle.kotlin.dsl.getByName
26-
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
27-
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
28-
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
29-
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
3023
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
3124
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithSimulatorTests
32-
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
3325
import org.jetbrains.kotlin.konan.target.KonanTarget
34-
import org.tomlj.Toml
35-
36-
37-
private fun KotlinJsTest.passTestFlagsToEnvironment() {
38-
listOf(
39-
"jetbrains.androidx.web.tests.enableChrome",
40-
"jetbrains.androidx.web.tests.enableChromium",
41-
"jetbrains.androidx.web.tests.enableFirefox",
42-
"jetbrains.androidx.web.tests.enableSafari",
43-
).forEach { propertyName ->
44-
if (project.findProperty(propertyName)?.toString()?.toBoolean() == true) {
45-
environment(propertyName, "1")
46-
}
47-
}
48-
}
49-
50-
private fun Project.onTargetConfigured(
51-
type: KotlinPlatformType,
52-
body: KotlinMultiplatformExtension.() -> Unit
53-
) {
54-
val multiplatformExtension = multiplatformExtension ?: return
55-
multiplatformExtension.targets.all { target: KotlinTarget ->
56-
if (target.platformType == type) {
57-
multiplatformExtension.body()
58-
}
59-
}
60-
}
61-
62-
@OptIn(ExperimentalWasmDsl::class)
63-
fun Project.configureTargetsForComposeMultiplatform() {
64-
val toml = Toml.parse(
65-
project.rootProject.projectDir.resolve("gradle/libs.versions.toml").toPath()
66-
)
67-
val skikoVersion = toml.getTable("versions")!!.getString("skiko")!!
68-
val skikoWasm = project.configurations.findByName("skikoWasm")
69-
?: project.configurations.create("skikoWasm")
70-
71-
onTargetConfigured(KotlinPlatformType.js) {
72-
js {
73-
browser {
74-
testTask {
75-
// We need to set up at least one browser here due to kotlin tooling limitations
76-
// Actual browser configuration is set in mpp/karma.config.d/js/config.js
77-
it.passTestFlagsToEnvironment()
78-
it.useKarma {
79-
// At least one browser is needed due to Kotlin tooling limitations
80-
useChrome()
81-
useFirefox()
82-
useSafari()
83-
useConfigDirectory(rootProject.projectDir.resolve("mpp/karma.config.d/js"))
84-
}
85-
}
86-
}
87-
}
88-
89-
val resourcesDir = project.layout.buildDirectory.asFile.get().resolve("resources/skiko-js")
90-
91-
// Below code helps configure the tests for k/wasm targets
92-
project.dependencies {
93-
skikoWasm("org.jetbrains.skiko:skiko-js-wasm-runtime:${skikoVersion}")
94-
}
95-
96-
val fetchSkikoWasmRuntime = project.tasks.register("fetchSkikoJsWasmRuntime", Copy::class.java) {
97-
it.destinationDir = project.file(resourcesDir)
98-
it.from(skikoWasm.map { artifact ->
99-
project.zipTree(artifact)
100-
.matching { pattern ->
101-
pattern.include("skiko.wasm", "skiko.mjs", "js-reexport-symbols.mjs")
102-
}
103-
})
104-
}
105-
106-
project.tasks.getByName("jsTestProcessResources").apply {
107-
dependsOn(fetchSkikoWasmRuntime)
108-
}
109-
110-
sourceSets.getByName("jsTest").also {
111-
it.resources.setSrcDirs(it.resources.srcDirs)
112-
it.resources.srcDirs(fetchSkikoWasmRuntime.map { it.destinationDir })
113-
}
114-
}
115-
onTargetConfigured(KotlinPlatformType.wasm) {
116-
wasmJs {
117-
browser {
118-
testTask {
119-
// We need to set up at least one browser here due to kotlin tooling limitations
120-
// Actual browser configuration is set in mpp/karma.config.d/wasm/config.js
121-
it.passTestFlagsToEnvironment()
122-
it.useKarma {
123-
useChrome()
124-
useFirefox()
125-
useSafari()
126-
useConfigDirectory(
127-
project.rootProject.projectDir.resolve("mpp/karma.config.d/wasm")
128-
)
129-
}
130-
}
131-
}
132-
}
133-
134-
val resourcesDir = project.layout.buildDirectory.asFile.get().resolve("resources/skiko-wasm")
135-
136-
// Below code helps configure the tests for k/wasm targets
137-
project.dependencies {
138-
skikoWasm("org.jetbrains.skiko:skiko-js-wasm-runtime:${skikoVersion}")
139-
}
140-
141-
val fetchSkikoWasmRuntime = project.tasks.register("fetchSkikoWasmRuntime", Copy::class.java) {
142-
it.destinationDir = project.file(resourcesDir)
143-
it.from(skikoWasm.map { artifact ->
144-
project.zipTree(artifact)
145-
.matching { pattern ->
146-
pattern.include("skiko.wasm", "skiko.mjs")
147-
}
148-
})
149-
}
150-
151-
project.tasks.getByName("wasmJsTestProcessResources").apply {
152-
dependsOn(fetchSkikoWasmRuntime)
153-
}
154-
155-
sourceSets.getByName("wasmJsTest").also {
156-
it.resources.setSrcDirs(it.resources.srcDirs)
157-
it.resources.srcDirs(fetchSkikoWasmRuntime.map { it.destinationDir })
158-
}
159-
}
160-
}
16126

16227
abstract class AndroidXForkMultiplatformExtensionImpl @Inject constructor(
16328
private val project: Project
16429
) : AndroidXForkMultiplatformExtension {
165-
private val androidxMultiplatformExtension by lazy { project.extensions.findByType(AndroidXMultiplatformExtension::class.java) }
166-
16730
override fun configureDarwinFlags() {
16831
val darwinFlags = listOf(
16932
"-linker-option", "-framework", "-linker-option", "Metal",

buildSrc/private/src/main/kotlin/org/jetbrains/androidx/build/JetBrainsAndroidXImplPlugin.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,6 @@ class JetBrainsAndroidXImplPlugin @Inject constructor(
161161

162162
enableArtifactRedirectionPublishing(project)
163163
enableBinaryCompatibilityValidator(project)
164-
project.configureTargetsForComposeMultiplatform()
165164
val multiplatformExtension =
166165
project.extensions.getByType(KotlinMultiplatformExtension::class.java)
167166

compose/material3/material3/build.gradle

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
* modifying its settings.
2323
*/
2424

25-
import androidx.build.KotlinTarget
2625
import androidx.build.SoftwareType
2726
import androidx.build.PlatformIdentifier
2827
import org.jetbrains.androidx.build.UpdateTranslationsTask
@@ -255,7 +254,6 @@ androidx {
255254
type = SoftwareType.PUBLISHED_LIBRARY_ONLY_USED_BY_KOTLIN_CONSUMERS
256255
inceptionYear = "2021"
257256
description = "Compose Material You Design Components library"
258-
kotlinTarget = KotlinTarget.KOTLIN_2_1
259257
legacyDisableKotlinStrictApiMode = true
260258
metalavaK2UastEnabled = false
261259
samples(project(":compose:material3:material3:material3-samples"))

0 commit comments

Comments
 (0)