Bug 1366404 - Add AArch64 Nightly build; r=nalexander r=dustin
authorJim Chen <nchen@mozilla.com>
Thu, 25 May 2017 16:53:33 -0400
changeset 360697 a62c6d515e1936e3bed309b9da0aca5e71070a5e
parent 360696 348e3ebeb9acdb940953249d3cc965755a740913
child 360698 64f81ddabddd739f625382136b960eb5863bb987
push id90714
push usernchen@mozilla.com
push dateThu, 25 May 2017 20:54:17 +0000
treeherdermozilla-inbound@a62c6d515e19 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersnalexander, dustin
bugs1366404
milestone55.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1366404 - Add AArch64 Nightly build; r=nalexander r=dustin Add configurations for building and uploading AArch64 Nightly builds, in tier 1 and without artifact support for now. As for not denoting AArch64 builds as "api-21", I don't really think we will split AArch64 the way we split ARMv7 before. Originally, we split into API 9 and API 11+ because of lots of "constrained" devices that were stuck with API 9. We made an API 9 APK in order to lower our footprint on those devices. That probably will not be a problem for AArch64, because devices with API 21+ and AArch64 support are usually more than capable for running Fennec. Secondly, it was a big change for Android going from API 9 to API 11+, so we saved quite a bit of code/resources when we stripped out API 11+. I don't see such drastic changes going from API 21 to upcoming versions, so even if we did split, I don't think it'll get us much benefit. MozReview-Commit-ID: 7N7Slv1pPgb
mobile/android/config/mozconfigs/android-aarch64/debug
mobile/android/config/mozconfigs/android-aarch64/l10n-nightly
mobile/android/config/mozconfigs/android-aarch64/l10n-release
mobile/android/config/mozconfigs/android-aarch64/nightly
mobile/android/config/mozconfigs/android-aarch64/release
taskcluster/ci/build/android.yml
taskcluster/ci/upload-symbols/kind.yml
taskcluster/taskgraph/target_tasks.py
taskcluster/taskgraph/transforms/beetmover.py
taskcluster/taskgraph/transforms/gecko_v2_whitelist.py
taskcluster/taskgraph/util/push_apk.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_aarch64.py
testing/mozharness/mozharness/mozilla/building/buildbase.py
new file mode 100644
--- /dev/null
+++ b/mobile/android/config/mozconfigs/android-aarch64/debug
@@ -0,0 +1,16 @@
+. "$topsrcdir/mobile/android/config/mozconfigs/common"
+
+# Global options
+ac_add_options --enable-debug
+ac_add_options --enable-marionette
+
+# Android
+ac_add_options --with-android-min-sdk=21
+ac_add_options --target=aarch64-linux-android
+
+export MOZILLA_OFFICIAL=1
+export MOZ_TELEMETRY_REPORTING=1
+
+ac_add_options --with-branding=mobile/android/branding/nightly
+
+. "$topsrcdir/mobile/android/config/mozconfigs/common.override"
new file mode 100644
--- /dev/null
+++ b/mobile/android/config/mozconfigs/android-aarch64/l10n-nightly
@@ -0,0 +1,32 @@
+. "$topsrcdir/mobile/android/config/mozconfigs/common"
+
+# L10n
+ac_add_options --with-l10n-base=../../l10n-central
+
+# Global options
+ac_add_options --disable-tests
+
+# Android
+ac_add_options --with-android-min-sdk=21
+ac_add_options --target=aarch64-linux-android
+
+ac_add_options --with-system-zlib
+ac_add_options --enable-updater
+ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
+
+export MOZILLA_OFFICIAL=1
+
+ac_add_options --with-branding=mobile/android/branding/nightly
+
+ac_add_options --disable-stdcxx-compat
+
+# Don't autoclobber l10n, as this can lead to missing binaries and broken builds
+# Bug 1283438
+mk_add_options AUTOCLOBBER=
+
+# Disable Keyfile Loading (and checks) since l10n doesn't need these keys
+# This overrides the settings in the common android mozconfig
+ac_add_options --without-mozilla-api-keyfile
+ac_add_options --without-adjust-sdk-keyfile
+
+. "$topsrcdir/mobile/android/config/mozconfigs/common.override"
new file mode 100644
--- /dev/null
+++ b/mobile/android/config/mozconfigs/android-aarch64/l10n-release
@@ -0,0 +1,28 @@
+. "$topsrcdir/mobile/android/config/mozconfigs/common"
+
+# L10n
+ac_add_options --with-l10n-base=../../l10n-central
+
+# Global options
+ac_add_options --disable-tests
+
+# Android
+ac_add_options --with-android-min-sdk=21
+ac_add_options --target=aarch64-linux-android
+
+ac_add_options --with-system-zlib
+ac_add_options --enable-updater
+ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
+
+export MOZILLA_OFFICIAL=1
+
+ac_add_options --enable-official-branding
+ac_add_options --with-branding=mobile/android/branding/beta
+
+ac_add_options --disable-stdcxx-compat
+
+# Don't autoclobber l10n, as this can lead to missing binaries and broken builds
+# Bug 1283438
+mk_add_options AUTOCLOBBER=
+
+. "$topsrcdir/mobile/android/config/mozconfigs/common.override"
new file mode 100644
--- /dev/null
+++ b/mobile/android/config/mozconfigs/android-aarch64/nightly
@@ -0,0 +1,18 @@
+. "$topsrcdir/mobile/android/config/mozconfigs/common"
+
+ac_add_options --enable-profiling
+
+# Android
+ac_add_options --with-android-min-sdk=21
+ac_add_options --target=aarch64-linux-android
+
+ac_add_options --with-branding=mobile/android/branding/nightly
+
+# This will overwrite the default of stripping everything and keep the symbol table.
+# This is useful for profiling with eideticker. See bug 788680
+STRIP_FLAGS="--strip-debug"
+
+export MOZILLA_OFFICIAL=1
+export MOZ_TELEMETRY_REPORTING=1
+
+. "$topsrcdir/mobile/android/config/mozconfigs/common.override"
new file mode 100644
--- /dev/null
+++ b/mobile/android/config/mozconfigs/android-aarch64/release
@@ -0,0 +1,16 @@
+. "$topsrcdir/mobile/android/config/mozconfigs/common"
+
+# Android
+ac_add_options --with-android-min-sdk=21
+ac_add_options --target=aarch64-linux-android
+
+ac_add_options --with-branding=mobile/android/branding/beta
+
+ac_add_options --enable-updater
+
+export MOZILLA_OFFICIAL=1
+export MOZ_TELEMETRY_REPORTING=1
+
+ac_add_options --enable-official-branding
+
+. "$topsrcdir/mobile/android/config/mozconfigs/common.override"
--- a/taskcluster/ci/build/android.yml
+++ b/taskcluster/ci/build/android.yml
@@ -266,8 +266,60 @@ android-api-15-gradle/opt:
         config:
             - builds/releng_base_android_64_builds.py
             - disable_signing.py
             - platform_supports_post_upload_to_latest.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: api-15-gradle
         tooltool-downloads: internal
