Bug 1366404 - Add AArch64 Nightly build; r?nalexander draft
authorJim Chen <nchen@mozilla.com>
Fri, 19 May 2017 17:52:20 -0400
changeset 582474 b4598c5bba3d65eb010c8a7cd5ffb4186eaaa967
parent 581334 c800b6dfca673f8cb0f3cf41e4f495755d04bbb3
child 629792 475b08972b3069a0b743b4c59f3644f2bd416071
push id60105
push userbmo:nchen@mozilla.com
push dateMon, 22 May 2017 17:48:23 +0000
reviewersnalexander
bugs1366404
milestone55.0a1
Bug 1366404 - Add AArch64 Nightly build; r?nalexander Add configurations for building and uploading AArch64 Nightly builds. Right now the builds are in tier 1, but I'm not sure if they should be in tier 2. I also didn't want to worry about Artifact builds for this patch, but I can try adding that if needed. MozReview-Commit-ID: 4U7uw0NX2eV
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
@@ -158,8 +158,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
@@ -14,16 +14,17 @@ kind-dependencies:
 only-for-build-platforms:
     - linux64/opt
     - linux64/debug
     - linux64-nightly/opt
     - linux-nightly/opt
     - android-api-15/opt
     - android-api-15-nightly/opt
     - android-x86-nightly/opt
+    - android-aarch64-nightly/opt
     - macosx64-nightly/opt
     - win64-nightly/opt
 
 job-template:
    label: # see transforms
    description: Upload Symbols
    dependencies: # see transforms
    expires-after: 7 days
--- a/taskcluster/taskgraph/target_tasks.py
+++ b/taskcluster/taskgraph/target_tasks.py
@@ -202,17 +202,20 @@ 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'):
+        if platform in ('android-api-15-nightly',
+                        'android-x86-nightly',
+                        'android-aarch64-nightly',
+                        'android-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,22 +101,24 @@ 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,
     '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-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,
     'macosx64-nightly-l10n': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_L10N,
 }
 UPSTREAM_ARTIFACT_SIGNED_PATHS = {
     'linux64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_EN_US + [
         "target.tar.bz2",
         "target.tar.bz2.asc",
@@ -129,31 +131,33 @@ 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"],
     'macosx64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_EN_US + [
         "target.dmg",
         "target.dmg.asc",
     ],
 
     'linux64-nightly-l10n': _DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_L10N + [
         "target.tar.bz2",
         "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-aarch64-nightly-multi': ["target.apk"],
     'android-api-15-nightly-l10n': ["target.apk"],
     'android-api-15-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-x86-opt',
     'browser-haz-debug',
     'linux-debug',
     'linux-devedition',
--- 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
@@ -367,16 +367,17 @@ class BuildOptionParser(object):
         'api-15-artifact': 'builds/releng_sub_%s_configs/%s_api_15_artifact.py',
         '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-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',