forked from menault/2026_TD3_DEV51_Qualite_Algo
64 lines
2.1 KiB
Makefile
64 lines
2.1 KiB
Makefile
CC = gcc
|
|
CFLAGS ?= -std=c11 -Wall -Wextra -Wpedantic -O2
|
|
CFLAGS_PROFIL ?= -std=c11 -Wall -Wextra -Wpedantic -O0 -g -pg
|
|
|
|
SOURCE = banque.c
|
|
PROGRAMME = build/banque
|
|
PROGRAMME_PROFIL = build/profil/banque
|
|
EMPREINTE_ATTENDUE = ff68d260a7a58441
|
|
NOM ?= $(shell whoami)
|
|
|
|
.PHONY: all run check test bench profile clean help
|
|
|
|
all: $(PROGRAMME)
|
|
|
|
$(PROGRAMME): $(SOURCE) Makefile
|
|
mkdir -p $(@D)
|
|
$(CC) $(CPPFLAGS) $(CFLAGS) $< -o $@ $(LDFLAGS) $(LDLIBS)
|
|
|
|
run: $(PROGRAMME)
|
|
cd build && ./banque
|
|
|
|
check: $(PROGRAMME)
|
|
cd build && ./banque > sortie.txt
|
|
@cat build/sortie.txt
|
|
@empreinte=$$(awk '/^Empreinte/ {print $$NF}' build/sortie.txt); \
|
|
if [ "$$empreinte" != "$(EMPREINTE_ATTENDUE)" ]; then \
|
|
printf 'Empreinte incorrecte : %s (attendu %s)\n' "$$empreinte" "$(EMPREINTE_ATTENDUE)" >&2; \
|
|
exit 1; \
|
|
fi
|
|
@printf 'Empreinte correcte.\n'
|
|
|
|
test: $(SOURCE) tests/test_banque.c
|
|
@programme=$$(mktemp); \
|
|
trap 'rm -f "$$programme"' EXIT HUP INT TERM; \
|
|
$(CC) $(CPPFLAGS) $(CFLAGS) tests/test_banque.c -o "$$programme" $(LDFLAGS) $(LDLIBS) && "$$programme"
|
|
|
|
# Le script impose gcc -O2, vérifie l'empreinte et mesure 5 exécutions.
|
|
bench: $(SOURCE) evaluer.sh
|
|
mkdir -p build
|
|
cd build && bash "$(abspath evaluer.sh)" "$(abspath $(SOURCE))" "$(NOM)"
|
|
@printf 'Mesures disponibles dans build/resultats.csv\n'
|
|
|
|
$(PROGRAMME_PROFIL): $(SOURCE) Makefile
|
|
mkdir -p $(@D)
|
|
$(CC) $(CPPFLAGS) $(CFLAGS_PROFIL) $< -o $@ $(LDFLAGS) $(LDLIBS)
|
|
|
|
profile: $(PROGRAMME_PROFIL)
|
|
cd build/profil && ./banque
|
|
cd build/profil && gprof -b ./banque gmon.out > profil.txt
|
|
@printf 'Profil disponible dans build/profil/profil.txt\n'
|
|
|
|
clean:
|
|
rm -rf build
|
|
|
|
help:
|
|
@printf '%s\n' \
|
|
'make Compiler banque.c avec -O2' \
|
|
'make run Exécuter et produire build/rapport.txt' \
|
|
"make check Vérifier l'empreinte attendue" \
|
|
'make test Vérifier les cas limites des fonctions optimisées' \
|
|
'make bench NOM=nom Évaluer les performances (médiane de 5 exécutions)' \
|
|
'make profile Générer le profil gprof avec -O0 -g -pg' \
|
|
'make clean Supprimer build, y compris les mesures et profils'
|