--- /dev/null
+See https://docs.google.com/document/d/1BpyncT9XPmtiHTlJyBpO9vVUIz6g1CRFpLL8rpoxy0M/edit
\ No newline at end of file
--- /dev/null
+2
\ No newline at end of file
--- /dev/null
+#!/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:])
--- /dev/null
+#!/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')
--- /dev/null
+#!/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')
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"
} 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"))
"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",
--- /dev/null
+[
+ {
+ "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
'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',
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
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', '')
"""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):
--- /dev/null
+# 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')
+
"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",