Skip to content

Commit 6ab6b81

Browse files
committed
Reland "Foundations of gradle-mpp configuration for Compose"
This reverts commit b01417b. Includes: Add :docs-kmp to BuildType.INFRAROGUE for mac builder Change-Id: I1695894488b36f4fe5b167d408af332753a74433
1 parent 57d22e5 commit 6ab6b81

File tree

76 files changed

+310
-218
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+310
-218
lines changed

buildSrc-tests/src/test/kotlin/androidx/build/KmpPlatformsTest.kt

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,63 +23,69 @@ class KmpPlatformsTest {
2323

2424
@Test
2525
fun withAnEmptyFlag_itReturnsTheDefaultValue() {
26-
assertThat(KmpFlagParser.parse("")).isEqualTo(setOf(KmpPlatform.JVM))
26+
assertThat(KmpFlagParser.parse("")).isEqualTo(
27+
setOf(KmpPlatform.JVM, KmpPlatform.DESKTOP)
28+
)
2729
}
2830

2931
@Test
3032
fun withANullFlag_itReturnsTheDefaultValue() {
31-
assertThat(KmpFlagParser.parse(null)).isEqualTo(setOf(KmpPlatform.JVM))
33+
assertThat(KmpFlagParser.parse(null)).isEqualTo(
34+
setOf(KmpPlatform.JVM, KmpPlatform.DESKTOP)
35+
)
3236
}
3337

3438
@Test
3539
fun withASingleDefaultPlatform_itParsesTheFlagCorrectly() {
36-
assertThat(KmpFlagParser.parse("+jvm")).isEqualTo(setOf(KmpPlatform.JVM))
40+
assertThat(KmpFlagParser.parse("+jvm")).isEqualTo(
41+
setOf(KmpPlatform.JVM, KmpPlatform.DESKTOP)
42+
)
3743
}
3844

3945
@Test
4046
fun withNoPlatforms_itParsesTheFlagCorrectly() {
41-
assertThat(KmpFlagParser.parse("-jvm")).isEqualTo(emptySet<KmpPlatform>())
47+
assertThat(KmpFlagParser.parse("-jvm,-desktop")).isEqualTo(emptySet<KmpPlatform>())
4248
}
4349

4450
@Test
4551
fun withASingleNonDefaultPlatform_itParsesTheFlagCorrectly() {
4652
assertThat(KmpFlagParser.parse("+js")).isEqualTo(
47-
setOf(KmpPlatform.JVM, KmpPlatform.JS)
53+
setOf(KmpPlatform.JVM, KmpPlatform.JS, KmpPlatform.DESKTOP)
4854
)
4955
}
5056

5157
@Test
5258
fun withAMultiplePlatforms_itParsesTheFlagCorrectly() {
5359
assertThat(KmpFlagParser.parse("+js,+mac")).isEqualTo(
54-
setOf(KmpPlatform.JVM, KmpPlatform.JS, KmpPlatform.MAC)
60+
setOf(KmpPlatform.JVM, KmpPlatform.JS, KmpPlatform.MAC, KmpPlatform.DESKTOP)
5561
)
5662
}
5763

5864
@Test
5965
fun withNegativeFlags_itParsesTheFlagCorrectly() {
6066
assertThat(KmpFlagParser.parse("-jvm,+mac")).isEqualTo(
61-
setOf(KmpPlatform.MAC)
67+
setOf(KmpPlatform.MAC, KmpPlatform.DESKTOP)
6268
)
6369
}
6470

6571
@Test
6672
fun withTheNativeFlag_itParsesTheFlagCorrectly() {
6773
assertThat(KmpFlagParser.parse("+native")).isEqualTo(
68-
setOf(KmpPlatform.JVM, KmpPlatform.MAC, KmpPlatform.LINUX)
74+
setOf(KmpPlatform.JVM, KmpPlatform.MAC, KmpPlatform.LINUX, KmpPlatform.DESKTOP)
6975
)
7076
}
7177

7278
@Test
7379
fun withMultipleFlagsIncludingTheNativeFlag_itParsesTheFlagCorrectly() {
7480
assertThat(KmpFlagParser.parse("-jvm,+native,+js")).isEqualTo(
75-
setOf(KmpPlatform.JS, KmpPlatform.MAC, KmpPlatform.LINUX)
81+
setOf(KmpPlatform.JS, KmpPlatform.MAC, KmpPlatform.LINUX, KmpPlatform.DESKTOP)
7682
)
7783
}
7884

7985
@Test
8086
fun withRedundentFlags_itParsesTheFlagCorrectly() {
8187
assertThat(KmpFlagParser.parse("-jvm,+native,+linux,+mac,+linux")).isEqualTo(
82-
setOf(KmpPlatform.MAC, KmpPlatform.LINUX)
88+
setOf(KmpPlatform.MAC, KmpPlatform.LINUX, KmpPlatform.DESKTOP)
8389
)
8490
}
8591
}

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,17 @@ open class AndroidXMultiplatformExtension(val project: Project) {
8686
} else { null }
8787
}
8888

