diff options
author | mtklein <mtklein@chromium.org> | 2016-07-29 05:07:39 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-07-29 05:07:39 -0700 |
commit | 9081ceb1236dfd1f3c7e9d5ef1d6f7c409d06aa1 (patch) | |
tree | 304728c29edfba15cb5bdbb3ee738ce16a2d6dda | |
parent | 4e41364b1ee4f71c0f8c01b3a05f9917b5e02d91 (diff) |
GN: use ccache if available and the requested compiler.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2186553006
Review-Url: https://codereview.chromium.org/2186553006
6 files changed, 315 insertions, 3 deletions
diff --git a/infra/bots/recipe_modules/skia/fake_specs.py b/infra/bots/recipe_modules/skia/fake_specs.py index f8c07437c9..7eb347334b 100644 --- a/infra/bots/recipe_modules/skia/fake_specs.py +++ b/infra/bots/recipe_modules/skia/fake_specs.py @@ -332,6 +332,34 @@ FAKE_SPECS = { 'upload_dm_results': True, 'upload_perf_results': False, }, + 'Build-Ubuntu-Clang-x86_64-Debug-GN': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'Clang', + 'configuration': 'Debug', + 'extra_config': 'GN', + 'is_trybot': False, + 'os': 'Ubuntu', + 'role': 'Build', + 'target_arch': 'x86_64', + }, + 'configuration': 'Debug', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': 'skia_arch_type=x86_64 skia_warnings_as_errors=1', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, 'Build-Ubuntu-GCC-x86_64-Debug-GN': { 'build_targets': [ 'most', diff --git a/infra/bots/recipe_modules/skia/gn_flavor.py b/infra/bots/recipe_modules/skia/gn_flavor.py index d7fa86c77f..cdb26e0631 100644 --- a/infra/bots/recipe_modules/skia/gn_flavor.py +++ b/infra/bots/recipe_modules/skia/gn_flavor.py @@ -18,6 +18,18 @@ class GNFlavorUtils(default_flavor.DefaultFlavorUtils): is_debug = 'is_debug=false' gn_args = [is_debug] + cc, cxx = 'cc', 'c++' + if 'Clang' in self._skia_api.builder_name: + cc, cxx = 'clang', 'clang++' + elif 'GCC' in self._skia_api.builder_name: + cc, cxx = 'gcc', 'g++' + + ccache = self._skia_api.ccache() + if ccache: + cc, cxx = '"%s %s"' % (ccache, cc), '"%s %s"' % (ccache, cxx) + + gn_args += [ 'cc=' + cc, 'cxx=' + cxx ] + # Run gn gen. gn_exe = 'gn' if self._skia_api.m.platform.is_win: diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-Clang-x86_64-Debug-GN.json b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-Clang-x86_64-Debug-GN.json new file mode 100644 index 0000000000..91ca8c05d7 --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-Clang-x86_64-Debug-GN.json @@ -0,0 +1,237 @@ +[ + { + "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_PACKAGE_REPO[depot_tools]/gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_/_B_WORK]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-Clang-x86_64-Debug-GN" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"Clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"GN\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "[CUSTOM_/_B_WORK]/skia/bin/fetch-gn" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-Clang-x86_64-Debug-GN" + }, + "name": "fetch-gn" + }, + { + "cmd": [ + "python", + "-u", + "import json\nimport subprocess\nimport sys\n\nccache = None\ntry:\n ccache = subprocess.check_output(['which', 'ccache']).rstrip()\nexcept:\n pass\nprint json.dumps({'ccache': ccache})\n" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-Clang-x86_64-Debug-GN" + }, + "name": "has ccache?", + "stdout": "/path/to/tmp/json", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"ccache\": \"/usr/bin/ccache\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@ccache = None@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ ccache = subprocess.check_output(['which', 'ccache']).rstrip()@@@", + "@@@STEP_LOG_LINE@python.inline@except:@@@", + "@@@STEP_LOG_LINE@python.inline@ pass@@@", + "@@@STEP_LOG_LINE@python.inline@print json.dumps({'ccache': ccache})@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "gn", + "gen", + "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-Clang-x86_64-Debug-GN/Debug", + "--args=is_debug=true cc=\"/usr/bin/ccache clang\" cxx=\"/usr/bin/ccache clang++\"" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-Clang-x86_64-Debug-GN" + }, + "name": "gn_gen" + }, + { + "cmd": [ + "ninja", + "-C", + "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-Clang-x86_64-Debug-GN/Debug" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-Clang-x86_64-Debug-GN" + }, + "name": "compile most" + }, + { + "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', 'nanobench', 'nanobench.exe', '*.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-Clang-x86_64-Debug-GN/Debug", + "[CUSTOM_[SWARM_OUT_DIR]]/out/Debug" + ], + "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', 'nanobench', 'nanobench.exe', '*.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 diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Debug-GN.json b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Debug-GN.json index e6cb1a1d7d..f836737509 100644 --- a/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Debug-GN.json +++ b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Debug-GN.json @@ -128,10 +128,43 @@ }, { "cmd": [ + "python", + "-u", + "import json\nimport subprocess\nimport sys\n\nccache = None\ntry:\n ccache = subprocess.check_output(['which', 'ccache']).rstrip()\nexcept:\n pass\nprint json.dumps({'ccache': ccache})\n" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-x86_64-Debug-GN" + }, + "name": "has ccache?", + "stdout": "/path/to/tmp/json", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"ccache\": \"/usr/bin/ccache\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@ccache = None@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ ccache = subprocess.check_output(['which', 'ccache']).rstrip()@@@", + "@@@STEP_LOG_LINE@python.inline@except:@@@", + "@@@STEP_LOG_LINE@python.inline@ pass@@@", + "@@@STEP_LOG_LINE@python.inline@print json.dumps({'ccache': ccache})@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ "gn", "gen", "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-x86_64-Debug-GN/Debug", - "--args=is_debug=true" + "--args=is_debug=true cc=\"/usr/bin/ccache gcc\" cxx=\"/usr/bin/ccache g++\"" ], "cwd": "[CUSTOM_/_B_WORK]/skia", "env": { diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Win-MSVC-x86-Release-GN.json b/infra/bots/recipes/swarm_compile.expected/Build-Win-MSVC-x86-Release-GN.json index 6819581eb6..95fbeb6d2f 100644 --- a/infra/bots/recipes/swarm_compile.expected/Build-Win-MSVC-x86-Release-GN.json +++ b/infra/bots/recipes/swarm_compile.expected/Build-Win-MSVC-x86-Release-GN.json @@ -131,7 +131,7 @@ "gn.exe", "gen", "[CUSTOM_C:\\_B_WORK]\\skia\\out\\Build-Win-MSVC-x86-Release-GN\\Release", - "--args=is_debug=false" + "--args=is_debug=false cc=cc cxx=c++" ], "cwd": "[CUSTOM_C:\\_B_WORK]\\skia", "env": { diff --git a/infra/bots/recipes/swarm_compile.py b/infra/bots/recipes/swarm_compile.py index e33a0365bf..50bbcbe0fe 100644 --- a/infra/bots/recipes/swarm_compile.py +++ b/infra/bots/recipes/swarm_compile.py @@ -27,6 +27,7 @@ TEST_BUILDERS = { 'Build-Ubuntu-GCC-Arm7-Release-Android_Vulkan', 'Build-Ubuntu-GCC-x86-Debug', 'Build-Ubuntu-GCC-x86_64-Debug-MSAN', + 'Build-Ubuntu-Clang-x86_64-Debug-GN', 'Build-Ubuntu-GCC-x86_64-Debug-GN', 'Build-Ubuntu-GCC-x86_64-Release-CMake', 'Build-Ubuntu-GCC-x86_64-Release-PDFium', @@ -70,10 +71,11 @@ def GenTests(api): test += api.platform('mac', 64) else: test += api.platform('linux', 64) - if 'Android' in builder: + if 'Android' in builder or ('GN' in builder and 'Win' not in builder): ccache = '/usr/bin/ccache' test += api.step_data('has ccache?', stdout=api.json.output({'ccache':ccache})) + if 'Android' in builder: test += api.step_data( 'which adb', retcode=1) |