89 строки
2.5 KiB
Python
Executable File
89 строки
2.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import argparse
|
|
import json
|
|
import os
|
|
import sys
|
|
|
|
import lib.gn as gn
|
|
|
|
from lib.config import get_output_dir, COMPONENTS, \
|
|
SOURCE_ROOT, SRC_DIR, DEPOT_TOOLS_DIR
|
|
|
|
|
|
# TODO(alexeykuzmin): There are no reasons to keep args files
|
|
# in the "chromiumcontent" folder.
|
|
CHROMIUMCONTENT_SOURCE_DIR = os.path.join(SOURCE_ROOT, 'chromiumcontent')
|
|
|
|
|
|
def parse_args():
|
|
parser = argparse.ArgumentParser(description='Generate Ninja')
|
|
|
|
parser.add_argument('-a', '--args', type=json.loads, default=None,
|
|
help='List of GN args in JSON format. E.g. \'{"key": "value"}\'')
|
|
parser.add_argument('-c', '--components', nargs='+', default=COMPONENTS, choices=COMPONENTS,
|
|
help='Component(s) to generate build files for.')
|
|
parser.add_argument('-t', '--target_arch', default='x64', help='E.g. "x64".')
|
|
|
|
return parser.parse_args()
|
|
|
|
|
|
def main():
|
|
args = parse_args()
|
|
|
|
# List of common default GN config args. Please keep in alphabetical order.
|
|
# Any value can be overridden by the '--args' script argument.
|
|
gn_args = {
|
|
'target_cpu': get_target_cpu(args.target_arch),
|
|
'target_os': get_target_os()
|
|
}
|
|
# Add new and override default args from a command line argument.
|
|
if args.args:
|
|
gn_args.update(args.args)
|
|
|
|
for component in args.components:
|
|
if component != 'native_mksnapshot' or 'arm' in args.target_arch:
|
|
generate_build_files(component, args.target_arch, **gn_args)
|
|
|
|
|
|
def generate_build_files(component, target_arch, **gnargs):
|
|
print 'Generating build files for "{0}" configuration...'.format(component)
|
|
|
|
build_dir = get_output_dir(SOURCE_ROOT, target_arch, component)
|
|
create_gn_config(component, build_dir, **gnargs)
|
|
|
|
env = os.environ.copy()
|
|
if sys.platform in ['win32', 'cygwin']:
|
|
env['DEPOT_TOOLS_WIN_TOOLCHAIN'] = '0'
|
|
|
|
gn.generate(build_dir, chromium_root_dir=SRC_DIR, depot_tools_dir=DEPOT_TOOLS_DIR, env=env)
|
|
|
|
|
|
def create_gn_config(component, build_dir, **gnargs):
|
|
args_file_path = os.path.join(CHROMIUMCONTENT_SOURCE_DIR, 'args', component + '.gn')
|
|
with open(args_file_path) as f:
|
|
gn.create_args(build_dir, f.read(), **gnargs)
|
|
|
|
|
|
def get_target_os():
|
|
target_os = {
|
|
"cygwin": "win",
|
|
"darwin": "mac",
|
|
"linux2": "linux",
|
|
"win32": "win",
|
|
}.get(sys.platform)
|
|
|
|
return target_os
|
|
|
|
|
|
def get_target_cpu(target_arch):
|
|
target_cpu = target_arch
|
|
if target_arch == 'ia32':
|
|
target_cpu = 'x86'
|
|
|
|
return target_cpu
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|