Skip to content

wischner/docker-toolchains

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Wischner Ltd. Docker Toolchains

This repository contains a collection of cross-compilation toolchains packaged as Docker images.
Each image provides a ready-to-use compiler and related tools for retrocomputing, embedded, or bare‑metal development.

All images are published under the wischner namespace on Docker Hub.

Tip: Pin specific tags (e.g. :1.1.0) instead of :latest to get repeatable builds.


Project status & roadmap

This repository is actively developed. Next steps:

  • Improve the repository’s Scout health score.
  • Stabilize the ARM (gcc-arm-none-eabi) and m68k packages.
  • The Z80 packages (sdcc-z80, sdcc-z80-zx-spectrum) are stable today.
  • After stabilization, all images will be released as 2.0.0.

Available toolchains

  • GCC ARM (arm-none-eabi)
    Ubuntu-based ARM bare‑metal GCC/G++ (newlib), gdb-multiarch, and OpenOCD.
    Cross‑compile and debug Cortex‑M (and other ARM MCUs) in one image.

  • GCC ARM for Raspberry Pi Pico / Pico W
    Extends the base ARM image with the Pico SDK, pico-extras, and host tools pioasm + picotool on Ubuntu.
    Turn‑key RP2040 development over SWD (OpenOCD) or BOOTSEL USB (picotool).

  • SDCC Z80
    Small Device C Compiler (Z80 backend) plus uCsim Z80 simulator.
    Lean Z80 C toolchain for classic 8‑bit targets.

  • SDCC Z80 – ZX Spectrum Z80 toolchain variant tailored for ZX Spectrum builds. Convenient defaults/structure for Spectrum projects.

  • SDCC Z80 – Iskra Delta Partner Z80 toolchain variant tailored for Iskra Delta Partner with cpmtools. CP/M disk image creation and Partner-specific libraries.

  • SDCC Z80 – CP/M 3 Z80 toolchain variant tailored for CP/M 3 workflows. CP/M disk image creation and CP/M 3-oriented bundled runtime libraries.

  • GCC m68k GCC/binutils cross‑compiler targeting m68k-elf. Develop for classic Motorola 68k systems (e.g., Atari ST, Amiga).

  • GCC x86_64 Linux X11 GCC x86_64 toolchain with X11, OpenGL (Mesa), and extra image/font tooling on Ubuntu 22.04. Native X11/OpenGL development and reusable Linux desktop base image.

  • GCC x86_64 Linux Open Motif GCC x86_64 toolchain layered on the X11 image with Open Motif, uil, mwm, and GLw headers. Native Motif desktop development and legacy X11 GUI maintenance.

  • GCC x86_64 Linux GNUstep GCC x86_64 toolchain layered on the X11 image with GNUstep, Objective-C / Objective-C++, gnustep-make, Gorm, and ProjectCenter. Native GNUstep Foundation/AppKit development and OpenStep-style desktop software maintenance.

  • GCC x86_64 Linux OpenLook / XView GCC x86_64 toolchain layered on the X11 image with OpenLook, XView, olwm, olvwm, and SlingShot. Native XView/OpenLook development and maintenance of classic /usr/openwin software.

  • GCC x86_64 Linux SDL GCC x86_64 SDL toolchain layered on the Linux X11 base with SDL2, SDL3, audio, and multimedia support. SDL2 and SDL3 game and multimedia application development.

  • GCC x86_64 Windows MinGW-w64 GCC/MinGW-w64 cross-compilation toolchain for building 64-bit Windows binaries from Linux. Cross-compile .exe and .dll targets with CMake support.

  • GCC x86_64 Haiku GCC cross-compiler targeting Haiku OS (x86_64-unknown-haiku) with Jam build system and bundled Haiku-native gdb / gdbserver. Build Haiku OS and native Haiku applications.


Usage

Each image mounts your current working directory into /work inside the container.

ARM bare‑metal (generic)

docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/gcc-arm-none-eabi:1.1.0   arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -o app.elf app.c

Raspberry Pi Pico / Pico W (RP2040)

# Interactive shell (with USB passthrough for flashing/debug)
docker run --rm -it   --privileged -v /dev/bus/usb:/dev/bus/usb   -v "$(pwd)":/work -w /work   wischner/gcc-arm-none-eabi-rpi-pico:1.1.0 bash

# Build a project (SDK baked at /opt/pico-sdk)
cmake -S . -B build -DPICO_SDK_PATH=/opt/pico-sdk -DPICO_BOARD=pico_w
cmake --build build -j

SDCC Z80

docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/sdcc-z80:latest   sdcc -mz80 -o hello.ihx hello.c

SDCC Z80 – Iskra Delta Partner

