|
16 | 16 |
|
17 | 17 | package org.jetbrains.androidx.build |
18 | 18 |
|
19 | | -import androidx.build.AndroidXMultiplatformExtension |
20 | 19 | import androidx.build.multiplatformExtension |
21 | 20 | import javax.inject.Inject |
22 | 21 | import org.gradle.api.Project |
23 | | -import org.gradle.api.tasks.Copy |
24 | | -import org.gradle.kotlin.dsl.dependencies |
25 | 22 | 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 |
30 | 23 | import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget |
31 | 24 | import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithSimulatorTests |
32 | | -import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest |
33 | 25 | 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 | | -} |
161 | 26 |
|
162 | 27 | abstract class AndroidXForkMultiplatformExtensionImpl @Inject constructor( |
163 | 28 | private val project: Project |
164 | 29 | ) : AndroidXForkMultiplatformExtension { |
165 | | - private val androidxMultiplatformExtension by lazy { project.extensions.findByType(AndroidXMultiplatformExtension::class.java) } |
166 | | - |
167 | 30 | override fun configureDarwinFlags() { |
168 | 31 | val darwinFlags = listOf( |
169 | 32 | "-linker-option", "-framework", "-linker-option", "Metal", |
|
0 commit comments