LPT26x-HSF-4MB-Hilink_14.2..../build/script/pack_tool.py

81 lines
3.2 KiB
Python
Raw Permalink Normal View History

2025-05-13 22:00:58 +08:00
#!/usr/bin/env python3
# coding=utf-8
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2022. All rights reserved.
import os
import sys
import shutil
from utils.build_utils import CopyModule, output_root, root_path
from enviroment import TargetEnvironment, BuildEnvironment, chip_copy_target
def find_copy_target(target_name):
for chip in chip_copy_target:
if target_name in chip_copy_target[chip]:
print(target_name, chip)
return chip
return None
class packTool:
def __init__(self, pack_name, target_name):
self.pack_name = pack_name
self.target_name = target_name
self.pack_suffix = ['bin', 'elf', 'lst', 'asm', 'nm', 'map', 'mem', 'hex', 'info', 'fwpkg', 'ko']
self.pack_dir = ['parse_tool']
self.pack_bin_suffix = ['bin']
def __replace_copy_target_path(self, path):
path = path.replace("<root>", root_path)
path = path.replace("<out_root>", output_root)
path = path.replace("<pack_target>", self.pack_name)
return path
def __pack_copy_target__(self, chip, copy_target):
for item in copy_target:
src = self.__replace_copy_target_path(item['src'])
dst = self.__replace_copy_target_path(item['dst'])
if not dst and os.path.exists(src):
print("remove %s" % src)
if os.path.isfile(src):
os.remove(src)
elif os.path.isdir(src):
shutil.rmtree(src)
continue
print("copy %s -> %s" % (src, dst))
c = CopyModule(copy_header = False)
c.copy(src, dst)
def pack(self):
chip = find_copy_target(self.target_name)
if chip is not None:
self.__pack_copy_target__(chip, chip_copy_target[chip][self.target_name])
return
target_env = TargetEnvironment(self.target_name)
chip = target_env.get('chip')
output_path = target_env.get_output_path()
pack_path = os.path.join(output_root, 'package', chip, self.pack_name)
pack_target_path = os.path.join(pack_path, self.target_name)
pack_bin_path = pack_path
print("Start pack target %s" % self.target_name)
if not os.path.exists(pack_target_path):
os.makedirs(pack_target_path)
for file_name in os.listdir(output_path):
ext_name = os.path.splitext(file_name)[-1][1:]
if ext_name not in self.pack_suffix:
continue
src = os.path.join(output_path, file_name)
dst = os.path.join(pack_target_path, file_name)
shutil.copy(src, dst)
print("copy %s -> %s" % (src, dst))
if ext_name not in self.pack_bin_suffix:
continue
bin_dst = os.path.join(pack_bin_path, file_name)
print("copy %s -> %s" % (src, bin_dst))
shutil.copy(src, bin_dst)
for file_name in os.listdir(output_path):
if file_name not in self.pack_dir:
continue
src = os.path.join(output_path, file_name)
dst = os.path.join(pack_target_path, file_name)
shutil.copytree(src, dst)
print("copytree %s -> %s" % (src, dst))