123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- #!/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. Typically this '
- 'is out/Debug or out/Release in a Skia repository')
- 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('--chrome-out-dir', default='CommandBufferForSkia',
- help='Type of name of the gn output directory (e.g. Debug or Release). '
- 'This is relative to the Chromium src/out directory. Note that this '
- 'script will reset the gn args in this directory on each run.')
- parser.add_argument('--extra-gn-args', default='',
- help=('Extra GN arguments to use for the output directory used to build'
- 'the command buffer'))
- 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')
- parser.add_argument('--no-hooks', action='store_true', default=False,
- help='Don\'t run gclient runhooks in the Chromium tree. Implies '
- '--no-sync')
- args = parser.parse_args()
- args.chrome_dir = os.path.abspath(args.chrome_dir)
- args.output_dir = os.path.abspath(args.output_dir)
- if args.no_hooks:
- args.no_sync = True
- 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 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_out_dir)
- # The command buffer shared library will have a different name on Linux,
- # Mac, and Windows. Also, the name of the gclient executable we call out to
- # has a .bat file extension on Windows.
- platform = sys.platform
- if platform == 'cygwin':
- platform = 'win32'
- shared_lib_name = 'libcommand_buffer_gles2.so'
- gclient = 'gclient'
- if platform == 'darwin':
- shared_lib_name = 'libcommand_buffer_gles2.dylib'
- elif platform == 'win32':
- shared_lib_name = 'command_buffer_gles2.dll'
- gclient = 'gclient.bat'
- 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))
- try:
- os.environ['GYP_GENERATORS'] = 'ninja'
- subprocess.check_call([gclient, 'sync', '--reset', '--force',
- '--nohooks'],
- 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_hooks:
- try:
- subprocess.check_call([gclient, 'runhooks'], 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))
- gn = 'gn'
- platform = 'linux64'
- if sys.platform == 'darwin':
- platform = 'mac'
- elif sys.platform == 'win32':
- platform = 'win'
- gn = 'gn.exe'
- gn = os.path.join(chrome_src_dir, 'buildtools', platform, gn)
- try:
- gnargs = 'is_component_build=false is_debug=false ' + args.extra_gn_args
- subprocess.check_call([gn, 'gen', chrome_target_dir_rel, '--args='+gnargs],
- 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_dir = os.path.join(chrome_src_dir, chrome_target_dir_rel)
- shared_lib_src = os.path.join(shared_lib_src_dir, shared_lib_name)
- shared_lib_dst = os.path.join(args.output_dir, shared_lib_name)
- 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()
|