From 79ab618db70493c7d863d4ebb6a1166e237e84da Mon Sep 17 00:00:00 2001 From: MacRsh Date: Sun, 17 Dec 2023 22:08:18 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=87=AA=E5=8A=A8=E6=9E=84=E5=BB=BA=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E6=96=B0=E5=A2=9E=E5=AF=B9eclipse=E7=9A=84=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 24 +-- README_EN.md | 27 +--- build.py | 222 ++++++++++++++++++++++++---- document/picture/readme/build_m.png | Bin 23499 -> 18381 bytes kconfig.py | 24 +-- 5 files changed, 223 insertions(+), 74 deletions(-) diff --git a/README.md b/README.md index bcedd12..fde9a0e 100644 --- a/README.md +++ b/README.md @@ -169,24 +169,14 @@ int main(void) ![工程目录](document/picture/readme/project.png) -5. 将文件加入到IDE中(大部分IDE都能自动识别工程路径下的文件,无需进行此步骤)。编译器中添加 `mr-library` - 的包含路径。配置GNU语法。如果您使用的是非 `GCC` 编译器,请使能GNU语法。 +5. 使用自动构建脚本,完成自动构建。在 `mr-library` 路径下,打开命令行工具,运行: - `MR` 配置脚本支持 `MDK` 工程自动配置。在 `mr-library` 路径下,打开命令行工具,运行 `python build.py -mdk` 自动完成配置(完成后跳过剩余步骤至 `配置菜单选项`)。 + - `MDK`:`python build.py -mdk` + - `Eclipse`:`python build.py -ecl` - ![MDK自动构建](document/picture/readme/build_mdk.png) - -6. 配置自动初始化(GCC环境),查找您工程下以 `.ld` 为后缀的连接脚本文件(通常为 `link.ld`),在脚本文件中添加代码(如使用 `MDK` 等能自动生成链接脚本的环境,请跳过此步骤): - - ```c - /* mr-library auto init */ - . = ALIGN(4); - _mr_auto_init_start = .; - KEEP(*(SORT(.auto_init*))) - _mr_auto_init_end = .; - ``` - - ![Ld](document/picture/readme/ld.png) + 以`MDK`为例: + + ![MDK自动构建](document/picture/readme/build_mdk.png) ## 配置菜单选项 @@ -206,6 +196,8 @@ int main(void) 4. 工程中引入 `#include "include/mr_lib.h"` 并在 `main` 函数中添加 `mr_auto_init();` 自动初始化函数,即可开始使用。 +注:更多命令可输入:`python build.py -h` 查看。 + ---------- # 先来点个灯吧 diff --git a/README_EN.md b/README_EN.md index 9fd2889..79f7b5d 100644 --- a/README_EN.md +++ b/README_EN.md @@ -182,30 +182,15 @@ version (the `MR` scripting tool relies on Python, install it yourself if there ![project directory](document/picture/readme/project.png) -5. Add the files to the IDE (most ides automatically recognize the files in the project path, eliminating the need for - this step). Add `mr-library` to the compiler - Contains the path. Configure the GNU syntax. If you are using a non-gcc compiler, enable GNU syntax. +5. Use the automatic build script to complete the automatic build. In the `mr-library` path, open the command line tool and run: - The `MR` configuration script supports the `MDK` project automatic configuration. In the `mr-library` path, open the - command line tool and run `python build.py -mdk` to complete the configuration automatically (when done, skip the - remaining steps to `Configuration menu options`). + - `MDK`:`python build.py -mdk` + - `Eclipse`:`python build.py -ecl` + + Take `MDK` as an example: ![MDK auto build](document/picture/readme/build_mdk.png) -6. Configure automatic initialization (GCC environment), find the connection script file with suffix `.ld `under your - project (usually` link.ld `), and add code to the script file (such as using the environment that can automatically - generate link scripts such as` MDK `, please skip this step) : - - ```c - /* mr-library auto init */ - . = ALIGN(4); - _mr_auto_init_start = .; - KEEP(*(SORT(.auto_init*))) - _mr_auto_init_end = .; - ``` - - ![Ld](document/picture/readme/ld.png) - ## Configure Menu Options 1. Open the command line tool in the `mr-library` directory and run `python build.py -m` for menu configuration. @@ -228,6 +213,8 @@ version (the `MR` scripting tool relies on Python, install it yourself if there 4. In the project, introduce `#include` include/mr_lib.h `and add` mr_auto_init() `to` main `function; ` Automatically initialize the function and start using it. +Note: More commands can be entered: `python build.py -h` to view. + ---------- # Let`s Light an LED diff --git a/build.py b/build.py index a6ceed8..a8cef29 100644 --- a/build.py +++ b/build.py @@ -1,5 +1,13 @@ #!/usr/bin/env python +""" +@copyright (c) 2023, MR Development Team + +@license SPDX-License-Identifier: Apache-2.0 + +@date 2023-12-17 MacRsh First version +""" + import os import pip import argparse @@ -15,11 +23,13 @@ try: except ImportError: print("Package not installed, installing...") install_package('lxml') + from lxml import etree try: from kconfiglib import Kconfig except ImportError: install_package('kconfiglib') + from kconfiglib import Kconfig try: import curses @@ -30,20 +40,28 @@ except ImportError: class MDK5: def __init__(self, mdk_path): - # Get MDK path + # Get MDK project file + mdk_file = [] for root, dirs, fs in os.walk(mdk_path): for f in fs: if f.endswith(".uvprojx"): - mdk_path = os.path.join(root, f) - self.path = os.path.dirname(mdk_path) - self.file = mdk_path - self.name = os.path.basename(mdk_path) - self.tree = etree.parse(mdk_path) - self.root = self.tree.getroot() + mdk_file = os.path.join(root, f) + break + if mdk_file: + break + # Check mdk file, init self + if mdk_file: + self.path = os.path.dirname(mdk_file) + self.file = mdk_file + self.tree = etree.parse(mdk_file) + self.root = self.tree.getroot() + else: + print("Error: .uvprojx file not found") + exit(1) def add_include_path(self, path): # Fix path - path = os.path.relpath(path, os.path.abspath(self.path)).replace('\\', '/') + path = os.path.relpath(path, self.path).replace('\\', '/') # Add path inc_path = self.tree.xpath("//Cads/VariousControls/IncludePath")[0] exist_paths = inc_path.text.split(';') @@ -56,11 +74,12 @@ class MDK5: self.add_include_path(path) def add_files_new_group(self, name, files): - # Fix path + # Fix name and files name = name.replace('\\', '/') fix_files = [] for file in files: - fix_files.append(file.replace('\\', '/')) + file = os.path.relpath(file, self.path).replace('\\', '/') + fix_files.append(file) files = fix_files # Add group groups_node = self.tree.find('//Groups') @@ -69,7 +88,7 @@ class MDK5: group_node = etree.SubElement(groups_node, "Group") group_name_node = etree.SubElement(group_node, "GroupName") group_name_node.text = name - # Check files exist + # Check files if files is None: return # Add files @@ -77,7 +96,7 @@ class MDK5: if files_node is None: files_node = etree.SubElement(group_node, "Files") for file in files: - # Add files + # Add file file_node = files_node.find(f"./File[FileName='{os.path.basename(file)}']") if file_node is None: file_node = etree.SubElement(files_node, "File") @@ -113,16 +132,22 @@ class MDK5: files = [] for root, dirs, fs in os.walk(path): for f in fs: - files.append(os.path.relpath(os.path.join(root, f), os.path.abspath(self.path))) + 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): + # Get c files files = [] for root, dirs, fs in os.walk(path): for f in fs: if f.endswith(".c") or f.endswith(".cpp") or f.endswith(".cxx"): - files.append(os.path.relpath(os.path.join(root, f), os.path.abspath(self.path))) - self.add_files_new_group(path, files) + 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): # Check uAC6 @@ -142,6 +167,106 @@ class MDK5: print("Build successfully") +class Eclipse: + def __init__(self, eclipse_path): + # Get eclipse project file + eclipse_file = [] + for root, dirs, fs in os.walk(eclipse_path): + for f in fs: + if f.endswith(".cproject"): + eclipse_file = os.path.join(root, f) + break + if eclipse_file: + break + # Check eclipse file, init self + if eclipse_file: + self.path = os.path.dirname(eclipse_file) + self.file = eclipse_file + self.tree = etree.parse(eclipse_file) + self.root = self.tree.getroot() + else: + print("Error:.cproject file not found") + exit(1) + + def add_include_path(self, path): + # Fix path + path = os.path.relpath(path, self.file).replace('\\', '/') + # Find all include path node + inc_path_nodes = self.tree.findall(".//option[@valueType='includePath']") + for inc_path_node in inc_path_nodes: + inc_path_node_id = inc_path_node.get('id') + # Check path node + if 'c.compiler' in inc_path_node_id and 'include' in inc_path_node_id: + # Add path + list_option = inc_path_node.find(f".//listOptionValue[@value='{path}']") + if list_option is None: + list_option = etree.SubElement(inc_path_node, "listOptionValue") + list_option.set('builtIn', "false") + list_option.set('value', path) + print("Include %s" % path) + break + + def use_auto_init(self): + # Find ld file + ld_file = [] + for root, dirs, files in os.walk(self.path): + for file in files: + if file.endswith(".ld"): + ld_file = os.path.join(root, file) + break + if ld_file: + break + # Check ld file + if ld_file: + with open(ld_file) as fr: + content = fr.read() + pos = content.find('.text :') + # Check pos + if pos == -1: + print("Use auto init failed") + # Check auto init is existed + if content.find('/* mr-library auto init */') == -1: + # Find pos offset + pos_offset = content[pos:].find('}') + # Check pos offset + if pos_offset == -1: + print("Use auto init failed") + pos = pos + pos_offset + # Use auto init + with open(ld_file, 'w') as fw: + front = content[:pos] + auto_init = """ + /* mr-library auto init */ + . = ALIGN(4); + _mr_auto_init_start = .; + KEEP(*(SORT(.auto_init*))) + _mr_auto_init_end = .; + """ + back = content[pos:] + fw.write(front + auto_init + back) + fw.close() + fr.close() + print("Use auto init") + + def save(self): + self.tree.write(self.file, pretty_print=True, encoding="utf-8", xml_declaration=True) + print("Build successfully") + + +class MR: + + def __init__(self): + self.path = os.path.dirname(__file__) + self.files_paths = [] + for root, dirs, files in os.walk(self.path): + if root == self.path: + for path in dirs: + file_path = os.path.join(root, path) + self.files_paths.append(file_path) + break + self.project_path = os.path.dirname(self.path) + + def show_logo(): print(" __ __ _ _ _ ") print("| \/ | _ __ | | (_) | |__ _ __ __ _ _ __ _ _") @@ -151,37 +276,76 @@ def show_logo(): print(" |___/") -def build_mdk(): - # Mr-library path - mr_path = os.path.dirname(__file__) - mr_c_paths = ['mr-library/device', 'mr-library/driver', 'mr-library/source'] - # MDK path - mdk_file = os.path.dirname(mr_path) +def show_license(): + license_file = os.path.join(os.path.dirname(__file__), "LICENSE") + try: + with open(license_file) as fr: + print(fr.read()) + except OSError: + print( + "This software is provided subject to the terms of the Apache License 2.0, the full text of which is not " + "currently available due to missing license documentation. By continuing to use the Software, you agree " + "to be bound by the terms of the Apache License 2.0. The full license text is available at " + "http://www.apache.org/licenses/LICENSE-2.0. We advise you to review the license terms in full before use" + "to ensure you understand and agree to be bound by all provisions contained therein.") + print( + "本软件根据Apache许可证2.0版本条款提供,由于许可证文件缺失,当前无法获取完整许可内容。继续使用本软件," + "代表您同意接受并遵守Apache许可证2.0版本的所有条款。完整许可证可在http://www.apache.org/licenses/LICENSE-2.0查看。建议您在使用前全面复核许可证内容," + "以确保完全理解并同意接受其中的所有规定。") - # Build - mdk_proj = MDK5(mdk_file) - mdk_proj.add_include_path(mr_path) - for mr_c_path in mr_c_paths: - mdk_proj.add_path_files(mr_c_path) + +def build_mdk(): + mr = MR() + # MDK project + mdk_proj = MDK5(mr.project_path) + # Include path + mdk_proj.add_include_path(mr.path) + # Add all c files + for files_path in mr.files_paths: + mdk_proj.add_path_c_files(files_path) + # Use gnu mdk_proj.use_gnu(True) + # Save mdk_proj.save() +def build_eclipse(): + mr = MR() + # Eclipse project + eclipse_proj = Eclipse(mr.project_path) + # Include path + eclipse_proj.add_include_path(mr.path) + # Use auto init + eclipse_proj.use_auto_init() + # Save + eclipse_proj.save() + + def menuconfig(): subprocess.run(["menuconfig"], check=True) subprocess.run(["python", "kconfig.py"], check=True) if __name__ == '__main__': - # Show mr-library logo + # Show logo show_logo() + # Parse arguments parser = argparse.ArgumentParser() - parser.add_argument("-mdk", "--mdk", action="store_true", help="Build with MDK") parser.add_argument("-m", "--menuconfig", action="store_true", help="Run menuconfig") - + parser.add_argument("-mdk", "--mdk", action="store_true", help="Build with MDK") + parser.add_argument("-ecl", "--eclipse", action="store_true", help="Build with Eclipse") + parser.add_argument("-lic", "--license", action="store_true", help="Show license") args = parser.parse_args() + + # Build if args.mdk: build_mdk() + elif args.eclipse: + build_eclipse() + # Menuconfig if args.menuconfig: menuconfig() + # Show license + if args.license: + show_license() diff --git a/document/picture/readme/build_m.png b/document/picture/readme/build_m.png index a33500bbd104bfadb86df888e0586fa3d64469fb..86f51ee65b8cf27ec490b22faf57680ab8a117db 100644 GIT binary patch literal 18381 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

  • ULOa?v&YY1GiKsAme`2h{fqexw><0GNJHcQSwxQ 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 fzk9pOpf|sIT<#