https://github.com/qmk/qmk_toolchains
Compiler toolchains for QMK Firmware
https://github.com/qmk/qmk_toolchains
compiler gcc qmk qmk-cli qmk-firmware toolchain
Last synced: 5 months ago
JSON representation
Compiler toolchains for QMK Firmware
- Host: GitHub
- URL: https://github.com/qmk/qmk_toolchains
- Owner: qmk
- License: gpl-2.0
- Created: 2024-01-24T11:08:01.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-08-25T22:22:15.000Z (7 months ago)
- Last Synced: 2025-09-25T06:30:58.838Z (6 months ago)
- Topics: compiler, gcc, qmk, qmk-cli, qmk-firmware, toolchain
- Language: Shell
- Homepage: https://qmk.fm/
- Size: 145 KB
- Stars: 5
- Watchers: 2
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Support: support/init.sh
Awesome Lists containing this project
README
# QMK Toolchains
Builds of baremetal cross-compilation `*-gcc` primarily for QMK Firmware use.
Currently provides GCC 15.1.0, for the following baremetal targets:
* `arm-none-eabi`
* `avr`
* `riscv32-unknown-elf`
Toolchain host machines supported:
* Linux/x86_64
* Linux/aarch64
* Linux/riscv64
* macOS/aarch64
* macOS/x86_64
* Windows/x86_64
All builds for the above toolchain variants are done on GitHub actions -- the [latest release](https://github.com/tzarc/qmk_toolchains/releases/tag/latest) provides tarballs for each of the target+host combinations.
Repacked toolchain downloads can be found on [qmk/qmk_toolchains releases](https://github.com/qmk/qmk_toolchains/releases); these offer merged distributions for all baremetal targets for each host type.
# Containers
Two prerequisite container images are created through GitHub actions -- `ghcr.io/tzarc/qmk_toolchains:base` and `ghcr.io/tzarc/qmk_toolchains:builder`; the latter includes all the required cross-compilers for:
* `x86_64-qmk-linux-gnu`
* `aarch64-unknown-linux-gnu`
* `riscv64-unknown-linux-gnu`
* `x86_64-w64-mingw32`
* `aarch64-apple-darwin24`
* `x86_64-apple-darwin24`
These containers need an environment variable -- `$TC_WORKDIR` -- with a corresponding volume mounted to that location inside the container as the user/group permissions will be updated to match during execution.