+
+android-aarch64/opt:
+    description: "Android 5.0 AArch64 Opt"
+    index:
+        product: mobile
+        job-name: android-aarch64-opt
+    treeherder:
+        platform: android-5-0-aarch64/opt
+        symbol: tc(B)
+    worker-type: aws-provisioner-v1/gecko-{level}-b-android
+    worker:
+        implementation: docker-worker
+        max-run-time: 7200
+    run:
+        using: mozharness
+        actions: [get-secrets build generate-build-stats multi-l10n update]
+        config:
+            - builds/releng_base_android_64_builds.py
+            - disable_signing.py
+            - platform_supports_post_upload_to_latest.py
+        script: "mozharness/scripts/fx_desktop_build.py"
+        secrets: true
+        custom-build-variant-cfg: aarch64
+        tooltool-downloads: internal
+
+android-aarch64-nightly/opt:
+    description: "Android 5.0 AArch64 Nightly"
+    attributes:
+        nightly: true
+    index:
+        product: mobile
+        job-name: android-aarch64-opt
+        type: nightly
+    treeherder:
+        platform: android-5-0-aarch64/opt
+        symbol: tc(N)
+    worker-type: aws-provisioner-v1/gecko-{level}-b-android
+    worker:
+        implementation: docker-worker
+        max-run-time: 7200
+    run:
+        using: mozharness
+        actions: [get-secrets build generate-build-stats multi-l10n update]
+        config:
+            - builds/releng_base_android_64_builds.py
+            - disable_signing.py
+            - platform_supports_post_upload_to_latest.py
+            - taskcluster_nightly.py
+        script: "mozharness/scripts/fx_desktop_build.py"
+        secrets: true
+        custom-build-variant-cfg: aarch64
+        tooltool-downloads: internal
--- a/taskcluster/ci/upload-symbols/kind.yml
+++ b/taskcluster/ci/upload-symbols/kind.yml
@@ -11,16 +11,17 @@ transforms:
 kind-dependencies:
     - build
 
 only-for-build-platforms:
     - linux64/opt
     - linux64/debug
     - linux64-nightly/opt
     - linux-nightly/opt
