79 lines
2.9 KiB
Python
79 lines
2.9 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
# Copyright (c) 2023 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 json
|
|
import os
|
|
import stat
|
|
|
|
from scripts.util.file_utils import read_json_file
|
|
|
|
|
|
def _read_lite_component_configs(file):
|
|
subsystem_name = os.path.basename(file)[:-5]
|
|
configs = {}
|
|
configs['subsystem'] = subsystem_name
|
|
with open(file, 'rb') as fin:
|
|
data = json.load(fin)
|
|
components = data.get('components')
|
|
parts = {}
|
|
for com in components:
|
|
part = {}
|
|
targets = com.get('targets')
|
|
test_targets = []
|
|
non_test_targets = []
|
|
for item in targets:
|
|
target_names = item.strip('"').split(':')
|
|
if len(target_names) > 1 and 'test' in target_names[1]:
|
|
test_targets.append(item)
|
|
else:
|
|
non_test_targets.append(item)
|
|
part['module_list'] = non_test_targets
|
|
if test_targets != []:
|
|
part['test_list'] = test_targets
|
|
part_name = com.get('component')
|
|
parts[part_name] = part
|
|
configs['parts'] = parts
|
|
return configs
|
|
|
|
|
|
def _save_as_ohos_build(config, ohos_build):
|
|
new_config = json.dumps(config, indent=2, sort_keys=True)
|
|
with os.fdopen(os.open(ohos_build,
|
|
os.O_RDWR | os.O_CREAT, stat.S_IWUSR | stat.S_IRUSR), 'w') as fout:
|
|
fout.write(new_config)
|
|
|
|
|
|
def parse_lite_subsystem_config(lite_components_dir, output_dir,
|
|
source_root_dir, subsystem_config_file):
|
|
subsystem_infos = read_json_file(subsystem_config_file)
|
|
for root, _, files in os.walk(lite_components_dir):
|
|
for file in files:
|
|
if file[-5:] == '.json':
|
|
configs = _read_lite_component_configs(os.path.join(
|
|
root, file))
|
|
subsystem_name = configs.get('subsystem')
|
|
ohos_build = os.path.join(
|
|
output_dir, '{}/ohos.build'.format(subsystem_name))
|
|
os.makedirs(os.path.dirname(ohos_build), exist_ok=True)
|
|
_save_as_ohos_build(configs, ohos_build)
|
|
subsystem_infos[subsystem_name] = {
|
|
'name':
|
|
subsystem_name,
|
|
"path":
|
|
os.path.relpath(os.path.dirname(ohos_build),
|
|
source_root_dir),
|
|
}
|
|
return subsystem_infos
|