Embedded and WebAssembly

46.1 Embedded Systems

Nim → C means it targets any MCU with a C toolchain: AVR (Arduino), ARM Cortex-M (STM32), ESP32 (nesper for ESP-IDF), RP2040 (picostdlib), RISC-V.

Key flags: --os:any (or standalone), --mm:arc (deterministic, no cycle collector), -d:useMalloc or a custom allocator, --panics:on, -d:noSignalHandler, --opt:size, --exceptions:goto, -d:nimAllocPagesViaMalloc.

Memory-mapped registers with volatileLoad / volatileStore (std/volatile). Interrupt handlers via {.exportc, codegenDecl.}.

nim c --cpu:arm --os:any --mm:arc -d:useMalloc --opt:size --noMain --app:staticlib firmware.nim

46.2 WebAssembly

Compile via Emscripten: nim c --cc:clang --clang.exe:emcc --clang.linkerexe:emcc --os:linux --cpu:wasm32 -d:emscripten app.nim.

Or wasm32-wasi with clang + wasi-sdk for WASI runtimes (wasmtime, wasmer).

Libraries: nimwasmrt, wasmrt, raylib/naylib web builds.