openubmc-bingo 0.6.63__py3-none-any.whl → 0.6.66__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of openubmc-bingo might be problematic. Click here for more details.

bmcgo/__init__.py CHANGED
@@ -9,4 +9,4 @@
9
9
  # MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
10
10
  # See the Mulan PSL v2 for more details.
11
11
 
12
- __version__ = '0.6.63'
12
+ __version__ = '0.6.66'
@@ -34,16 +34,10 @@ def if_available(bconfig: BmcgoConfig):
34
34
  return True
35
35
 
36
36
 
37
- class BmcgoCommand(object):
37
+ class BmcgoCommand():
38
38
  def __init__(self, bconfig: BmcgoConfig, *args):
39
39
  self.bconfig = bconfig
40
- parser = argparse.ArgumentParser(prog="bmc studio", description="启动停止bmc studio", add_help=True,
41
- formatter_class=argparse.RawTextHelpFormatter)
42
- action_group = parser.add_mutually_exclusive_group()
43
- action_group.add_argument("-start", action=ACTION_TRUE, help="bmc studio的启动操作")
44
- action_group.add_argument("-stop", action=ACTION_TRUE, help="bmc studio的停止操作")
45
- action_group.add_argument("-restart", action=ACTION_TRUE, help="bmc studio的重启操作")
46
- parser.add_argument("-b", "--backend", help="指定bmc studio是前端运行还是后端运行,默认前端运行", action=ACTION_TRUE)
40
+ parser = self._create_parser()
47
41
  parsed_args, _ = parser.parse_known_args(*args)
48
42
  self.action = self.get_action(parsed_args)
49
43
  self.backend = parsed_args.backend
@@ -54,7 +48,8 @@ class BmcgoCommand(object):
54
48
  self.studio_script = f"{self.studio_path}/bmc_studio.sh"
55
49
  self.studio_command = f"{self.studio_script} {self.action}"
56
50
 
57
- def get_action(self, parsed_args):
51
+ @staticmethod
52
+ def get_action(parsed_args):
58
53
  if parsed_args.stop:
59
54
  return "stop"
60
55
  elif parsed_args.restart:
@@ -84,7 +79,7 @@ class BmcgoCommand(object):
84
79
 
85
80
  def run_start(self):
86
81
  if not self.backend:
87
- tools.run_command(self.studio_command, command_echo=False, show_log=True, timeout=None)
82
+ self._run_front_end()
88
83
  return
89
84
 
90
85
  self.studio_command = f"{self.studio_command} backend"
@@ -96,3 +91,19 @@ class BmcgoCommand(object):
96
91
  return
97
92
 
98
93
  log.warning(start_out)
94
+
95
+ def _run_front_end(self):
96
+ self.studio_command = f"trap ':' INT; /bin/bash {self.studio_command}; :"
97
+ command_list = ['/bin/bash', '-c', self.studio_command]
98
+ tools.run_command(command_list, command_echo=False, show_log=True, timeout=None)
99
+
100
+ def _create_parser(self):
101
+ _ = self
102
+ parser = argparse.ArgumentParser(prog="bmc studio", description="启动停止bmc studio", add_help=True,
103
+ formatter_class=argparse.RawTextHelpFormatter)
104
+ action_group = parser.add_mutually_exclusive_group()
105
+ action_group.add_argument("-start", action=ACTION_TRUE, help="bmc studio的启动操作")
106
+ action_group.add_argument("-stop", action=ACTION_TRUE, help="bmc studio的停止操作")
107
+ action_group.add_argument("-restart", action=ACTION_TRUE, help="bmc studio的重启操作")
108
+ parser.add_argument("-b", "--backend", help="指定bmc studio是前端运行还是后端运行,默认前端运行", action=ACTION_TRUE)
109
+ return parser
bmcgo/functional/check.py CHANGED
@@ -49,7 +49,6 @@ _PACKAGE_INFO_HELP = """
49
49
  b. 文本格式
50
50
  package/version@user/channel
51
51
  """
52
- MODEL_CHOICES = ["all", "mds", "resource_tree", "csr", "interface_mapping"]
53
52
 
54
53
 
55
54
  def if_available(bconfig: BmcgoConfig):
@@ -57,34 +56,21 @@ def if_available(bconfig: BmcgoConfig):
57
56
 
58
57
 
59
58
  class BmcgoCommand:
59
+ MODEL_CHOICES = ["all", "mds", "resource_tree", "csr", "interface_mapping"]
60
+ BOARD_NAME_DEFAULT = misc.boardname_default()
61
+
60
62
  def __init__(self, bconfig: BmcgoConfig, *args):
61
63
  self.bconfig = bconfig
62
- parser = argparse.ArgumentParser(prog=f"{misc.tool_name()} check", description="语法正确性与模型一致性检查", add_help=True,
63
- formatter_class=argparse.RawTextHelpFormatter)
64
- parser.add_argument("-b", "--board_name",
65
- help="指定单板获取配套全量源码,可选值为build/product目录下的单板名\n默认:" + misc.boardname_default(),
66
- default=misc.boardname_default())
67
- parser.add_argument("--stage", help="包类型,可选值为:rc(预发布包), stable(发布包)\n默认: stable", default="stable")
68
- parser.add_argument("-r", "--remote")
69
- parser.add_argument("-m", "--model", help=f"检查的模型,可选值为: {', '.join(MODEL_CHOICES)}\n默认: all",
70
- choices=MODEL_CHOICES, default="all")
64
+
65
+ parser = self._create_parser()
71
66
  parsed_args, _ = parser.parse_known_args(*args)
