import sys
import argparse
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from scripts.util.file_utils import read_json_file, write_json_file
from scripts.util.build_utils import write_depfile
def gen_output_file(part_name: str, origin_part_name: str, all_modules_file: str,
sdk_modules_info_file: str, install_modules_file: str,
dep_modules_file: str, output_host_file: str,
current_toolchain: str, host_toolchain: str):
all_module_info = read_json_file(all_modules_file)
if all_module_info is None:
raise Exception(
"read part '{}' modules info failed.".format(part_name))
if os.path.exists(sdk_modules_info_file):
sdk_modules_info = read_json_file(sdk_modules_info_file)
if sdk_modules_info is not None:
all_module_info.extend(sdk_modules_info)
thirdparty_module_list = []
hdi_module_list = []
external_module_list = []
modules_info_dict = {}
modules_def = {}
for info in all_module_info:
module_def = info.get('module_def')
if module_def in modules_def:
continue
modules_def[module_def] = ''
thirdparty = info.get('subsystem_name')
_part_name = info.get('part_name')
toolchain = info.get('toolchain')
if thirdparty == 'thirdparty' and not _part_name.startswith('rust_'):
if toolchain == '' or toolchain == current_toolchain:
thirdparty_module_list.append(info)
external_module_list.append(info)
if str(module_def).startswith("//drivers/interface"):
if toolchain == '' or toolchain == current_toolchain:
hdi_module_list.append(info)
external_module_list.append(info)
_module_part_name = info.get('part_name')
if _module_part_name not in modules_info_dict:
modules_info_dict[_module_part_name] = []
modules_info_dict[_module_part_name] += [info]
part_module_list = []
if origin_part_name in modules_info_dict:
part_module_list = modules_info_dict.pop(origin_part_name)
part_install_modules = []
part_no_install_modules = []
part_host_modules = []
for install_module in part_module_list:
toolchain = install_module.get('toolchain')
if toolchain == '' or toolchain == current_toolchain:
part_install_modules.append(install_module)
elif toolchain.endswith("ohos_clang_arm64e"):
part_install_modules.append(install_module)
else:
if toolchain == host_toolchain:
part_host_modules.append(install_module)
part_no_install_modules.append(install_module)
for install_module in external_module_list:
toolchain = install_module.get('toolchain')
if toolchain == host_toolchain:
part_host_modules.append(install_module)
part_install_modules.extend(thirdparty_module_list)
part_install_modules.extend(hdi_module_list)
write_json_file(install_modules_file, part_install_modules)
modules_info_dict[part_name] = part_no_install_modules
write_json_file(dep_modules_file, modules_info_dict)
write_json_file(output_host_file, part_host_modules)
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--part-name', required=True)
parser.add_argument('--origin-part-name', required=True)
parser.add_argument('--input-file', help='', required=True)
parser.add_argument('--sdk-modules-info-file', help='', required=True)
parser.add_argument('--output-install-file', help='', required=True)
parser.add_argument('--output-deps-file', help='', required=True)
parser.add_argument('--output-host-file', help='', required=True)
parser.add_argument('--current-toolchain', help='', required=True)
parser.add_argument('--host-toolchain', help='', required=True)
parser.add_argument('--depfile', required=False)
args = parser.parse_args()
gen_output_file(args.part_name, args.origin_part_name, args.input_file,
args.sdk_modules_info_file, args.output_install_file,
args.output_deps_file, args.output_host_file,
args.current_toolchain, args.host_toolchain)
if args.depfile:
_dep_files = [args.input_file]
if os.path.exists(args.sdk_modules_info_file):
_dep_files.append(args.sdk_modules_info_file)
write_depfile(args.depfile, args.output_install_file, _dep_files, add_pydeps=False)
return 0
if __name__ == '__main__':
sys.exit(main())