Skip to main content

Pre-built AVR-GCC 7.3.0 toolchain for PyMCU (avr-gcc, avr-as, avr-objcopy, avr-gdb, avr-libc)

Project description

pymcu-avr-toolchain

Pre-built AVR-GCC toolchain for the PyMCU AVR (ATmega/ATtiny) backend.

The AVR backend compiles PyMCU's architecture-agnostic IR to AVR assembly and then invokes three core tools to produce a flashable Intel HEX file:

avr-gcc   avr-as   avr-objcopy

(Full toolchain also includes avr-g++, avr-ld, avr-ar, avr-objdump, avr-size, avr-gdb, and avr-libc.)

This package is the AVR counterpart of pymcu-rp2040-toolchain: a platform-specific wheel whose only job is to ship those tools so that pip install pymcu-compiler[avr] is fully self-contained — no separate avr-gcc installation required on supported platforms.

The build script (avr-gcc-build.sh) is based on the work of Zak Kemble.

License: GPL-3.0-or-later packaging + binaries

The bundled AVR-GCC toolchain is derived from GCC and Binutils, which are licensed under GPL-3.0-or-later and LGPL-3.0-or-later respectively. avr-libc is BSD-2-Clause. Because the wheel bundles GPL code, the package as a whole is distributed under GPL-3.0-or-later.

  • The GPL applies to the toolchain binaries themselves, not to the firmware your projects compile with them. Firmware produced by avr-gcc is your own work and carries no GPL obligation.
  • Contrast with RP2040: pymcu-rp2040-toolchain bundles LLVM, which is Apache-2.0 WITH LLVM-exception (permissive, no copyleft). The isolation mechanism is the same — a separate optional package — but the license differs because the upstream compilers differ.

See LICENSES/ and NOTICE for the full texts.

Bundled versions

Tool Version
avr-gcc 15.2.0
avr-binutils 2.45
avr-gdb 16.3
avr-libc latest

Installation

pip install pymcu-avr-toolchain

avr-gcc + avr-libc together exceed PyPI's 100 MB per-file ceiling (~150 MB per platform). The distribution is therefore split:

Channel What it contains
PyPI (pip install pymcu-avr-toolchain) Lightweight stub (~14 KB)
GitHub Releases Binary wheels with the full toolchain (~150 MB each)

The binary wheel is downloaded automatically. The first call to get_bin_dir() (or any PyMCU build that needs the toolchain) downloads the correct wheel for your platform from GitHub Releases and extracts it to the shared cache at ~/.pymcu/tools/. Subsequent calls are instant.

import pymcu_avr_toolchain
bin_dir = pymcu_avr_toolchain.get_bin_dir()   # downloads on first call

For CI or air-gapped environments, set PYMCU_AVR_WHEEL_URL to override the download URL, or install the binary wheel directly:

# Linux x86-64
pip install https://github.com/PyMCU/avr-gcc-build/releases/download/v15.2.0.post5/pymcu_avr_toolchain-15.2.0.post5-py3-none-manylinux_2_17_x86_64.whl

# Linux arm64 (best-effort build)
pip install https://github.com/PyMCU/avr-gcc-build/releases/download/v15.2.0.post5/pymcu_avr_toolchain-15.2.0.post5-py3-none-manylinux_2_17_aarch64.whl

# macOS Apple Silicon
pip install https://github.com/PyMCU/avr-gcc-build/releases/download/v15.2.0.post5/pymcu_avr_toolchain-15.2.0.post5-py3-none-macosx_14_0_arm64.whl

# Windows x86-64
pip install https://github.com/PyMCU/avr-gcc-build/releases/download/v15.2.0.post5/pymcu_avr_toolchain-15.2.0.post5-py3-none-win_amd64.whl

System toolchain (alternative)

If you already have avr-gcc installed, the AvrToolchain driver finds the tools automatically via PATH — no package needed:

# macOS
brew tap osx-cross/avr && brew install avr-gcc

# Debian/Ubuntu
apt install gcc-avr binutils-avr avr-libc

Linux arm64: Built on GitHub's ubuntu-24.04-arm runner. The build script was designed for Linux x64; the arm64 build is best-effort (continue-on-error) and may be absent from a release if the runner fails.

macOS Intel (x86-64): The osx-cross/avr tap does not provide x86-64 bottles for avr-gcc, so no Intel wheel is published.

How the driver resolves tools

AvrToolchain (in pymcu-avr) checks these sources in order:

Priority Source
1 pymcu_avr_toolchain.get_bin_dir() — wheel bundle or auto-downloaded cache
2 Shared cache ~/.pymcu/tools/<platform>/pymcu-avr-toolchain/<version>/bin/
3 Common keg dirs (/opt/homebrew/opt/avr-gcc/bin, /usr/bin, …)
4 PATH

A missing wheel never blocks a developer who already has avr-gcc installed.

Inspecting installed tools

pymcu-avr-toolchain-info     # entry-point
python -m pymcu_avr_toolchain

For maintainers: publishing a new wheel

