1.自动构建脚本优化,自动识别工程类型。
This commit is contained in:
@@ -11,7 +11,7 @@
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from build import install_package
|
from tool import install_package
|
||||||
except ImportError:
|
except ImportError:
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ except ImportError:
|
|||||||
import curses
|
import curses
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from build import log_print
|
from tool import log_print
|
||||||
except ImportError:
|
except ImportError:
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
@@ -68,7 +68,7 @@ def generate_config_file(kconfig_file, config_in, config_out, header_out):
|
|||||||
header_file.write("#endif /* _MR_CONFIG_H_ */\n")
|
header_file.write("#endif /* _MR_CONFIG_H_ */\n")
|
||||||
|
|
||||||
header_file.close()
|
header_file.close()
|
||||||
log_print('success', "config file make success")
|
log_print('success', "mr-library config file make success")
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|||||||
@@ -70,13 +70,13 @@ class MDK5:
|
|||||||
break
|
break
|
||||||
# Check mdk file, init self
|
# Check mdk file, init self
|
||||||
if mdk_file:
|
if mdk_file:
|
||||||
|
self.state = "ok"
|
||||||
self.path = os.path.dirname(mdk_file)
|
self.path = os.path.dirname(mdk_file)
|
||||||
self.file = mdk_file
|
self.file = mdk_file
|
||||||
self.tree = etree.parse(mdk_file)
|
self.tree = etree.parse(mdk_file)
|
||||||
self.root = self.tree.getroot()
|
self.root = self.tree.getroot()
|
||||||
else:
|
else:
|
||||||
log_print('error', "MDK build failed, '.uvprojx' file not found")
|
self.state = "not found"
|
||||||
exit(1)
|
|
||||||
|
|
||||||
def add_include_path(self, path):
|
def add_include_path(self, path):
|
||||||
# Fix path
|
# Fix path
|
||||||
@@ -92,14 +92,13 @@ class MDK5:
|
|||||||
for path in paths:
|
for path in paths:
|
||||||
self.add_include_path(path)
|
self.add_include_path(path)
|
||||||
|
|
||||||
def add_files_new_group(self, name, files):
|
def add_file_to_group(self, name, file):
|
||||||
# Fix name and files
|
# Fix name and files
|
||||||
name = name.replace('\\', '/')
|
name = name.replace('\\', '/')
|
||||||
fix_files = []
|
file = os.path.relpath(file, self.path).replace('\\', '/')
|
||||||
for file in files:
|
# Check name and file
|
||||||
file = os.path.relpath(file, self.path).replace('\\', '/')
|
if name is None or file is None:
|
||||||
fix_files.append(file)
|
return
|
||||||
files = fix_files
|
|
||||||
# Add group
|
# Add group
|
||||||
groups_node = self.tree.find('//Groups')
|
groups_node = self.tree.find('//Groups')
|
||||||
group_node = groups_node.find(f"./Group[GroupName='{name}']")
|
group_node = groups_node.find(f"./Group[GroupName='{name}']")
|
||||||
@@ -107,14 +106,10 @@ class MDK5:
|
|||||||
group_node = etree.SubElement(groups_node, "Group")
|
group_node = etree.SubElement(groups_node, "Group")
|
||||||
group_name_node = etree.SubElement(group_node, "GroupName")
|
group_name_node = etree.SubElement(group_node, "GroupName")
|
||||||
group_name_node.text = name
|
group_name_node.text = name
|
||||||
# Check files
|
|
||||||
if files is None:
|
|
||||||
return
|
|
||||||
# Add files
|
# Add files
|
||||||
files_node = group_node.find("Files")
|
files_node = group_node.find("Files")
|
||||||
if files_node is None:
|
if files_node is None:
|
||||||
files_node = etree.SubElement(group_node, "Files")
|
files_node = etree.SubElement(group_node, "Files")
|
||||||
for file in files:
|
|
||||||
# Add file
|
# Add file
|
||||||
file_node = files_node.find(f"./File[FileName='{os.path.basename(file)}']")
|
file_node = files_node.find(f"./File[FileName='{os.path.basename(file)}']")
|
||||||
if file_node is None:
|
if file_node is None:
|
||||||
@@ -141,29 +136,15 @@ class MDK5:
|
|||||||
file_extension = os.path.splitext(file_name_node.text)[1]
|
file_extension = os.path.splitext(file_name_node.text)[1]
|
||||||
file_type = file_type_map.get(file_extension, '9')
|
file_type = file_type_map.get(file_extension, '9')
|
||||||
file_type_node.text = file_type
|
file_type_node.text = file_type
|
||||||
log_print('info', "add %s" % name)
|
log_print('info', "add %s" % file)
|
||||||
|
|
||||||
def add_path_files(self, path):
|
def add_file(self, file):
|
||||||
files = []
|
name = os.path.dirname(os.path.relpath(file, self.path).replace('\\', '/')).replace('../', '')
|
||||||
for root, dirs, fs in os.walk(path):
|
self.add_file_to_group(name, file)
|
||||||
for f in fs:
|
|
||||||
files.append(os.path.relpath(os.path.join(root, f), self.path))
|
|
||||||
self.add_files_new_group(path, files)
|
|
||||||
|
|
||||||
def add_path_c_files(self, path):
|
def add_files(self, files):
|
||||||
# Get c files
|
for file in files:
|
||||||
files = []
|
self.add_file(file)
|
||||||
for root, dirs, fs in os.walk(path):
|
|
||||||
if root == path:
|
|
||||||
for f in fs:
|
|
||||||
if f.endswith(".c") or f.endswith(".cpp") or f.endswith(".cxx"):
|
|
||||||
file = os.path.relpath(os.path.join(root, f), self.path)
|
|
||||||
files.append(file)
|
|
||||||
# Fix name
|
|
||||||
name = os.path.relpath(path, self.path).replace('\\', '/').replace("../", "")
|
|
||||||
# Add group
|
|
||||||
if files:
|
|
||||||
self.add_files_new_group(name, files)
|
|
||||||
|
|
||||||
def use_gnu(self, enable=True):
|
def use_gnu(self, enable=True):
|
||||||
# Check uAC6
|
# Check uAC6
|
||||||
@@ -204,13 +185,13 @@ class Eclipse:
|
|||||||
break
|
break
|
||||||
# Check eclipse file, init self
|
# Check eclipse file, init self
|
||||||
if eclipse_file:
|
if eclipse_file:
|
||||||
|
self.state = "ok"
|
||||||
self.path = os.path.dirname(eclipse_file)
|
self.path = os.path.dirname(eclipse_file)
|
||||||
self.file = eclipse_file
|
self.file = eclipse_file
|
||||||
self.tree = etree.parse(eclipse_file)
|
self.tree = etree.parse(eclipse_file)
|
||||||
self.root = self.tree.getroot()
|
self.root = self.tree.getroot()
|
||||||
else:
|
else:
|
||||||
log_print('error', "eclipse build failed, '.cproject' not found")
|
self.state = "not found"
|
||||||
exit(1)
|
|
||||||
|
|
||||||
def add_include_path(self, path):
|
def add_include_path(self, path):
|
||||||
# Fix path
|
# Fix path
|
||||||
@@ -281,18 +262,19 @@ class Eclipse:
|
|||||||
log_print('success', "project build success")
|
log_print('success', "project build success")
|
||||||
|
|
||||||
|
|
||||||
class MR:
|
class MrLib:
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.path = os.getcwd()
|
self.path = os.getcwd()
|
||||||
self.files_paths = []
|
self.c_files = []
|
||||||
|
self.h_files = []
|
||||||
for root, dirs, files in os.walk(self.path):
|
for root, dirs, files in os.walk(self.path):
|
||||||
if root == self.path:
|
for f in files:
|
||||||
for path in dirs:
|
if f.endswith(".c") or f.endswith(".cpp"):
|
||||||
file_path = os.path.join(root, path)
|
self.c_files.append(os.path.join(root, f))
|
||||||
self.files_paths.append(file_path)
|
elif f.endswith(".h"):
|
||||||
break
|
self.h_files.append(os.path.join(root, f))
|
||||||
self.project_path = os.path.dirname(self.path)
|
self.proj_path = os.path.dirname(self.path)
|
||||||
|
|
||||||
def generate_include_file(self):
|
def generate_include_file(self):
|
||||||
header_out = os.path.join(self.path, "include/mr_lib.h").replace('\\', '/')
|
header_out = os.path.join(self.path, "include/mr_lib.h").replace('\\', '/')
|
||||||
@@ -336,7 +318,7 @@ class MR:
|
|||||||
header_file.write("#endif /* _MR_LIB_H_ */\n")
|
header_file.write("#endif /* _MR_LIB_H_ */\n")
|
||||||
|
|
||||||
header_file.close()
|
header_file.close()
|
||||||
log_print('success', "library include file make success")
|
log_print('success', "mr-library include file make success")
|
||||||
|
|
||||||
|
|
||||||
def show_logo():
|
def show_logo():
|
||||||
@@ -367,35 +349,28 @@ def show_license():
|
|||||||
"查看。建议您在使用前全面复核许可证内容, 以确保完全理解并同意接受其中的所有规定。")
|
"查看。建议您在使用前全面复核许可证内容, 以确保完全理解并同意接受其中的所有规定。")
|
||||||
|
|
||||||
|
|
||||||
def build_mdk():
|
def build_mdk(mr_proj_path, include_path, c_files):
|
||||||
mr = MR()
|
|
||||||
# MDK project
|
# MDK project
|
||||||
mdk_proj = MDK5(mr.project_path)
|
mdk_proj = MDK5(mr_proj_path)
|
||||||
# Include path
|
# Include path
|
||||||
mdk_proj.add_include_path(mr.path)
|
mdk_proj.add_include_path(include_path)
|
||||||
# Add all c files
|
# Add all c files
|
||||||
for files_path in mr.files_paths:
|
mdk_proj.add_files(c_files)
|
||||||
mdk_proj.add_path_c_files(files_path)
|
|
||||||
# Use gnu
|
# Use gnu
|
||||||
mdk_proj.use_gnu(True)
|
mdk_proj.use_gnu(True)
|
||||||
# Save
|
# Save
|
||||||
mdk_proj.save()
|
mdk_proj.save()
|
||||||
# Generate include file
|
|
||||||
mr.generate_include_file()
|
|
||||||
|
|
||||||
|
|
||||||
def build_eclipse():
|
def build_eclipse(mr_proj_path, path):
|
||||||
mr = MR()
|
|
||||||
# Eclipse project
|
# Eclipse project
|
||||||
eclipse_proj = Eclipse(mr.project_path)
|
eclipse_proj = Eclipse(mr_proj_path)
|
||||||
# Include path
|
# Include path
|
||||||
eclipse_proj.add_include_path(mr.path)
|
eclipse_proj.add_include_path(path)
|
||||||
# Use auto init
|
# Use auto init
|
||||||
eclipse_proj.use_auto_init()
|
eclipse_proj.use_auto_init()
|
||||||
# Save
|
# Save
|
||||||
eclipse_proj.save()
|
eclipse_proj.save()
|
||||||
# Generate include file
|
|
||||||
mr.generate_include_file()
|
|
||||||
|
|
||||||
|
|
||||||
def menuconfig():
|
def menuconfig():
|
||||||
@@ -416,6 +391,24 @@ def menuconfig():
|
|||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def build():
|
||||||
|
mr_lib = MrLib()
|
||||||
|
|
||||||
|
# Build project
|
||||||
|
mdk5 = MDK5(mr_lib.proj_path)
|
||||||
|
eclipse = Eclipse(mr_lib.proj_path)
|
||||||
|
if mdk5.state == "ok":
|
||||||
|
build_mdk(mr_lib.proj_path, mr_lib.path, mr_lib.c_files)
|
||||||
|
elif eclipse.state == "ok":
|
||||||
|
build_eclipse(mr_lib.proj_path, mr_lib.path)
|
||||||
|
else:
|
||||||
|
log_print('error', "Project not found(MDK5 or Eclipse)")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
# Generate include file
|
||||||
|
mr_lib.generate_include_file()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
# Show logo
|
# Show logo
|
||||||
show_logo()
|
show_logo()
|
||||||
@@ -423,14 +416,15 @@ if __name__ == '__main__':
|
|||||||
# Parse arguments
|
# Parse arguments
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("-m", "--menuconfig", action="store_true", help="Run menuconfig")
|
parser.add_argument("-m", "--menuconfig", action="store_true", help="Run menuconfig")
|
||||||
|
parser.add_argument("-b", "--build", action="store_true", help="Build project")
|
||||||
parser.add_argument("-lic", "--license", action="store_true", help="Show license")
|
parser.add_argument("-lic", "--license", action="store_true", help="Show license")
|
||||||
parser.add_argument("-gli", "--generate_lib_include_file", action="store_true",
|
parser.add_argument("-gli", "--generate_lib_include_file", action="store_true",
|
||||||
help="Generate library include file")
|
help="Generate library include file")
|
||||||
group = parser.add_mutually_exclusive_group()
|
|
||||||
group.add_argument("-mdk", "--mdk", action="store_true", help="Build with MDK")
|
|
||||||
group.add_argument("-ecl", "--eclipse", action="store_true", help="Build with Eclipse")
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# Build
|
||||||
|
if args.build:
|
||||||
|
build()
|
||||||
# Menuconfig
|
# Menuconfig
|
||||||
if args.menuconfig:
|
if args.menuconfig:
|
||||||
menuconfig()
|
menuconfig()
|
||||||
@@ -439,11 +433,5 @@ if __name__ == '__main__':
|
|||||||
show_license()
|
show_license()
|
||||||
# Generate library include file
|
# Generate library include file
|
||||||
if args.generate_lib_include_file:
|
if args.generate_lib_include_file:
|
||||||
mr = MR()
|
mr = MrLib()
|
||||||
mr.generate_include_file()
|
mr.generate_include_file()
|
||||||
|
|
||||||
# Build
|
|
||||||
if args.mdk:
|
|
||||||
build_mdk()
|
|
||||||
elif args.eclipse:
|
|
||||||
build_eclipse()
|
|
||||||
Reference in New Issue
Block a user