π 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
Enter fullscreen mode Exit fullscreen mode
2. Verify Installation
nimmake --version
Enter fullscreen mode Exit fullscreen mode
3. Clone the Sample Project
git clone https://github.com/pophu/nimmake.git
cd nimmake/samples/05_arm32
Enter fullscreen mode Exit fullscreen mode
4. Build with One Command
nimmake
Enter fullscreen mode Exit fullscreen mode
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)
Enter fullscreen mode Exit fullscreen mode
π― 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
Enter fullscreen mode Exit fullscreen mode