99 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			99 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | #!/usr/bin/python3 | ||
|  | # -*- 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 argparse | ||
|  | import json | ||
|  | import os | ||
|  | 
 | ||
|  | KCONFIG_STR = 'config {}\n\
 | ||
|  |     bool "{}"\n\ | ||
|  |     default n\n' | ||
|  | PROPERTIES_STR = 'config {}\n\
 | ||
|  |         string "{}"\n\ | ||
|  |         default ""\n' | ||
|  | KMENU_STR = 'menu "{}"\n' | ||
|  | 
 | ||
|  | FEATURE_STR = 'config feature$$%s\n\
 | ||
|  |         string "feature"\n\ | ||
|  |         default ""\n\ | ||
|  |         depends on %s\n' | ||
|  | 
 | ||
|  | 
 | ||
|  | def create_config(name, comment): | ||
|  |     return KCONFIG_STR.format(name, comment) | ||
|  | 
 | ||
|  | def create_property(name, comment): | ||
|  |     return PROPERTIES_STR.format(name, comment) | ||
|  | 
 | ||
|  | def create_menu(name): | ||
|  |     return KMENU_STR.format(name) | ||
|  | 
 | ||
|  | def end_menu(): | ||
|  |     return "endmenu\n" | ||
|  | 
 | ||
|  | def create_feature(name): | ||
|  |     return FEATURE_STR % (name, name) | ||
|  | 
 | ||
|  | def read_json(file): | ||
|  |     data = {} | ||
|  |     with open(file, "rb") as f: | ||
|  |         data = json.load(f) | ||
|  |     return data | ||
|  | 
 | ||
|  | def write_kconfig(result, outdir): | ||
|  |     outpath = os.path.join(outdir, "kconfig") | ||
|  |     with open(outpath, "w") as f: | ||
|  |         f.writelines(result) | ||
|  |     print("output file in: ", os.path.abspath(outpath)) | ||
|  | 
 | ||
|  | def gen_kconfig(config_path, outdir): | ||
|  |     data = read_json(config_path) | ||
|  |     subsystems = data.get("subsystems") | ||
|  |     result = 'mainmenu "Subsystem Component Kconfig Configuration"\n' | ||
|  |     for prop, _ in data.items(): | ||
|  |         if prop == "subsystems": | ||
|  |             continue | ||
|  |         result += create_property("property$${}".format(prop), prop) | ||
|  | 
 | ||
|  |     for subsys_dict in subsystems: | ||
|  |         subsys_name = subsys_dict.get("subsystem") | ||
|  |         result += create_menu(subsys_name) | ||
|  |         for component_dict in subsys_dict.get("components"): | ||
|  |             component_name = component_dict.get("component") | ||
|  |             result += create_config("{}$${}".format(subsys_name, component_name), component_name) | ||
|  |             result += create_feature("{}$${}".format(subsys_name, component_name)) | ||
|  |         result += end_menu() | ||
|  |     write_kconfig(result, outdir) | ||
|  | 
 | ||
|  | 
 | ||
|  | if __name__ == "__main__": | ||
|  |     INTRO = 'Genenrate newly kconfig input file.\n\
 | ||
|  |         For example: python3 generate_kconfig.py\n\ | ||
|  |         or           python3 generate_kconfig.py --base_product={$repo}/productdefine/common/base/base_product.json --outdir=./' | ||
|  |     parser = argparse.ArgumentParser( | ||
|  |     formatter_class=argparse.RawDescriptionHelpFormatter, | ||
|  |     description=INTRO | ||
|  |     ) | ||
|  |     parser.add_argument('--base_product', type=str, default="./../../../productdefine/common/base/base_product.json", | ||
|  |                         help='Basic config path in repo prodcutdefine,\
 | ||
|  |                                 default={$repo}/productdefine/common/base/base_product.json') | ||
|  |     parser.add_argument('--outdir', type=str, default="./", | ||
|  |                         help="define output file path dir, default={$current_dir}") | ||
|  |     args = parser.parse_args() | ||
|  |     print("read base_product file: ", os.path.abspath(args.base_product)) | ||
|  |     gen_kconfig(args.base_product, args.outdir) |