π 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 (0)