72
- self.board_name = parsed_args.board_name
73
- self.stage = parsed_args.stage
74
- self.remote = parsed_args.remote
75
- self.model = parsed_args.model
76
- self.community_issues = set()
77
- self.service_dict = {}
78
- self.packages = {}
79
- self.repo_brance = Repo(cwd).active_branch.name
80
- self.repo_name = "manifest"
81
- self.disabled = False
82
- self.studio_dir = "/usr/share/bmc_studio/server"
83
- self.studio_path = "/usr/share/bmc_studio/server/bmcstudio"
67
+ self._init_common_attributes(parsed_args)
68
+ self._init_specific_attributes(parsed_args)
69
+
84
70
  # 初始化fetch命令对象
85
71
  if self.bconfig.manifest:
86
72
  self.fetch_agent = FetchAgent(self.bconfig, *args)
87
-
73
+
88
74
  @staticmethod
89
75
  def check_overdue(issue: dict):
90
76
  data = issue.get("deadline")
@@ -97,7 +83,7 @@ class BmcgoCommand:
97
83
  except Exception as e:
98
84
  log.warning("日期 %s 解析失败:%s", data, e)
99
85
  return False
100
-
86
+
101
87
  @staticmethod
102
88
  def process_issues_group(issues, prefix, add_message=""):
103
89
  result = ""
@@ -111,9 +97,8 @@ class BmcgoCommand:
111
97
  if add_message:
112
98
  result = f"{result}\n{add_message}\n"
113
99
  return result
114
-
115
- @staticmethod
116
- def filter_output():
100
+
101
+ def filter_output(self):
117
102
  output_path = os.path.join(os.environ["HOME"], "bmc_studio", "var", "data", "cli_data", "issues.json")
118
103
  try:
119
104
  with open(output_path, "r") as output_fp:
@@ -124,6 +109,8 @@ class BmcgoCommand:
124
109
  ci_enabled_issues = []
125
110
  disabled_issues = []
126
111
  for item in items:
112
+ if not self._filter_issue(item):
113
+ continue
127
114
  rule = item.get("rule")
128
115
  filepath = item.get("filepath")
129
116
  ci_enabled = item.get("ciEnabled")
@@ -153,30 +140,23 @@ class BmcgoCommand:
153
140
  self.packages[comp_name] = package
154
141
 
155
142
  def run(self):
156
- service_path = os.path.join(cwd, "mds", "service.json")
157
- if self.bconfig.manifest is None:
158
- if not os.path.isfile(service_path):
159
- raise RuntimeError("mds/service.json 文件不存在")
160
- with open(service_path, "r") as service_fp:
161
- self.service_dict = json.load(service_fp)
162
- if "name" not in self.service_dict:
163
- raise RuntimeError("mds/service.json 文件中缺少 name 配置")
164
- self.repo_name = self.service_dict.get("name")
165
- self.find_component_packages()
143
+ self._check_repo_config()
144
+ self._before_run()
145
+
166
146
  if self.disabled:
167
147
  log.info("%s 仓库没有开启语法正确性和模型一致性检查", self.repo_name)
168
148
  return 0
149
+
169
150
  with tempfile.TemporaryDirectory(prefix="dependencies_repo_") as tempdir:
170
151
  if self.bconfig.manifest:
171
152
  self.fetch_agent.code_path = tempdir
172
153
  self.fetch_agent.run()
173
154
  elif self.packages:
174
155
  FetchComponentCode(self.packages, tempdir, self.remote, include_open_source=False).run()
175
- cmd = [self.studio_path, "check", "--repo", cwd, "--dependencies", tempdir, "--model", self.model]
176
- if self.bconfig.manifest:
177
- cmd.append("--manifest")
178
- cmd.append("true")
156
+ cmd = self._get_studio_command(tempdir)
157
+
179
158
  os.chdir(self.studio_dir)
159
+ os.environ['LD_LIBRARY_PATH'] = '/usr/share/bmc_studio/server:$LD_LIBRARY_PATH'
180
160
  Helper.run(cmd, stdout=subprocess.DEVNULL)
181
161
  os.chdir(cwd)
182
162
  error, warning = self.filter_output()
@@ -186,4 +166,64 @@ class BmcgoCommand:
186
166
  return -1
187
167
  log.warning(warning)
188
168
  log.success("语法正确性和模型一致性检查通过\n")
