Files
Ustagammon/Makefile
T
Pierre MARTINandClaude Opus 5.5 05d59c6acb Compilation du moteur dans Docker : make engine
Image ustagammon/build-c (Debian trixie, gcc, GLib pour les seuls outils
de génération), construite par make setup. engine/engine.mk compile le
moteur et engine-cli, et génère gnubg.wd et les bases .bd avec makeweights
et makebearoff, comme le Makefile.am de gnubg. Dépendances suivies : un
second make engine ne recompile rien. make build appelle make engine.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 13:58:00 +01:00

58 lines
2.3 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
# 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 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
help: ## Liste les commandes disponibles
@echo "Ustagammon : commandes disponibles"
@grep -E '^[a-zA-Z0-9_-]+:.*## ' $(MAKEFILE_LIST) \
| awk 'BEGIN { FS = ":.*## " } { printf " make %-12s %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 $(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)