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:latestto get repeatable builds.
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.
-
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 toolspioasm+picotoolon Ubuntu.
Turn‑key RP2040 development over SWD (OpenOCD) or BOOTSEL USB (picotool). -
SDCC Z80
Small Device C Compiler (Z80 backend) plusuCsimZ80 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/openwinsoftware. -
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
.exeand.dlltargets 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.
Each image mounts your current working directory into /work inside the container.
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# 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 -jdocker run --rm -it -v "$(pwd)":/work -w /work wischner/sdcc-z80:latest sdcc -mz80 -o hello.ihx hello.c# 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.imgdocker run --rm -it -v "$(pwd)":/work -w /work wischner/gcc-m68k:latest m68k-elf-gcc -o hello.elf hello.c# 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)# 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# 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'# 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# 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"# 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"# 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 jamA generic Makefile auto‑discovers subfolders with a Dockerfile and builds/pushes them.
List detected toolchains:
make listBuild all (tags :latest and :${IMG_VER}):
make build-allPush all to Docker Hub (override org/version as needed):
make push-all ORG=wischner IMG_VER=1.1.0Per‑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
FROMon that base tag.
Issues and PRs are welcome. Please:
- Keep images minimal and reproducible.
- Pin upstream versions in
build.argswhere possible. - Document any platform‑specific helpers in the toolchain README.
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.