<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: pophu</title>
    <description>The latest articles on DEV Community by pophu (@pophu).</description>
    <link>https://dev.to/pophu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4120470%2Ff1859fb4-cd82-469a-ac3a-6a8b205fb3ac.png</url>
      <title>DEV Community: pophu</title>
      <link>https://dev.to/pophu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pophu"/>
    <language>en</language>
    <item>
      <title>Nimmake — The Blazing-Fast Build Tool Built for Embedded Development</title>
      <dc:creator>pophu</dc:creator>
      <pubDate>Fri, 11 Sep 2026 07:50:21 +0000</pubDate>
      <link>https://dev.to/pophu/nimmake-the-blazing-fast-build-tool-built-for-embedded-development-2jni</link>
      <guid>https://dev.to/pophu/nimmake-the-blazing-fast-build-tool-built-for-embedded-development-2jni</guid>
      <description>&lt;h1&gt;
  
  
  🚀 Nimmake — The Blazing-Fast Build Tool Built for Embedded Development
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Say goodbye to complex Makefiles. Embrace a modern MCU build experience.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nimmake is a lightweight, cross-platform build tool deeply optimized for &lt;strong&gt;ARM&lt;/strong&gt; and &lt;strong&gt;RISC-V&lt;/strong&gt; 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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤔 Have You Encountered These Problems?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;❌ Makefiles growing increasingly complex and hard to maintain?&lt;/li&gt;
&lt;li&gt;❌ Manually adding source files, header paths, and macros every time you integrate a new library?&lt;/li&gt;
&lt;li&gt;❌ Full rebuilds taking forever, testing your patience?&lt;/li&gt;
&lt;li&gt;❌ Inconsistent build behavior across different team members' environments?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Nimmake was born to solve these pain points.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ✨ Why Choose Nimmake?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pain Point&lt;/th&gt;
&lt;th&gt;Nimmake's Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tedious manual config&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Modular Party System&lt;/strong&gt; — Integrate as third-party libraries, auto-generate compile flags, no manual config needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slow compilation&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Incremental Builds + Multi-Process Parallel + Build Cache&lt;/strong&gt; — Only compile what changed, doubled speed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chaotic toolchain management&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Rich built-in MCU and toolchain configs&lt;/strong&gt; — Works out of the box, supports armgcc / LLVM / armclang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lack of IDE support&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Auto-generate compile_commands.json&lt;/strong&gt; — Seamless integration with VS Code, CLion, and other IDEs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🔥 Core Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ⚡ Extreme Compilation Speed
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Incremental Builds&lt;/strong&gt; — Intelligently analyzes which files need rebuilding and compiles only what changed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Process Parallel&lt;/strong&gt; — Configurable job count via &lt;code&gt;-j&lt;/code&gt; parameter, fully utilizing multi-core CPUs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ninja Backend&lt;/strong&gt; — Optional Ninja mode (&lt;code&gt;-n&lt;/code&gt; / &lt;code&gt;--ninja&lt;/code&gt;) for even faster builds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build Cache&lt;/strong&gt; — Cache compiled artifacts (&lt;code&gt;--cache&lt;/code&gt;), lightning-fast rebuilds&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧩 Modular Third-Party Integration
&lt;/h3&gt;

&lt;p&gt;Pre-built modules for &lt;strong&gt;FreeRTOS, LVGL, FatFS, EasyLogger, CherryUSB, FreeModbus&lt;/strong&gt;, and more — plug and play, no configuration from scratch.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔧 Multi-Toolchain Support
&lt;/h3&gt;

&lt;p&gt;One codebase, seamlessly switch between compilers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;armgcc&lt;/strong&gt; — Classic ARM GNU toolchain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLVM/Clang&lt;/strong&gt; — Modern compiler with better error diagnostics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;armclang&lt;/strong&gt; — ARM's official compiler, commercial-grade optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🛠 Developer Friendly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dry-Run Mode&lt;/strong&gt; (&lt;code&gt;--dry-run&lt;/code&gt;) — Preview the build plan before executing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compilation Database&lt;/strong&gt; (&lt;code&gt;--compiledb&lt;/code&gt;) — Generate &lt;code&gt;compile_commands.json&lt;/code&gt; for IDE IntelliSense and static analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Concise CLI&lt;/strong&gt; — Short command &lt;code&gt;nmmk&lt;/code&gt; keeps you one step ahead&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📦 Quick Start in One Minute
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Install Nimmake
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;nimmake
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Verify Installation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nimmake &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Clone the Sample Project
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/pophu/nimmake.git
&lt;span class="nb"&gt;cd &lt;/span&gt;nimmake/samples/05_arm32
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Build with One Command
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nimmake
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! No Makefile configuration, no manual compile flag management.&lt;/p&gt;




&lt;h2&gt;
  
  
  📝 Minimal Nimmake.py Example
&lt;/h2&gt;

&lt;p&gt;A complete STM32F407 build script in just a dozen lines of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;nimmake.datasets&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;CORTEX_M4_CFG&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;nimmake.Helper&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Helper&lt;/span&gt;

&lt;span class="n"&gt;hlp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Helper&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Chip configuration
&lt;/span&gt;&lt;span class="n"&gt;CFG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CORTEX_M4_CFG&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clone&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;hlp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CFG&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Toolchain configuration
&lt;/span&gt;&lt;span class="n"&gt;hlp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Update&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TOOLPATH&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;D:\LLVM\arm-none-eabi-gcc14\bin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TOOL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gcc&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TOOL_PREFIX&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;arm-none-eabi-&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="n"&gt;hlp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Refresh&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Source modules (Party System)
&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hlp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Parties&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CORE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;src/Core&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;driver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hlp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Parties&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Driver&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;src/Drivers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;third_party&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;HAL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DependOn&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;driver&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;# Build targets
&lt;/span&gt;&lt;span class="n"&gt;srcs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;startup_stm32f407xx.s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hlp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Program&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;srcs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;hlp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DefaultTarget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🎯 Use Cases
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🏃 Rapid Prototyping&lt;/td&gt;
&lt;td&gt;Set up a build environment in minutes, no tedious configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧪 Multi-Platform Firmware&lt;/td&gt;
&lt;td&gt;Seamlessly switch between ARM / RISC-V architectures&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;👥 Team Collaboration&lt;/td&gt;
&lt;td&gt;Unified build system, eliminating "it works on my machine"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔄 CI/CD Integration&lt;/td&gt;
&lt;td&gt;CLI-driven, easily integrates into continuous integration pipelines&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  📚 Documentation Navigation
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Document&lt;/th&gt;
&lt;th&gt;Contents&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="//usage.md"&gt;Basic Usage&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Chip config, toolchain setup, compile flags, Party system, build targets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="//advanced.md"&gt;Advanced Usage&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;PC programs, ARM32/RISC-V MCU builds, multi-toolchain switching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="//party.md"&gt;Party System&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Third-party library integration details, parameter reference, built-in library list&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="//params.md"&gt;CLI Parameters&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Detailed explanation of all command-line parameters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="//faq.md"&gt;FAQ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Answers to 18 common questions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="//contributing.md"&gt;Contributing&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;How to contribute to Nimmake&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🌟 Get Started Now
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Nimmake makes MCU firmware building as simple as writing Python.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;nimmake
git clone https://github.com/pophu/nimmake.git
&lt;span class="nb"&gt;cd &lt;/span&gt;nimmake/samples/05_arm32
nimmake
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>cpp</category>
      <category>python</category>
      <category>software</category>
      <category>tools</category>
    </item>
  </channel>
</rss>
