From 622339ba46078f32a7db31388ba72514bf11baa0 Mon Sep 17 00:00:00 2001 From: Aaditya Dhingra Date: Wed, 6 Nov 2024 17:36:23 +0000 Subject: [PATCH] Bug 1894737 - Building geckoview spends time evaluating unrelated gradle projects. r=firefox-build-system-reviewers,geckoview-reviewers,android-reviewers,nalexander,ohall,jonalmeida Add option to run specific subprojects (fenix/focus/geckoview_example) by adding one of the following to mozconfig: ``` ac_add_options --enable-android-subproject=fenix ac_add_options --enable-android-subproject=focus ac_add_options --enable-android-subproject=geckoview_example ``` Differential Revision: https://phabricator.services.mozilla.com/D218564 --- mobile/android/gradle.configure | 77 +++++++++++++++++++++++++++++---- mobile/android/mach_commands.py | 8 +++- mobile/android/moz.configure | 20 +++++++++ settings.gradle | 31 +++++++------ 4 files changed, 113 insertions(+), 23 deletions(-) diff --git a/mobile/android/gradle.configure b/mobile/android/gradle.configure index 97205a584baa..e92c249a1977 100644 --- a/mobile/android/gradle.configure +++ b/mobile/android/gradle.configure @@ -72,6 +72,12 @@ def gradle_android_build_config(): geckoview_example=namespace( variant=variant("debug"), ), + fenix=namespace( + variant=variant("debug"), + ), + focus=namespace( + variant=variant("debug"), + ), ) @@ -340,8 +346,8 @@ option( imply_option("--disable-android-bundle", False, when="--enable-address-sanitizer") -@depends(gradle_android_build_config, "--disable-android-bundle") -def gradle_android_archive_geckoview_tasks(build_config, aab_enabled): +@depends(gradle_android_build_config) +def gradle_android_archive_geckoview_tasks(build_config): """Gradle tasks run by |mach android archive-geckoview|.""" tasks = [ "geckoview:assemble{geckoview.variant.name}".format( @@ -350,12 +356,6 @@ def gradle_android_archive_geckoview_tasks(build_config, aab_enabled): "geckoview:assemble{geckoview.variant.name}AndroidTest".format( geckoview=build_config.geckoview ), - "test_runner:assemble{geckoview_example.variant.name}".format( - geckoview_example=build_config.geckoview_example - ), - "geckoview_example:assemble{geckoview_example.variant.name}".format( - geckoview_example=build_config.geckoview_example - ), "messaging_example:assemble{geckoview_example.variant.name}".format( geckoview_example=build_config.geckoview_example ), @@ -367,6 +367,25 @@ def gradle_android_archive_geckoview_tasks(build_config, aab_enabled): ), "exoplayer2:publishDebugPublicationToMavenRepository", ] + return tasks + + +set_config( + "GRADLE_ANDROID_ARCHIVE_GECKOVIEW_TASKS", gradle_android_archive_geckoview_tasks +) + + +@depends(gradle_android_build_config, "--disable-android-bundle") +def gradle_android_archive_geckoview_subproject_tasks(build_config, aab_enabled): + """Gradle tasks run by |mach android archive-geckoview| if just building geckoview.""" + tasks = [ + "test_runner:assemble{geckoview_example.variant.name}".format( + geckoview_example=build_config.geckoview_example + ), + "geckoview_example:assemble{geckoview_example.variant.name}".format( + geckoview_example=build_config.geckoview_example + ), + ] if aab_enabled: tasks += [ @@ -381,7 +400,47 @@ def gradle_android_archive_geckoview_tasks(build_config, aab_enabled): set_config( - "GRADLE_ANDROID_ARCHIVE_GECKOVIEW_TASKS", gradle_android_archive_geckoview_tasks + "GRADLE_ANDROID_ARCHIVE_GECKOVIEW_SUBPROJECT_TASKS", + gradle_android_archive_geckoview_subproject_tasks, +) + + +@depends(gradle_android_build_config, "--disable-android-bundle") +def gradle_android_archive_fenix_subproject_tasks(build_config, aab_enabled): + """Gradle tasks run by |mach android archive-geckoview| if just building fenix.""" + tasks = [ + "fenix:assemble{fenix.variant.name}".format(fenix=build_config.fenix), + ] + + if aab_enabled: + tasks += [ + "fenix:bundle{fenix.variant.name}".format(fenix=build_config.fenix), + ] + return tasks + + +set_config( + "GRADLE_ANDROID_ARCHIVE_FENIX_SUBPROJECT_TASKS", + gradle_android_archive_fenix_subproject_tasks, +) + + +@depends(gradle_android_build_config, "--disable-android-bundle") +def gradle_android_archive_focus_subproject_tasks(build_config, aab_enabled): + """Gradle tasks run by |mach android archive-geckoview| if just building focus.""" + tasks = [ + "focus-android:assemble{focus.variant.name}".format(focus=build_config.focus), + ] + if aab_enabled: + tasks += [ + "focus-android:bundle{focus.variant.name}".format(focus=build_config.focus), + ] + return tasks + + +set_config( + "GRADLE_ANDROID_ARCHIVE_FOCUS_SUBPROJECT_TASKS", + gradle_android_archive_focus_subproject_tasks, ) diff --git a/mobile/android/mach_commands.py b/mobile/android/mach_commands.py index 1e5502f8eaf2..3e0d22ff8c3b 100644 --- a/mobile/android/mach_commands.py +++ b/mobile/android/mach_commands.py @@ -214,9 +214,15 @@ def create_maven_archive(topobjdir): ) @CommandArgument("args", nargs=argparse.REMAINDER) def android_archive_geckoview(command_context, args): + tasks = command_context.substs["GRADLE_ANDROID_ARCHIVE_GECKOVIEW_TASKS"] + subproject = command_context.substs.get("MOZ_ANDROID_SUBPROJECT") + if subproject in (None, "geckoview_example"): + tasks += command_context.substs[ + "GRADLE_ANDROID_ARCHIVE_GECKOVIEW_SUBPROJECT_TASKS" + ] ret = gradle( command_context, - command_context.substs["GRADLE_ANDROID_ARCHIVE_GECKOVIEW_TASKS"] + args, + tasks + args, verbose=True, ) diff --git a/mobile/android/moz.configure b/mobile/android/moz.configure index 3e432277beed..b2dd72287f09 100644 --- a/mobile/android/moz.configure +++ b/mobile/android/moz.configure @@ -57,6 +57,26 @@ option( set_config("MOZ_ANDROID_GECKOVIEW_LITE", True, when="--enable-geckoview-lite") +option( + "--enable-android-subproject", + choices=( + "fenix", + "focus", + "geckoview_example", + ), + nargs="?", + help="Build a subproject of android. Possible options: fenix/focus/geckoview_example", +) + + +@depends("--enable-android-subproject") +def android_subproject(value): + if value: + return value[0] + + +set_config("MOZ_ANDROID_SUBPROJECT", android_subproject) + imply_option("MOZ_NORMANDY", False) imply_option("MOZ_SERVICES_HEALTHREPORT", True) imply_option("MOZ_GECKOVIEW_HISTORY", True) diff --git a/settings.gradle b/settings.gradle index 61f60bbd4256..04acc7415a80 100644 --- a/settings.gradle +++ b/settings.gradle @@ -46,26 +46,31 @@ System.setProperty('android.home', gradle.mozconfig.substs.ANDROID_SDK_ROOT) include ':annotations', ':messaging_example', ':port_messaging_example' include ':geckoview' -include ':geckoview_example' -include ':test_runner' include ':exoplayer2' -include ':android-components' -include ':samples-browser' -include ':fenix' include ':mozilla-lint-rules' -include ':focus-android' -include ':service-telemetry' +include ':android-components' project(':annotations').projectDir = new File("${gradle.mozconfig.topsrcdir}/mobile/android/annotations") project(':geckoview').projectDir = new File("${gradle.mozconfig.topsrcdir}/mobile/android/geckoview") -project(':geckoview_example').projectDir = new File("${gradle.mozconfig.topsrcdir}/mobile/android/geckoview_example") -project(':test_runner').projectDir = new File("${gradle.mozconfig.topsrcdir}/mobile/android/test_runner") project(':exoplayer2').projectDir = new File("${gradle.mozconfig.topsrcdir}/mobile/android/exoplayer2") project(':android-components').projectDir = new File("${gradle.mozconfig.topsrcdir}/mobile/android/android-components") -project(':samples-browser').projectDir = new File("${gradle.mozconfig.topsrcdir}/mobile/android/android-components/samples/browser") -project(':fenix').projectDir = new File("${gradle.mozconfig.topsrcdir}/mobile/android/fenix/app") -project(':service-telemetry').projectDir = new File("${gradle.mozconfig.topsrcdir}/mobile/android/focus-android/service-telemetry") -project(':focus-android').projectDir = new File("${gradle.mozconfig.topsrcdir}/mobile/android/focus-android/app") + +if (!gradle.mozconfig.substs.MOZ_ANDROID_SUBPROJECT || gradle.mozconfig.substs.MOZ_ANDROID_SUBPROJECT == "fenix") { + include ':fenix' + project(':fenix').projectDir = new File("${gradle.mozconfig.topsrcdir}/mobile/android/fenix/app") +} +if (!gradle.mozconfig.substs.MOZ_ANDROID_SUBPROJECT || gradle.mozconfig.substs.MOZ_ANDROID_SUBPROJECT == "focus") { + include ':focus-android' + project(':focus-android').projectDir = new File("${gradle.mozconfig.topsrcdir}/mobile/android/focus-android/app") +} +if (!gradle.mozconfig.substs.MOZ_ANDROID_SUBPROJECT || gradle.mozconfig.substs.MOZ_ANDROID_SUBPROJECT == "geckoview_example") { + include ':samples-browser' + include ':geckoview_example' + include ':test_runner' + project(':test_runner').projectDir = new File("${gradle.mozconfig.topsrcdir}/mobile/android/test_runner") + project(':geckoview_example').projectDir = new File("${gradle.mozconfig.topsrcdir}/mobile/android/geckoview_example") + project(':samples-browser').projectDir = new File("${gradle.mozconfig.topsrcdir}/mobile/android/android-components/samples/browser") +} if (hasProperty("androidFormatLintTest")) { include ':androidFormatLintTest'