189
- return 0
169
+ return 0
170
+
171
+ def _init_common_attributes(self, parsed_args):
172
+ self.board_name = parsed_args.board_name
173
+ self.stage = parsed_args.stage
174
+ self.remote = parsed_args.remote
175
+ self.model = parsed_args.model
176
+ self.community_issues = set()
177
+ self.service_dict = {}
178
+ self.packages = {}
179
+ self.repo_branch = Repo(cwd).active_branch.name
180
+ self.repo_name = "manifest"
181
+ self.disabled = False
182
+ self.studio_dir = "/usr/share/bmc_studio/server"
183
+ self.studio_path = "/usr/share/bmc_studio/server/bmcstudio"
184
+
185
+ def _init_specific_attributes(self, parsed_args):
186
+ """初始化子类特有属性,由子类自行实现"""
187
+ pass
188
+
189
+ def _check_repo_config(self):
190
+ service_path = os.path.join(cwd, "mds", "service.json")
191
+ if self.bconfig.manifest is None:
192
+ if not os.path.isfile(service_path):
193
+ raise RuntimeError("mds/service.json 文件不存在")
194
+ with open(service_path, "r") as service_fp:
195
+ self.service_dict = json.load(service_fp)
196
+ if "name" not in self.service_dict:
197
+ raise RuntimeError("mds/service.json 文件中缺少 name 配置")
198
+ self.repo_name = self.service_dict.get("name")
199
+ self.find_component_packages()
200
+
201
+
202
+ def _get_studio_command(self, tempdir: str):
203
+ cmd = [self.studio_path, "check", "--repo", cwd, "--dependencies", tempdir, "--model", self.model]
204
+ if self.bconfig.manifest:
205
+ cmd.extend(["--manifest", "true"])
206
+ cmd.extend(["--board", self.board_name])
207
+ return cmd
208
+
209
+ def _filter_issue(self, item):
210
+ """过滤,由子类实现"""
211
+ _ = self
212
+ return True
213
+
214
+ def _before_run(self):
215
+ """主流程中的钩子函数, 由子类实现"""
216
+ pass
217
+
218
+ def _create_parser(self):
219
+ """命令参数,子类可重写"""
220
+ parser = argparse.ArgumentParser(prog=f"{misc.tool_name()} check", description="语法正确性与模型一致性检查", add_help=True,
221
+ formatter_class=argparse.RawTextHelpFormatter)
222
+ parser.add_argument("-b", "--board_name",
223
+ help="指定单板获取配套全量源码,可选值为build/product目录下的单板名\n默认:" + self.BOARD_NAME_DEFAULT,
224
+ default=self.BOARD_NAME_DEFAULT)
225
+ parser.add_argument("--stage", help="包类型,可选值为:rc(预发布包), stable(发布包)\n默认: stable", default="stable")
226
+ parser.add_argument("-r", "--remote")
227
+ parser.add_argument("-m", "--model", help=f"检查的模型,可选值为: {', '.join(self.MODEL_CHOICES)}\n默认: all",
228
+ choices=self.MODEL_CHOICES, default="all")
229
+ return parser
@@ -37,10 +37,10 @@ class DownloadDefaultBuildtools(Task):
37
37
  if self.config.partner_mode:
38
38
  self.info(f"从缓存目录{partner_tools_dir}复制编译器工具")
39
39
  self.run_command(f"cp -rf {partner_tools_dir}/. {self.rtos_sdk_dir}")
40
+ self.info("下载依赖工具结束")
40
41
 
41
- def install_buildtools(self):
42
+ def install_rtos(self):
42
43
  is_ubuntu = self.tools.is_ubuntu
43
- self.chdir(self.rtos_sdk_dir)
44
44
  self.info("删除目录 /opt/RTOS")
45
45
  self.run_command(f"rm -rf {BUILD_TOOLS_SHA256_PATH}", sudo=True)
46
46
  self.run_command("rm -rf /opt/RTOS", sudo=True)
@@ -54,36 +54,45 @@ class DownloadDefaultBuildtools(Task):
54
54
  else:
55
55
  self.pipe_command(["rpm2cpio {}".format(rpm), "sudo cpio -id -D /"])
56
56
 
57
+ def install_hcc(self):
57
58
  self.info("删除目录 /opt/hcc_arm64le")
58
59
  self.run_command("rm -rf /opt/hcc_arm64le", sudo=True)
59
60
  self.info("解压 hcc_arm64le")
60
61
  self.run_command("tar -xzf hcc_arm64le.tar.gz -C /opt", sudo=True)
61
62
 
63
+ def setup_path(self):
62
64
  logname = os.getenv(misc.ENV_LOGNAME, None)
63
65
  if logname and logname != "root":
64
66
  user_group = f"{os.getuid():{os.getgid()}}"
65
67
  self.run_command(f"chown {user_group} /opt/hcc_arm64le -R", sudo=True)
66
68
  self.run_command(f"chown {user_group} /opt/RTOS -R", sudo=True)
67
- self.chdir(self.config.code_path)
68
69
 
70
+ def copy_sysroot_sdk(self):
69
71
  libstdcpp_install_path = f"{self.config.sysroot}/usr/"
70
72
  os.makedirs(libstdcpp_install_path, exist_ok=True)
71
73
  self.run_command(f"cp -rf {self.config.cross_compile_install_path}/{self.config.cross_prefix}/lib64/" +
72
74
  f" {libstdcpp_install_path}")
