Skip to content

Releases: PyMCU/pymcu-arm

v0.1.0a4

v0.1.0a4 Pre-release
Pre-release

Choose a tag to compare

@begeistert begeistert released this 02 Aug 04:54
6d461b8

Companion release to PyMCU v0.1.0a4.

  • pymcu flash works end to end on the Pico / Pico 2: every build now packs dist/firmware.uf2 next to the .bin (pure-Python UF2 packer, family IDs verified byte-for-byte against a hardware-proven reference; RP2040 0xe48bff56, RP2350 ARM-S 0xe48bff59).
  • Correctness: operand-less inline asm() now clobbers memory — LLVM could previously hoist loads across cpsid, silently breaking critical sections; the backend binary codesign is verify-first and flock-serialized.
  • New irq-critical example + UF2 artifact tests. Suite: 70 tests.

Install: pip install --pre "pymcu-compiler[arm]"

v0.1.0a3.post0

v0.1.0a3.post0 Pre-release
Pre-release

Choose a tag to compare

@begeistert begeistert released this 01 Aug 00:34
acc6576

Packaging fix over v0.1.0a3: the RP2040/RP2350 runtime sources (boot2.S, crt0.S, crt0_m33.S, picobin_rp2350.S and the linker scripts) are now bundled inside the wheel — pymcu build for arm targets works from a plain PyPI install (previously they were only present in editable/dev checkouts).

v0.1.0a3 (alpha 3)

v0.1.0a3 (alpha 3) Pre-release
Pre-release

Choose a tag to compare

@begeistert begeistert released this 31 Jul 23:39
a77b2f6

pymcu-arm v0.1.0a3 — companion release to PyMCU v0.1.0a3 (third alpha). The ARM targets (RP2040 / RP2350) reach feature parity with AVR.

RP2350 (Pico 2 / Pico 2 W)

  • Full target bring-up: crt0_m33, picobin image block, linker script, RTOS-enabling codegen.
  • f32 via the M33 FPU (softfp) — native hardware floats.
  • CYW43439 WiFi bring-up + MQTT examples and integration tests.

RP2040 (Pico / Pico W)

  • f32 via the bootrom fast-float library — floats without an FPU.
  • Integer division through the SIO hardware divider, now IRQ-safe (PRIMASK guard).
  • ArrayStore/ArrayLoad/ArrayBase + bytearray lowering; function-local and imported-module fixed arrays.

Both targets

  • Portable T-flag exception modeltry/except/raise now works on ARM (SignalError/SignalSuccess/BranchOnError).
  • Flash-resident const tables (FlashData/ArrayLoadFlash/FlashLoadPtr/FlashStrAddr).
  • Inline asm() with operands (textual constraints =r/0).
  • End-to-end examples for the a3 language features: generators, async v2 (gather, return values), f-strings as values, dict/set literals, FixedDict, inferred def types, slice assignment, print(float).

60/60 integration tests green on the RP2040Sharp / RP2350Sharp emulators.

Install: pip install --pre "pymcu-compiler[arm]"

v0.1.0a1.post1

v0.1.0a1.post1 Pre-release
Pre-release

Choose a tag to compare

@begeistert begeistert released this 08 Jun 09:56
a1e497e

pymcu-arm 0.1.0a1.post1

What's new

Windows compatibility

  • Fix LLVM search dirs on Windows: use %APPDATA%, %LOCALAPPDATA%, %PROGRAMFILES% paths
  • Pin subprocess encoding to UTF-8
  • Add win-arm64 wheel target to CI matrix (WoA x64 emulation)

Housekeeping

  • Add .gitignore; remove committed __pycache__ entries
  • Add MIT LICENSE file

Install

pip install --pre pymcu-arm

Pre-Release v0.1.0a1.post0

Pre-release

Choose a tag to compare

@begeistert begeistert released this 08 Jun 03:55
4664412

pymcu-arm 0.1.0a1.post0

What's new

RP2040 flasherpymcu flash now works for Raspberry Pi Pico targets.

