• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 #
5 # Copyright (c) 2023 Huawei Device Co., Ltd.
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
9 #
10 #     http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17 #
18 
19 
20 import os
21 import sys
22 
23 sys.path.append(os.path.dirname(os.path.abspath(__file__))) # ohos/build/hb dir
24 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # ohos/build dir
25 sys.path.append(os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'lite')) # ohos/build/lite dir
26 
27 from containers.arg import Arg, ModuleType
28 from containers.status import throw_exception
29 from resources.global_var import ARGS_DIR
30 from exceptions.ohos_exception import OHOSException
31 
32 from services.preloader import OHOSPreloader
33 from services.loader import OHOSLoader
34 from services.gn import Gn
35 from services.ninja import Ninja
36 
37 from resolver.build_args_resolver import BuildArgsResolver
38 from resolver.set_args_resolver import SetArgsResolver
39 from resolver.clean_args_resolver import CleanArgsResolver
40 from resolver.env_args_resolver import EnvArgsResolver
41 from resolver.tool_args_resolver import ToolArgsResolver
42 
43 from modules.interface.module_interface import ModuleInterface
44 from modules.interface.build_module_interface import BuildModuleInterface
45 from modules.interface.set_module_interface import SetModuleInterface
46 from modules.interface.env_module_interface import EnvModuleInterface
47 from modules.interface.clean_module_interface import CleanModuleInterface
48 from modules.interface.tool_module_interface import ToolModuleInterface
49 
50 from modules.ohos_build_module import OHOSBuildModule
51 from modules.ohos_set_module import OHOSSetModule
52 from modules.ohos_clean_module import OHOSCleanModule
53 from modules.ohos_env_module import OHOSEnvModule
54 from modules.ohos_tool_module import OHOSToolModule
55 
56 from helper.separator import Separator
57 from util.log_util import LogUtil
58 
59 
60 class Main():
61 
62     def _init_build_module(self) -> BuildModuleInterface:
63         args_dict = Arg.parse_all_args(ModuleType.BUILD)
64 
65         if args_dict.get("product_name").arg_value != '':
66             set_args_dict = Arg.parse_all_args(ModuleType.SET)
67             set_args_resolver = SetArgsResolver(set_args_dict)
68             ohos_set_module = OHOSSetModule(set_args_dict, set_args_resolver, "")
69             ohos_set_module.set_product()
70 
71         preloader = OHOSPreloader()
72         loader = OHOSLoader()
73         generate_ninja = Gn()
74         ninja = Ninja()
75         build_args_resolver = BuildArgsResolver(args_dict)
76 
77         return OHOSBuildModule(args_dict, build_args_resolver, preloader, loader, generate_ninja, ninja)
78 
79     def _init_set_module(self) -> SetModuleInterface:
80         Arg.clean_args_file()
81         args_dict = Arg.parse_all_args(ModuleType.SET)
82         set_args_resolver = SetArgsResolver(args_dict)
83         from services.menu import Menu
84         menu = Menu()
85         return OHOSSetModule(args_dict, set_args_resolver, menu)
86 
87     def _init_env_module(self) -> EnvModuleInterface:
88         args_dict = Arg.parse_all_args(ModuleType.ENV)
89         env_args_resolver = EnvArgsResolver(args_dict)
90         return OHOSEnvModule(args_dict, env_args_resolver)
91 
92     def _init_clean_module(self) -> CleanModuleInterface:
93         args_dict = Arg.parse_all_args(ModuleType.CLEAN)
94         clean_args_resolever = CleanArgsResolver(args_dict)
95         return OHOSCleanModule(args_dict, clean_args_resolever)
96 
97     def _init_tool_module(self) -> ToolModuleInterface:
98         Arg.clean_args_file()
99         args_dict = Arg.parse_all_args(ModuleType.TOOL)
100         generate_ninja = Gn()
101         tool_args_resolever = ToolArgsResolver(args_dict)
102         return OHOSToolModule(args_dict, tool_args_resolever, generate_ninja)
103 
104     @staticmethod
105     @throw_exception
106     def main():
107         main = Main()
108         module_type = sys.argv[1]
109         if module_type == 'build':
110             module = main._init_build_module()
111         elif module_type == 'set':
112             module = main._init_set_module()
113         elif module_type == 'env':
114             module = main._init_env_module()
115         elif module_type == 'clean':
116             module = main._init_clean_module()
117         elif module_type == 'tool':
118             module = main._init_tool_module()
119         elif module_type == 'help':
120             for all_module_type in ModuleType:
121                 LogUtil.hb_info(Separator.long_line)
122                 LogUtil.hb_info(Arg.get_help(all_module_type))
123             exit()
124         else:
125             raise OHOSException(
126                 'There is no such option {}'.format(module_type), '0018')
127         try:
128             module.run()
129         except KeyboardInterrupt:
130             for file in os.listdir(ARGS_DIR):
131                 if file.endswith('.json') and os.path.exists(os.path.join(ARGS_DIR, file)):
132                     os.remove(os.path.join(ARGS_DIR, file))
133             print('User abort')
134             return -1
135         else:
136             return 0
137 
138 
139 
140 if __name__ == "__main__":
141     sys.exit(Main.main())
142