import sys
import os
import argparse
import ninja_rules_parser
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from scripts.util.file_utils import read_json_file
def _read_parts_variants(build_configs_dir: str) -> str:
parts_variants_file = os.path.join(build_configs_dir, 'parts_info',
'parts_variants.json')
if not os.path.exists(parts_variants_file):
raise Exception("file '{}' doesn't exist.".format(parts_variants_file))
parts_variants = read_json_file(parts_variants_file)
if parts_variants is None:
raise Exception("read file '{}' failed.".format(parts_variants_file))
return parts_variants
def get_build_target(build_dir: str, build_targets: list, target_platform: str) -> list:
if not target_platform or target_platform == 'all':
target_platform = 'phone'
real_targets = []
build_configs_dir = os.path.join(build_dir, 'build_configs')
parts_variants = _read_parts_variants(build_configs_dir)
for _target_name in build_targets:
if _target_name in parts_variants:
if target_platform == 'phone':
real_targets.append(_target_name)
else:
variants = parts_variants.get(_target_name)
if target_platform in variants:
real_targets.append('{0}/{1}_{0}'.format(
target_platform, _target_name))
else:
real_targets.append(_target_name)
else:
if target_platform == 'phone':
real_targets.append(_target_name)
else:
real_targets.append('{0}/{1}'.format(target_platform,
_target_name))
return real_targets
def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument('--source-root-dir', required=True)
parser.add_argument('--root-build-dir', required=True)
parser.add_argument('--build-target-name', nargs='*')
parser.add_argument('--target-platform', required=False)
args = parser.parse_args()
source_root_dir = args.source_root_dir
if not os.path.exists(os.path.join(source_root_dir, '.gn')):
print('source root dir incorrect.')
return 1
build_dir = os.path.join(source_root_dir, args.root_build_dir)
ninja_rules_parser.update(
build_dir, 'build_configs/platforms_info/toolchain_to_variant.json')
if args.target_platform is None or args.target_platform == 'all':
target_platform = None
else:
target_platform = args.target_platform
build_targets = get_build_target(build_dir, args.build_target_name,
target_platform)
print(' '.join(build_targets))
return 0
if __name__ == '__main__':
sys.exit(main())