|
15 | 15 | */
|
16 | 16 | package app.cash.redwood.buildsupport
|
17 | 17 |
|
| 18 | +import app.cash.redwood.buildsupport.TargetGroup.Common |
| 19 | +import app.cash.redwood.buildsupport.TargetGroup.CommonWithAndroid |
| 20 | +import app.cash.redwood.buildsupport.TargetGroup.Tooling |
| 21 | +import app.cash.redwood.buildsupport.TargetGroup.ToolkitAllWithoutAndroid |
| 22 | +import app.cash.redwood.buildsupport.TargetGroup.ToolkitAndroid |
| 23 | +import app.cash.redwood.buildsupport.TargetGroup.ToolkitComposeUi |
| 24 | +import app.cash.redwood.buildsupport.TargetGroup.ToolkitHtml |
| 25 | +import app.cash.redwood.buildsupport.TargetGroup.ToolkitIos |
| 26 | +import app.cash.redwood.buildsupport.TargetGroup.TreehouseGuest |
| 27 | +import app.cash.redwood.buildsupport.TargetGroup.TreehouseHost |
18 | 28 | import com.android.build.api.variant.AndroidComponentsExtension
|
19 | 29 | import com.android.build.gradle.BaseExtension
|
20 | 30 | import com.diffplug.gradle.spotless.SpotlessExtension
|
@@ -276,6 +286,73 @@ class RedwoodBuildPlugin : Plugin<Project> {
|
276 | 286 | }
|
277 | 287 |
|
278 | 288 | private class RedwoodBuildExtensionImpl(private val project: Project) : RedwoodBuildExtension {
|
| 289 | + override fun targets(group: TargetGroup) { |
| 290 | + when (group) { |
| 291 | + Common -> { |
| 292 | + project.applyKotlinMultiplatform { |
| 293 | + iosTargets() |
| 294 | + js().browser() |
| 295 | + jvm() |
| 296 | + } |
| 297 | + } |
| 298 | + CommonWithAndroid -> { |
| 299 | + project.plugins.apply("com.android.library") |
| 300 | + project.applyKotlinMultiplatform { |
| 301 | + androidTarget().publishLibraryVariants("release") |
| 302 | + iosTargets() |
| 303 | + js().browser() |
| 304 | + jvm() |
| 305 | + } |
| 306 | + } |
| 307 | + Tooling -> { |
| 308 | + project.plugins.apply("org.jetbrains.kotlin.jvm") |
| 309 | + } |
| 310 | + ToolkitAllWithoutAndroid -> { |
| 311 | + project.applyKotlinMultiplatform { |
| 312 | + iosTargets() |
| 313 | + js().browser() |
| 314 | + jvm() |
| 315 | + } |
| 316 | + } |
| 317 | + ToolkitAndroid -> { |
| 318 | + project.plugins.apply("com.android.library") |
| 319 | + project.plugins.apply("org.jetbrains.kotlin.android") |
| 320 | + } |
| 321 | + ToolkitIos -> { |
| 322 | + project.applyKotlinMultiplatform { |
| 323 | + iosTargets() |
| 324 | + } |
| 325 | + } |
| 326 | + ToolkitHtml -> { |
| 327 | + project.applyKotlinMultiplatform { |
| 328 | + js().browser() |
| 329 | + } |
| 330 | + } |
| 331 | + ToolkitComposeUi -> { |
| 332 | + project.plugins.apply("com.android.library") |
| 333 | + project.applyKotlinMultiplatform { |
| 334 | + androidTarget().publishLibraryVariants("release") |
| 335 | + iosTargets() |
| 336 | + jvm() |
| 337 | + } |
| 338 | + } |
| 339 | + TreehouseGuest -> { |
| 340 | + project.applyKotlinMultiplatform { |
| 341 | + js().nodejs() |
| 342 | + jvm() // For easier testing. |
| 343 | + } |
| 344 | + } |
| 345 | + TreehouseHost -> { |
| 346 | + project.plugins.apply("com.android.library") |
| 347 | + project.applyKotlinMultiplatform { |
| 348 | + androidTarget().publishLibraryVariants("release") |
| 349 | + iosTargets() |
| 350 | + jvm() |
| 351 | + } |
| 352 | + } |
| 353 | + } |
| 354 | + } |
| 355 | + |
279 | 356 | override fun composeCompiler() {
|
280 | 357 | project.plugins.apply(ComposePlugin::class.java)
|
281 | 358 | }
|
@@ -506,3 +583,16 @@ private fun Project.withKotlinPlugins(block: KotlinProjectExtension.() -> Unit)
|
506 | 583 | pluginManager.withPlugin("org.jetbrains.kotlin.jvm", handler)
|
507 | 584 | pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform", handler)
|
508 | 585 | }
|
| 586 | + |
| 587 | +private fun Project.applyKotlinMultiplatform(block: KotlinMultiplatformExtension.() -> Unit) { |
| 588 | + pluginManager.apply("org.jetbrains.kotlin.multiplatform") |
| 589 | + val kotlin = extensions.getByType(KotlinMultiplatformExtension::class.java) |
| 590 | + kotlin.block() |
| 591 | + kotlin.applyDefaultHierarchyTemplate() |
| 592 | +} |
| 593 | + |
| 594 | +private fun KotlinMultiplatformExtension.iosTargets() { |
| 595 | + iosArm64() |
| 596 | + iosSimulatorArm64() |
| 597 | + iosX64() |
| 598 | +} |
0 commit comments