Imported from fxrobin/docker-m68k-compiler (
AGENTS.md). Install upstream withnpx skills add fxrobin/docker-m68k-compiler. Copyright stays with the author.
AGENTS.md — docker-m68k-compiler
Vue d'ensemble
Environnement Docker reproductible pour compiler du C en binaires Atari ST (TOS, CPU Motorola 68000).
Chaîne : m68k-atari-mint-gcc (paquet cross-mint-essential, PPA vriviere/ppa) sous Ubuntu 20.04.
Exemple actuel : src/hello.c → target/build/hello.tos.
Structure
Dockerfile: image multi-stage (~136 Mo). Stagetoolchain(Ubuntu 22.04 + build-essential + cross-mint-essential via PPAvriviere/ppa), stage runtime (Ubuntu 22.04 +make,libmpc3,libmpfr6,libgmp10+ closure mint copiée :/usr/bin/m68k-atari-mint-*,/usr/libexec/gcc/m68k-atari-mint,/usr/lib/gcc/m68k-atari-mint,/usr/m68k-atari-mint).WORKDIR /app,CMD ["/bin/bash"]. Le gcc natif x86_64 et Python (utile uniquement pouradd-apt-repository) restent dans le stage builder.Makefile: compile tous lessrc/*.cavecm68k-atari-mint-gcc, objets danstarget/obj/, édition de liens verstarget/build/hello.tos.src/: sources C à compiler (actuellementhello.cuniquement).target/: artefacts générés (ignoré par git, voir.gitignore). Ne jamais committer.- Pas de tests, pas de CI, pas de README pour l'instant.
Prérequis
- Docker (build + run).
- Binaire cible : TOS Atari ST sur m68k, pas d'exécution native possible sur l'hôte (émulateur type Hatari requis pour tester).
Commandes
# Construire l'image
docker build -t m68k-compiler .
# Compiler (depuis la racine du projet, monté sur /app)
docker run --rm -v "$PWD:/app" m68k-compiler make
# Compiler via make en local si la toolchain mint est installée sur l'hôte
make
# Nettoyer les artefacts
docker run --rm -v "$PWD:/app" m68k-compiler make clean
# ou en local : make clean
Conventions
- Ajouter un nouveau programme : déposer un
.cdanssrc/. Attention, leTARGETdu Makefile est fixe (hello.tos) : si tu ajoutes des sources, tous les.csont linkés ensemble dans ce seul binaire. Pour des binaires multiples, faire évoluer le Makefile (une cible par source) plutôt que de contourner avec des compilations manuelles. - Cible : C portable / compatible
m68k-atari-mint-gcc. Rester sur du C standard simple (stdio.hvérifié :puts,getcharOK). Éviter les appels système POSIX/Linux (fork, sockets, unistd spécifique) qui n'existent pas sous TOS. mainenint main(void)avecreturn 0.- Binaires TOS : extension
.tos, nom en 8.3 majuscules de préférence pour compatibilité (HELLO.TOS). - Variables du Makefile respectées :
CC=m68k-atari-mint-gcc,SRC_DIRECTORY,OBJ_DIRECTORY,BUILD_DIRECTORY,CFLAGS(transmis à la compilation, définissable depuis la ligne de commande). - Ne pas modifier le Dockerfile sans raison (PPA
vriviere/pparequis pourcross-mint-essential). Historique : base montée de 20.04 à 22.04 car le PPA ne publie plus aucun paquet pour focal (vérifié 2026-09-08 :Packagesfocal vide,cross-mint-essentialprésent sur jammy). Toute autre montée de version Ubuntu doit être validée par undocker buildcomplet + une compilation de test. - Ne jamais committer
target/.
Vérification
- Pas de suite de tests. Vérification minimale :
make clean && makepasse sans warning dans le conteneur. - Tester l'exécution uniquement via émulateur Atari ST (Hatari) — hors périmètre de ce repo pour l'instant.
- Compiler avec
-Wall -Wextraen vérification manuelle avant de livrer :docker run --rm -v "$PWD:/app" m68k-compiler make clean CFLAGS="-Wall -Wextra" all
Pièges connus
- Le
TARGETest codé en dur (hello.tos) : renommer/ajouter des programmes exige une mise à jour du Makefile. SRCS = $(wildcard ...): unmakesanscleanaprès ajout/suppression de fichier peut laisser des.oorphelins — préférermake clean && makeen cas de doute.- Chemins montés : toujours lancer le conteneur avec
-v "$PWD:/app"depuis la racine, sinonmakene trouve passrc/.