| #!/usr/bin/env vpython3 |
| # Copyright 2013 The Flutter Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import argparse |
| import os |
| import subprocess |
| import sys |
| |
| # When passed the --setup flag, this script fetches git submodules and other |
| # dependencies for the impeller-cmake-example. When passed the --cmake flag, |
| # this script runs cmake on impeller-cmake-example. That will create |
| # a build output directory for impeller-cmake-example under |
| # out/impeller-cmake-example, so the build can then be performed with |
| # e.g. ninja -C out/impeller-cmake-example-out. |
| |
| SRC_ROOT = os.path.dirname( |
| os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
| ) |
| |
| |
| def parse_args(argv): |
| parser = argparse.ArgumentParser( |
| description='A script that tests the impeller-cmake-example build.', |
| ) |
| parser.add_argument( |
| '--cmake', |
| '-c', |
| default=False, |
| action='store_true', |
| help='Run cmake for impeller-cmake-example.', |
| ) |
| parser.add_argument( |
| '--goma-dir', |
| '-g', |
| type=str, |
| default=os.getenv('GOMA_DIR'), |
| help=( |
| 'The path to the Goma install. Defaults to the value of the ' |
| 'GOMA_DIR environment variable.' |
| ), |
| ) |
| parser.add_argument( |
| '--path', |
| '-p', |
| type=str, |
| help='The path to the impeller-cmake-example source.', |
| ) |
| parser.add_argument( |
| '--setup', |
| '-s', |
| default=False, |
| action='store_true', |
| help='Clone the git submodules.', |
| ) |
| parser.add_argument( |
| '--verbose', |
| '-v', |
| default=False, |
| action='store_true', |
| help='Emit verbose output.', |
| ) |
| parser.add_argument( |
| '--xcode-symlinks', |
| default=False, |
| action='store_true', |
| help='Symlink the Xcode sysroot to help Goma be successful.', |
| ) |
| return parser.parse_args(argv) |
| |
| |
| def validate_args(args): |
| if not os.path.isdir(os.path.join(SRC_ROOT, args.path)): |
| print( |
| 'The --path argument must be a valid directory relative to the ' |
| 'engine src/ directory.' |
| ) |
| return False |
| |
| return True |
| |
| |
| def create_xcode_symlink(): |
| find_sdk_command = [ |
| 'python3', |
| os.path.join(SRC_ROOT, 'build', 'mac', 'find_sdk.py'), |
| '--print_sdk_path', |
| '10.15', |
| '--symlink', |
| os.path.join(SRC_ROOT, 'out', 'impeller-cmake-example-xcode-sysroot'), |
| ] |
| find_sdk_output = subprocess.check_output(find_sdk_command).decode('utf-8') |
| return find_sdk_output.split('\n')[0] |
| |
| |
| def main(argv): |
| args = parse_args(argv[1:]) |
| if not validate_args(args): |
| return 1 |
| |
| impeller_cmake_dir = os.path.join(SRC_ROOT, args.path) |
| |
| if args.setup: |
| git_command = [ |
| 'git', |
| '-C', |
| impeller_cmake_dir, |
| 'submodule', |
| 'update', |
| '--init', |
| '--recursive', |
| '--depth', |
| '1', |
| '--jobs', |
| str(os.cpu_count()), |
| ] |
| subprocess.check_call(git_command) |
| |
| # Run the deps.sh shell script in the repo. |
| subprocess.check_call(['bash', 'deps.sh'], cwd=impeller_cmake_dir) |
| return 0 |
| |
| if args.cmake: |
| cmake_path = os.path.join( |
| SRC_ROOT, 'buildtools', 'mac-x64', 'cmake', 'bin', 'cmake' |
| ) |
| cmake_command = [ |
| cmake_path, |
| '--preset', |
| 'flutter-ci-mac-debug-x64', |
| '-B', |
| os.path.join(SRC_ROOT, 'out', 'impeller-cmake-example'), |
| ] |
| cmake_env = os.environ.copy() |
| ninja_path = os.path.join(SRC_ROOT, 'flutter', 'third_party', 'ninja') |
| cmake_env.update({ |
| 'PATH': os.environ['PATH'] + ':' + ninja_path, |
| 'FLUTTER_ENGINE_SRC_DIR': SRC_ROOT, |
| 'FLUTTER_GOMA_DIR': args.goma_dir, |
| }) |
| if args.xcode_symlinks: |
| xcode_symlink_path = create_xcode_symlink() |
| cmake_env.update({ |
| 'FLUTTER_OSX_SYSROOT': xcode_symlink_path, |
| }) |
| subprocess.check_call(cmake_command, env=cmake_env, cwd=impeller_cmake_dir) |
| |
| return 0 |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main(sys.argv)) |