Skip to main content

🚀 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 -j parameter, 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) — Generate compile_commands.json for IDE IntelliSense and static analysis
  • Concise CLI — Short command nmmk keeps 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

Metadata

Release files for nimmake 0.6.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for nimmake 0.6.1
File Interpreter ABI Platform
nimmake-0.6.1-py3-none-any.whl Python 3 none any Details

Release files / nimmake-0.6.1-py3-none-any.whl

Download URL nimmake-0.6.1-py3-none-any.whl
Size 168.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fc1658473ad80385eef0dfdfa95fa45ab768b48e3927648df940fbd28f769834
BLAKE2b-256 checksum
How to use checksums
5e328ed09969dd0d21a7ac31c5611f8490be68b2a47e14f1ab3ae0114f5b74ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.6

Release history Release notifications | RSS feed

This release

0.6.1 This release

1 release file

0.6.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page