#### -*- coding:utf-8 -*-

CC=clang

help aide:
	@echo "Les cibles disponibles sont :"
	@if [ `uname` = Linux ] ; then \
		echo "    make outils          # compile    les interpreteurs et compilateurs." ;\
		echo "    make npi             # compile    un interpreteur." ;\
		echo "    make npc             # compile    un compilateur." ;\
		echo "    make calcule         # compile    un programme." ;\
		echo "    make interprete      # interprete le programme." ;\
		echo "    make execute         # execute    le programme compilé." ;\
		echo "    make compare         # compare les sorties." ;\
		echo "    make tout            # fait tout." ;\
	else \
		echo "" ;\
		echo "    make npi.i486        # compile    un interpreteur tournant sur i486." ;\
		echo "    make npc.i486        # compile    un compilateur  tournant sur i486." ;\
		echo "    make calcule.i486    # compile    un programme    tournant sur i486." ;\
		echo "" ;\
		echo "    make npi.m68k        # compile    un interpreteur tournant sur m68k." ;\
		echo "    make npc.m68k        # compile    un compilateur  tournant sur m68k." ;\
		echo "    make calcule.m68k    # compile    un programme    tournant sur m68k." ;\
		echo "" ;\
		echo "    make interprete-i486 # interprete le programme sur i486." ;\
		echo "    make interprete-m68k # interprete le programme sur m68k." ;\
		echo "    make execute-i486    # execute    le programme sur i486." ;\
		echo "    make execute-m68k    # execute    le programme sur m68k." ;\
		echo "    make compare-i486    # compare les sorties sur i486." ;\
		echo "    make compare-m68k    # compare les sorties sur m68k." ;\
		echo "    make compare         # compare les sorties." ;\
		echo "    make tout-i486       # fait tout sur i486." ;\
		echo "    make tout-m68k       # fait tout sur m68k." ;\
	fi

all tout:
	@echo "Il faut choisi entre :"
	@echo "    make tout-unix   # sur unix"
	@echo "    make tout-i486   # sur NeXTSTEP ou OPENSTEP"
	@echo "    make tout-m68k   # sur NeXTSTEP ou OPENSTEP"

all-unix tout-unix:npi.unix npc.unix interprete-unix calcule.unix execute-unix
all-i486 tout-i486:npi.i486 npc.i486 interprete-i486 calcule.i486 execute-i486
all-m68k tout-m68k:npi.m68k npc.m68k interprete-m68k calcule.m68k execute-m68k

npi.unix:npi.c
	@echo "--- Je compile un interpreteur tournant sur unix."
	$(CC) -o npi.unix npi.c

npi.i486:npi.c
	@echo "--- Je compile un interpreteur tournant sur i486."
	$(CC) -arch i486 -o npi.i486 npi.c

npi.m68k:npi.c
	@echo "--- Je compile un interpreteur tournant sur m68k."
	$(CC) -arch m68k -o npi.m68k npi.c

npc.unix:npc.c
	@echo "--- Je compile un compilateur tournant sur unix."
	$(CC) -o npc.unix npc.c

npc.i486:npc.c
	@echo "--- Je compile un compilateur tournant sur i486."
	$(CC) -arch i486 -o npc.i486 npc.c

npc.m68k:npc.c
	@echo "--- Je compile un compilateur tournant sur m68k."
	$(CC) -arch m68k -o npc.m68k npc.c

interprete-unix inte-unix.out:npi.unix calcule.npi
	@echo "--- J'interprete le programme calcule.npi avec l'interpreteur npi.unix."
	./npi.unix < calcule.npi > inte-unix.out

interprete-i486 inte-i486.out:npi.i486 calcule.npi
	@echo "--- J'interprete le programme calcule.npi avec l'interpreteur npi.i486."
	./npi.i486 < calcule.npi > inte-i486.out

interprete-m68k inte-m68k.out:npi.m68k calcule.npi
	@echo "--- J'interprete le programme calcule.npi avec l'interpreteur npi.m68k."
	./npi.m68k < calcule.npi > inte-m68k.out

calcule.unix:npc.unix calcule.npi
	@echo "--- Je compile le programme calcule.npi pour unix."
	./npc.unix < calcule.npi && mv npc.out calcule.unix

calcule.i486:npc.i486 calcule.npi
	@echo "--- Je compile le programme calcule.npi pour i486."
	./npc.i486 < calcule.npi && mv npc.out calcule.i486

calcule.m68k:npc.m68k calcule.npi
	@echo "--- Je compile le programme calcule.npi pour m68k."
	./npc.m68k < calcule.npi && mv npc.out calcule.m68k

execute-unix comp-unix.out:calcule.unix
	@echo "--- J'execute le programme calcule.unix."
	./calcule.unix > comp-unix.out

execute-i486 comp-i486.out:calcule.i486
	@echo "--- J'execute le programme calcule.i486."
	./calcule.i486 > comp-i486.out

execute-m68k comp-m68k.out:calcule.m68k
	@echo "--- J'execute le programme calcule.m68k."
	./calcule.m68k > comp-m68k.out

compare-unix:inte-unix.out comp-unix.out
	diff inte-unix.out comp-unix.out && echo OK

compare-i486:inte-i486.out comp-i486.out
	diff inte-i486.out comp-i486.out && echo OK

compare-m68k:inte-m68k.out comp-m68k.out
	diff inte-m68k.out comp-m68k.out && echo OK

compare:inte-m68k.out comp-m68k.out inte-i486.out comp-i486.out
	diff inte-m68k.out inte-i486.out && echo OK
	diff comp-m68k.out comp-i486.out && echo OK
	diff inte-i486.out comp-i486.out && echo OK
	diff inte-m68k.out comp-m68k.out && echo OK

clean:
	-rm *.out *.i486 *.m68k *.unix *.out.c npi.ast




npi.ast:npi.c
	@echo "--- Je genère l'arbre syntaxique abstrait d'un interpreteur."
	$(CC) -cc1 -ast-dump-xml \
		-std=c11 \
		-I/usr/lib/clang/3.2/include \
		-I/usr/include \
		-o npi.ast npi.c

#
# -I/usr/include/stlport \
# -I/usr/include/linux \



#### THE END ####
ViewGit