๐ Nimmake โ The Blazing-Fast Build Tool Built for Embedded Development
Say goodbye to complex Makefiles. Embrace a modern MCU build experience.
Nimmake is a lightweight, cross-platform build tool deeply optimized for ARM and RISC-V architectures. A Python-powered build system for MCU firmware development, it lets you effortlessly compile C/C++ source code for ARM, RISC-V, and a wide range of mainstream microcontrollers.
Built-in extensive MCU and toolchain configurations automatically generate the required compile flags. Add code as third-party libraries without manually adding source files, headers, or macros one by one; you can set dependencies between each library. Especially suitable for rapid development and prototyping.
๐ค Have You Encountered These Problems?
- โ Makefiles growing increasingly complex and hard to maintain?
- โ Manually adding source files, header paths, and macros every time you integrate a new library?
- โ Full rebuilds taking forever, testing your patience?
- โ Inconsistent build behavior across different team members' environments?
Nimmake was born to solve these pain points.
โจ Why Choose Nimmake?
| Pain Point | Nimmake's Solution |
|---|---|
| Tedious manual config | Modular Party System โ Integrate as third-party libraries, auto-generate compile flags, no manual config needed |
| Slow compilation | Incremental Builds + Multi-Process Parallel + Build Cache โ Only compile what changed, doubled speed |
| Chaotic toolchain management | Rich built-in MCU and toolchain configs โ Works out of the box, supports armgcc / LLVM / armclang |
| Lack of IDE support | Auto-generate compile_commands.json โ Seamless integration with VS Code, CLion, and other IDEs |
๐ฅ Core Features
โก Extreme Compilation Speed
- Incremental Builds โ Intelligently analyzes which files need rebuilding and compiles only what changed
-
Multi-Process Parallel โ Configurable job count via
-jparameter, fully utilizing multi-core CPUs -
Ninja Backend โ Optional Ninja mode (
-n/--ninja) for even faster builds -
Build Cache โ Cache compiled artifacts (
--cache), lightning-fast rebuilds
๐งฉ Modular Third-Party Integration
Pre-built modules for FreeRTOS, LVGL, FatFS, EasyLogger, CherryUSB, FreeModbus, and more โ plug and play, no configuration from scratch.
๐ง Multi-Toolchain Support
One codebase, seamlessly switch between compilers:
- armgcc โ Classic ARM GNU toolchain
- LLVM/Clang โ Modern compiler with better error diagnostics
- armclang โ ARM's official compiler, commercial-grade optimization
๐ Developer Friendly
-
Dry-Run Mode (
--dry-run) โ Preview the build plan before executing -
Compilation Database (
--compiledb) โ Generatecompile_commands.jsonfor IDE IntelliSense and static analysis -
Concise CLI โ Short command
nmmkkeeps you one step ahead
๐ฆ Quick Start in One Minute
1. Install Nimmake
pip install nimmake
2. Verify Installation
nimmake --version
3. Clone the Sample Project
git clone https://github.com/pophu/nimmake.git
cd nimmake/samples/05_arm32
4. Build with One Command
nimmake
That's it! No Makefile configuration, no manual compile flag management.
๐ Minimal Nimmake.py Example
A complete STM32F407 build script in just a dozen lines of code:
from nimmake.datasets import CORTEX_M4_CFG
from nimmake.Helper import Helper
hlp = Helper()
# Chip configuration
CFG = CORTEX_M4_CFG.clone()
hlp.Config(CFG)
# Toolchain configuration
hlp.Update({
"TOOLPATH": r"D:\LLVM\arm-none-eabi-gcc14\bin",
"TOOL": "gcc",
"TOOL_PREFIX": "arm-none-eabi-",
})
hlp.Refresh()
# Source modules (Party System)
core = hlp.Parties("CORE", "src/Core")
driver = hlp.Parties("Driver", "src/Drivers", third_party="HAL")
core.DependOn([driver])
# Build targets
srcs = ["startup_stm32f407xx.s"]
t = hlp.Program("test", sources=srcs)
hlp.DefaultTarget(t)
๐ฏ Use Cases
| Scenario | Description |
|---|---|
| ๐ Rapid Prototyping | Set up a build environment in minutes, no tedious configuration |
| ๐งช Multi-Platform Firmware | Seamlessly switch between ARM / RISC-V architectures |
| ๐ฅ Team Collaboration | Unified build system, eliminating "it works on my machine" |
| ๐ CI/CD Integration | CLI-driven, easily integrates into continuous integration pipelines |
๐ Documentation Navigation
| Document | Contents |
|---|---|
| Basic Usage | Chip config, toolchain setup, compile flags, Party system, build targets |
| Advanced Usage | PC programs, ARM32/RISC-V MCU builds, multi-toolchain switching |
| Party System | Third-party library integration details, parameter reference, built-in library list |
| CLI Parameters | Detailed explanation of all command-line parameters |
| FAQ | Answers to 18 common questions |
| Contributing | How to contribute to Nimmake |
๐ Get Started Now
Nimmake makes MCU firmware building as simple as writing Python.
pip install nimmake
git clone https://github.com/pophu/nimmake.git
cd nimmake/samples/05_arm32
nimmake
Top comments (1)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.