+    - android-aarch64-nightly/opt
     - android-api-15/opt
     - android-api-15-nightly/opt
     - android-api-15-old-id-nightly/opt
     - android-x86-nightly/opt
     - android-x86-old-id-nightly/opt
     - macosx64-nightly/opt
     - win64-nightly/opt
 
--- a/taskcluster/taskgraph/target_tasks.py
+++ b/taskcluster/taskgraph/target_tasks.py
@@ -202,18 +202,22 @@ def target_tasks_code_coverage(full_task
 
 @_target_task('nightly_fennec')
 def target_tasks_nightly_fennec(full_task_graph, parameters):
     """Select the set of tasks required for a nightly build of fennec. The
     nightly build process involves a pipeline of builds, signing,
     and, eventually, uploading the tasks to balrog."""
     def filter(task):
         platform = task.attributes.get('build_platform')
-        if platform in ('android-api-15-nightly', 'android-x86-nightly', 'android-nightly',
-                        'android-api-15-old-id-nightly', 'android-x86-old-id-nightly'):
+        if platform in ('android-aarch64-nightly',
+                        'android-api-15-nightly',
+                        'android-api-15-old-id-nightly',
+                        'android-nightly',
+                        'android-x86-nightly',
+                        'android-x86-old-id-nightly'):
             if not task.attributes.get('nightly', False):
                 return False
             return filter_for_project(task, parameters)
     return [l for l, t in full_task_graph.tasks.iteritems() if filter(t)]
 
 
 @_target_task('nightly_linux')
 def target_tasks_nightly_linux(full_task_graph, parameters):
--- a/taskcluster/taskgraph/transforms/beetmover.py
+++ b/taskcluster/taskgraph/transforms/beetmover.py
@@ -101,25 +101,27 @@ from voluptuous import Any, Required, Op
 
 
 UPSTREAM_ARTIFACT_UNSIGNED_PATHS = {
     'linux64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
     'linux-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
     'linux64-devedition-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
     'linux-devedition-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
     'android-x86-nightly': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
+    'android-aarch64-nightly': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
     'android-api-15-nightly': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
     'android-x86-old-id-nightly': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
     'android-api-15-old-id-nightly': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
     'macosx64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
 
     'linux64-nightly-l10n': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_L10N,
     'linux-nightly-l10n': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_L10N,
     'android-x86-nightly-multi': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI,
     'android-x86-old-id-nightly-multi': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI,
+    'android-aarch64-nightly-multi': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI,
     'android-api-15-nightly-l10n': ["balrog_props.json"],
     'android-api-15-nightly-multi': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI,
     'android-api-15-old-id-nightly-multi': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI,
     'macosx64-nightly-l10n': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_L10N,
 }
 UPSTREAM_ARTIFACT_SIGNED_PATHS = {
     'linux64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_EN_US + [
         "target.tar.bz2",
@@ -133,16 +135,17 @@ UPSTREAM_ARTIFACT_SIGNED_PATHS = {
         "target.tar.bz2",
         "target.tar.bz2.asc",
     ],
     'linux-devedition-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_EN_US + [
         "target.tar.bz2",
         "target.tar.bz2.asc",
     ],
     'android-x86-nightly': ["en-US/target.apk"],
+    'android-aarch64-nightly': ["en-US/target.apk"],
     'android-api-15-nightly': ["en-US/target.apk"],
     'android-x86-old-id-nightly': ["en-US/target.apk"],
     'android-api-15-old-id-nightly': ["en-US/target.apk"],
     'macosx64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_EN_US + [
         "target.dmg",
         "target.dmg.asc",
     ],
 
@@ -151,16 +154,17 @@ UPSTREAM_ARTIFACT_SIGNED_PATHS = {
         "target.tar.bz2.asc",
     ],
     'linux-nightly-l10n': _DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_L10N + [
         "target.tar.bz2",
         "target.tar.bz2.asc",
     ],
     'android-x86-nightly-multi': ["target.apk"],
     'android-x86-old-id-nightly-multi': ["target.apk"],