Rp2040Programmer is registered under the pymcu.programmers entry-point and uses two strategies in order:

  1. picotool — if found on system PATH (brew install picotool / apt install picotool). Runs picotool load -f firmware.uf2 && picotool reboot.
  2. UF2 drag-and-drop — no extra tools required. Hold BOOTSEL while plugging in USB; the board mounts as RPI-RP2. PyMCU finds the volume automatically on macOS, Linux, and Windows and copies the .uf2. Waits up to 10 s for the board to appear.

Installation

pip install --pre "pymcu-arm==0.1.0a1.post0"

Or via the compiler:

pip install --pre "pymcu-compiler[arm]"

Pre-Release v0.1.0a1

Pre-Release v0.1.0a1 Pre-release
Pre-release

Choose a tag to compare

@begeistert begeistert released this 08 Jun 03:36
d860989

pymcu-arm 0.1.0a1 — Pre-Release

First public pre-release of pymcu-arm, the ARM (Cortex-M) backend for the
PyMCU compiler.

This release was formerly distributed as pymcu-rp2040. The package has been
renamed to reflect its scope: the backend targets the ARM Cortex-M architecture,
with the RP2040 as the first supported chip.


What's included

Component Description
pymcuc-arm AOT-compiled .NET 10 binary — lowers PyMCU IR to LLVM IR
Rp2040BackendPlugin Backend entry-point registered under pymcu.backendsrp2040
Rp2040ToolchainPlugin Toolchain driver registered under pymcu.toolchainsrp2040
Rp2040LlvmToolchain Resolves opt, llc, llvm-mc, ld.lld, llvm-objcopy via pymcu-arm-toolchain or system LLVM

Supported targets

Chip Triple CPU Status
RP2040 (Raspberry Pi Pico) thumbv6m-none-eabi cortex-m0plus

Compilation pipeline

PyMCU source (.py)
  → pymcuc (frontend + IR)
  → pymcuc-arm (LLVM IR)
  → opt  (LLVM optimiser, -O2)
  → llc  (LLVM → ARM Thumb2 assembly)
  → llvm-mc  (assembly → ELF object)
  → ld.lld  (linker → ELF)
  → llvm-objcopy  (ELF → flat binary / UF2)

Installation

pip install pymcu-arm==0.1.0a1

pymcu-arm-toolchain (LLVM 22.1.7) is declared as a platform-gated dependency
and is pulled in automatically on supported platforms (linux-x64, linux-arm64,
macos-arm64, windows-x64). On first use the toolchain stub auto-downloads the
LLVM binaries (~300 MB) into ~/.pymcu/tools/.

# Verify the toolchain resolved correctly
python -m pymcu_arm_toolchain status

Language features (RP2040)

  • Blink / GPIOmachine.Pin output, toggle, value read
  • UARTmachine.UART transmit and echo
  • MicroPython compatibility layerpymcu-micropython stub mapped to machine.*
  • CircuitPython compatibility layerpymcu-circuitpython stub mapped to digitalio.* / busio.UART
  • Function pruning — unreachable functions stripped from codegen output
  • Concurrent build safetyLazy<T> compiler guard prevents OOM under parallel test runs

Test status

6 integration tests pass against the RP2040Sharp simulator (blink + UART echo, both MicroPython and CircuitPython compat layers).


Known limitations

  • Alpha quality — API and IR format may change between pre-releases.
  • Only the RP2040 target is currently exercised; other Cortex-M0+ chips may
    work but are untested.
  • The pymcuc-arm binary is built per-platform at release time; wheels are
    published to GitHub Releases (too large for PyPI).

What changed from pymcu-rp2040

  • Package renamed pymcu-rp2040pymcu-arm
  • Python module remains at pymcu.backend.rp2040 / pymcu.toolchain.rp2040
    (chip-level paths are stable).
  • Binary renamed pymcuc-rp2040pymcuc-arm
  • Toolchain dependency renamed pymcu-rp2040-toolchainpymcu-arm-toolchain
    (LLVM 22.1.7, now wired as a runtime dependency)
  • CI migrated from a private Docker runner to GitHub-hosted runners
  • Publish workflow uses OIDC trusted publishing (no stored PyPI token)