
Nimmake for RISC-V — 让 RISC-V 固件构建像写 Python 一样简单告别手写复杂的 Makefile用 Python 优雅地管理 RISC-V 嵌入式项目。Nimmake 是一款专为嵌入式开发打造的轻量级跨平台构建工具原生支持RISC-V和ARM架构。基于 Python 驱动动内置丰富的 MCU 配置和工具链预设让你从繁琐的编译脚本中解放出来。 为什么 RISC-V 开发需要 NimmakeRISC-V 生态正在飞速发展但构建工具链却依然碎片化痛点Nimmake 的解决方案RISC-V 编译参数冗长难记-march/-mabi/-mcmodel内置预设配置—RISCV_32_IMAC_CFG开箱即用外设库集成需要手动添加大量源文件和头文件路径Party 模块系统— 自动扫描源码自动管理-I和-D项目结构混乱团队协作困难声明式 Python 配置清晰可维护—## 核心特性⚡ 内置 RISC-V 预设配置设配置Nimmake 内置了完整的 RISC-V 覆盖 32 位与 64 位架构架构| 配置 | CPU | ABI | 适用场景 | ------------------- | ---------- | ------- | ----------------------- ||RISCV_32_IMAC_CFG|rv32imac|ilp32| CH32V 系列、GD32VF 系列 |列 ||RISCV_64_GC_CFG|rv64gc|lp64d高性能 RISC-V 64 位芯片仅需一行代码即可加载加载fromnimmake.datasetsimportRISCV_32_IMAC_CFG CFGRISCV_32_IMAC_CFG.clone()CFG.set(cpu,rv32imac_zicsr_zifencei)# 自定义扩展hlp.Config(CFG)自动生成的编译标志示例-mabiilp32 -marchrv32imac_zicsr_zifencei -mcmodelmedany -O2 -Wal### Party 模块系统 — 告别手动源码管理管理源码将代码组织为逻辑模块PartyNimmake 自动处理源码扫描— 自动递归扫描目录下的.c/.S文件头文件路径— 自动添加-I包含路径宏定义— 自动注入-D宏定义依赖管理— 模块间依赖关系自动排序# 定义代码模块corehlp.Parties(CORE,Core,paramsPARTY_PARAM)driverhlp.Parties(Driver,Peripheral,defines{CH32V20x_D6:},paramsPARTY_PARAM,)userhlp.Parties(USER,User,paramsPARTY_PARAM)# 声明依赖关系自动处理编译顺序core.DependOn([driver,user])driver.DependOn([core,useuser.DependOn([core,driver]) 多工具链无缝切换多种编译器自由切换随意切换# RISC-V GCCToolChain_riscv{TOOLPATH:rD:\LLVM\xpack-riscv-none-elf-gcc-15\bin,TOOL:gcc,TOOL_PREFIX:riscv-none-elf-,}# 也可以切换到 LLVM/Clang 或 ARM GCCToolChain_clang{TOOLPATH:rD:\LLVM\ETArm\bin,TOOL:clang,TOOL_PREFIX:,}hlp.Update(ToolChain_riscv)hlp.Refresh()⚡ 极速构建体验增量编译— 只编译变大幅减少等待多进程并行程并行** —-j参数充分利用多核构建缓存—--ca让二次构建速度快到飞起建快到飞起Ninja 后端—-n模式获得极致速度Dry-Run 模式—--dry-run预览构## 快速上手CH32V20x RISC-V 实战沁恒CH32V20xRISC-V完整构建外设库与应用程序 应用程序1️⃣ 项目结构project/ ├── Nimmake.py # 构建脚本替代 Makefile ├── Core/ # 核心代码 │ ├── core_riscv.c │ └── core_riscv.h ├── Debug/ # 调试模块 │ ├── debug.c │ └── debug.h ├── Peripheral/ # 外设驱动库 │ ├── inc/ # 头文件 │ └── src/ # 源文件自动扫描 ├── Startup/ # 启动文件 │ └── startup_ch32v20x_D6.s ├── User/ # 用户应用 │ ├── main.c │ ├── system_ch32v20x.c │ └── ch32v20x_it.c └── Ld/ └── Link.ld # 链接脚本2️⃣ 编写 Nimmake.pyfromnimmake.datasetsimportRISCV_32_IMAC_CFGfromnimmake.HelperimportHelper# 工具链路径toolpath_riscvrD:\LLVM\xpack-riscv-none-elf-gcc-15\bintoolchain{TOOLPATH:toolpath_riscv,TOOL:gcc,TOOL_PREFIX:riscv-none-elf-,}hlpHelper()# 1. 芯片配置CFGRISCV_32_IMAC_CFG.clone()CFG.set(cpu,rv32imac_zicsr_zifencei)hlp.Config(CFG)hlp.set_cfg(linkscript,LD/Link.ld)# 2. 工具链配置hlp.Update(toolchain)hlp.Refresh()# 3. Party 模块定义PARTY_PARAM{CPU:hlp._cfg.cpu,ABI:hlp._cfg.abi,FPU:hlp._cfg.fpu,MODEL:hlp._cfg.model,}corehlp.Parties(CORE,Core,paramsPARTY_PARAM)debughlp.Parties(DEBUG,Debug,paramsPARTY_PARAM)userhlp.Parties(USER,User,paramsPARTY_PARAM)driverhlp.Parties(Driver,Peripheral,defines{CH32V20x_D6:},paramsPARTY_PARAM,)# 4. 依赖关系core.DependOn([driver,debug,user])driver.DependOn([core,user])# 5. 构建目标libhlp.Library_STATIC(driver)# 静态库hlp.DefaultTarget(lib)3️⃣ 一键构建# 安装pipinstallnimmake# 构建cdproject/ nimmake# 预览编译命令nimmake --dry-ru## 实际编译命令对比数容易出错。### Nimmake 自动生成编译 C 文件riscv-none-elf-gcc -c -mabiilp32 -mcmodelmedany-marchrv32imac_zicsr_zifencei -O2 -Wall -g-fdata-sections -ffunction-sections -stdgnu99-DCH32V20x_D6-IDebug -IPeripheral/inc -IUser -ICoreCore/core_riscv.c -o BUILD/OBJ/CORE/core_riscv.o编译汇编启动文件riscv-none-elf-gcc -c -mabiilp32 -marchrv32imac_zicsr_zifenceiStartup/startup_ch32v20x_D6.s -o BUILD/OBJ/_DEFAULT/startup_ch32v20x_D6.o链接riscv-none-elf-gcc -mabiilp32 -marchrv32imac_zicsr_zifencei-nostartfiles “-Wl,–gc-sections” “-TLd/Link.ld”-lm -lc -lgccBUILD/OBJ/CORE/core_riscv.o BUILD/OBJ/DEBUG/debug.o BUILD/OBJ/USER/main.o BUILD/OBJ/DRIVER/.oVER/.o-o BUILD/test.elNimmake 自动处理了所有-march、-mabi、-mcmodel、-I、-D你仅需关注业务代码关注业务代码 与其他构建工具对比特性NimmakeMakefileCMakeGNRISC-V 预设配置✅ 内置❌ 手写❌ 手写❌ 手写Party 模块系统✅ 声明式❌ 繁琐⚠️ 复杂⚠️ 复杂增量编译✅ 内置⚠️ 需配置✅ 内置✅ 内置多工具链切换✅ 一键切换❌ 手写✅ 内置❌ 需适配学习成本 低Python❌ 高⚠️ 中⚠️ 中内建 FreeRTOS/LVGL 等✅ 即插即用❌ 需手动❌ 需手动❌ 需手动 适用场景场景说明RISC-V MCU 量产项目CH32V、GD32VF、ESP32-C 等系列RISC-V 研究/教学快速搭建实验环境专注于算法和架构快速原型验证从零搭建编译环境只需几分钟团队协作统一构建系统消除环境差异CI/CD 集成纯命令行驱动轻松集成流水线 安装与资源# 安装pipinstallnimmake# 验证nimmake--version# 查看 RISC-V 示例gitclone https://github.com/pophu/nimmake.gitcdnimmake/samples/07_riscv32 nimmake资源链接GitHub 仓库https://github.com/pophu/nimmakePyPIpip install nimmake问题反馈https://github.com/pophu/nimmake/issues 结语构建工具专为 RISC-V 开发而生RISC-V 开发而生的构建工具。如果你还在不妨试试 Nimmake。ile不妨试试 Nimmake。用 Python 的优雅驾驭 RISC-V 的强大。立即体验pipinstallnimmakenimmake--help