Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion .github/workflows/toolshed.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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
Expand Down
18 changes: 13 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,25 +21,33 @@ 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 |
|----------|--------|--------------|---------------------|----------------|-------|----------------|-----------------|
| [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 | <ul><li>linux/amd64</li><li>linux/arm64</li></ul> | <ul><li>Rust 1.93.1</li><li>Go 1.26</li><li>Node.js 22.22.1</li><li>TypeScript 5.2.2</li><li>Emscripten SDK 6.0.2</li><li>LLVM 22.1.2</li><li>MLIR 22.1.2</li><li>JLink V816</li><li>cppcheck</li><li>yakut</li><li>libpcap0.8-dev</li><li>network-tools</li><li>can-utils</li><li>doxygen 1.13.2</li><li>tox</li><li>nox</li><li>gcovr</li><li>lit</li><li>gcc-multilib (amd64 only)</li></ul> |
| [ts24.4.3](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | <ul><li>3.12</li><li>3.10</li></ul> | <ul><li>13.3.0</li><li>12.3.0</li><li>11.4.0</li><li>10.5.0</li><li>7.5.0</li></ul>| 13.3.1 | <ul><li>19.1.7</li><li>18.1.8</li></ul> | 3.31.5 | <ul><li>linux/amd64</li><li>linux/arm64</li></ul> | <ul><li>JLink V816</li><li>cppcheck-2.13</li><li>yakut 0.13.0</li><li>libpcap0.8-dev</li><li>network-tools</li><li>can-utils</li><li>doxygen 1.13.2</li><li>tox</li><li>nox</li><li>govr</li><li>gcc-multilib (amd64 only)</li></ul> |
| [ts24.4.2](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | <ul><li>3.12</li><li>3.10</li></ul> | <ul><li>13.3.0</li><li>12.3.0</li><li>11.4.0</li><li>10.5.0</li><li>7.5.0</li></ul>| 13.3.1 | <ul><li>19.1.7</li><li>18.1.8</li></ul> | 3.31.5 | <ul><li>linux/amd64</li><li>linux/arm64</li></ul> | <ul><li>yakut 0.13.0</li><li>libpcap0.8-dev</li><li>network-tools</li><li>can-utils</li><li>doxygen 1.13.2</li><li>gcc-multilib (amd64 only)</li></ul> |
| [ts24.4.1](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | <ul><li>3.12</li><li>3.10</li></ul> | <ul><li>13.3.0</li><li>12.3.0</li><li>11.4.0</li><li>10.5.0</li><li>7.5.0</li></ul>| 13.3.1 | <ul><li>19.1.7</li><li>18.1.8</li></ul> | 3.31.5 | <ul><li>linux/amd64</li><li>linux/arm64</li></ul> | <li>can-utils</li><li>doxygen 1.13.2</li><li>tox</li><li>nox</li><li>govr</li><li>gcc-multilib (amd64 only)</li></ul> |
| [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 | <ul><li>linux/amd64</li><li>linux/arm64</li></ul> | <ul><li>qemu</li><li>can-utils</li><li>doxygen 1.10.0</li><li>nvm</li><li>node 20.x</li><li>nox</li><li>govr</li><li>gcc-multilib (amd64 only)</li></ul> |
| [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 | <ul><li>linux/amd64</li><li>linux/arm64</li></ul> | <ul><li>qemu</li><li>can-utils</li><li>doxygen 1.10.0</li><li>nvm</li><li>node 20.x</li><li>nox</li><li>govr</li><li>gcc-multilib (amd64 only)</li></ul> |
| [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 | <ul><li>linux/amd64</li><li>linux/arm64</li></ul> | <ul><li>qemu</li><li>can-utils</li><li>doxygen 1.10.0</li><li>nvm</li><li>node 20.x</li><li>nox</li><li>govr</li></ul> |
| [ts24.4.1](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | <ul><li>3.12</li><li>3.10</li></ul> | <ul><li>13.3.0</li><li>12.3.0</li><li>11.4.0</li><li>10.5.0</li></ul>| 13.3.1 | <ul><li>19.1.7</li><li>18.1.8</li></ul> | 3.31.5 | <ul><li>linux/amd64</li><li>linux/arm64</li></ul> | <li>can-utils</li><li>doxygen 1.13.2</li><li>tox</li><li>nox</li><li>gcovr</li><li>gcc-multilib (amd64 only)</li></ul> |
| [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 | <ul><li>linux/amd64</li><li>linux/arm64</li></ul> | <ul><li>qemu</li><li>can-utils</li><li>doxygen 1.10.0</li><li>nvm</li><li>node 20.x</li><li>nox</li><li>gcovr</li><li>gcc-multilib (amd64 only)</li></ul> |
| [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 | <ul><li>linux/amd64</li><li>linux/arm64</li></ul> | <ul><li>qemu</li><li>can-utils</li><li>doxygen 1.10.0</li><li>nvm</li><li>node 20.x</li><li>nox</li><li>gcovr</li><li>gcc-multilib (amd64 only)</li></ul> |
| [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 | <ul><li>linux/amd64</li><li>linux/arm64</li></ul> | <ul><li>qemu</li><li>can-utils</li><li>doxygen 1.10.0</li><li>nvm</li><li>node 20.x</li><li>nox</li><li>gcovr</li></ul> |

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:

```none
jobs:
my-job:
runs-on: ubuntu-latest
container: ghcr.io/opencyphal/toolshed:ts22.4.7
container: ghcr.io/opencyphal/toolshed:ts26.4.1
```


Expand Down
29 changes: 29 additions & 0 deletions toolshed/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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.
90 changes: 73 additions & 17 deletions toolshed/Dockerfile
Original file line number Diff line number Diff line change
@@ -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."
Expand All @@ -16,14 +16,17 @@ WORKDIR /repo
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8
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


# +---------------------------------------------------------------------------+
# | UBUNTU PROVISIONING
# +---------------------------------------------------------------------------+
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
Expand All @@ -49,17 +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 ./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
Expand Down Expand Up @@ -93,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
Expand Down Expand Up @@ -161,8 +208,17 @@ 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 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

Expand Down
Loading