|  | #!/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)) |