Files
phs_v1.0.1.0/build/scripts/build_target_handler.py
2024-09-27 19:16:49 +08:00

94 lines
3.5 KiB
Python
Executable File

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) 2021 Huawei Device Co., Ltd.
# 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.
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 # noqa E402
def _read_parts_variants(build_configs_dir):
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, build_targets, target_platform):
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():
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)
# rewrite build.log
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
# process build targets
build_targets = get_build_target(build_dir, args.build_target_name,
target_platform)
# output build_targets string, be used on the ninja command line
print(' '.join(build_targets))
return 0
if __name__ == '__main__':
sys.exit(main())