diff options
author | bsalomon <bsalomon@google.com> | 2016-02-17 10:42:46 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-17 10:42:46 -0800 |
commit | c43f2af60e11c3b09aa70725e758ae0e455f065d (patch) | |
tree | f332270aade9c89422a62c53073caea3b096c660 /tools/build_command_buffer.py | |
parent | 272af6ecd73bddd748342afc267f44ca26734b44 (diff) |
Add a script to build and copy the command buffer shared library. This script will be used by the bots to test skia on the command buffer.
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1699273002
NOTREECHECKS=true
NOTRY=true
BUG=skia:4957
Review URL: https://codereview.chromium.org/1699273002
Diffstat (limited to 'tools/build_command_buffer.py')
-rwxr-xr-x | tools/build_command_buffer.py | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/tools/build_command_buffer.py b/tools/build_command_buffer.py new file mode 100755 index 0000000000..9edc4229a3 --- /dev/null +++ b/tools/build_command_buffer.py @@ -0,0 +1,138 @@ +#!/usr/bin/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. + + +""" +Script to build the command buffer shared library and copy it to Skia tree +""" + + +import argparse +import os +import shlex +import shutil +import subprocess +import sys + + +def main(): + parser = argparse.ArgumentParser(description=('Builds command_buffer_gles2 ' + 'library and copies it')) + parser.add_argument('-c', '--chrome-dir', required=True, help= + 'path to Chromium checkout (directory containing .gclient)') + parser.add_argument('-o', '--output-dir', required=True, + help='path to copy the command buffer shared library to') + parser.add_argument('--make-output-dir', default=False, action='store_true', + help='Makes the output directory if it does not already exist.') + parser.add_argument('-f', '--fetch', action='store_true', default=False, + help=('Create Chromium src directory and fetch chromium checkout (if ' + 'directory does not already exist)')) + parser.add_argument('--chrome-build-type', default='Release', + help='Type of build for the command buffer (e.g. Debug or Release)') + parser.add_argument('--extra-ninja-args', default='', + help=('Extra arguments to pass to ninja when building the command ' + 'buffer shared library')) + parser.add_argument('--chrome-revision', default='origin/lkgr', + help='Revision (hash, branch, tag) of Chromium to use.') + parser.add_argument('--no-sync', action='store_true', default=False, + help='Don\'t run git fetch or gclient sync in the Chromium tree') + args = parser.parse_args() + + args.chrome_dir = os.path.abspath(args.chrome_dir) + args.output_dir = os.path.abspath(args.output_dir) + + if os.path.isfile(args.chrome_dir): + sys.exit(args.chrome_dir + ' exists but is a file.') + + if os.path.isfile(args.output_dir): + sys.exit(args.output_dir + ' exists but is a file.') + + chrome_src_dir = os.path.join(args.chrome_dir, 'src') + + if os.path.isfile(chrome_src_dir): + sys.exit(chrome_src_dir + ' exists but is a file.') + elif not os.path.isdir(chrome_src_dir): + if args.fetch: + if os.path.isdir(args.chrome_dir): + # If chrome_dir is a dir but chrome_src_dir does not exist we will only + # fetch into chrome_dir if it is empty. + if os.listdir(args.chrome_dir): + sys.exit(args.chrome_dir + ' is not a chromium checkout and is not ' + 'empty.') + else: + os.makedirs(args.chrome_dir) + if not os.path.isdir(args.chrome_dir): + sys.exit('Could not create ' + args.chrome_dir) + try: + subprocess.check_call(['fetch', 'chromium'], cwd=args.chrome_dir) + except subprocess.CalledProcessError as error: + sys.exit('Error (ret code: %s) calling "%s" in %s' % error.returncode, + error.cmd, args.chrome_dir) + + if not os.path.isdir(chrome_src_dir): + sys.exit(chrome_src_dir + ' is not a directory.') + + if os.path.isfile(args.output_dir): + sys.exit(args.output_dir + ' exists but is a file.') + elif not os.path.isdir(args.output_dir): + if args.make_output_dir: + os.makedirs(args.output_dir) + else: + sys.exit(args.output_dir + ' does not exist (specify --make-output-dir ' + 'to create).') + + chrome_target_dir_rel = os.path.join('out', args.chrome_build_type) + chrome_target_dir = os.path.join(chrome_src_dir, chrome_target_dir_rel) + + if not args.no_sync: + try: + subprocess.check_call(['git', 'fetch'], cwd=chrome_src_dir) + except subprocess.CalledProcessError as error: + sys.exit('Error (ret code: %s) calling "%s" in %s' % error.returncode, + error.cmd, chrome_src_dir) + + try: + subprocess.check_call(['git', 'checkout', args.chrome_revision], + cwd=chrome_src_dir) + except subprocess.CalledProcessError as error: + sys.exit('Error (ret code: %s) calling "%s" in %s' % error.returncode, + error.cmd, chrome_src_dir) + + if not args.no_sync: + try: + subprocess.check_call(['gclient', 'sync'], cwd=chrome_src_dir) + except subprocess.CalledProcessError as error: + sys.exit('Error (ret code: %s) calling "%s" in %s' % error.returncode, + error.cmd, chrome_src_dir) + + try: + subprocess.check_call(['ninja'] + shlex.split(args.extra_ninja_args) + + ['-C', chrome_target_dir_rel, 'command_buffer_gles2'], + cwd=chrome_src_dir) + except subprocess.CalledProcessError as error: + sys.exit('Error (ret code: %s) calling "%s" in %s' % error.returncode, + error.cmd, chrome_src_dir) + + shared_lib_src = os.path.join(chrome_target_dir, 'lib', + 'libcommand_buffer_gles2.so') + shared_lib_dst = os.path.join(args.output_dir, 'libcommand_buffer_gles2.so') + + if not os.path.isfile(shared_lib_src): + sys.exit('Command buffer shared library not at expected location: ' + + shared_lib_src) + + shutil.copy2(shared_lib_src, shared_lib_dst) + + if not os.path.isfile(shared_lib_dst): + sys.exit('Command buffer library not copied to ' + shared_lib_dst) + + print('Command buffer library copied to ' + shared_lib_dst) + + +if __name__ == '__main__': + main() + |