Add jobs for building for Chromecast
authorKevin Lubick <kjlubick@google.com>
Wed, 8 Mar 2017 19:01:01 +0000 (14:01 -0500)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Wed, 8 Mar 2017 19:41:14 +0000 (19:41 +0000)
BUG=skia:6345

Change-Id: Iaf09eb7f57ae71687c6804221837a8cc8ef04931
Reviewed-on: https://skia-review.googlesource.com/9419
Commit-Queue: Kevin Lubick <kjlubick@google.com>
Reviewed-by: Eric Boren <borenet@google.com>
12 files changed:
infra/bots/assets/cast_toolchain/README.md [new file with mode: 0644]
infra/bots/assets/cast_toolchain/VERSION [new file with mode: 0644]
infra/bots/assets/cast_toolchain/common.py [new file with mode: 0755]
infra/bots/assets/cast_toolchain/download.py [new file with mode: 0755]
infra/bots/assets/cast_toolchain/upload.py [new file with mode: 0755]
infra/bots/gen_tasks.go
infra/bots/jobs.json
infra/bots/recipe_modules/compile/example.expected/Build-Ubuntu-GCC-arm-Release-Chromecast.json [new file with mode: 0644]
infra/bots/recipe_modules/compile/example.py
infra/bots/recipe_modules/flavor/api.py
infra/bots/recipe_modules/flavor/gn_chromecast_flavor.py [new file with mode: 0644]
infra/bots/tasks.json

diff --git a/infra/bots/assets/cast_toolchain/README.md b/infra/bots/assets/cast_toolchain/README.md
new file mode 100644 (file)
index 0000000..2b96d18
--- /dev/null
@@ -0,0 +1 @@
+See https://docs.google.com/document/d/1BpyncT9XPmtiHTlJyBpO9vVUIz6g1CRFpLL8rpoxy0M/edit
\ No newline at end of file
diff --git a/infra/bots/assets/cast_toolchain/VERSION b/infra/bots/assets/cast_toolchain/VERSION
new file mode 100644 (file)
index 0000000..d8263ee
--- /dev/null
@@ -0,0 +1 @@
+2
\ No newline at end of file
diff --git a/infra/bots/assets/cast_toolchain/common.py b/infra/bots/assets/cast_toolchain/common.py
new file mode 100755 (executable)
index 0000000..4920c9b
--- /dev/null
@@ -0,0 +1,26 @@
+#!/usr/bin/env python
+#
+# Copyright 2016 Google Inc.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+
+"""Common vars used by scripts in this directory."""
+
+
+import os
+import sys
+
+FILE_DIR = os.path.dirname(os.path.abspath(__file__))
+INFRA_BOTS_DIR = os.path.realpath(os.path.join(FILE_DIR, os.pardir, os.pardir))
+
+sys.path.insert(0, INFRA_BOTS_DIR)
+from assets import assets
+
+ASSET_NAME = os.path.basename(FILE_DIR)
+
+
+def run(cmd):
+  """Run a command, eg. "upload" or "download". """
+  assets.main([cmd, ASSET_NAME] + sys.argv[1:])
diff --git a/infra/bots/assets/cast_toolchain/download.py b/infra/bots/assets/cast_toolchain/download.py
new file mode 100755 (executable)
index 0000000..96cc87d
--- /dev/null
@@ -0,0 +1,16 @@
+#!/usr/bin/env python
+#
+# Copyright 2016 Google Inc.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+
+"""Download the current version of the asset."""
+
+
+import common
+
+
+if __name__ == '__main__':
+  common.run('download')
diff --git a/infra/bots/assets/cast_toolchain/upload.py b/infra/bots/assets/cast_toolchain/upload.py
new file mode 100755 (executable)
index 0000000..ba7fc8b
--- /dev/null
@@ -0,0 +1,16 @@
+#!/usr/bin/env python
+#
+# Copyright 2016 Google Inc.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+
+"""Upload a new version of the asset."""
+
+
+import common
+
+
+if __name__ == '__main__':
+  common.run('upload')
index ebf2b10..a7353b5 100644 (file)
@@ -97,6 +97,9 @@ func deriveCompileTaskName(jobName string, parts map[string]string) string {
                                ec = "Android_Vulkan"
                        }
                        task_os = "Ubuntu"