75
+
76
+ def install_buildtools(self):
77
+ # 检查rtos是否安装,未安装或版本不匹配时安装
78
+ self.skip_install = not self.check_need_install(self.rtos_sdk_dir, BUILD_TOOLS_SHA256_PATH,
79
+ self.buildtools_new_sha256)
80
+ if self.skip_install:
81
+ self.info("buildtools版本匹配,跳过安装")
82
+ return
83
+ self.chdir(self.rtos_sdk_dir)
84
+ self.install_rtos()
85
+ self.install_hcc()
86
+ self.setup_path()
87
+ self.chdir(self.config.code_path)
88
+ self.copy_sysroot_sdk()
73
89
  self.run_command("cp -af {} {}".format(self.buildtools_new_sha256, BUILD_TOOLS_SHA256_PATH), sudo=True)
74
90
  self.run_command("chmod a+r {}".format(BUILD_TOOLS_SHA256_PATH), sudo=True)
75
91
 
76
92
  def run(self):
77
93
  self.download_tools()
78
- self.info("下载依赖工具结束")
79
94
 
80
95
  def install(self):
81
- self.skip_install = not self.check_need_install(self.rtos_sdk_dir, BUILD_TOOLS_SHA256_PATH,
82
- self.buildtools_new_sha256)
83
- if self.skip_install:
84
- self.info("buildtools版本匹配,跳过安装")
85
- return
86
- # 检查rtos是否安装,未安装或版本不匹配时安装
87
96
  self.install_buildtools()
88
97
 
89
98
 
@@ -96,4 +105,4 @@ class TaskClass(Task):
96
105
  self.download_buildtools.run()
97
106
 
98
107
  def install(self):
99
- self.download_buildtools.install()
108
+ self.download_buildtools.install()
@@ -16,7 +16,6 @@
16
16
  修改记录:2021-10-11 创建
