Embedded
Documentation

Version Latest

Build, size and build records

Building firmware with CMake presets or in place with IAR iarbuild, Keil uVision and STM32CubeIDE's headless builder, the size report and Firmware Memory editor, the build record, and vendor licence failures.

Build with one key

Press Cmd+Shift+B (Ctrl+Shift+B on Windows and Linux), click Build in the title bar, or run Build Firmware. With a vendor keymap, F7 (Keil, IAR) or Ctrl+B (Eclipse) does the same. The module builds the configuration selected in the status bar (see Choose the build configuration):

ConfigurationWhat runs
CMake presetcmake --preset and cmake --build --preset, as a native task
IAR configuration, in placeiarbuild <project> -make|-build|-clean <configuration> -log info [-varfile]; the workspace's .custom_argvars is passed with -varfile
Keil target, in placeuVision's batch mode, UV4 -b|-r|-c <project> -j0 -t <target> -o <log>, the only builder Keil provides for .uvprojx. It runs through a generated batch file in the target's output folder that waits for UV4 and prints its log; no vendor window opens. Windows only, as uVision is
STM32CubeIDE configuration, in placeSTM32CubeIDE's headless builder (org.eclipse.cdt.managedbuilder.core.headlessbuild) in a temporary workspace of its own, so your STM32CubeIDE workspace is not touched

Clean Firmware Build cleans the configuration. STM32CubeIDE's headless builder has no clean-only mode, so for those projects a rebuild cleans.

The STM32CubeIDE Debug configuration in the status bar, with its tooltip saying it builds in place with STM32CubeIDE's headless builder in a temporary workspace.The STM32CubeIDE Debug configuration in the status bar, with its tooltip saying it builds in place with STM32CubeIDE's headless builder in a temporary workspace.

Compiler and linker errors go to Problems at their line. The vendor build, rebuild and clean tasks carry problem matchers for iccarm, ILINK, armclang, armcc, armasm and armlink messages; uVision's own log is read too. Flash, debugging and the size report use the configuration's image (.elf, .out, .axf).

PathState
CMake and Ninja with the Arm GNU ToolchainTask and problem-matcher generation unit-tested; the integration test exists and has not run in a verified audit
IAR iarbuild in placeTested on build output captured from published IAR logs; kit shipped (iar-keil-build); not yet run against IAR
Keil UV4 in placeTested on published uVision logs; kit shipped (iar-keil-build); not yet run against Keil
STM32CubeIDE headless buildOption ids checked on real .cproject files; kit shipped (stm32cubeide-build); not yet run against STM32CubeIDE; the stm32cubeidec.exe launcher options are unverified
IAR or Arm Compiler 6 through CMake presetsDetected in unit tests on CMake snippets; no real IAR-only or Arm Compiler-only CMake project configured

Each build task builds one configuration or target.

Size report

After a successful build the status bar shows flash and RAM use, for example Flash 1.6% · RAM 19.1%, with a per-region table in its hover. A region that overflows is reported ("does not fit"). Analyze Firmware Memory opens the Firmware Memory editor: memory regions, sections and the largest symbols, each linked to its source line, and per-function stack frames where .su files exist.

A CMake preset built as a task, with flash and RAM use in the status bar and its hover.A CMake preset built as a task, with flash and RAM use in the status bar and its hover.

The Firmware Memory editor: memory regions, sections and the largest symbols, each linked to its source line.The Firmware Memory editor: memory regions, sections and the largest symbols, each linked to its source line.

  • Regions come from the GNU linker script's MEMORY command. The module takes the -T script from the build; set neuralInverse.embedded.linkerScript to use another.
  • Section and symbol sizes come from size, objdump and nm output on the image.
  • For Keil projects built in place, uVision's Program Size line becomes the size report, with the IROM and IRAM regions; region use is shown only when the target dialog sets one flash and one RAM region.
  • The image is the newest .elf in the preset's build folder unless neuralInverse.embedded.elfFile names it. Vendor builds use the configuration's image.

State: verified only on fixtures; not on a firmware of realistic size.

Build record

After every successful CMake build the module writes neuralinverse-build-record.json in the preset's build folder; an in-place vendor build run by an agent writes one next to the image. It records, with sorted keys:

  • the CMake, build tool and compilers used, with versions, from CMake's own detection and the toolchain;
  • the preset and its cache variables;
  • the distinct compiler options from compile_commands.json;
  • the image with its SHA-256;
  • the start and end times.

A later flash logs whether its image is the recorded one, by SHA-256. Keep the record with your release evidence; it is evidence toward the build reproducibility your process requires, not a certification. State: unit-tested.

Vendor licence failures

When an Arm Compiler 6, Keil MDK or IAR build stops at the licence, the module puts a Problem on the project and shows one notification that names the product, the licensed feature, where the tool looked for its licence (the licence server, licence file or IAR License Manager settings folder, and the environment variable that named it) and what to check, such as lmutil lmstat -a -c <port@host>, armlm inspect or lightlicensemanager setup --host <server>. Nothing is retried. Covered: FlexNet floating licences, Arm user-based licensing (guidance only), IAR LMS2, the IAR License Server and network licences.

The recognised forms come from build output that engineers published and from the vendors' own repositories. This is not yet run against Arm Compiler 6, Keil MDK or IAR. The vendor-licences kit prints your tools' licence status and captures their real failure output so it can be checked.

Agents can read the last build's licence failures and diagnose a licence failure in build output (Read the Last Build's Licence Failures, Diagnose a Licence Failure in Build Output).

Agents and the vendor build

An agent can build an IAR, Keil or STM32CubeIDE configuration in place with Build Vendor Project (build, rebuild or clean) after you confirm. It gets the exit code and its meaning, the image, the size report and the build record.

Last reviewed 18 October 2026View as Markdown

Build, size and build records · Docs · Neural Inverse