Skip to main content

cortex-memory-budget

CI PyPI Python License

Static flash/RAM footprint analysis for ARM Cortex-M binaries — CI-friendly, framework-agnostic, zero runtime dependencies.

cortex-memory-budget analyzes an ELF binary (via arm-none-eabi-objdump, nm, and addr2line) and reports how much flash and RAM your firmware consumes, broken down by memory region, section, symbol, and source file. Pre-allocated stack and heap are detected via linker symbols with section-based fallback.

It supports Cortex-M0, Cortex-M4, Cortex-M7, and Cortex-M33 and is designed for resource-constrained MCUs where every kilobyte of flash and every byte of RAM matters.


✨ Features

Feature Status
Cortex-M0 / M4 / M7 / M33 supported ✅
Linker-script MEMORY {} auto-detect (with config override) ✅
Region utilisation report with ASCII bar charts ✅
.data double-counted (flash LMA + RAM VMA) ✅
Per-section breakdown ✅
Top-N symbol table (per region) ✅
Per-source-file aggregation via DWARF (addr2line) ✅
Pre-allocated stack & heap detection (symbol + section) ✅
Diff mode against a baseline ELF ✅
Multi-mode analyzer (multiple configs in one run) ✅
GitHub composite action + reusable workflow ✅
PR comment with stable marker (idempotent update) ✅
--fail-over-flash-pct / --fail-over-ram-pct CI gates ✅
Machine-readable JSON metrics ✅

🚀 Quickstart

1. Install

pip install cortex-memory-budget

Runtime dependencies: none (Python ≥ 3.11 stdlib only). At analysis time you need arm-none-eabi-objdump, arm-none-eabi-nm, and arm-none-eabi-addr2line on PATH, or pass --objdump/--nm/--addr2line.

2. Write a config (memory-analysis.json)

{
  "top_n_symbols": 20,
  "top_n_source_files": 15,
  "regions": [
    {"name": "FLASH", "length_kb": 1024},
    {"name": "SRAM",  "length_kb": 192}
  ]
}

regions is optional — if omitted (or for regions not listed), values are taken from the linker script passed via --linker-script. See docs/config-schema.md for the full schema.

3. Run

cortex-memory-budget memory-analysis.json \
    --elf build/firmware.elf \
    --target nucleo-h743zi \
    --build-config Release \
    --cortex m7 \
    --linker-script firmware.ld \
    --output-dir reports

Outputs in reports/:

File Purpose
memory_report.md Full Markdown report (regions / sections / symbols / src)
pr_comment.md Compact PR comment (with idempotent marker)
memory_metrics.json Machine-readable summary for downstream tooling
memory_diff.md (When --baseline-elf given) per-symbol/section delta

4. Use in GitHub Actions

- uses: embedded-pro/cortex-memory-budget@v0
  with:
    config-path: memory-analysis.json
    elf-path: build/firmware.elf
    baseline-elf-path: baseline/firmware.elf   # optional, enables diff
    target: nucleo-h743zi
    build-config: Release
    cortex: m7
    linker-script-path: firmware.ld
    fail-over-flash-pct: 85
    fail-over-ram-pct: 80

The action posts an idempotent PR comment, appends a step summary, and uploads all reports as an artifact. See docs/usage.md for the full input/output reference.


📚 Documentation

Document What it covers
docs/usage.md CLI flags, action inputs/outputs, examples
docs/config-schema.md Full JSON config schema + reference
docs/memory-model.md What counts where (.data, COMMON, debug)
docs/linker-script-detection.md Linker-script parser scope & limits
docs/cortex-variants.md M0 / M4 / M7 / M33 notes for memory layout
docs/architecture.md Internal module layout & data flow
docs/troubleshooting.md Common errors & their fixes
CONTRIBUTING.md Dev setup, testing, release process
CHANGELOG.md Version history

🧪 Examples

Five runnable examples ship in examples/:

Example Highlights
examples/minimal Single-region M4 firmware with explicit budgets
examples/cortex-m7 Multi-region layout incl. AXI SRAM
examples/cortex-m33 Single binary spanning two RAM regions
examples/multi-mode One ELF analysed against two budget profiles
examples/diff-mode baseline.elf vs. current.elf growth report

⚠️ Scope & limitations

This tool gives static post-link footprint analysis. It does not model:

  • Worst-case dynamic stack depth (use -fstack-usage + a call-graph walker for that). We report only the pre-allocated stack reservation.
  • Runtime heap fragmentation. We report only the configured heap budget.
  • Cache line / row paddings inserted at runtime.
  • Externally loaded / overlay / XIP-from-PSRAM code that isn't part of the ELF.

Estimates are intended as a CI guardrail for the static link image.


📄 License

Apache-2.0 — see LICENSE.

Metadata

Release files for cortex-memory-budget 0.2.0

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

Source distribution (sdist)

Source distribution for cortex-memory-budget 0.2.0
File Size Uploaded Provenance Actions
cortex_memory_budget-0.2.0.tar.gz 32.3 kB With provenance Details for cortex_memory_budget-0.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for cortex-memory-budget 0.2.0
File Interpreter ABI Platform Actions
cortex_memory_budget-0.2.0-py3-none-any.whl Python 3 none any Details for cortex_memory_budget-0.2.0-py3-none-any.whl

Total release size: 63.0 kB

Release files / cortex_memory_budget-0.2.0.tar.gz

Download URL cortex_memory_budget-0.2.0.tar.gz
Size 32.3 kB
Tags Source
SHA-256 checksum
How to use checksums
0214ce792ecea682d69b04f16b28bca61832b246adcee61ea1a6d529cf2776f6
BLAKE2b-256 checksum
How to use checksums
756d0d981022acd4173b8c1d1b6847dbb39e9cb947cd55577e42e5bd77e6854f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 24, 2026.

Transparency log

Release files / cortex_memory_budget-0.2.0-py3-none-any.whl

Download URL cortex_memory_budget-0.2.0-py3-none-any.whl
Size 30.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a4d49a59689017b559114ee48116e5be85cb1d0c6f1af976ae8294e4b21689c9
BLAKE2b-256 checksum
How to use checksums
d98091840009f5fbe825372893377614dfb940739cc64a420fbafb2c7990a460
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 24, 2026.

Transparency log

Security for cortex-memory-budget 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for cortex_memory_budget-0.2.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 24, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files Full provenance

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