Release process

  1. Update VER_GCC, VER_BINUTILS, VER_GDB in avr-gcc-build.sh and version in python/pyproject.toml.
  2. Tag and push:
    git tag v15.2.0
    git push origin v15.2.0
    
  3. The build-wheels.yml workflow fires automatically:
    • Builds one binary wheel per platform (Linux x64 from source ~2 h, Linux arm64 best-effort, macOS via Homebrew, Windows via MSYS2).
    • Binary wheels → GitHub Releases (too large for PyPI's 100 MB limit).
    • PyPI receives only the pure-Python sdist stub.
    • publish-pypi uses OIDC trusted publishing (no stored token required).

Required GitHub configuration

Item Where Purpose
release environment Repo → Settings → Environments Gates OIDC publishing; add tag protection rule v*

Building a wheel locally

AVRT_TOOLCHAIN_DIR=build/avr-gcc-15.2.0-x64-linux \
WHEEL_PLATFORM_TAG=manylinux_2_17_x86_64 \
uv build --wheel python/

Environment variables

Variable Effect
AVRT_TOOLCHAIN_DIR Path to a staged AVR-GCC tree for hatch_build.py
AVRT_GCC_VERSION Inject GCC version string for cross-build CI steps
WHEEL_PLATFORM_TAG Override the wheel platform tag (e.g. win_amd64)
PYMCU_AVR_WHEEL_URL Override the binary wheel download URL (air-gapped installs)
PYMCU_TOOLS_DIR Override the ~/.pymcu/tools cache root
PYMCU_TOOLCHAIN_NO_SEEDING Set to 1 to use the in-package bin/ directly without seeding the cache

Version history

Package version avr-gcc Notes
15.2.0.post5 15.2.0 Fix project URLs; auto-download on first use
15.2.0 15.2.0 Initial release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pymcu_avr_toolchain-1!7.3.0.post1-py3-none-win_arm64.whl (56.1 MB view details)

Uploaded Python 3Windows ARM64

pymcu_avr_toolchain-1!7.3.0.post1-py3-none-win_amd64.whl (56.1 MB view details)

Uploaded Python 3Windows x86-64

pymcu_avr_toolchain-1!7.3.0.post1-py3-none-manylinux_2_17_x86_64.whl (57.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

pymcu_avr_toolchain-1!7.3.0.post1-py3-none-manylinux_2_17_aarch64.whl (57.3 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

pymcu_avr_toolchain-1!7.3.0.post1-py3-none-macosx_14_0_arm64.whl (57.1 MB view details)

Uploaded Python 3macOS 14.0+ ARM64

File details

Details for the file pymcu_avr_toolchain-1!7.3.0.post1-py3-none-win_arm64.whl.

File metadata

File hashes

Hashes for pymcu_avr_toolchain-1!7.3.0.post1-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 59d8b6cc8279c0a8d1b49e9b13adf358cdd6cabee5fc11596d0531102bd7899a
MD5 fdc04fb8e0d5929c2cb22f180c98d65d
BLAKE2b-256 b10a3c3d91c22dea9cb13847715ab2e516cbe856f27f1e60be44c511c2eb78db

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcu_avr_toolchain-1!7.3.0.post1-py3-none-win_arm64.whl:

Publisher: build-wheels.yml on PyMCU/pymcu-avr-toolchain

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymcu_avr_toolchain-1!7.3.0.post1-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for pymcu_avr_toolchain-1!7.3.0.post1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 64cdb4c972b216f2fbac5fe507a9d45360b7cf498bdacf4ed729170a5a2525be
MD5 062ddd2c8df8df33c00b75e2081f6536
BLAKE2b-256 42f51e08c9db2fafd32965336d1339a62df0183ed4727b5f535326adfef36457

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcu_avr_toolchain-1!7.3.0.post1-py3-none-win_amd64.whl:

Publisher: build-wheels.yml on PyMCU/pymcu-avr-toolchain

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymcu_avr_toolchain-1!7.3.0.post1-py3-none-manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pymcu_avr_toolchain-1!7.3.0.post1-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 bb557edc951c510e6189c56a89e73da158605ae76b04b7f381472eb47ddf035f
MD5 0b454c7564f4a4b2ab179c1348cadf7e
BLAKE2b-256 5e8f1f3fb71436e84a2d409527a3509e5489dd0aa77fd48b0386d1c58ad104e0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcu_avr_toolchain-1!7.3.0.post1-py3-none-manylinux_2_17_x86_64.whl:

Publisher: build-wheels.yml on PyMCU/pymcu-avr-toolchain

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymcu_avr_toolchain-1!7.3.0.post1-py3-none-manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for pymcu_avr_toolchain-1!7.3.0.post1-py3-none-manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 f66802eab221c21b45ca7b18d1eb460b63c3ba3e6239f1e43917d856abb72fc2
MD5 fe4103d814679811f186f0f40d4843d4
BLAKE2b-256 7ee1dc45ac1ad33eba958c2eacb6935ac3fe04f8a185f620ff274c37a66097fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcu_avr_toolchain-1!7.3.0.post1-py3-none-manylinux_2_17_aarch64.whl:

Publisher: build-wheels.yml on PyMCU/pymcu-avr-toolchain

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymcu_avr_toolchain-1!7.3.0.post1-py3-none-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pymcu_avr_toolchain-1!7.3.0.post1-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 77438621b93df7f4e6a94c544b3bb73c39ad51230060d32b0e2dd6817e62d369
MD5 0a0b9d5c5ab35f7f0854bda29b61b282
BLAKE2b-256 57e99d789d9ab4cbde2e7c80d72480f56adab2c82fdca150a8eda516f6b9e367

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcu_avr_toolchain-1!7.3.0.post1-py3-none-macosx_14_0_arm64.whl:

Publisher: build-wheels.yml on PyMCU/pymcu-avr-toolchain

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page