142 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			142 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | #!/usr/bin/env python3 | ||
|  | # -*- 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 os | ||
|  | import sys | ||
|  | 
 | ||
|  | sys.path.append(os.path.dirname(os.path.abspath(__file__))) # ohos/build/hb dir | ||
|  | sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # ohos/build dir | ||
|  | sys.path.append(os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'lite')) # ohos/build/lite dir | ||
|  | 
 | ||
|  | from containers.arg import Arg, ModuleType | ||
|  | from containers.status import throw_exception | ||
|  | from resources.global_var import ARGS_DIR | ||
|  | from exceptions.ohos_exception import OHOSException | ||
|  | 
 | ||
|  | from services.preloader import OHOSPreloader | ||
|  | from services.loader import OHOSLoader | ||
|  | from services.gn import Gn | ||
|  | from services.ninja import Ninja | ||
|  | 
 | ||
|  | from resolver.build_args_resolver import BuildArgsResolver | ||
|  | from resolver.set_args_resolver import SetArgsResolver | ||
|  | from resolver.clean_args_resolver import CleanArgsResolver | ||
|  | from resolver.env_args_resolver import EnvArgsResolver | ||
|  | from resolver.tool_args_resolver import ToolArgsResolver | ||
|  | 
 | ||
|  | from modules.interface.module_interface import ModuleInterface | ||
|  | from modules.interface.build_module_interface import BuildModuleInterface | ||
|  | from modules.interface.set_module_interface import SetModuleInterface | ||
|  | from modules.interface.env_module_interface import EnvModuleInterface | ||
|  | from modules.interface.clean_module_interface import CleanModuleInterface | ||
|  | from modules.interface.tool_module_interface import ToolModuleInterface | ||
|  | 
 | ||
|  | from modules.ohos_build_module import OHOSBuildModule | ||
|  | from modules.ohos_set_module import OHOSSetModule | ||
|  | from modules.ohos_clean_module import OHOSCleanModule | ||
|  | from modules.ohos_env_module import OHOSEnvModule | ||
|  | from modules.ohos_tool_module import OHOSToolModule | ||
|  | 
 | ||
|  | from helper.separator import Separator | ||
|  | from util.log_util import LogUtil | ||
|  | 
 | ||
|  | 
 | ||
|  | class Main(): | ||
|  | 
 | ||
|  |     def _init_build_module(self) -> BuildModuleInterface: | ||
|  |         args_dict = Arg.parse_all_args(ModuleType.BUILD) | ||
|  | 
 | ||
|  |         if args_dict.get("product_name").arg_value != '': | ||
|  |             set_args_dict = Arg.parse_all_args(ModuleType.SET) | ||
|  |             set_args_resolver = SetArgsResolver(set_args_dict) | ||
|  |             ohos_set_module = OHOSSetModule(set_args_dict, set_args_resolver, "") | ||
|  |             ohos_set_module.set_product() | ||
|  | 
 | ||
|  |         preloader = OHOSPreloader() | ||
|  |         loader = OHOSLoader() | ||
|  |         generate_ninja = Gn() | ||
|  |         ninja = Ninja() | ||
|  |         build_args_resolver = BuildArgsResolver(args_dict) | ||
|  | 
 | ||
|  |         return OHOSBuildModule(args_dict, build_args_resolver, preloader, loader, generate_ninja, ninja) | ||
|  | 
 | ||
|  |     def _init_set_module(self) -> SetModuleInterface: | ||
|  |         Arg.clean_args_file() | ||
|  |         args_dict = Arg.parse_all_args(ModuleType.SET) | ||
|  |         set_args_resolver = SetArgsResolver(args_dict) | ||
|  |         from services.menu import Menu | ||
|  |         menu = Menu() | ||
|  |         return OHOSSetModule(args_dict, set_args_resolver, menu) | ||
|  | 
 | ||
|  |     def _init_env_module(self) -> EnvModuleInterface: | ||
|  |         args_dict = Arg.parse_all_args(ModuleType.ENV) | ||
|  |         env_args_resolver = EnvArgsResolver(args_dict) | ||
|  |         return OHOSEnvModule(args_dict, env_args_resolver) | ||
|  | 
 | ||
|  |     def _init_clean_module(self) -> CleanModuleInterface: | ||
|  |         args_dict = Arg.parse_all_args(ModuleType.CLEAN) | ||
|  |         clean_args_resolever = CleanArgsResolver(args_dict) | ||
|  |         return OHOSCleanModule(args_dict, clean_args_resolever) | ||
|  | 
 | ||
|  |     def _init_tool_module(self) -> ToolModuleInterface: | ||
|  |         Arg.clean_args_file() | ||
|  |         args_dict = Arg.parse_all_args(ModuleType.TOOL) | ||
|  |         generate_ninja = Gn() | ||
|  |         tool_args_resolever = ToolArgsResolver(args_dict) | ||
|  |         return OHOSToolModule(args_dict, tool_args_resolever, generate_ninja) | ||
|  | 
 | ||
|  |     @staticmethod | ||
|  |     @throw_exception | ||
|  |     def main(): | ||
|  |         main = Main() | ||
|  |         module_type = sys.argv[1] | ||
|  |         if module_type == 'build': | ||
|  |             module = main._init_build_module() | ||
|  |         elif module_type == 'set': | ||
|  |             module = main._init_set_module() | ||
|  |         elif module_type == 'env': | ||
|  |             module = main._init_env_module() | ||
|  |         elif module_type == 'clean': | ||
|  |             module = main._init_clean_module() | ||
|  |         elif module_type == 'tool': | ||
|  |             module = main._init_tool_module() | ||
|  |         elif module_type == 'help': | ||
|  |             for all_module_type in ModuleType: | ||
|  |                 LogUtil.hb_info(Separator.long_line) | ||
|  |                 LogUtil.hb_info(Arg.get_help(all_module_type)) | ||
|  |             exit() | ||
|  |         else: | ||
|  |             raise OHOSException( | ||
|  |                 'There is no such option {}'.format(module_type), '0018') | ||
|  |         try: | ||
|  |             module.run() | ||
|  |         except KeyboardInterrupt: | ||
|  |             for file in os.listdir(ARGS_DIR): | ||
|  |                 if file.endswith('.json') and os.path.exists(os.path.join(ARGS_DIR, file)): | ||
|  |                     os.remove(os.path.join(ARGS_DIR, file)) | ||
|  |             print('User abort') | ||
|  |             return -1 | ||
|  |         else: | ||
|  |             return 0 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | if __name__ == "__main__": | ||
|  |     sys.exit(Main.main()) |