blob: 7ff3bc46ebf98d28709abedb9fd47bbeb326728c [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Thin wrapper for building Starboard platforms with GN."""
import argparse
import os
import shutil
import subprocess
import sys
from pathlib import Path
from typing import List
from starboard.build.platforms import PLATFORMS
_BUILD_TYPES = ['debug', 'devel', 'qa', 'gold']
def main(out_directory: str, platform: str, build_type: str,
overwrite_args: bool, gn_gen_args: List[str]):
platform_path = PLATFORMS[platform]
dst_args_gn_file = os.path.join(out_directory, 'args.gn')
src_args_gn_file = os.path.join(platform_path, 'args.gn')
Path(out_directory).mkdir(parents=True, exist_ok=True)
if overwrite_args or not os.path.exists(dst_args_gn_file):
shutil.copy(src_args_gn_file, dst_args_gn_file)
with open(dst_args_gn_file, 'a', encoding='utf-8') as f:
f.write(f'build_type = "{build_type}"\n')
else:
print(f'{dst_args_gn_file} already exists.' +
' Running ninja will regenerate build files automatically.')
gn_command = [
'gn', f'--script-executable={sys.executable}', 'gen', out_directory
] + gn_gen_args
print(' '.join(gn_command))
subprocess.check_call(gn_command)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
builds_directory_group = parser.add_mutually_exclusive_group()
builds_directory_group.add_argument(
'out_directory',
type=str,
nargs='?',
help='Path to the directory to build in.')
builds_directory_group.add_argument(
'-b',
'--builds_directory',
type=str,
help='Path to the directory a named build folder, <platform>_<config>/, '
'will be created in.')
parser.add_argument(
'-p',
'--platform',
required=True,
choices=list(PLATFORMS),
help='The platform to build.')
parser.add_argument(
'-c',
'-C',
'--build_type',
default='devel',
choices=_BUILD_TYPES,
help='The build_type (configuration) to build with.')
parser.add_argument(
'--overwrite_args',
default=False,
action='store_true',
help='Whether or not to overwrite an existing args.gn file if one exists '
'in the out directory. In general, if the file exists, you should run '
'`gn args <out_directory>` to edit it instead.')
known_args, unknown_args = parser.parse_known_args()
if known_args.out_directory:
builds_out_directory = known_args.out_directory
else:
builds_directory = os.getenv('COBALT_BUILDS_DIRECTORY',
known_args.builds_directory or 'out')
builds_out_directory = os.path.join(
builds_directory, f'{known_args.platform}_{known_args.build_type}')
main(builds_out_directory, known_args.platform, known_args.build_type,
known_args.overwrite_args, unknown_args)