89+
@JvmOverloads
90+
fun desktop(
91+
block: Action<KotlinJvmTarget>? = null
92+
): KotlinJvmTarget? {
93+
return if (project.enableJvm()) {
94+
kotlinExtension.jvm("desktop") {
95+
block?.execute(this)
96+
}
97+
} else { null }
98+
}
99+
89100
/**
90101
* Configures all mac targets supported by AndroidX.
91102
*/

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,11 @@ private fun shouldVerifyConfiguration(configuration: Configuration): Boolean {
206206

207207
// Don't check Hilt compile-only configurations
208208
if (name.startsWith("hiltCompileOnly")) return false
209+
210+
// Don't check Desktop configurations since we don't publish them anyway
211+
if (name.startsWith("desktop")) return false
212+
if (name.startsWith("skiko")) return false
213+
209214
return true
210215
}
211216

buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXKmpDocsImplPlugin.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import javax.inject.Inject
2323
import org.gradle.api.Plugin
2424
import org.gradle.api.Project
2525
import org.gradle.api.artifacts.Configuration
26+
import org.gradle.api.attributes.Category
2627
import org.gradle.api.attributes.LibraryElements
2728
import org.gradle.api.model.ObjectFactory
2829
import org.gradle.api.tasks.bundling.Zip
@@ -94,6 +95,10 @@ class AndroidXKmpDocsImplPlugin @Inject constructor(
9495
LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE,
9596
objectFactory.named(ATTRIBUTE_NAME)
9697
)
98+
it.attribute(
99+
Category.CATEGORY_ATTRIBUTE,
100+
objectFactory.named(Category.DOCUMENTATION)
101+
)
97102
}
98103
}
99104
}

buildSrc/private/src/main/kotlin/androidx/build/transform/ConfigureAarAsJar.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import com.android.build.api.attributes.BuildTypeAttr
2020
import org.gradle.api.Project
2121
import org.gradle.api.attributes.Attribute
2222
import org.gradle.api.attributes.Usage
23+
import org.gradle.api.attributes.java.TargetJvmEnvironment
2324