+               } else if task_os == "Chromecast" {
+                       task_os = "Ubuntu"
+                       ec = "Chromecast"
                } else if task_os == "iOS" {
                        ec = task_os
                        task_os = "Mac"
@@ -223,6 +226,8 @@ func compile(b *specs.TasksCfgBuilder, name string, parts map[string]string) str
                } else {
                        pkgs = append(pkgs, b.MustGetCipdPackageFromAsset("android_ndk_linux"))
                }
+       } else if strings.Contains(name, "Chromecast") {
+               pkgs = append(pkgs, b.MustGetCipdPackageFromAsset("cast_toolchain"))
        } else if strings.Contains(name, "Ubuntu") {
                if strings.Contains(name, "Clang") {
                        pkgs = append(pkgs, b.MustGetCipdPackageFromAsset("clang_linux"))
index 079c7a6..1623834 100644 (file)
@@ -35,6 +35,8 @@
   "Build-Ubuntu-Clang-x86_64-Release-Mini",
   "Build-Ubuntu-Clang-x86_64-Release-TSAN",
   "Build-Ubuntu-Clang-x86_64-Release-Vulkan",
+  "Build-Ubuntu-GCC-arm-Debug-Chromecast",
+  "Build-Ubuntu-GCC-arm-Release-Chromecast",
   "Build-Ubuntu-GCC-x86-Debug",
   "Build-Ubuntu-GCC-x86-Release",
   "Build-Ubuntu-GCC-x86_64-Debug",
diff --git a/infra/bots/recipe_modules/compile/example.expected/Build-Ubuntu-GCC-arm-Release-Chromecast.json b/infra/bots/recipe_modules/compile/example.expected/Build-Ubuntu-GCC-arm-Release-Chromecast.json
new file mode 100644 (file)
index 0000000..bafdb90
--- /dev/null
@@ -0,0 +1,160 @@
+[
+  {
+    "cmd": [
+      "python",
+      "-u",
+      "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n  if os.path.exists(path):\n    print \"%s exists but is not a dir\" % path\n    sys.exit(1)\n  os.makedirs(path, mode)\n",
+      "[CUSTOM_/_B_WORK]",
+      "511"
+    ],
+    "name": "makedirs checkout_path",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@python.inline@@@@",
+      "@@@STEP_LOG_LINE@python.inline@import sys, os@@@",
+      "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@",
+      "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@",
+      "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@",
+      "@@@STEP_LOG_LINE@python.inline@  if os.path.exists(path):@@@",
+      "@@@STEP_LOG_LINE@python.inline@    print \"%s exists but is not a dir\" % path@@@",
+      "@@@STEP_LOG_LINE@python.inline@    sys.exit(1)@@@",
+      "@@@STEP_LOG_LINE@python.inline@  os.makedirs(path, mode)@@@",
+      "@@@STEP_LOG_END@python.inline@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "python",
+      "-u",
+      "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py",
+      "--spec",
+      "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]",
+      "--patch_root",
+      "skia",
+      "--revision_mapping_file",
+      "{\"skia\": \"got_revision\"}",
+      "--git-cache-dir",
+      "[CUSTOM_/_B_CACHE]",
+      "--output_json",
+      "/path/to/tmp/json",
+      "--revision",
+      "skia@abc123",
+      "--output_manifest"
+    ],
+    "cwd": "[CUSTOM_/_B_WORK]",
+    "env": {
+      "BUILDTYPE": "Release",
+      "CHROME_HEADLESS": "1",
+      "GIT_HTTP_LOW_SPEED_LIMIT": "1000",
+      "GIT_HTTP_LOW_SPEED_TIME": "300",
+      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+      "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-arm-Release-Chromecast"
+    },
+    "name": "bot_update",
+    "~followup_annotations": [
+      "@@@STEP_TEXT@Some step text@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"did_run\": true, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"fixed_revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"skia\": \"abc123\"@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"manifest\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"skia\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"repository\": \"https://fake.org/skia.git\", @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"patch_failure\": false, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"patch_root\": \"skia\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"properties\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"root\": \"skia\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"step_text\": \"Some step text\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@",
+      "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "python",
+      "-u",
+      "[CUSTOM_/_B_WORK]/skia/bin/fetch-gn"
+    ],
+    "cwd": "[CUSTOM_/_B_WORK]/skia",
+    "env": {
+      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]"
+    },
+    "name": "fetch-gn"
+  },
+  {
+    "cmd": [
+      "[CUSTOM_/_B_WORK]/skia/bin/gn",
+      "gen",
+      "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-arm-Release-Chromecast/Release",
+      "--args=ar=\"[START_DIR]/cast_toolchain/bin/armv7a-cros-linux-gnueabi-ar\" cc=\"[START_DIR]/cast_toolchain/bin/armv7a-cros-linux-gnueabi-gcc\" cxx=\"[START_DIR]/cast_toolchain/bin/armv7a-cros-linux-gnueabi-g++\" extra_cflags=[\"-g0\"] extra_ldflags=[\"-static-libstdc++\", \"-static-libgcc\"] is_debug=false skia_enable_gpu=false skia_use_fontconfig=false skia_use_icu=false skia_use_system_freetype2=false target_cpu=\"arm\""
+    ],
+    "cwd": "[CUSTOM_/_B_WORK]/skia",
+    "env": {
+      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]"
+    },
+    "name": "gn gen"
+  },
+  {
+    "cmd": [
+      "ninja",
+      "-C",
+      "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-arm-Release-Chromecast/Release",
+      "nanobench"
+    ],
+    "cwd": "[CUSTOM_/_B_WORK]/skia",
+    "env": {
+      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]"
+    },
+    "name": "ninja"
+  },
+  {
+    "cmd": [
+      "python",
+      "-u",
+      "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'get_images_from_skps', 'get_images_from_skps.exe', 'nanobench', 'nanobench.exe', 'skpbench', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe', 'vulkan-1.dll']\n\ntry:\n  os.makedirs(dst)\nexcept OSError as e:\n  if e.errno != errno.EEXIST:\n    raise\n\nfor pattern in build_products_whitelist:\n  path = os.path.join(src, pattern)\n  for f in glob.glob(path):\n    dst_path = os.path.join(dst, os.path.relpath(f, src))\n    if not os.path.isdir(os.path.dirname(dst_path)):\n      os.makedirs(os.path.dirname(dst_path))\n    print 'Copying build product %s to %s' % (f, dst_path)\n    shutil.move(f, dst_path)\n",
+      "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-arm-Release-Chromecast/Release",
+      "[CUSTOM_[SWARM_OUT_DIR]]/out/Release"
+    ],
+    "name": "copy build products",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@python.inline@import errno@@@",
+      "@@@STEP_LOG_LINE@python.inline@import glob@@@",
+      "@@@STEP_LOG_LINE@python.inline@import os@@@",
+      "@@@STEP_LOG_LINE@python.inline@import shutil@@@",
+      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
+      "@@@STEP_LOG_LINE@python.inline@@@@",
+      "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@",
+      "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@",
+      "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'get_images_from_skps', 'get_images_from_skps.exe', 'nanobench', 'nanobench.exe', 'skpbench', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe', 'vulkan-1.dll']@@@",
+      "@@@STEP_LOG_LINE@python.inline@@@@",
+      "@@@STEP_LOG_LINE@python.inline@try:@@@",
+      "@@@STEP_LOG_LINE@python.inline@  os.makedirs(dst)@@@",
+      "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@",
+      "@@@STEP_LOG_LINE@python.inline@  if e.errno != errno.EEXIST:@@@",
+      "@@@STEP_LOG_LINE@python.inline@    raise@@@",
+      "@@@STEP_LOG_LINE@python.inline@@@@",
+      "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@",
+      "@@@STEP_LOG_LINE@python.inline@  path = os.path.join(src, pattern)@@@",
+      "@@@STEP_LOG_LINE@python.inline@  for f in glob.glob(path):@@@",
+      "@@@STEP_LOG_LINE@python.inline@    dst_path = os.path.join(dst, os.path.relpath(f, src))@@@",
+      "@@@STEP_LOG_LINE@python.inline@    if not os.path.isdir(os.path.dirname(dst_path)):@@@",
+      "@@@STEP_LOG_LINE@python.inline@      os.makedirs(os.path.dirname(dst_path))@@@",
+      "@@@STEP_LOG_LINE@python.inline@    print 'Copying build product %s to %s' % (f, dst_path)@@@",
+      "@@@STEP_LOG_LINE@python.inline@    shutil.move(f, dst_path)@@@",
+      "@@@STEP_LOG_END@python.inline@@@"
+    ]
+  },
+  {
+    "name": "$result",
+    "recipe_result": null,
+    "status_code": 0
+  }
+]
\ No newline at end of file
index 988184e..967637b 100644 (file)
@@ -29,6 +29,7 @@ TEST_BUILDERS = {
       'Build-Ubuntu-Clang-x86_64-Debug-GN',
       'Build-Ubuntu-Clang-x86_64-Release-Mini',
       'Build-Ubuntu-Clang-x86_64-Release-Vulkan',
+      'Build-Ubuntu-GCC-arm-Release-Chromecast',
       'Build-Ubuntu-GCC-x86-Debug',
       'Build-Ubuntu-GCC-x86_64-Debug-GN',
       'Build-Ubuntu-GCC-x86_64-Debug-MSAN',
index c90136f..eadaea0 100644 (file)
@@ -11,6 +11,7 @@ from recipe_engine import recipe_api
 from . import default_flavor
 from . import flutter_flavor
 from . import gn_android_flavor
+from . import gn_chromecast_flavor
 from . import gn_flavor
 from . import ios_flavor
 from . import pdfium_flavor
@@ -30,6 +31,9 @@ VERSION_NONE = -1
 def is_android(builder_cfg):
   return 'Android' in builder_cfg.get('extra_config', '')
 
+def is_chromecast(builder_cfg):
+  return 'Chromecast' in builder_cfg.get('extra_config', '')
+
 def is_flutter(builder_cfg):
   return 'Flutter' in builder_cfg.get('extra_config', '')
 
@@ -48,6 +52,8 @@ class SkiaFlavorApi(recipe_api.RecipeApi):
     """Return a flavor utils object specific to the given builder."""
     if is_flutter(builder_cfg):
       return flutter_flavor.FlutterFlavorUtils(self.m)
+    if is_chromecast(builder_cfg):
+      return gn_chromecast_flavor.GNChromecastFlavorUtils(self.m)
     if is_android(builder_cfg):
       return gn_android_flavor.GNAndroidFlavorUtils(self.m)
     elif is_ios(builder_cfg):
diff --git a/infra/bots/recipe_modules/flavor/gn_chromecast_flavor.py b/infra/bots/recipe_modules/flavor/gn_chromecast_flavor.py
new file mode 100644 (file)
index 0000000..e8e516d
--- /dev/null
@@ -0,0 +1,59 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from recipe_engine import recipe_api
+
+import default_flavor
+import gn_android_flavor
+import subprocess
+
+
+"""GN Chromecast flavor utils, used for building Skia for Chromecast with GN"""
+class GNChromecastFlavorUtils(gn_android_flavor.GNAndroidFlavorUtils):
+  def __init__(self, m):
+    super(GNChromecastFlavorUtils, self).__init__(m)
+
+  def compile(self, unused_target, **kwargs):
+    configuration = self.m.vars.builder_cfg.get('configuration')
+    os            = self.m.vars.builder_cfg.get('os')
+    target_arch   = self.m.vars.builder_cfg.get('target_arch')
+
+    # Makes the binary small enough to fit on the small disk.
+    extra_cflags = ['-g0']
+    # Chromecast does not package libstdc++
+    extra_ldflags = ['-static-libstdc++', '-static-libgcc']
+
+    toolchain_dir = self.m.vars.slave_dir.join('cast_toolchain')
+
+    quote = lambda x: '"%s"' % x
+    args = {
+      'cc': quote(toolchain_dir.join('bin','armv7a-cros-linux-gnueabi-gcc')),
+      'cxx': quote(toolchain_dir.join('bin','armv7a-cros-linux-gnueabi-g++')),
+      'ar': quote(toolchain_dir.join('bin','armv7a-cros-linux-gnueabi-ar')),
+      'target_cpu': quote(target_arch),
+      'skia_use_fontconfig': 'false',
+      'skia_enable_gpu': 'false',
+      # The toolchain won't allow system libraries to be used
+      # when cross-compiling
+      'skia_use_system_freetype2': 'false',
+      # Makes the binary smaller
+      'skia_use_icu': 'false',
+    }
+
+    if configuration != 'Debug':
+      args['is_debug'] = 'false'
+    args['extra_cflags'] = repr(extra_cflags).replace("'", '"')
+    args['extra_ldflags'] = repr(extra_ldflags).replace("'", '"')
+
+    gn_args = ' '.join('%s=%s' % (k,v) for (k,v) in sorted(args.iteritems()))
+
+    gn    = 'gn.exe'    if 'Win' in os else 'gn'
+    ninja = 'ninja.exe' if 'Win' in os else 'ninja'
+    gn = self.m.vars.skia_dir.join('bin', gn)
+
+    self._py('fetch-gn', self.m.vars.skia_dir.join('bin', 'fetch-gn'))
+    self._run('gn gen', gn, 'gen', self.out_dir, '--args=' + gn_args)
+    # We only build perf for the chromecasts.
+    self._run('ninja', ninja, '-C', self.out_dir, 'nanobench')
+
index 26d4491..5624cf7 100644 (file)
         "Build-Ubuntu-Clang-x86_64-Release-Vulkan"
       ]
     },