17
17
  '''
18
18
  import os
19
- import re
20
19
  import shutil
21
20
 
22
21
  from bmcgo.tasks.task import Task
@@ -32,42 +31,52 @@ class TaskClass(Task):
32
31
  self.skip_install = False
33
32
 
34
33
  def download_dependency(self):
35
- self.info('开始下载依赖组件 ...')
34
+ self.info("开始下载sdk ...")
35
+ self.info(f"移除本地目录{self.sdk_dir}")
36
+ self.run_command(f"rm -rf {self.sdk_dir}", sudo=True)
36
37
  partner_sdk_dir = f"{os.path.expanduser('~')}/sdk"
37
38
  self.info(f"从缓存目录{partner_sdk_dir}复制sdk和rtos二进制文件")
38
39
  self.run_command(f"cp -rf {partner_sdk_dir}/. {self.sdk_dir}")
40
+ self.info("下载sdk结束")
39
41
 
40
- def move_dependency(self):
41
- # 移动到tools/build_tools目录中
42
+ def prepare_dependency(self):
43
+ # 移动到构建目录中
42
44
  if os.path.isdir(self.config.sdk_path):
43
45
  shutil.rmtree(self.config.sdk_path)
44
46
  self.run_command(f"cp -rf {self.sdk_dir} {self.config.sdk_path}")
45
- self.info("移动依赖组件结束")
46
- self.chdir(self.config.sdk_path)
47
- for file in os.listdir("."):
48
- if re.match("^Hi1711_[0-9]{8}_[0-9a-f]{40}.tar.gz$", file) is None:
49
- continue
50
- self.run_command(f"tar -xvf {file}")
51
- break
52
- if self.skip_install:
53
- self.info("sdk版本匹配")
54
- return
55
- old_sdk_dir = "/opt/hi1711sdk"
47
+ self.info("移动sdk结束")
48
+
49
+ def clear_path(self, old_sdk_path):
56
50
  self.run_command(f"rm -rf {SDK_SHA256_PATH}", sudo=True)
57
51
  self.run_command(f"rm -rf {SDK_PATH}", sudo=True)
58
- self.run_command(f"rm -rf {old_sdk_dir}", sudo=True)
52
+ self.run_command(f"rm -rf {old_sdk_path}", sudo=True)
53
+
54
+ def unzip_sdk(self):
55
+ self.info("开始解压sdk ...")
59
56
  self.run_command(f"mkdir -p {SDK_PATH}", ignore_error=True, sudo=True)
60
57
  self.run_command(f"tar -xzf hi1711sdk.tar.gz -C {SDK_PATH} {MODULE_SYMVERS}", sudo=True)
58
+
59
+ def setup_path(self, old_sdk_path):
61
60
  logname = os.getenv(misc.ENV_LOGNAME, None)
62
61
  if logname and logname != "root":
63
62
  user_group = f"{os.getuid():{os.getgid()}}"
64
63
  self.run_command(f"chown {user_group} {SDK_PATH} -R", sudo=True)
65
- self.run_command(f"ln -s {SDK_PATH} {old_sdk_dir}", sudo=True)
64
+ self.run_command(f"ln -s {SDK_PATH} {old_sdk_path}", sudo=True)
66
65
  self.run_command("cp -af {} {}".format(self.sdk_new_sha256, SDK_SHA256_PATH), sudo=True)
67
66
  self.run_command("chmod a+r {}".format(SDK_SHA256_PATH), sudo=True)
68
67
 
68
+ def install_dependency(self):
69
+ self.chdir(self.config.sdk_path)
70
+ self.skip_install = not self.check_need_install(self.sdk_dir, SDK_SHA256_PATH, self.sdk_new_sha256)
71
+ if self.skip_install:
72
+ self.info("sdk版本匹配,跳过安装")
73
+ return
74
+ old_sdk_dir = "/opt/hi1711sdk"
75
+ self.clear_path(old_sdk_dir)
76
+ self.unzip_sdk()
77
+ self.setup_path(old_sdk_dir)
78
+
69
79
  def run(self):
70
80
  self.download_dependency()
71
- self.info('下载依赖组件结束')
72
- self.skip_install = not self.check_need_install(self.sdk_dir, SDK_SHA256_PATH, self.sdk_new_sha256)
73
- self.move_dependency()
81
+ self.prepare_dependency()
82
+ self.install_dependency()
@@ -10,6 +10,7 @@
10
10
  # EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
11
11
  # MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
12
12
  # See the Mulan PSL v2 for more details.
13
+ import json
13
14
  import os
14
15
  import re
15
16
  import shutil
@@ -17,7 +18,7 @@ import subprocess
17
18
  from multiprocessing import Pool
18
19
  import patch_ng
19
20
  import yaml
20
- from git import Repo
21
+ from git import Repo, exc
21
22
 
22
23
  from bmcgo import errors
23
24
  from bmcgo import misc
@@ -248,6 +249,21 @@ class FetchComponentCode:
248
249
  log.error("conandata(%s) 没有找到", conandata)
249
250
  log.info("更新组件 %s 代码到 %s 失败, 无法获取到 conan 信息", component_name,
250
251
  conan_version)
252
+ except exc.GitCommandError as exp:
253
+ # 尝试修补MDS
254
+ cmd = f"conan install --requires={conan_version} -r openubmc_dev \
255
+ --build=missing -pr profile.ini --format=json --output-folder=tmp"
256
+ result = json.loads(Tools().run_command(cmd, capture_output=True, ignore_error=True))
257
+ nodes = result.stdout.strip().get("graph").get("nodes")
258
+ for node in nodes.values():
259
+ if node.get("ref").startswith(conan_version):
260
+ package_folder = node.get("package_folder")
261
+ if os.path.exists(f"{package_folder}/include/mds"):
262
+ src = f"{package_folder}/include/mds"
263
+ dest = os.path.abspath(f"{component_name}/mds")
264
+ shutil.copytree(src, dest, dirs_exist_ok=True)
265
+ log.info("将组件 %s 复制到 %s.", component_name, f"{component_name}/mds")
266
+ shutil.rmtree(f"{self.target_dir}/tmp", ignore_errors=True)
251
267
  except Exception as exp:
252
268
  log.error("工作状态错误: %s", exp)
253
- log.error("更新组件代码到 %s 失败", conan_version)
269
+ log.error("更新组件代码到 %s 失败", conan_version)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: openubmc-bingo
3
- Version: 0.6.63
3
+ Version: 0.6.66
4
4
  Summary: Tools provided by openubmc
5
5
  Home-page: https://openubmc.cn
6
6
  Classifier: Programming Language :: Python :: 3
@@ -1,4 +1,4 @@
1
- bmcgo/__init__.py,sha256=43ixOvkIh39o4ZhQabt-Iqd-IW0mIERU1M3-k75tKt8,562
1
+ bmcgo/__init__.py,sha256=35RGOj62SFVkQy27ERD5AR3h542oaBYQIVkYOOwLpfQ,562
2
2
  bmcgo/bmcgo.py,sha256=uD4TsfjrFB5aQPIS6WRUVc9ShXX-dSImY9ezkB13g1w,685
3
3
  bmcgo/bmcgo_config.py,sha256=-KYhC3jNqWkCWu6YkyxDZlyC3floXIHaibGpmyB6YWQ,11873
4
4
  bmcgo/errors.py,sha256=QW1ndrJcJ2Ws7riOznPKVvZsNlrYk73eZol7w8gJTPU,3076
@@ -194,8 +194,8 @@ bmcgo/component/template_v2/conanbase.py.mako,sha256=H0yO-uijpENtujj_1u037U2mZyy
194
194
  bmcgo/component/template_v2/conanfile.deploy.py.mako,sha256=Xbd-PlfVHOWeRFLfvzINeykiZzzSHsgO_yUUvYrKqTw,512
195
195
  bmcgo/functional/__init__.py,sha256=BDXz8BcSlCkfo5UYt6j2rm89-HiYA1ZzfpFhy99MH-0,538
196
196
  bmcgo/functional/analysis.py,sha256=4FaJlz7CbupHAdCdhdrRZCTlnHZ0bz7Cy32FNg9Ik_0,4097
197
- bmcgo/functional/bmc_studio_action.py,sha256=Gg96UB8QtnhsaqSdMhXuS9fddzAFPhR6UYCpto9UOYA,3605
198
- bmcgo/functional/check.py,sha256=ReGN_8RRM6isX_r7XXEuHzkooh8pasky5_GpAml5d_g,8356
197
+ bmcgo/functional/bmc_studio_action.py,sha256=1-O44mp--_r6M971cZ5JgutcQMM8aQtfQgDsSRXSrX8,3920
198
+ bmcgo/functional/check.py,sha256=lW9RAEhgo0CTrZW1iB6cetQBg_S_vtqtUchUqEy3JSU,9432
199
199
  bmcgo/functional/conan_index_build.py,sha256=Mp1fDpZVvecn5lUCsWZqq3mKSx9yu5pznQrDZr4Liuk,13443
200
200
  bmcgo/functional/config.py,sha256=ZQ-a9hegI0cV41iTo7t49ryBeUH4wPJ-qkVvWp8toV4,10824
201
201
  bmcgo/functional/csr_build.py,sha256=k6vEWuhrmTXTndMQX-RF6v9S7So-Gi4WWjoUYzh5IVA,42046
@@ -221,7 +221,6 @@ bmcgo/target/install_sdk.yml,sha256=PjSSFtDudnlA_N-__XHHuJmYTZT0ZcTKlyzOz9xIK3I,
221
221
  bmcgo/target/personal.yml,sha256=o2PEQIcHe7v8J5-WHiQlgTEgiisQx_vCkgLlKDLkzh4,1953
222
222
  bmcgo/target/publish.yml,sha256=WvaJAUZ0_6CMV3O1p1t6dagHe-DdLcXqLxKP11_ki1E,1615
223
223
  bmcgo/tasks/__init__.py,sha256=VapgzhPMmB7dzPIRohoVm1jjfVn_v97cYNCRmkxScaU,539
224
- bmcgo/tasks/download_buildtools_hm.py,sha256=f4UxStARc8Z8DnT_5O6ONajQ7P0sKyJ8brixr43fHVQ,5988
225
224
  bmcgo/tasks/misc.py,sha256=GK_bSDLGZW0FxywB2ICG1iIEz2y2QoCb1YQQk8SYOIA,711
226
225
  bmcgo/tasks/task.py,sha256=95nKxTe5PW3rfhpm5YFasPtmP8oCraeWJKq0D5mbl6A,18578
227
226
  bmcgo/tasks/task_build_conan.py,sha256=Si-8fIrQ_Vva6gw0kdLApEZY5cKt8Mt1C_8Ef4If61I,53872
@@ -230,8 +229,8 @@ bmcgo/tasks/task_build_wbd_up.py,sha256=X9-0Qqad-s3mGfJBMeBQvfZ99KlWcgaMluDr_zv6
230
229
  bmcgo/tasks/task_buildgppbin.py,sha256=epBxxrYFPgoTzpBgPzSRXcUs-ia_BJWsLGflylEJS7I,6614
231
230
  bmcgo/tasks/task_buildhpm_ext4.py,sha256=DBZnmU_eb14J0CW_wVoCc9VKnssFF1vXmRhLJQ6kR28,3482
232
231
  bmcgo/tasks/task_create_interface_config.py,sha256=rkFRGLrUgYCics-n1CKwCoQscU2BaRQkH7KP3zwJ6FI,5393
233
- bmcgo/tasks/task_download_buildtools.py,sha256=QZpsrm2eaoJ0z5PkdSuHXg1n7L9qPz2s3XAVCnQi-hA,4292
234
- bmcgo/tasks/task_download_dependency.py,sha256=2AW4awv_njlTrKy11ygKWekFBXLyS18FLcws8cVXGz0,3169
232
+ bmcgo/tasks/task_download_buildtools.py,sha256=imiOIWXxKOiWolALasTuSp3EkXrVeFWD0bPLERA78W0,4520
233
+ bmcgo/tasks/task_download_dependency.py,sha256=-ZkRcUKZyx3KYWlbBEOoJEm9rpfDGIItnJZQqpimNDM,3369
235
234
  bmcgo/tasks/task_hpm_envir_prepare.py,sha256=KVxiYeLtONpWe6Sh2l7hj09HD3NydrSTx3ycrpT6gLg,3457
236
235
  bmcgo/tasks/task_packet_to_supporte.py,sha256=5VSnC9typxiShCxt8YWWyBVojJ6MaXvgPHiIf6bObuA,4351
237
236
  bmcgo/tasks/task_prepare.py,sha256=K1cb_3lhclRkCYa2wgp5E2FMOd3pC7VHBnm_4L_nrRE,6704
@@ -246,7 +245,7 @@ bmcgo/utils/combine_json_schemas.py,sha256=08JrAlLeo_JgUqzYcZNgSwJZPLfjbWVJ4esPP
246
245
  bmcgo/utils/component_post.py,sha256=rTSMv36geI6rbm6ZFQenZfG0mn1nVPpdJqn7g8bYtKA,2330
247
246
  bmcgo/utils/component_version_check.py,sha256=ukc-H-A4ljkOShzVtkYWL0oTIYwxgDIZtP-fPqqHnRY,6274
248
247
  bmcgo/utils/config.py,sha256=BoNx8U8VjnHrC-lFXIhp6Ex8f02kZgUS-mTkRxi_SYM,51141
249
- bmcgo/utils/fetch_component_code.py,sha256=WtPJ5h1nM87X6RicrAhMOJzOzh9A0jD3CbjPc4A-REo,11280
248
+ bmcgo/utils/fetch_component_code.py,sha256=gLgo3J3s5DyuoKXuOArjxfQZxvCCt_bOWbI6teH5CNQ,12328
250
249
  bmcgo/utils/install_manager.py,sha256=Ag7tcTbhBfc6aTe5FOiET-8koq8_iY38Sozmi3dquio,4919
251
250
  bmcgo/utils/json_validator.py,sha256=_k5wU78wfYGrzvSDaqOEtT4otgKUjquVhZNpVf2PW_c,7524
252
251
  bmcgo/utils/mapping_config_patch.py,sha256=rfCfeiEU3WAEMDuUxLDARNjne3pWtK0Bxga3dQrEWoM,16827
@@ -264,8 +263,8 @@ bmcgo/utils/installations/install_plans/qemu.yml,sha256=lT7aKag60QUH6hTGFKa3hGRq
264
263
  bmcgo/utils/installations/install_plans/studio.yml,sha256=AEspVgsVAnmUdvqZYNCb7SPoUEq_0i61dfpauyguLa4,229
265
264
  bmcgo/utils/installations/installers/apt_installer.py,sha256=nPaCb4cobSi9InN_aHsEPtQ0k4FgsCUWE5_VgBPvcRE,3769
266
265
  bmcgo/utils/installations/installers/pip_installer.py,sha256=dDdios1EQ7fzt90r02pZeoM3jCmjslLzkSvzd2hgRVM,3241
267
- openubmc_bingo-0.6.63.dist-info/METADATA,sha256=Cu1hBuatPipUUr2RecPDKy_Q3yClsDgiN6LnVJJ9IjA,1010
268
- openubmc_bingo-0.6.63.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
269
- openubmc_bingo-0.6.63.dist-info/entry_points.txt,sha256=UUoUP-vAWTgg9vEYbRwYqOBHgpRtkngdzMPb-ocz90g,42
270
- openubmc_bingo-0.6.63.dist-info/top_level.txt,sha256=9AcvCAt1nZcOgMsGt6T07mg2Bgtdet-3mHTwg91axgI,6
271
- openubmc_bingo-0.6.63.dist-info/RECORD,,
266
+ openubmc_bingo-0.6.66.dist-info/METADATA,sha256=c7qItr-Hvt0Fzra-Q2wtuEN77amPYsFx8gOnGG1tvtg,1010
267
+ openubmc_bingo-0.6.66.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
268
+ openubmc_bingo-0.6.66.dist-info/entry_points.txt,sha256=UUoUP-vAWTgg9vEYbRwYqOBHgpRtkngdzMPb-ocz90g,42
269
+ openubmc_bingo-0.6.66.dist-info/top_level.txt,sha256=9AcvCAt1nZcOgMsGt6T07mg2Bgtdet-3mHTwg91axgI,6
270
+ openubmc_bingo-0.6.66.dist-info/RECORD,,
@@ -1,124 +0,0 @@
1
- # Copyright (c) 2024 Huawei Technologies Co., Ltd.
2
- # openUBMC is licensed under Mulan PSL v2.
3
- # You can use this software according to the terms and conditions of the Mulan PSL v2.
4
- # You may obtain a copy of Mulan PSL v2 at:
5
- # http://license.coscl.org.cn/MulanPSL2
6
- # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
7
- # EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
8
- # MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
9
- # See the Mulan PSL v2 for more details.
10
- """
11
- 功 能:下载并安装V2X的rtos/hcc工具
12
- 修改记录:2024-08-29 创建
13
- """
14
- import os
15
- import shutil
16
-
17
- from bmcgo.tasks.task import Task
18
- from bmcgo.utils.config import Config
19
- from bmcgo import misc
20
-
21
-
22
- class DownloadHmBuildTools(Task):
23
- def __init__(self, config: Config):
24
- super(DownloadHmBuildTools, self).__init__(config, "DownloadHmBuildTools")
25
- self.dependency_file = os.path.realpath(
26
- os.path.join(self.config.code_path, self.get_manufacture_config("base/dependency_buildtools"))
27
- )
28
- self.rtos_sdk_dir = f"{self.config.tools_path}/rtos-sdk-arm64-hm"
29
- _, buildtool_config = self.get_profile_config()
30
- self.standalone_toolchain = buildtool_config.get("standalone_toolchain", self.config.cross_compile_install_path)
31
- self.sdkroot = buildtool_config.get("sdkroot", "/opt/hi1711sdk")
32
- self.rtos_root = buildtool_config.get("rtos_root", f"/opt/{self.config.rtos_offering}")
33
- self.sysroot = buildtool_config.get("sysroot", self.config.sysroot)
34
- self.target_host = buildtool_config.get("target_host", self.config.cross_prefix)
35
- self.dep_md5 = f"{self.rtos_root}/dependency.md5sum"
36
- self.dep_md5_new = f"{self.tools.user_home}/dependency.md5sum.new"
37
- self.skip_install = False
38
-
39
- def download_tools(self):
40
- self.info(f"移除下载路径: {self.rtos_sdk_dir}")
41
- self.run_command(f"rm -rf {self.rtos_sdk_dir}", ignore_error=True, sudo=True)
42
- self.info("开始下载依赖工具...")
43
- partner_tools_dir = f"{os.path.expanduser('~')}/rtos_compiler"
44
- if self.config.partner_mode:
45
- self.info(f"从缓存目录{partner_tools_dir}复制编译器工具")
46
- self.run_command(f"cp -rf {partner_tools_dir}/. {self.rtos_sdk_dir}")
47
- self.info("下载依赖工具结束")
48
-
49
- def check_rtos_sdk(self):
50
- is_ubuntu = self.tools.is_ubuntu
51
- self.chdir(self.rtos_sdk_dir)
52
- self.info("安装 rpm 包")
53
- self.info(f"删除目录 {self.rtos_root}")
54
- self.run_command(f"rm -rf {self.rtos_root}", sudo=True)
55
- for rpm in os.listdir("./"):
56
- if not os.path.isfile(rpm) or not rpm.endswith(".rpm"):
57
- continue
58
- self.info("安装 {}".format(rpm))
59
- if not is_ubuntu:
60
- self.run_command("rpm -ivh {}".format(rpm), sudo=True)
61
- else:
62
- self.pipe_command(["rpm2cpio {}".format(rpm), "sudo cpio -id -D /"])
63
-
64
- self.info(f"删除目录 {self.standalone_toolchain}")
65
- self.run_command(f"rm -rf {self.standalone_toolchain}", sudo=True)
66
- self.info("解压 hcc_arm64le")
67
- self.run_command("tar -xzf hcc_arm64le.tar.gz -C /opt", sudo=True)
68
-
69
- hm_tiny = "/opt/hcc_arm64le_hm_tiny"
70
- self.info(f"删除目录 {hm_tiny}")
71
- self.run_command(f"rm -rf {hm_tiny}", sudo=True)
72
- self.info("解压 hcc_arm64le_hm_tiny")
73
- self.run_command("tar -xzf hcc_arm64le_hm_tiny.tar.gz -C /opt", sudo=True)
74
-
75
- self.info(f"删除目录 {self.sdkroot}")
76
- self.run_command(f"rm -rf {self.sdkroot}", ignore_error=True, sudo=True)
77
- self.run_command(f"mkdir -p {self.sdkroot}", ignore_error=True, sudo=True)
78
- self.info("解压 hi1711sdk")
79
- self.run_command(f"tar -xzf hi1711sdk.tar.gz -C {self.sdkroot} Module.symvers", sudo=True)
80
- logname = os.getenv(misc.ENV_LOGNAME, None)
81
- if logname and logname != "root":
82
- self.run_command(f"chown {logname} {self.rtos_root} -R", sudo=True)
83
- self.run_command(f"chown {logname} {self.sdkroot} -R", sudo=True)
84
- self.run_command(f"chown {logname} {self.standalone_toolchain} -R", sudo=True)
85
- self.run_command(f"chown {logname} {hm_tiny} -R", sudo=True)
86
-
87
- self.chdir(self.config.code_path)
88
-
89
- libstdcpp_install_path = os.path.join(self.sysroot, "usr")
90
- os.makedirs(libstdcpp_install_path, exist_ok=True)
91
-
92
- cross_compile_lib64 = os.path.join(self.standalone_toolchain, self.target_host, "lib64")
93
- self.run_command(f"cp -rf {cross_compile_lib64} {libstdcpp_install_path}")
94
-
95
- cmake_platform, _ = self.pipe_command(
96
- ["find /usr/share -type d -wholename */Modules/Platform", "head -n 1"], sudo=True, capture_output=True
97
- )
98
- self.info(f"复制HongMeng.cmake到 {cmake_platform}")
99
- hm_cmake = os.path.join(libstdcpp_install_path, "share/cmake/Modules/Platform/HongMeng.cmake")
100
- self.run_command(f"cp -af {hm_cmake} {cmake_platform}", sudo=True)
101
-
102
- self.run_command("cp -af {} {}".format(self.dep_md5_new, self.dep_md5))
103
- # md5文件对齐其他分支
104
- dep_md5_br = f"{self.tools.user_home}/dependency.md5sum"
105
- self.run_command(f"cp -af {self.dep_md5_new} {dep_md5_br}")
106
-
107
- def run(self):
108
- self.pipe_command([f"md5sum {self.dependency_file}"], self.dep_md5_new)
109
- if os.path.isfile(self.dep_md5):
110
- with open(self.dep_md5, "r") as fp:
111
- md5old = fp.read()
112
- with open(self.dep_md5_new, "r") as fp:
113
- md5new = fp.read()
114
- if md5old == md5new:
115
- self.info("版本匹配, 跳过安装")
116
- self.skip_install = True
117
- return
118
- self.download_tools()
119
-
120
- def install(self):
121
- if self.skip_install:
122
- return
123
- # 检查rtos是否安装,未安装或版本不匹配时安装
124
- self.check_rtos_sdk()