From 5b1ce36e92b6f74f45f6f49e82a1f83c8f476c8e Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sun, 8 Feb 2026 15:03:47 +0000
Subject: [PATCH 1/9] Initial plan
From 5627a600b6374cc6802dbbddf023afbe6e1f6571 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sun, 8 Feb 2026 15:05:51 +0000
Subject: [PATCH 2/9] chore: install gcovr via pip in toolshed
Co-authored-by: pavel-kirienko <3298404+pavel-kirienko@users.noreply.github.com>
---
toolshed/Dockerfile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/toolshed/Dockerfile b/toolshed/Dockerfile
index 87ad571..f4e6333 100644
--- a/toolshed/Dockerfile
+++ b/toolshed/Dockerfile
@@ -161,7 +161,7 @@ RUN echo "export PATH=$PIPX_HOME:$PIPX_BIN_DIR:$PATH" >> ~/.bashrc
RUN pipx install cowsay
RUN pipx install tox
RUN pipx install nox
-RUN pipx install gcovr
+RUN pip install --break-system-packages gcovr
RUN pipx install yakut
RUN cowsay -t moo
RUN git clone --depth 1 https://github.com/OpenCyphal/public_regulated_data_types.git ~/public_regulated_data_types
From 4f79063c69cef17fd3ba28e0084280f4dc469288 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sun, 8 Feb 2026 15:06:30 +0000
Subject: [PATCH 3/9] chore: document gcovr pip install requirement
Co-authored-by: pavel-kirienko <3298404+pavel-kirienko@users.noreply.github.com>
---
toolshed/Dockerfile | 1 +
1 file changed, 1 insertion(+)
diff --git a/toolshed/Dockerfile b/toolshed/Dockerfile
index f4e6333..d23ef99 100644
--- a/toolshed/Dockerfile
+++ b/toolshed/Dockerfile
@@ -161,6 +161,7 @@ RUN echo "export PATH=$PIPX_HOME:$PIPX_BIN_DIR:$PATH" >> ~/.bashrc
RUN pipx install cowsay
RUN pipx install tox
RUN pipx install nox
+# gcovr is required via pip with --break-system-packages for toolshed usage.
RUN pip install --break-system-packages gcovr
RUN pipx install yakut
RUN cowsay -t moo
From 51c43de2b1fd2b908347d23c3e31aa93fae996ab Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sun, 8 Feb 2026 15:07:14 +0000
Subject: [PATCH 4/9] chore: clarify gcovr install rationale
Co-authored-by: pavel-kirienko <3298404+pavel-kirienko@users.noreply.github.com>
---
toolshed/Dockerfile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/toolshed/Dockerfile b/toolshed/Dockerfile
index d23ef99..d6abfee 100644
--- a/toolshed/Dockerfile
+++ b/toolshed/Dockerfile
@@ -161,7 +161,8 @@ RUN echo "export PATH=$PIPX_HOME:$PIPX_BIN_DIR:$PATH" >> ~/.bashrc
RUN pipx install cowsay
RUN pipx install tox
RUN pipx install nox
-# gcovr is required via pip with --break-system-packages for toolshed usage.
+# gcovr must be installed into system Python (not pipx) so python3 -m gcovr works in tooling on Ubuntu 24.04;
+# --break-system-packages is required to install into the system site-packages.
RUN pip install --break-system-packages gcovr
RUN pipx install yakut
RUN cowsay -t moo
From 658f9d2666cbe0e9023e3f8e097f2acd1abb50c1 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sun, 8 Feb 2026 15:07:45 +0000
Subject: [PATCH 5/9] chore: explain pip install need for gcovr
Co-authored-by: pavel-kirienko <3298404+pavel-kirienko@users.noreply.github.com>
---
toolshed/Dockerfile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/toolshed/Dockerfile b/toolshed/Dockerfile
index d6abfee..a777910 100644
--- a/toolshed/Dockerfile
+++ b/toolshed/Dockerfile
@@ -161,8 +161,8 @@ RUN echo "export PATH=$PIPX_HOME:$PIPX_BIN_DIR:$PATH" >> ~/.bashrc
RUN pipx install cowsay
RUN pipx install tox
RUN pipx install nox
-# gcovr must be installed into system Python (not pipx) so python3 -m gcovr works in tooling on Ubuntu 24.04;
-# --break-system-packages is required to install into the system site-packages.
+# gcovr must be installed into system Python (not pipx) so python3 -m gcovr works in tooling that imports the module
+# from system site-packages; Ubuntu 24.04 enforces PEP 668 so --break-system-packages is required for this install.
RUN pip install --break-system-packages gcovr
RUN pipx install yakut
RUN cowsay -t moo
From 3dadd848f6ca1e18f7697a1d3e49353484bead26 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sun, 8 Feb 2026 16:10:30 +0000
Subject: [PATCH 6/9] docs: mention gcovr in toolshed readme
Co-authored-by: pavel-kirienko <3298404+pavel-kirienko@users.noreply.github.com>
---
README.md | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index 4213f59..228080f 100644
--- a/README.md
+++ b/README.md
@@ -25,12 +25,12 @@ like [libcanard](https://github.com/OpenCyphal/libcanard) and
| tag | Python | GCC (native) | GCC (arm-none-eabi) | Clang (native) | Cmake | Host Platforms | Other Utilities |
|----------|--------|--------------|---------------------|----------------|-------|----------------|-----------------|
-| [ts24.4.3](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) |
| - 13.3.0
- 12.3.0
- 11.4.0
- 10.5.0
- 7.5.0
| 13.3.1 | | 3.31.5 | | - JLink V816
- cppcheck-2.13
- yakut 0.13.0
- libpcap0.8-dev
- network-tools
- can-utils
- doxygen 1.13.2
- tox
- nox
- govr
- gcc-multilib (amd64 only)
|
+| [ts24.4.3](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | | | 13.3.1 | | 3.31.5 | | - JLink V816
- cppcheck-2.13
- yakut 0.13.0
- libpcap0.8-dev
- network-tools
- can-utils
- doxygen 1.13.2
- tox
- nox
- gcovr
- gcc-multilib (amd64 only)
|
| [ts24.4.2](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | | - 13.3.0
- 12.3.0
- 11.4.0
- 10.5.0
- 7.5.0
| 13.3.1 | | 3.31.5 | | - yakut 0.13.0
- libpcap0.8-dev
- network-tools
- can-utils
- doxygen 1.13.2
- gcc-multilib (amd64 only)
|
-| [ts24.4.1](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | | - 13.3.0
- 12.3.0
- 11.4.0
- 10.5.0
- 7.5.0
| 13.3.1 | | 3.31.5 | | can-utilsdoxygen 1.13.2toxnoxgovrgcc-multilib (amd64 only) |
-| [ts22.4.10](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | 3.10 | 12.3.0 | 13.3.1 | 18.1.3 | 3.30.1 | | - qemu
- can-utils
- doxygen 1.10.0
- nvm
- node 20.x
- nox
- govr
- gcc-multilib (amd64 only)
|
-| [ts22.4.8](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | 3.10 | 12.3.0 | (N/A) | 18.1.3 | 3.22.1 | | - qemu
- can-utils
- doxygen 1.10.0
- nvm
- node 20.x
- nox
- govr
- gcc-multilib (amd64 only)
|
-| [ts22.4.7](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | 3.10 | 12.3.0 | (N/A) | 18.1.3 | 3.22.1 | | - qemu
- can-utils
- doxygen 1.10.0
- nvm
- node 20.x
- nox
- govr
|
+| [ts24.4.1](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | | | 13.3.1 | | 3.31.5 | | can-utilsdoxygen 1.13.2toxnoxgcovrgcc-multilib (amd64 only) |
+| [ts22.4.10](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | 3.10 | 12.3.0 | 13.3.1 | 18.1.3 | 3.30.1 | | - qemu
- can-utils
- doxygen 1.10.0
- nvm
- node 20.x
- nox
- gcovr
- gcc-multilib (amd64 only)
|
+| [ts22.4.8](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | 3.10 | 12.3.0 | (N/A) | 18.1.3 | 3.22.1 | | - qemu
- can-utils
- doxygen 1.10.0
- nvm
- node 20.x
- nox
- gcovr
- gcc-multilib (amd64 only)
|
+| [ts22.4.7](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | 3.10 | 12.3.0 | (N/A) | 18.1.3 | 3.22.1 | | - qemu
- can-utils
- doxygen 1.10.0
- nvm
- node 20.x
- nox
- gcovr
|
You can use this in your workflow yaml like this:
From ea2b1fcd3e255c95cbc37390a382399d7681a436 Mon Sep 17 00:00:00 2001
From: Pavel Kirienko
Date: Sun, 8 Feb 2026 18:11:21 +0200
Subject: [PATCH 7/9] Apply suggestion from @pavel-kirienko
---
toolshed/Dockerfile | 2 --
1 file changed, 2 deletions(-)
diff --git a/toolshed/Dockerfile b/toolshed/Dockerfile
index a777910..f4e6333 100644
--- a/toolshed/Dockerfile
+++ b/toolshed/Dockerfile
@@ -161,8 +161,6 @@ RUN echo "export PATH=$PIPX_HOME:$PIPX_BIN_DIR:$PATH" >> ~/.bashrc
RUN pipx install cowsay
RUN pipx install tox
RUN pipx install nox
-# gcovr must be installed into system Python (not pipx) so python3 -m gcovr works in tooling that imports the module
-# from system site-packages; Ubuntu 24.04 enforces PEP 668 so --break-system-packages is required for this install.
RUN pip install --break-system-packages gcovr
RUN pipx install yakut
RUN cowsay -t moo
From 795628476f533433975e90e8fcc6ec71b2c3b9f4 Mon Sep 17 00:00:00 2001
From: Scott Dixon
Date: Fri, 20 Feb 2026 19:26:31 -0800
Subject: [PATCH 8/9] Adding tools for llvm-dsdl
# Conflicts:
# README.md
---
.github/workflows/toolshed.yml | 7 ++++++-
README.md | 9 +++++++--
toolshed/Dockerfile | 5 +++++
toolshed/README.md | 23 ++++++++++++++++++-----
toolshed/provision-repositories.sh | 21 ++++++++++++++++-----
toolshed/provision.sh | 1 +
6 files changed, 53 insertions(+), 13 deletions(-)
diff --git a/.github/workflows/toolshed.yml b/.github/workflows/toolshed.yml
index e29297c..1aaf28b 100644
--- a/.github/workflows/toolshed.yml
+++ b/.github/workflows/toolshed.yml
@@ -10,6 +10,7 @@ on:
env:
REGISTRY_IMAGE: ghcr.io/opencyphal/toolshed
IMAGE_VERSION_PREFIX: ts
+ IMAGE_DESCRIPTION: Provides a consistent build and test environment for development, continuous-integration, and test automation of OpenCyphal C and C++ based projects.
jobs:
release-ts-amd64:
@@ -179,7 +180,11 @@ jobs:
- name: Create manifest list and push
working-directory: /tmp/digests
run: |
- docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
+ docker buildx imagetools create \
+ --annotation "index:org.opencontainers.image.source=https://github.com/OpenCyphal/docker_toolchains" \
+ --annotation "index:org.opencontainers.image.description=${{ env.IMAGE_DESCRIPTION }}" \
+ --annotation "index:org.opencontainers.image.licenses=MIT" \
+ $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
- name: Inspect image
diff --git a/README.md b/README.md
index 228080f..68e4dff 100644
--- a/README.md
+++ b/README.md
@@ -25,13 +25,18 @@ like [libcanard](https://github.com/OpenCyphal/libcanard) and
| tag | Python | GCC (native) | GCC (arm-none-eabi) | Clang (native) | Cmake | Host Platforms | Other Utilities |
|----------|--------|--------------|---------------------|----------------|-------|----------------|-----------------|
-| [ts24.4.3](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | | | 13.3.1 | | 3.31.5 | | - JLink V816
- cppcheck-2.13
- yakut 0.13.0
- libpcap0.8-dev
- network-tools
- can-utils
- doxygen 1.13.2
- tox
- nox
- gcovr
- gcc-multilib (amd64 only)
|
+| [ts24.4.4](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | | - 13.3.0
- 12.3.0
- 11.4.0
- 10.5.0
- 7.5.0
| 13.3.1 | | 3.31.5 | | - JLink V816
- cppcheck-2.13
- yakut 0.13.0
- libpcap0.8-dev
- libzstd-dev
- libmlir-19-dev
- mlir-19-tools
- network-tools
- can-utils
- doxygen 1.13.2
- tox
- nox
- govr
- lit
- gcc-multilib (amd64 only)
|
+| [ts24.4.3](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | | - 13.3.0
- 12.3.0
- 11.4.0
- 10.5.0
- 7.5.0
| 13.3.1 | | 3.31.5 | | - JLink V816
- cppcheck-2.13
- yakut 0.13.0
- libpcap0.8-dev
- network-tools
- can-utils
- doxygen 1.13.2
- tox
- nox
- govr
- gcc-multilib (amd64 only)
|
| [ts24.4.2](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | | - 13.3.0
- 12.3.0
- 11.4.0
- 10.5.0
- 7.5.0
| 13.3.1 | | 3.31.5 | | - yakut 0.13.0
- libpcap0.8-dev
- network-tools
- can-utils
- doxygen 1.13.2
- gcc-multilib (amd64 only)
|
| [ts24.4.1](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | | | 13.3.1 | | 3.31.5 | | can-utilsdoxygen 1.13.2toxnoxgcovrgcc-multilib (amd64 only) |
| [ts22.4.10](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | 3.10 | 12.3.0 | 13.3.1 | 18.1.3 | 3.30.1 | | - qemu
- can-utils
- doxygen 1.10.0
- nvm
- node 20.x
- nox
- gcovr
- gcc-multilib (amd64 only)
|
| [ts22.4.8](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | 3.10 | 12.3.0 | (N/A) | 18.1.3 | 3.22.1 | | - qemu
- can-utils
- doxygen 1.10.0
- nvm
- node 20.x
- nox
- gcovr
- gcc-multilib (amd64 only)
|
| [ts22.4.7](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | 3.10 | 12.3.0 | (N/A) | 18.1.3 | 3.22.1 | | - qemu
- can-utils
- doxygen 1.10.0
- nvm
- node 20.x
- nox
- gcovr
|
+Starting with `ts24.4.4`, the image sets:
+- `LLVM_DIR=/usr/lib/llvm-19/lib/cmake/llvm`
+- `MLIR_DIR=/usr/lib/llvm-19/lib/cmake/mlir`
+- `CMAKE_PREFIX_PATH=/usr/lib/llvm-19`
You can use this in your workflow yaml like this:
@@ -39,7 +44,7 @@ You can use this in your workflow yaml like this:
jobs:
my-job:
runs-on: ubuntu-latest
- container: ghcr.io/opencyphal/toolshed:ts22.4.7
+ container: ghcr.io/opencyphal/toolshed:ts24.4.4
```
diff --git a/toolshed/Dockerfile b/toolshed/Dockerfile
index f4e6333..e12c984 100644
--- a/toolshed/Dockerfile
+++ b/toolshed/Dockerfile
@@ -16,6 +16,9 @@ WORKDIR /repo
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8
+ENV LLVM_DIR=/usr/lib/llvm-19/lib/cmake/llvm
+ENV MLIR_DIR=/usr/lib/llvm-19/lib/cmake/mlir
+ENV CMAKE_PREFIX_PATH=/usr/lib/llvm-19
# +---------------------------------------------------------------------------+
@@ -54,6 +57,7 @@ ADD llvm-select.sh ./llvm-select.sh
RUN ./llvm-install.sh 18 all
RUN ./llvm-select.sh 18 18
RUN ./llvm-install.sh 19 all
+RUN apt-get -y install libmlir-19-dev mlir-19-tools
RUN ./llvm-select.sh 19 99
# +---------------------------------------------------------------------------+
@@ -163,6 +167,7 @@ RUN pipx install tox
RUN pipx install nox
RUN pip install --break-system-packages gcovr
RUN pipx install yakut
+RUN pipx install lit
RUN cowsay -t moo
RUN git clone --depth 1 https://github.com/OpenCyphal/public_regulated_data_types.git ~/public_regulated_data_types
diff --git a/toolshed/README.md b/toolshed/README.md
index 09b7969..a207a32 100644
--- a/toolshed/README.md
+++ b/toolshed/README.md
@@ -14,6 +14,19 @@ When submitting a pull-request, include `#ts` in the commit message to trigger t
***PLEASE UPDATE THE TOP-LEVEL README.md FOR EACH NEW RELEASE***
+## Notes for `ts24.4.4`
+
+This build adds:
+- `libzstd-dev`
+- `libmlir-19-dev`
+- `mlir-19-tools`
+- Python package `lit`
+
+It also exports these defaults for CMake-based LLVM/MLIR builds:
+- `LLVM_DIR=/usr/lib/llvm-19/lib/cmake/llvm`
+- `MLIR_DIR=/usr/lib/llvm-19/lib/cmake/mlir`
+- `CMAKE_PREFIX_PATH=/usr/lib/llvm-19`
+
## Manual Build and Push
These instructions are for maintainers with permissions to push to the
@@ -53,19 +66,19 @@ docker buildx use cyphalbuild
... then build the container:
```bash
-docker buildx build --platform linux/amd64,linux/arm64 --load -t ghcr.io/opencyphal/toolshed:ts22.4.x .
+docker buildx build --platform linux/amd64,linux/arm64 --load -t ghcr.io/opencyphal/toolshed:ts24.4.x .
```
After this completes you'll see your image using the classic `docker images` command or the newer `buildx imagetools` command to inspect the multi-architecture manifest:
```
-docker buildx imagetools inspect ghcr.io/opencyphal/toolshed:ts22.4.x
+docker buildx imagetools inspect ghcr.io/opencyphal/toolshed:ts24.4.x
```
Now you can login to the container to test it out:
```bash
-docker run --rm -it -v ${PWD}:/repo ghcr.io/opencyphal/toolshed:ts22.4.x
+docker run --rm -it -v ${PWD}:/repo ghcr.io/opencyphal/toolshed:ts24.4.x
```
### Push
@@ -73,7 +86,7 @@ docker run --rm -it -v ${PWD}:/repo ghcr.io/opencyphal/toolshed:ts22.4.x
As with load, you need to re-build with a `--push` argument but you'll be using the cache so the build should be a no-op:
```bash
-docker buildx build --platform linux/amd64,linux/arm64 --push -t ghcr.io/opencyphal/toolshed:ts22.4.x .
+docker buildx build --platform linux/amd64,linux/arm64 --push -t ghcr.io/opencyphal/toolshed:ts24.4.x .
```
## More on Multi-Platform Builders
@@ -94,4 +107,4 @@ We also assume you are using a build that has our two supported host platforms `
```
docker buildx inspect --bootstrap
-```
\ No newline at end of file
+```
diff --git a/toolshed/provision-repositories.sh b/toolshed/provision-repositories.sh
index 005cecf..82b38bf 100755
--- a/toolshed/provision-repositories.sh
+++ b/toolshed/provision-repositories.sh
@@ -21,11 +21,22 @@ set -o pipefail
# +----------------------------------------------------------+
export DEBIAN_FRONTEND=noninteractive
-cat kitware-archive-latest.asc
-cat kitware-archive-latest.asc | gpg --dearmor - | tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
+apt-get -y install software-properties-common ca-certificates
-apt-get -y install software-properties-common
-apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 16FAAD7AF99A65E2
-apt-add-repository 'deb https://apt.kitware.com/ubuntu/ jammy main'
+KITWARE_KEYRING="/usr/share/keyrings/kitware-archive-keyring.gpg"
+KITWARE_SOURCE_LIST="/etc/apt/sources.list.d/kitware.list"
+KITWARE_KEY_ASC="/tmp/kitware-archive-latest.asc"
+
+# Prefer the current upstream key in case the bundled key has expired.
+if wget -qO "${KITWARE_KEY_ASC}" "https://apt.kitware.com/keys/kitware-archive-latest.asc"; then
+ echo "Using Kitware key downloaded from apt.kitware.com"
+else
+ echo "Falling back to bundled Kitware key"
+ cp kitware-archive-latest.asc "${KITWARE_KEY_ASC}"
+fi
+
+gpg --dearmor < "${KITWARE_KEY_ASC}" > "${KITWARE_KEYRING}"
+chmod 0644 "${KITWARE_KEYRING}"
+echo "deb [signed-by=${KITWARE_KEYRING}] https://apt.kitware.com/ubuntu/ jammy main" > "${KITWARE_SOURCE_LIST}"
add-apt-repository -y ppa:deadsnakes/ppa
diff --git a/toolshed/provision.sh b/toolshed/provision.sh
index e6e7848..7de9135 100755
--- a/toolshed/provision.sh
+++ b/toolshed/provision.sh
@@ -48,6 +48,7 @@ apt-get -y install g++-13
apt-get -y install nodejs
apt-get -y install npm
apt-get -y install libpcap0.8-dev
+apt-get -y install libzstd-dev
apt-get -y install net-tools
apt-get -y install iproute2
apt-get -y install cppcheck
From 073074866f2138750b8228a4fd9522537b89eb95 Mon Sep 17 00:00:00 2001
From: Scott Dixon
Date: Sat, 25 Jul 2026 18:09:03 -0700
Subject: [PATCH 9/9] Adding ts26.4.1
---
README.md | 15 +-
toolshed/CHANGELOG.md | 29 ++++
toolshed/Dockerfile | 91 +++++++++---
toolshed/README.md | 177 +++++++++++++++++------
toolshed/llvm-select.sh | 5 +-
toolshed/mlir-select.sh | 47 ++++++
toolshed/provision-amd64.sh | 2 -
toolshed/provision-repositories-amd64.sh | 3 -
toolshed/provision-repositories-arm64.sh | 4 -
toolshed/provision-repositories.sh | 20 +--
toolshed/provision.sh | 24 ++-
11 files changed, 309 insertions(+), 108 deletions(-)
create mode 100644 toolshed/CHANGELOG.md
create mode 100755 toolshed/mlir-select.sh
diff --git a/README.md b/README.md
index 68e4dff..b8bef1d 100644
--- a/README.md
+++ b/README.md
@@ -21,11 +21,14 @@ is based on Ubuntu and provides the necessary compilers and utilities to build a
like [libcanard](https://github.com/OpenCyphal/libcanard) and
[Nunavut](https://github.com/OpenCyphal/nunavut).
+See [toolshed/README.md](toolshed/README.md) for build instructions and
+[toolshed/CHANGELOG.md](toolshed/CHANGELOG.md) for per-release notes.
+
#### Supported Versions
| tag | Python | GCC (native) | GCC (arm-none-eabi) | Clang (native) | Cmake | Host Platforms | Other Utilities |
|----------|--------|--------------|---------------------|----------------|-------|----------------|-----------------|
-| [ts24.4.4](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | | - 13.3.0
- 12.3.0
- 11.4.0
- 10.5.0
- 7.5.0
| 13.3.1 | | 3.31.5 | | - JLink V816
- cppcheck-2.13
- yakut 0.13.0
- libpcap0.8-dev
- libzstd-dev
- libmlir-19-dev
- mlir-19-tools
- network-tools
- can-utils
- doxygen 1.13.2
- tox
- nox
- govr
- lit
- gcc-multilib (amd64 only)
|
+| [ts26.4.1](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | 3.14 | 15.2.0 | 14.2.rel1 | 22.1.2 | 4.2.3 | | - Rust 1.93.1
- Go 1.26
- Node.js 22.22.1
- TypeScript 5.2.2
- Emscripten SDK 6.0.2
- LLVM 22.1.2
- MLIR 22.1.2
- JLink V816
- cppcheck
- yakut
- libpcap0.8-dev
- network-tools
- can-utils
- doxygen 1.13.2
- tox
- nox
- gcovr
- lit
- gcc-multilib (amd64 only)
|
| [ts24.4.3](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | | - 13.3.0
- 12.3.0
- 11.4.0
- 10.5.0
- 7.5.0
| 13.3.1 | | 3.31.5 | | - JLink V816
- cppcheck-2.13
- yakut 0.13.0
- libpcap0.8-dev
- network-tools
- can-utils
- doxygen 1.13.2
- tox
- nox
- govr
- gcc-multilib (amd64 only)
|
| [ts24.4.2](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | | - 13.3.0
- 12.3.0
- 11.4.0
- 10.5.0
- 7.5.0
| 13.3.1 | | 3.31.5 | | - yakut 0.13.0
- libpcap0.8-dev
- network-tools
- can-utils
- doxygen 1.13.2
- gcc-multilib (amd64 only)
|
| [ts24.4.1](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | | | 13.3.1 | | 3.31.5 | | can-utilsdoxygen 1.13.2toxnoxgcovrgcc-multilib (amd64 only) |
@@ -33,10 +36,10 @@ like [libcanard](https://github.com/OpenCyphal/libcanard) and
| [ts22.4.8](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | 3.10 | 12.3.0 | (N/A) | 18.1.3 | 3.22.1 | | - qemu
- can-utils
- doxygen 1.10.0
- nvm
- node 20.x
- nox
- gcovr
- gcc-multilib (amd64 only)
|
| [ts22.4.7](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | 3.10 | 12.3.0 | (N/A) | 18.1.3 | 3.22.1 | | - qemu
- can-utils
- doxygen 1.10.0
- nvm
- node 20.x
- nox
- gcovr
|
-Starting with `ts24.4.4`, the image sets:
-- `LLVM_DIR=/usr/lib/llvm-19/lib/cmake/llvm`
-- `MLIR_DIR=/usr/lib/llvm-19/lib/cmake/mlir`
-- `CMAKE_PREFIX_PATH=/usr/lib/llvm-19`
+Starting with `ts26.4.1`, the image sets:
+- `LLVM_DIR=/usr/lib/llvm-22/lib/cmake/llvm`
+- `MLIR_DIR=/usr/lib/llvm-22/lib/cmake/mlir`
+- `CMAKE_PREFIX_PATH=/usr/lib/llvm-22`
You can use this in your workflow yaml like this:
@@ -44,7 +47,7 @@ You can use this in your workflow yaml like this:
jobs:
my-job:
runs-on: ubuntu-latest
- container: ghcr.io/opencyphal/toolshed:ts24.4.4
+ container: ghcr.io/opencyphal/toolshed:ts26.4.1
```
diff --git a/toolshed/CHANGELOG.md b/toolshed/CHANGELOG.md
new file mode 100644
index 0000000..9c4715d
--- /dev/null
+++ b/toolshed/CHANGELOG.md
@@ -0,0 +1,29 @@
+# Changelog — toolshed (ts)
+
+Per-release notes for the `ghcr.io/opencyphal/toolshed` image. The summary table of
+every published tag lives in the [top-level README](../README.md#opencyphaltoolshedts).
+
+## ts26.4.1
+
+Rebases toolshed onto Ubuntu 26.04 LTS and keeps only the latest native toolchain
+families provided by that base:
+
+- Python 3.14
+- GCC 15
+- CMake 4.2
+- Ninja 1.13
+- LLVM, Clang, and MLIR 22, including `libmlir-22-dev` and `mlir-22-tools`
+
+Also adds:
+
+- Rust
+- Go
+- Node.js and TypeScript
+- Emscripten SDK 6.0.2, Binaryen, and WABT
+- libcurl development headers for LLVM/MLIR CMake consumers
+- libedit development headers for LLVM/MLIR CMake consumers
+- Python package `lit`
+
+Exports `LLVM_DIR`, `MLIR_DIR`, and `CMAKE_PREFIX_PATH` defaults for CMake-based
+LLVM/MLIR builds. See the
+[top-level README](../README.md#opencyphaltoolshedts) for the current values.
diff --git a/toolshed/Dockerfile b/toolshed/Dockerfile
index e12c984..ed5c241 100644
--- a/toolshed/Dockerfile
+++ b/toolshed/Dockerfile
@@ -1,7 +1,7 @@
#
-# Builds the toolshed/ubuntu-22.04 toolchain container.
+# Builds the toolshed/ubuntu-26.04 toolchain container.
#
-FROM ubuntu:24.04 AS base
+FROM ubuntu:26.04 AS base
LABEL org.opencontainers.image.source=https://github.com/OpenCyphal/docker_toolchains
LABEL org.opencontainers.image.description="Provides a consistent build and test environment for development, continuous-integration, and test automation of OpenCyphal C and C++ based projects."
@@ -16,9 +16,10 @@ WORKDIR /repo
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8
-ENV LLVM_DIR=/usr/lib/llvm-19/lib/cmake/llvm
-ENV MLIR_DIR=/usr/lib/llvm-19/lib/cmake/mlir
-ENV CMAKE_PREFIX_PATH=/usr/lib/llvm-19
+ENV TOOLSHED_LLVM_VERSION=22
+ENV LLVM_DIR=/usr/lib/llvm-22/lib/cmake/llvm
+ENV MLIR_DIR=/usr/lib/llvm-22/lib/cmake/mlir
+ENV CMAKE_PREFIX_PATH=/usr/lib/llvm-22
# +---------------------------------------------------------------------------+
@@ -26,7 +27,6 @@ ENV CMAKE_PREFIX_PATH=/usr/lib/llvm-19
# +---------------------------------------------------------------------------+
FROM base AS provisioning
WORKDIR /tmp
-ADD kitware-archive-latest.asc .
ADD pre-provision.sh ./pre-provision.sh
ADD provision-repositories.sh ./provision-repositories.sh
ADD provision-repositories-${TARGETARCH}.sh ./provision-repositories-${TARGETARCH}.sh
@@ -52,18 +52,66 @@ RUN echo "export PATH=$PATH" >> ~/.bashrc
FROM provisioning AS llvm
WORKDIR /tmp
-ADD llvm-install.sh ./llvm-install.sh
ADD llvm-select.sh ./llvm-select.sh
-RUN ./llvm-install.sh 18 all
-RUN ./llvm-select.sh 18 18
-RUN ./llvm-install.sh 19 all
-RUN apt-get -y install libmlir-19-dev mlir-19-tools
-RUN ./llvm-select.sh 19 99
+ADD mlir-select.sh ./mlir-select.sh
+RUN apt-get -y install \
+ clang-${TOOLSHED_LLVM_VERSION} \
+ clangd-${TOOLSHED_LLVM_VERSION} \
+ clang-format-${TOOLSHED_LLVM_VERSION} \
+ clang-tidy-${TOOLSHED_LLVM_VERSION} \
+ clang-tools-${TOOLSHED_LLVM_VERSION} \
+ lld-${TOOLSHED_LLVM_VERSION} \
+ lldb-${TOOLSHED_LLVM_VERSION} \
+ llvm-${TOOLSHED_LLVM_VERSION}-dev \
+ llvm-${TOOLSHED_LLVM_VERSION}-tools \
+ libomp-${TOOLSHED_LLVM_VERSION}-dev \
+ libc++-${TOOLSHED_LLVM_VERSION}-dev \
+ libc++abi-${TOOLSHED_LLVM_VERSION}-dev \
+ libclang-common-${TOOLSHED_LLVM_VERSION}-dev \
+ libclang-${TOOLSHED_LLVM_VERSION}-dev \
+ libclang-cpp${TOOLSHED_LLVM_VERSION}-dev \
+ libclang-rt-${TOOLSHED_LLVM_VERSION}-dev \
+ libpolly-${TOOLSHED_LLVM_VERSION}-dev \
+ libunwind-${TOOLSHED_LLVM_VERSION}-dev \
+ libmlir-${TOOLSHED_LLVM_VERSION}-dev \
+ mlir-${TOOLSHED_LLVM_VERSION}-tools
+RUN ./llvm-select.sh ${TOOLSHED_LLVM_VERSION} 99
+RUN ./mlir-select.sh ${TOOLSHED_LLVM_VERSION} 99
+RUN dpkg-query -W libmlir-${TOOLSHED_LLVM_VERSION}-dev mlir-${TOOLSHED_LLVM_VERSION}-tools
+RUN mkdir -p /usr/lib/cmake \
+ && ln -sfn /usr/lib/llvm-${TOOLSHED_LLVM_VERSION}/lib/cmake/llvm /usr/lib/cmake/llvm \
+ && ln -sfn /usr/lib/llvm-${TOOLSHED_LLVM_VERSION}/lib/cmake/mlir /usr/lib/cmake/mlir
+RUN mkdir -p /tmp/cmake-find-mlir \
+ && printf '%s\n' \
+ 'cmake_minimum_required(VERSION 3.20)' \
+ 'project(FindMLIR LANGUAGES C CXX)' \
+ 'find_package(CURL REQUIRED)' \
+ 'find_package(MLIR CONFIG REQUIRED)' \
+ 'find_package(LibEdit REQUIRED)' \
+ 'message(STATUS CURL_LIBRARIES_FROM_CMAKE=${CURL_LIBRARIES})' \
+ 'message(STATUS LibEdit_LIBRARIES_FROM_CMAKE=${LibEdit_LIBRARIES})' \
+ 'message(STATUS MLIR_DIR_FROM_CMAKE=${MLIR_DIR})' \
+ > /tmp/cmake-find-mlir/CMakeLists.txt \
+ && env -u MLIR_DIR -u CMAKE_PREFIX_PATH cmake -S /tmp/cmake-find-mlir -B /tmp/cmake-find-mlir-build \
+ && rm -rf /tmp/cmake-find-mlir /tmp/cmake-find-mlir-build
+
+# +---------------------------------------------------------------------------+
+# | WASM/EMSCRIPTEN
+# +---------------------------------------------------------------------------+
+FROM llvm AS wasm
+WORKDIR /tmp
+
+ARG EMSDK_VERSION=6.0.2
+ENV EMSDK=/opt/emsdk
+RUN git clone --depth 1 --branch ${EMSDK_VERSION} https://github.com/emscripten-core/emsdk.git ${EMSDK}
+RUN ${EMSDK}/emsdk install ${EMSDK_VERSION}
+RUN ${EMSDK}/emsdk activate ${EMSDK_VERSION}
+ENV PATH=${EMSDK}:${EMSDK}/upstream/emscripten:${PATH}
# +---------------------------------------------------------------------------+
# | DOXYGEN BUILD (PARALLEL)
# +---------------------------------------------------------------------------+
-FROM llvm AS doxygen
+FROM wasm AS doxygen
WORKDIR /tmp
RUN mkdir doxygen-Release
RUN mkdir doxygen-Release/build
@@ -97,13 +145,8 @@ FROM doxygen AS gcc-select
WORKDIR /tmp
-ADD gcc-select.sh ./gcc-select.sh
-RUN ./gcc-select.sh 7 7
-RUN ./gcc-select.sh 10 10
-RUN ./gcc-select.sh 11 11
-RUN ./gcc-select.sh 12 12
-RUN ./gcc-select.sh 13 99
-RUN update-alternatives --display gcc
+RUN gcc --version
+RUN g++ --version
# +---------------------------------------------------------------------------+
# | arm-none-eabi-gcc
@@ -168,6 +211,14 @@ RUN pipx install nox
RUN pip install --break-system-packages gcovr
RUN pipx install yakut
RUN pipx install lit
+RUN rustc --version
+RUN cargo --version
+RUN go version
+RUN node --version
+RUN npm --version
+RUN tsc --version
+RUN emcc --version
+RUN lit --version
RUN cowsay -t moo
RUN git clone --depth 1 https://github.com/OpenCyphal/public_regulated_data_types.git ~/public_regulated_data_types
diff --git a/toolshed/README.md b/toolshed/README.md
index a207a32..c36f10f 100644
--- a/toolshed/README.md
+++ b/toolshed/README.md
@@ -3,55 +3,139 @@
The `opencyphal/toolshed` docker image provides a consistent build and test environment
for development, continuous-integration, and test automation of C and C++ based projects.
+- **What each release contains:** [CHANGELOG.md](CHANGELOG.md)
+- **Published tags and the LLVM/MLIR CMake environment defaults:**
+ [top-level README](../README.md#opencyphaltoolshedts)
+
## Official Release
-To release a new build of this container simply create a [new github release](https://github.com/OpenCyphal/docker_toolchains/releases/new)
-that starts with `ts`, uses the Ubuntu major and minor version, and uses an monotonically increasing "patch" version.
-For example `ts20.4.1`will cause the Github workflow to rebuild and push the `opencyphal/toolshed` container with the
-tag `ts20.4.1`.
+To release a new build of this container simply create a
+[new github release](https://github.com/OpenCyphal/docker_toolchains/releases/new)
+that starts with `ts`, uses the Ubuntu major and minor version, and uses a monotonically
+increasing "patch" version. For example `ts26.4.1` will cause the Github workflow to
+rebuild and push the `opencyphal/toolshed` container with the tag `ts26.4.1`.
+
+To trigger the pull-request CI, include `#ts` in the **pull request title**. The
+[workflow](../.github/workflows/toolshed.yml) matches on the PR title, not on commit
+messages, so a PR without `#ts` in its title will not build this container.
-When submitting a pull-request, include `#ts` in the commit message to trigger the pull-request CI.
+***PLEASE UPDATE THE TOP-LEVEL README.md AND [CHANGELOG.md](CHANGELOG.md) FOR EACH NEW RELEASE***
-***PLEASE UPDATE THE TOP-LEVEL README.md FOR EACH NEW RELEASE***
+## Building Locally
-## Notes for `ts24.4.4`
+All commands in this section are run from the `toolshed` directory — the Dockerfile and
+its build context (the `provision-*.sh` scripts, `.deb` payloads, and checksum files)
+live there. This matches CI, which builds with `context: toolshed`.
-This build adds:
-- `libzstd-dev`
-- `libmlir-19-dev`
-- `mlir-19-tools`
-- Python package `lit`
+```bash
+cd toolshed
+```
-It also exports these defaults for CMake-based LLVM/MLIR builds:
-- `LLVM_DIR=/usr/lib/llvm-19/lib/cmake/llvm`
-- `MLIR_DIR=/usr/lib/llvm-19/lib/cmake/mlir`
-- `CMAKE_PREFIX_PATH=/usr/lib/llvm-19`
+For day-to-day development, build a single-platform image for your own machine. This is
+a native build with no emulation, so it is dramatically faster than a multi-platform
+build:
-## Manual Build and Push
+```bash
+docker buildx build --platform linux/arm64 --load -t opencyphal/toolshed:ts26.4.x-local .
+```
+
+Use `--platform linux/amd64` on an Intel/AMD host. The default `docker` builder is
+sufficient for single-platform builds; you do not need the `cyphalbuild` builder
+described below.
+
+The full image takes a while to build: the doxygen stage compiles from source and the
+Emscripten stage downloads a complete SDK. To iterate on just one part of the build, stop
+at an intermediate stage with `--target`:
+
+```bash
+docker buildx build --platform linux/arm64 --target llvm --load -t toolshed-llvm .
+```
+
+Stages, in order: `base`, `provisioning`, `llvm`, `wasm`, `doxygen`, `gcc-select`,
+`arm-none-eabi`, `jlink`, `python`. Omit `--target` to build the complete image.
+
+### Smoke Test
+
+Confirm the toolchains in a freshly built image report the versions you expect:
+
+```bash
+docker run --rm opencyphal/toolshed:ts26.4.x-local bash -c '
+ set -e
+ cmake --version | head -1
+ ninja --version
+ gcc --version | head -1
+ clang --version | head -1
+ llvm-config --version
+ mlir-opt --version | head -2
+ arm-none-eabi-gcc --version | head -1
+ python3 --version
+ rustc --version
+ go version
+ node --version
+ tsc --version
+ emcc --version | head -1
+'
+```
+
+Note that `JLinkExe` is added to `PATH` through `~/.bashrc` rather than through a
+Dockerfile `ENV`, so it resolves only in an interactive shell, not in the
+non-interactive `bash -c` above.
+
+To work inside the container with your repository mounted:
+
+```bash
+docker run --rm -it -v ${PWD}:/repo opencyphal/toolshed:ts26.4.x-local
+```
+
+## Manual Multi-Platform Build and Push
These instructions are for maintainers with permissions to push to the
-[OpenCyphal organization on Github](https://github.com/OpenCyphal/). Normally the container should be published by
-a github action but these instructions provide a way to manually update the container from any developer environment.
+[OpenCyphal organization on Github](https://github.com/OpenCyphal/). Normally the
+container is published by a github action; these instructions provide a way to manually
+update the container from any developer environment.
-> **IMPORTANT NOTE**
+> **NOTE**
>
-> You must enable [containerd](https://containerd.io/) if you are using Docker Desktop to build locally (this is available as a general setting in Docker desktop). Docker desktop does not support multi-platform images and, if you try to use Docker Desktop without containerd, these instructions will fail with the message:
+> CI builds each architecture natively on a separate runner (`ubuntu-latest` for amd64,
+> `ubuntu-24.04-arm` for arm64) and merges the results into one manifest by digest.
+> Building both platforms on a single host emulates the foreign architecture through
+> QEMU, which is *very* slow for this image. Prefer a release build through CI unless you
+> specifically need a local multi-platform image.
+
+> **NOTE**
>
-> *WARNING: No output specified with docker-container driver. Build result will only remain in the build cache.*
+> Multi-platform `--load` requires the [containerd](https://containerd.io/) image store.
+> Recent versions of Docker Desktop enable this by default; verify with:
+>
+> ```bash
+> docker info --format '{{.DriverStatus}}'
+> ```
>
+> A result containing `io.containerd.snapshotter.v1` means it is enabled. If it is not,
+> turn on "Use containerd for pulling and storing images" in Docker Desktop's general
+> settings. Without it, a multi-platform build fails with:
+>
+> *WARNING: No output specified with docker-container driver. Build result will only remain in the build cache.*
+
+First, log in to the GitHub container registry. If you have the
+[GitHub CLI](https://cli.github.com/) installed and authenticated:
-First create a temporary (7-day expiration please) personal access token (classic) with write:packages and read:packages
-scope. See [this github help page](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)
-for instructions.
+```bash
+gh auth token | docker login ghcr.io -u "$(gh api user --jq .login)" --password-stdin
+```
-Next, make sure you can login:
+Otherwise, create a temporary (7-day expiration please) fine-grained personal access
+token with `write:packages` and `read:packages` scope — see
+[this github help page](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)
+— and pipe it in, substituting your own github username:
```bash
-export FGP = (fine-grained permission for OpenCyphal organization)
-echo $FGP | docker login ghcr.io -u (github username) --password-stdin
+export GHCR_TOKEN=
+echo "$GHCR_TOKEN" | docker login ghcr.io -u --password-stdin
```
-... build a multi-platform image following the instructions [here](https://docs.docker.com/build/building/multi-platform/#multiple-native-nodes):
+Next, create a builder that can produce multi-platform images, following the instructions
+[here](https://docs.docker.com/build/building/multi-platform/#multiple-native-nodes):
```bash
docker buildx create --use --name cyphalbuild
@@ -66,45 +150,46 @@ docker buildx use cyphalbuild
... then build the container:
```bash
-docker buildx build --platform linux/amd64,linux/arm64 --load -t ghcr.io/opencyphal/toolshed:ts24.4.x .
+docker buildx build --platform linux/amd64,linux/arm64 --load -t ghcr.io/opencyphal/toolshed:ts26.4.x .
```
-After this completes you'll see your image using the classic `docker images` command or the newer `buildx imagetools` command to inspect the multi-architecture manifest:
-
-```
-docker buildx imagetools inspect ghcr.io/opencyphal/toolshed:ts24.4.x
-```
-
- Now you can login to the container to test it out:
+After this completes you'll see your image using the classic `docker images` command or
+the newer `buildx imagetools` command to inspect the multi-architecture manifest:
```bash
-docker run --rm -it -v ${PWD}:/repo ghcr.io/opencyphal/toolshed:ts24.4.x
+docker buildx imagetools inspect ghcr.io/opencyphal/toolshed:ts26.4.x
```
### Push
-As with load, you need to re-build with a `--push` argument but you'll be using the cache so the build should be a no-op:
+As with load, you need to re-build with a `--push` argument but you'll be using the cache
+so the build should be a no-op:
```bash
-docker buildx build --platform linux/amd64,linux/arm64 --push -t ghcr.io/opencyphal/toolshed:ts24.4.x .
+docker buildx build --platform linux/amd64,linux/arm64 --push -t ghcr.io/opencyphal/toolshed:ts26.4.x .
```
## More on Multi-Platform Builders
-The two commands above make some assumptions about defaults and capabilities that we haven't verified on all build hosts. First, the `buildx create` command is assumed to target the correct Docker context. You can see your contexts by doing:
+The two commands above make some assumptions about defaults and capabilities that we
+haven't verified on all build hosts. First, the `buildx create` command is assumed to
+target the correct Docker context. You can see your contexts by doing:
-```
+```bash
docker context ls
```
-... then target a specific context by adding it as an additional argument to the builder create command:
+... then target a specific context by adding it as an additional argument to the builder
+create command:
-```
+```bash
docker buildx create --use --name cyphalbuild desktop-linux
```
-We also assume you are using a build that has our two supported host platforms `linux/amd64` and `linux/arm64`. You can verify this after creating the builder using the inspect command. This should also verify that your builder is now in effect:
+We also assume you are using a build that has our two supported host platforms
+`linux/amd64` and `linux/arm64`. You can verify this after creating the builder using the
+inspect command. This should also verify that your builder is now in effect:
-```
+```bash
docker buildx inspect --bootstrap
```
diff --git a/toolshed/llvm-select.sh b/toolshed/llvm-select.sh
index 6a997e9..586e537 100755
--- a/toolshed/llvm-select.sh
+++ b/toolshed/llvm-select.sh
@@ -12,10 +12,13 @@ setup_llvm_alternatives()
local members=${4}
local path=${5}
local cmdln
+ local member
cmdln="--verbose --install ${path}${group} ${group} ${path}${group}-${version} ${priority}"
for member in ${members}; do
- cmdln="${cmdln} --slave ${path}${member} ${member} ${path}${member}-${version}"
+ if [[ -x "${path}${member}-${version}" ]]; then
+ cmdln="${cmdln} --slave ${path}${member} ${member} ${path}${member}-${version}"
+ fi
done
update-alternatives ${cmdln}
}
diff --git a/toolshed/mlir-select.sh b/toolshed/mlir-select.sh
new file mode 100755
index 0000000..3dd2f81
--- /dev/null
+++ b/toolshed/mlir-select.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+set -o nounset
+set -o errexit
+set -o pipefail
+
+MLIR_VERSION=${1}
+MLIR_ALTERNATIVES_PRI=${2}
+MLIR_ALTERNATIVES_PATH="/usr/bin/"
+
+setup_mlir_alternatives()
+{
+ local version=${1}
+ local priority=${2}
+ local group=${3}
+ local members=${4}
+ local path=${5}
+ local cmdln
+ local member
+
+ cmdln="--verbose --install ${path}${group} ${group} ${path}${group}-${version} ${priority}"
+ for member in ${members}; do
+ if [[ -x "${path}${member}-${version}" ]]; then
+ cmdln="${cmdln} --slave ${path}${member} ${member} ${path}${member}-${version}"
+ fi
+ done
+ update-alternatives ${cmdln}
+}
+
+MLIR_ALTERNATIVES_GROUP=""
+MLIR_ALTERNATIVES_GROUP="${MLIR_ALTERNATIVES_GROUP} mlir-linalg-ods-yaml-gen"
+MLIR_ALTERNATIVES_GROUP="${MLIR_ALTERNATIVES_GROUP} mlir-lsp-server"
+MLIR_ALTERNATIVES_GROUP="${MLIR_ALTERNATIVES_GROUP} mlir-minimal-opt"
+MLIR_ALTERNATIVES_GROUP="${MLIR_ALTERNATIVES_GROUP} mlir-minimal-opt-canonicalize"
+MLIR_ALTERNATIVES_GROUP="${MLIR_ALTERNATIVES_GROUP} mlir-pdll"
+MLIR_ALTERNATIVES_GROUP="${MLIR_ALTERNATIVES_GROUP} mlir-pdll-lsp-server"
+MLIR_ALTERNATIVES_GROUP="${MLIR_ALTERNATIVES_GROUP} mlir-query"
+MLIR_ALTERNATIVES_GROUP="${MLIR_ALTERNATIVES_GROUP} mlir-reduce"
+MLIR_ALTERNATIVES_GROUP="${MLIR_ALTERNATIVES_GROUP} mlir-rewrite"
+MLIR_ALTERNATIVES_GROUP="${MLIR_ALTERNATIVES_GROUP} mlir-runner"
+MLIR_ALTERNATIVES_GROUP="${MLIR_ALTERNATIVES_GROUP} mlir-tblgen"
+MLIR_ALTERNATIVES_GROUP="${MLIR_ALTERNATIVES_GROUP} mlir-transform-opt"
+MLIR_ALTERNATIVES_GROUP="${MLIR_ALTERNATIVES_GROUP} mlir-translate"
+MLIR_ALTERNATIVES_GROUP="${MLIR_ALTERNATIVES_GROUP} tblgen-lsp-server"
+MLIR_ALTERNATIVES_GROUP="${MLIR_ALTERNATIVES_GROUP} tblgen-to-irdl"
+
+setup_mlir_alternatives "${MLIR_VERSION}" "${MLIR_ALTERNATIVES_PRI}" "mlir-opt" "${MLIR_ALTERNATIVES_GROUP}" "${MLIR_ALTERNATIVES_PATH}"
diff --git a/toolshed/provision-amd64.sh b/toolshed/provision-amd64.sh
index 79ce51f..70088ef 100755
--- a/toolshed/provision-amd64.sh
+++ b/toolshed/provision-amd64.sh
@@ -23,5 +23,3 @@ export DEBIAN_FRONTEND=noninteractive
apt-get -y install gcc-multilib
apt-get -y install g++-multilib
-apt-get -y install gcc-13-multilib
-apt-get -y install g++-13-multilib
diff --git a/toolshed/provision-repositories-amd64.sh b/toolshed/provision-repositories-amd64.sh
index 27ba11e..a3a92fb 100755
--- a/toolshed/provision-repositories-amd64.sh
+++ b/toolshed/provision-repositories-amd64.sh
@@ -20,6 +20,3 @@ set -o pipefail
# +----------------------------------------------------------+
export DEBIAN_FRONTEND=noninteractive
-
-# For GCC7
-apt-add-repository 'deb http://archive.ubuntu.com/ubuntu/ focal main universe'
diff --git a/toolshed/provision-repositories-arm64.sh b/toolshed/provision-repositories-arm64.sh
index 1cbae6c..a3a92fb 100755
--- a/toolshed/provision-repositories-arm64.sh
+++ b/toolshed/provision-repositories-arm64.sh
@@ -20,7 +20,3 @@ set -o pipefail
# +----------------------------------------------------------+
export DEBIAN_FRONTEND=noninteractive
-
-# For GCC7
-apt-add-repository 'deb https://ports.ubuntu.com/ubuntu-ports focal main universe'
-
diff --git a/toolshed/provision-repositories.sh b/toolshed/provision-repositories.sh
index 82b38bf..ee5ff65 100755
--- a/toolshed/provision-repositories.sh
+++ b/toolshed/provision-repositories.sh
@@ -21,22 +21,4 @@ set -o pipefail
# +----------------------------------------------------------+
export DEBIAN_FRONTEND=noninteractive
-apt-get -y install software-properties-common ca-certificates
-
-KITWARE_KEYRING="/usr/share/keyrings/kitware-archive-keyring.gpg"
-KITWARE_SOURCE_LIST="/etc/apt/sources.list.d/kitware.list"
-KITWARE_KEY_ASC="/tmp/kitware-archive-latest.asc"
-
-# Prefer the current upstream key in case the bundled key has expired.
-if wget -qO "${KITWARE_KEY_ASC}" "https://apt.kitware.com/keys/kitware-archive-latest.asc"; then
- echo "Using Kitware key downloaded from apt.kitware.com"
-else
- echo "Falling back to bundled Kitware key"
- cp kitware-archive-latest.asc "${KITWARE_KEY_ASC}"
-fi
-
-gpg --dearmor < "${KITWARE_KEY_ASC}" > "${KITWARE_KEYRING}"
-chmod 0644 "${KITWARE_KEYRING}"
-echo "deb [signed-by=${KITWARE_KEYRING}] https://apt.kitware.com/ubuntu/ jammy main" > "${KITWARE_SOURCE_LIST}"
-
-add-apt-repository -y ppa:deadsnakes/ppa
+apt-get -y install ca-certificates
diff --git a/toolshed/provision.sh b/toolshed/provision.sh
index 7de9135..ad7a837 100755
--- a/toolshed/provision.sh
+++ b/toolshed/provision.sh
@@ -23,8 +23,11 @@ export DEBIAN_FRONTEND=noninteractive
apt-get -y install apt-utils
apt-get -y install moreutils
-apt-get -y install python3.10
+apt-get -y install build-essential
+apt-get -y install python3
+apt-get -y install python3-dev
apt-get -y install python3-pip
+apt-get -y install python3-venv
apt-get -y install python3-virtualenv
apt-get -y install cmake
apt-get -y install git
@@ -34,22 +37,29 @@ apt-get -y install lcov
apt-get -y install valgrind
apt-get -y install graphviz
apt-get -y install curl
+apt-get -y install libcurl4-openssl-dev
+apt-get -y install libedit-dev
apt-get -y install ninja-build
apt-get -y install can-utils
apt-get -y install lsb-release
apt-get -y install wget
apt-get -y install gnupg
apt-get -y install vim
-apt-get -y install g++-7
-apt-get -y install g++-10
-apt-get -y install g++-11
-apt-get -y install g++-12
-apt-get -y install g++-13
+apt-get -y install gcc
+apt-get -y install g++
apt-get -y install nodejs
apt-get -y install npm
+apt-get -y install node-typescript
+apt-get -y install rustc
+apt-get -y install cargo
+apt-get -y install rustfmt
+apt-get -y install rust-clippy
+apt-get -y install golang-go
+apt-get -y install binaryen
+apt-get -y install wabt
apt-get -y install libpcap0.8-dev
apt-get -y install libzstd-dev
apt-get -y install net-tools
apt-get -y install iproute2
apt-get -y install cppcheck
-apt-get -y install libncurses5
+apt-get -y install libncurses6