+    'android-aarch64-nightly-multi': ["target.apk"],
     'android-api-15-nightly-l10n': ["target.apk"],
     'android-api-15-nightly-multi': ["target.apk"],
     'android-api-15-old-id-nightly-multi': ["target.apk"],
     'macosx64-nightly-l10n': _DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_L10N + [
         "target.dmg",
         "target.dmg.asc",
     ],
 
--- a/taskcluster/taskgraph/transforms/gecko_v2_whitelist.py
+++ b/taskcluster/taskgraph/transforms/gecko_v2_whitelist.py
@@ -11,16 +11,17 @@ here without any further fuss.
 
 Once all jobs have been ported from Buildbot, this file can be removed.
 """
 
 from __future__ import absolute_import, print_function, unicode_literals
 
 # please keep me in lexical order
 JOB_NAME_WHITELIST = set([
+    'android-aarch64-opt',
     'android-api-15-debug',
     'android-api-15-gradle-dependencies-opt',
     'android-api-15-gradle-opt',
     'android-api-15-opt',
     'android-api-15-old-id-opt',
     'android-x86-opt',
     'android-x86-old-id-opt',
     'browser-haz-debug',
--- a/taskcluster/taskgraph/util/push_apk.py
+++ b/taskcluster/taskgraph/util/push_apk.py
@@ -6,16 +6,17 @@ Common functions for both push-apk and p
 """
 
 import re
 
 from taskgraph.util.schema import validate_schema
 
 REQUIRED_ARCHITECTURES = {
     'android-x86-nightly',
+    'android-aarch64-nightly',
     'android-api-15-nightly',
 }
 PLATFORM_REGEX = re.compile(r'signing-android-(\S+)-nightly')
 
 
 def fill_labels_tranform(_, jobs):
     for job in jobs:
         job['label'] = job['name']
new file mode 100644
--- /dev/null
+++ b/testing/mozharness/configs/builds/releng_sub_android_configs/64_aarch64.py
@@ -0,0 +1,9 @@
+config = {
+    'base_name': 'Android aarch64 API 21+ %(branch)s',
+    'stage_platform': 'android-aarch64',
+    'build_type': 'aarch64-opt',
+    'src_mozconfig': 'mobile/android/config/mozconfigs/android-aarch64/nightly',
+    'tooltool_manifest_src': 'mobile/android/config/tooltool-manifests/android/releng.manifest',
+    'multi_locale_config_platform': 'android',
+    'artifact_flag_build_variant_in_try': 'aarch64-artifact',
+}
--- a/testing/mozharness/mozharness/mozilla/building/buildbase.py
+++ b/testing/mozharness/mozharness/mozilla/building/buildbase.py
@@ -369,16 +369,17 @@ class BuildOptionParser(object):
         'api-15-debug': 'builds/releng_sub_%s_configs/%s_api_15_debug.py',
         'api-15-debug-artifact': 'builds/releng_sub_%s_configs/%s_api_15_debug_artifact.py',
         'api-15-gradle': 'builds/releng_sub_%s_configs/%s_api_15_gradle.py',
         'api-15-gradle-artifact': 'builds/releng_sub_%s_configs/%s_api_15_gradle_artifact.py',
         'x86': 'builds/releng_sub_%s_configs/%s_x86.py',
         'x86-old-id': 'builds/releng_sub_%s_configs/%s_x86_old_id.py',
         'x86-artifact': 'builds/releng_sub_%s_configs/%s_x86_artifact.py',
         'api-15-partner-sample1': 'builds/releng_sub_%s_configs/%s_api_15_partner_sample1.py',
+        'aarch64': 'builds/releng_sub_%s_configs/%s_aarch64.py',
         'android-test': 'builds/releng_sub_%s_configs/%s_test.py',
         'android-checkstyle': 'builds/releng_sub_%s_configs/%s_checkstyle.py',
         'android-lint': 'builds/releng_sub_%s_configs/%s_lint.py',
         'android-findbugs': 'builds/releng_sub_%s_configs/%s_findbugs.py',
         'valgrind' : 'builds/releng_sub_%s_configs/%s_valgrind.py',
         'artifact': 'builds/releng_sub_%s_configs/%s_artifact.py',
         'debug-artifact': 'builds/releng_sub_%s_configs/%s_debug_artifact.py',
         'qr-debug': 'builds/releng_sub_%s_configs/%s_qr_debug.py',