+    "Build-Ubuntu-GCC-arm-Debug-Chromecast": {
+      "priority": 0.8,
+      "tasks": [
+        "Build-Ubuntu-GCC-arm-Debug-Chromecast"
+      ]
+    },
+    "Build-Ubuntu-GCC-arm-Release-Chromecast": {
+      "priority": 0.8,
+      "tasks": [
+        "Build-Ubuntu-GCC-arm-Release-Chromecast"
+      ]
+    },
     "Build-Ubuntu-GCC-x86-Debug": {
       "priority": 0.8,
       "tasks": [
       "isolate": "compile_skia.isolate",
       "priority": 0.8
     },
+    "Build-Ubuntu-GCC-arm-Debug-Chromecast": {
+      "cipd_packages": [
+        {
+          "name": "skia/bots/cast_toolchain",
+          "path": "cast_toolchain",
+          "version": "version:2"
+        }
+      ],
+      "dimensions": [
+        "gpu:none",
+        "os:Ubuntu-14.04",
+        "pool:Skia"
+      ],
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "swarm_compile",
+        "repository=<(REPO)",
+        "buildername=Build-Ubuntu-GCC-arm-Debug-Chromecast",
+        "mastername=fake-master",
+        "buildnumber=2",
+        "slavename=fake-buildslave",
+        "nobuildbot=True",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)"
+      ],
+      "isolate": "compile_skia.isolate",
+      "priority": 0.8
+    },
+    "Build-Ubuntu-GCC-arm-Release-Chromecast": {
+      "cipd_packages": [
+        {
+          "name": "skia/bots/cast_toolchain",
+          "path": "cast_toolchain",
+          "version": "version:2"
+        }
+      ],
+      "dimensions": [
+        "gpu:none",
+        "os:Ubuntu-14.04",
+        "pool:Skia"
+      ],
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "swarm_compile",
+        "repository=<(REPO)",
+        "buildername=Build-Ubuntu-GCC-arm-Release-Chromecast",
+        "mastername=fake-master",
+        "buildnumber=2",
+        "slavename=fake-buildslave",
+        "nobuildbot=True",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)"
+      ],
+      "isolate": "compile_skia.isolate",
+      "priority": 0.8
+    },
     "Build-Ubuntu-GCC-x86-Debug": {
       "dimensions": [
         "gpu:none",