Fusion du travail du sous-agent (branche moteur-embarque-travail) ; plan supprimé à la clôture, son résultat est repris dans la merge request. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
75 lines
3.2 KiB
Makefile
75 lines
3.2 KiB
Makefile
# Makefile d'Ustagammon : toutes les opérations du projet passent par ici.
|
|
# Chaque cible documentée par « ## » apparaît dans `make help`.
|
|
|
|
SHELL := /bin/bash
|
|
.DEFAULT_GOAL := help
|
|
|
|
# Machine de développement modeste : jamais plus de deux tâches en parallèle.
|
|
MAKEFLAGS += -j2 --no-print-directory
|
|
|
|
BUILD_DIR := build
|
|
|
|
# Outils lancés dans Docker (aucune installation sur le PC).
|
|
SHELLCHECK_IMAGE := koalaman/shellcheck-alpine:v0.10.0
|
|
# Image construite ici : changer le numéro à chaque modification de docker/gherkin/.
|
|
GHERKIN_IMAGE := ustagammon/gherkin:2
|
|
# GNU Backgammon de référence, compilé au commit figé par l'ADR 0005.
|
|
REFERENCE_IMAGE := ustagammon/gnubg-reference:14b6798
|
|
# Chaîne de compilation C (docker/build-c/Dockerfile) : changer l'étiquette
|
|
# à chaque modification du Dockerfile, pour que make setup la reconstruise.
|
|
BUILD_C_IMAGE := ustagammon/build-c:1
|
|
|
|
export SHELLCHECK_IMAGE GHERKIN_IMAGE BUILD_C_IMAGE
|
|
|
|
# Lance une commande dans la chaîne C, sous l'utilisateur courant pour que
|
|
# build/ lui appartienne.
|
|
DOCKER_C := docker run --rm --user "$$(id -u):$$(id -g)" -v "$(CURDIR):/src" -w /src $(BUILD_C_IMAGE)
|
|
|
|
.PHONY: help setup build engine test lint deploy clean reference-image reference
|
|
|
|
help: ## Liste les commandes disponibles
|
|
@echo "Ustagammon : commandes disponibles"
|
|
@grep -E '^[a-zA-Z0-9_-]+:.*## ' $(MAKEFILE_LIST) \
|
|
| awk 'BEGIN { FS = ":.*## " } { printf " make %-16s %s\n", $$1, $$2 }'
|
|
|
|
setup: ## Installe la chaîne d'outils (images Docker) ; sans effet si déjà fait
|
|
@command -v docker >/dev/null || { echo "Docker est requis : sudo apt install docker.io"; exit 1; }
|
|
@docker image inspect $(SHELLCHECK_IMAGE) >/dev/null 2>&1 \
|
|
|| docker pull $(SHELLCHECK_IMAGE)
|
|
@docker image inspect $(GHERKIN_IMAGE) >/dev/null 2>&1 \
|
|
|| docker build -q -t $(GHERKIN_IMAGE) docker/gherkin
|
|
@$(MAKE) reference-image
|
|
@docker image inspect $(BUILD_C_IMAGE) >/dev/null 2>&1 \
|
|
|| docker build -t $(BUILD_C_IMAGE) docker/build-c
|
|
@echo "Chaîne d'outils prête."
|
|
|
|
build: engine ## Compile le moteur (si nécessaire) puis l'application
|
|
|
|
engine: ## Compile le moteur, ses données et build/engine-cli (dans Docker)
|
|
@docker image inspect $(BUILD_C_IMAGE) >/dev/null 2>&1 \
|
|
|| { echo "Chaîne C absente : lancer d'abord make setup"; exit 1; }
|
|
@$(DOCKER_C) make -f engine/engine.mk -j2 --no-print-directory
|
|
|
|
test: ## Lance tous les tests
|
|
@tests/run.sh
|
|
|
|
lint: ## Vérifie le style et les erreurs courantes
|
|
@tests/lint.sh
|
|
|
|
deploy: ## Installe l'application sur le téléphone (pas encore disponible)
|
|
@echo "Pas encore disponible : le socle (PWA ou Android) sera choisi à la fin de l'étape 0."
|
|
@exit 1
|
|
|
|
clean: ## Supprime les artefacts de build (garde les images Docker)
|
|
rm -rf $(BUILD_DIR)
|
|
|
|
reference-image: ## Construit l'image Docker du gnubg de référence (cache Docker : rapide si à jour)
|
|
docker build -t $(REFERENCE_IMAGE) docker/gnubg-reference
|
|
@echo "Image $(REFERENCE_IMAGE) prête."
|
|
|
|
reference: reference-image ## Régénère tests/reference/results/ avec le gnubg de référence
|
|
rm -rf tests/reference/results
|
|
docker run --rm --user "$$(id -u):$$(id -g)" -e HOME=/tmp \
|
|
-v "$(CURDIR)/tests/reference:/reference" $(REFERENCE_IMAGE) \
|
|
gnubg --tty --quiet --no-rc --python=/reference/generate.py
|