This is a monorepository of Workshop
SDKs that provide the Zephyr cross-compiler toolchains built from the
zephyrproject-rtos/sdk-ng
releases. Each subdirectory is a self-contained sdkcraft project that packages
one toolchain (or the SDK NG bundle) for a specific target architecture.
Every toolchain here needs the companion zephyr-sdk-ng SDK, which brings the
base directory tree structure for the toolchain installation directory
The base SDK is maintained separately in canonical/zephyr-sdk and is not
part of this monorepo. Connect a toolchain from this repo to the base SDK to
target a specific architecture.
Each directory is an independent SDK with its own sdkcraft.yaml, README.md,
tests/, and renovate.json is centralised at the repository root. All
toolchains track the same upstream sdk-ng release, so they are versioned and
released together (see Versioning and branches).
zephyr-sdk-ng is the SDK NG bundle (the minimal SDK NG distribution that
exposes the per-architecture toolchain mount points). The remaining directories
are the per-architecture toolchains:
| SDK directory | Target triple |
|---|---|
zephyr-sdk-ng |
sdk-ng bundle (minimal) |
zephyr-amd64-sdk |
x86_64-zephyr-elf |
zephyr-arc-sdk |
arc-zephyr-elf |
zephyr-arc64-sdk |
arc64-zephyr-elf |
zephyr-arm-sdk |
arm-zephyr-eabi |
zephyr-arm64-sdk |
aarch64-zephyr-elf |
zephyr-microblazeel-sdk |
microblazeel-zephyr-elf |
zephyr-mips-sdk |
mips-zephyr-elf |
zephyr-nios2-sdk |
nios2-zephyr-elf |
zephyr-riscv64-sdk |
riscv64-zephyr-elf |
zephyr-sparc-sdk |
sparc-zephyr-elf |
zephyr-xtensa-amd-acp-6-0-adsp-sdk |
xtensa-amd_acp_6_0_adsp_zephyr-elf |
zephyr-xtensa-dc233c-sdk |
xtensa-dc233c_zephyr-elf |
zephyr-xtensa-espressif-esp32-sdk |
xtensa-espressif_esp32_zephyr-elf |
zephyr-xtensa-espressif-esp32s2-sdk |
xtensa-espressif_esp32s2_zephyr-elf |
zephyr-xtensa-espressif-esp32s3-sdk |
xtensa-espressif_esp32s3_zephyr-elf |
zephyr-xtensa-intel-ace15-mtpm-sdk |
xtensa-intel_ace15_mtpm_zephyr-elf |
zephyr-xtensa-intel-ace30-ptl-sdk |
xtensa-intel_ace30_ptl_zephyr-elf |
zephyr-xtensa-intel-tgl-adsp-sdk |
xtensa-intel_tgl_adsp_zephyr-elf |
zephyr-xtensa-mtk-mt8195-adsp-sdk |
xtensa-mtk_mt8195_adsp_zephyr-elf |
zephyr-xtensa-nxp-imx-adsp-sdk |
xtensa-nxp_imx_adsp_zephyr-elf |
zephyr-xtensa-nxp-imx8m-adsp-sdk |
xtensa-nxp_imx8m_adsp_zephyr-elf |
zephyr-xtensa-nxp-imx8ulp-adsp-sdk |
xtensa-nxp_imx8ulp_adsp_zephyr-elf |
zephyr-xtensa-nxp-rt500-adsp-sdk |
xtensa-nxp_rt500_adsp_zephyr-elf |
zephyr-xtensa-nxp-rt600-adsp-sdk |
xtensa-nxp_rt600_adsp_zephyr-elf |
zephyr-xtensa-nxp-rt700-hifi1-sdk |
xtensa-nxp_rt700_hifi1_zephyr-elf |
zephyr-xtensa-nxp-rt700-hifi4-sdk |
xtensa-nxp_rt700_hifi4_zephyr-elf |
zephyr-xtensa-sample-controller-sdk |
xtensa-sample_controller_zephyr-elf |
zephyr-xtensa-sample-controller32-sdk |
xtensa-sample_controller32_zephyr-elf |
All SDKs in this repo track the same upstream sdk-ng release, so they share a
single set of version branches:
main— development branch.sdkcraft.yamlversions here are placeholders.0.17.*,1.0.*, … — one branch per releasedsdk-ngline (for example0.16.9,0.17.4,1.0.1). Thesdkcraft.yamlon these branches pin the exactsdk-ngversion that every toolchain is built from.
Renovate opens a single, grouped pull request per version branch that bumps
every SDK to the matching sdk-ng release (see below). Merging that PR into
a version branch triggers a build-and-upload of every SDK.
The workflows in .github/workflows discover the SDK
directories dynamically, so adding or removing a toolchain requires no
workflow changes — the zephyr-sdk base SDK is the only directory excluded.
build.yml— on a pull request against a version branch, discovers the SDK directories that changed and runssdkcraft pack(plussdkcraft test) for each of them as a build matrix. Shared changes (CI orrenovate.json) rebuild every SDK.upload.yml— on a push to a version branch (or a manualworkflow_dispatch), builds and uploads every SDK. It fans out over the directories and calls the sharedcanonical/sdkcraft-actionsupload.ymlreusable workflow with a per-directorysubdirectoryinput, releasing each SDK to the<branch>/stablestore track.renovate.yml/renovate-check.yml— run Renovate and validate the rootrenovate.json.
A single renovate.json at the repository root governs the
whole monorepo. Its custom managers scan in every subdirectory
the inline version: "…" field of each sdkcraft.yaml,
resolving each against zephyrproject-rtos/sdk-ng GitHub releases. Updates are
grouped into one pull request per version branch, and packageRules constrain
each base branch to its release line (0.17.* → ^0.17., 1.0.* → ^1.0., 0.16.* → ^0.16.).
The base zephyr-sdk directory is excluded via ignorePaths.
-
Create a new
zephyr-<target>-sdk/directory containing asdkcraft.yaml(with an inlineversion:field), aREADME.md, and atests/directory. -
Point the toolchain part at the matching
sdk-ngrelease asset, for example:parts: toolchain: plugin: dump source: https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v$CRAFT_PROJECT_VERSION/toolchain_linux-x86_64_<target>.tar.xz source-type: tar
-
That's it — CI and Renovate pick the directory up automatically on the next run. No workflow or
renovate.jsonedits are required.
A minimal workshop that connects the base SDK, the SDK NG bundle, and the arm
toolchain from this repo:
# workshop.yaml
name: zephyr-firmware
base: [email protected]
sdks:
- name: uv
channel: latest/stable
- name: zephyr
channel: 4.4/stable
- name: zephyr-sdk-ng
channel: 1.0.1/stable
- name: zephyr-arm
channel: 1.0.1/stable
connections:
- plug: zephyr:sdk-ng
slot: zephyr-sdk-ng:sdk-ng
- plug: zephyr-sdk-ng:arm
slot: zephyr-arm:toolchain
- plug: zephyr:venv
slot: uv:venvSee each SDK's own README.md for target-specific details and the
base Zephyr SDK README for the full
firmware build workflow.
- Zephyr community: Zephyr GitHub
- Zephyr community forum: Zephyr Discord
- Workshop forum: Discourse
- Please review our Code of Conduct before participating.
All contributions, including code, documentation updates, and issue reports, are welcome!
- See each SDK's
CONTRIBUTING.mdfor guidelines. - Open issues or pull requests on the official repository.
Copyright 2025 Canonical Ltd.
The Zephyr RTOS and the Zephyr SDK toolchains are licensed under the Apache License 2.0.