2425
/**
2526
* Creates `testAarAsJar` configuration that can be used for JVM tests that need to Android library
@@ -56,4 +57,11 @@ fun configureAarAsJarForConfiguration(project: Project, configurationName: Strin
5657
project.configurations.getByName(configurationName).dependencies.add(
5758
project.dependencies.create(aarAsJar)
5859
)
60+
61+
// Added to allow the :external:paparazzi:paparazzi build to select the correct jar (not get
62+
// confused by the mpp jars) when the mpp builds are enabled
63+
project.configurations.getByName(testAarsAsJars.name).attributes.attribute(
64+
TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE,
65+
project.objects.named(TargetJvmEnvironment::class.java, TargetJvmEnvironment.ANDROID)
66+
)
5967
}

buildSrc/public/src/main/kotlin/androidx/build/KmpPlatforms.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,11 @@ enum class KmpPlatform {
3131
// https://blog.jetbrains.com/kotlin/2021/10/important-ua-parser-js-exploit-and-kotlin-js/
3232
JS,
3333
MAC,
34-
LINUX;
34+
LINUX,
35+
DESKTOP;
3536
companion object {
3637
val native = listOf(MAC, LINUX)
37-
val enabledByDefault = listOf(JVM)
38+
val enabledByDefault = listOf(JVM, DESKTOP)
3839
private const val JVM_PLATFORM = "jvm"
3940
private const val JS_PLATFORM = "js"
4041
private const val MAC_ARM_64 = "macosarm64"
@@ -43,6 +44,7 @@ enum class KmpPlatform {
4344
private const val IOS_SIMULATOR_ARM_64 = "iossimulatorarm64"
4445
private const val IOS_X_64 = "iosx64"
4546
private const val IOS_ARM_64 = "iosarm64"
47+
private const val DESKTOP_PLATFORM = "desktop"
4648
val macPlatforms = listOf(MAC_ARM_64, MAC_OSX_64)
4749
val linuxPlatforms = listOf(LINUX_64)
4850
val iosPlatforms = listOf(IOS_SIMULATOR_ARM_64, IOS_ARM_64, IOS_X_64)
@@ -88,4 +90,5 @@ fun Project.enableMac(): Boolean =
8890
fun Project.enableLinux(): Boolean =
8991
enabledKmpPlatforms().contains(KmpPlatform.LINUX) || Multiplatform.isKotlinNativeEnabled(this)
9092
fun Project.enableJvm(): Boolean = enabledKmpPlatforms().contains(KmpPlatform.JVM)
93+
fun Project.enableDesktop(): Boolean = enabledKmpPlatforms().contains(KmpPlatform.DESKTOP)
9194
fun Project.enableNative(): Boolean = enableMac() && enableLinux()

buildSrc/public/src/main/kotlin/androidx/build/Multiplatform.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class Multiplatform {
4040
@JvmStatic
4141
fun isKotlinNativeEnabled(project: Project): Boolean {
4242
return "KMP".equals(System.getenv()["ANDROIDX_PROJECTS"], ignoreCase = true) ||
43+
"INFRAROGUE".equals(System.getenv()["ANDROIDX_PROJECTS"], ignoreCase = true) ||
4344
ProjectLayoutType.isPlayground(project) ||
4445
project.providers.gradleProperty("androidx.kmp.native.enabled")
4546
.orNull?.toBoolean() == true

busytown/androidx.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ else
2222
-Pandroidx.enableComposeCompilerMetrics=true \
2323
-Pandroidx.enableComposeCompilerReports=true \
2424
-Pandroidx.constraints=true \
25+
# If/when we enable desktop, enable VerifyDependencyVersionsTask.kt/shouldVerifyConfiguration
26+
-Pandroidx.enabled.kmp.target.platforms=-desktop \
2527
--no-daemon \
2628
--profile "$@"; then
2729
EXIT_VALUE=1

busytown/androidx_compose_multiplatform.sh

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,15 @@ export ANDROIDX_PROJECTS=COMPOSE
99

1010

1111
# b/235340662 don't verify dependency versions because we cannot pin to multiplatform deps
12-
./androidx.sh \
13-
-Pandroidx.compose.multiplatformEnabled=true \
14-
compileDebugAndroidTestSources \
15-
compileDebugSources \
16-
desktopTestClasses \
17-
-x verifyDependencyVersions \
18-
-Pandroidx.enableAffectedModuleDetection=false "$@"
12+
impl/build.sh buildOnServer createAllArchives checkExternalLicenses listTaskOutputs \
13+
-Pandroidx.compose.multiplatformEnabled=true \
14+
-Pandroidx.enableComposeCompilerMetrics=true \
15+
-Pandroidx.enableComposeCompilerReports=true \
16+
-Pandroidx.constraints=true \
17+
--no-daemon \
18+
--profile \
19+
compileDebugAndroidTestSources \
20+
compileDebugSources \
21+
desktopTestClasses \
22+
-x verifyDependencyVersions \
23+
-Pandroidx.enableAffectedModuleDetection=false "$@"

busytown/androidx_multiplatform_linux.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ set -e
33
cd "$(dirname $0)"
44

55
# Builds all projects that support KMP except for Compose-specific projects which are already
6-
# covered by androidx_compose_multiplatform.sh
6+
# covered by androidx_compose_multiplatform.sh.
77

88
# Must be run on Linux
99

10-
# build just KMP projects. This will also enable native targets.
11-
export ANDROIDX_PROJECTS=KMP
10+
# build just INFRAROGUE projects. This will also enable native targets.
11+
export ANDROIDX_PROJECTS=INFRAROGUE # TODO: Switch from `INFRAROGUE` to `KMP`
1212

1313
# disable cache, NS does not allow it yet: b/235227707
1414
export USE_ANDROIDX_REMOTE_BUILD_CACHE=false

0 commit comments

Comments
 (0)