# Compile with Partner libraries and headers
docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/sdcc-z80-idp:latest   idp-sdcc -o program.ihx program.c

# Create CP/M disk image
docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/sdcc-z80-idp:latest   mkfs.cpm -f partner disk.img

GCC m68k

docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/gcc-m68k:latest   m68k-elf-gcc -o hello.elf hello.c

GCC x86_64 Linux X11

# Compile an X11/OpenGL application
docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/gcc-x86_64-linux-x11:latest   gcc -o app main.c $(pkg-config --cflags --libs x11 xft gl)

GCC x86_64 Linux Open Motif

# Compile a Motif application
docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/gcc-x86_64-linux-motif:latest   gcc -o app main.c -lXm -lXt -lX11

# Compile a UIL file
docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/gcc-x86_64-linux-motif:latest   uil layout.uil -o layout.uid

GCC x86_64 Linux GNUstep

# Compile a GNUstep Foundation tool
docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/gcc-x86_64-linux-gnustep:latest   bash -lc '. /usr/share/GNUstep/Makefiles/GNUstep.sh && gcc -o hello hello.m $(gnustep-config --objc-flags) $(gnustep-config --base-libs)'

# Build a GNUstep project with gnustep-make
docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/gcc-x86_64-linux-gnustep:latest   bash -lc '. /usr/share/GNUstep/Makefiles/GNUstep.sh && make'

GCC x86_64 Linux OpenLook / XView

# Compile an XView application
docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/gcc-x86_64-linux-openlook:latest   gcc -o app app.c -I/usr/openwin/include -I/usr/include/tirpc -L/usr/openwin/lib -Wl,-rpath,/usr/openwin/lib -lxview -lolgx -lX11 -lXext -lXmu -lXt -lXpm -ltirpc -lm -lutil

# Compile an app that uses SlingShot
docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/gcc-x86_64-linux-openlook:latest   gcc -o app app.c -I/usr/openwin/include -I/usr/include/tirpc -L/usr/openwin/lib -Wl,-rpath,/usr/openwin/lib -lsspkg -lxview -lolgx -lX11 -lXext -lXmu -lXt -lXpm -ltirpc -lm -lutil

GCC x86_64 Linux SDL

# Compile an SDL2 application
docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/gcc-x86_64-linux-sdl:latest   gcc -o game main.c $(pkg-config --cflags --libs sdl2 SDL2_image SDL2_mixer SDL2_ttf gl)

# Compile an SDL3 application
docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/gcc-x86_64-linux-sdl:latest   gcc -o game3 main.c $(pkg-config --cflags --libs sdl3)

# CMake build
docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/gcc-x86_64-linux-sdl:latest   bash -c "cmake -S . -B build && cmake --build build -j"

GCC x86_64 Windows MinGW-w64

# Compile a Windows x64 executable
docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/gcc-x86_64-windows-mingw-w64:latest   x86_64-w64-mingw32-gcc -O2 -o hello.exe hello.c

# CMake cross-build
docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/gcc-x86_64-windows-mingw-w64:latest   bash -c "cmake -S . -B build-win -DCMAKE_TOOLCHAIN_FILE=/opt/toolchains/mingw-w64-x86_64.cmake && cmake --build build-win -j"

GCC x86_64 Haiku

# Compile a Haiku application
docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/gcc-x86_64-haiku:latest   x86_64-unknown-haiku-gcc -o app.elf app.c

# Build with Jam
docker run --rm -it   -v "$(pwd)":/work -w /work   wischner/gcc-x86_64-haiku:latest   jam

Building locally

A generic Makefile auto‑discovers subfolders with a Dockerfile and builds/pushes them.

List detected toolchains:

make list

Build all (tags :latest and :${IMG_VER}):

make build-all

Push all to Docker Hub (override org/version as needed):

make push-all ORG=wischner IMG_VER=1.1.0

Per‑toolchain build arguments can be placed in <toolchain>/build.args (one KEY=VAL per line).
They are passed automatically as --build-arg KEY=VAL during docker build.

When you rebuild a base image, remember to rebuild all derived images that use FROM on that base tag.


Contributing

Issues and PRs are welcome. Please:

  • Keep images minimal and reproducible.
  • Pin upstream versions in build.args where possible.
  • Document any platform‑specific helpers in the toolchain README.

License

Each image bundles open‑source components under their respective licenses (GPL, LGPL, etc.).
See individual toolchain folders for details. The repository content is © Wischner Ltd., provided under a permissive license unless otherwise noted.

About

Source repository for Docker-based toolchains. Includes Dockerfiles and instructions for building compilers and SDKs for multiple platforms.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors