# config.mak sets compilerflags
include config.mak

OBJECTS = yace.o asm.o sim.o utils.o
EXHAUST_H = utils/exhaust/insn.h \
            utils/exhaust/exhaust.h \
            utils/exhaust/sim.h \
            utils/exhaust/asm.h

all: ${MAINFILE}

${MAINFILE}: fitness select scoresel replace ${OBJECTS} 
	${CC} ${CFLAGS} -o ${MAINFILE} ${OBJECTS} fitness/*.o select/*.o replace/*.o scoresel/*.o

${OBJECTS}: config.mak makefile

########################################
# make yace, exhaust, utils, ...
yace.o: yace.c ${EXHAUST_H}
	${CC} ${CFLAGS} -c yace.c

asm.o: utils/exhaust/asm.c ${EXHAUST_H}
	${CC} ${CFLAGS} -c utils/exhaust/asm.c

sim.o: utils/exhaust/sim.c ${EXHAUST_H}
	${CC} ${CFLAGS} -c utils/exhaust/sim.c

utils.o: utils/utils.h utils/utils.c
	${CC} ${CFLAGS} -c utils/utils.c

########################################
# make all fitness - objectfiles
fitness: makefile config.mak ${EXHAUST_H} fitness/fitness.h fitness/*.c
	make -C ./fitness -f fitness.mak all

########################################
# make all select - objectfiles
select: makefile config.mak ${EXHAUST_H} select/select.h select/*.c
	make -C ./select -f select.mak all

########################################
# make all select - objectfiles
scoresel: makefile config.mak ${EXHAUST_H} scoresel/scoresel.h scoresel/*.c
	make -C ./scoresel -f scoresel.mak all

########################################
# make all replace - objectfiles
replace: makefile config.mak ${EXHAUST_H} replace/replace.h replace/*.c
	make -C ./replace -f replace.mak all


.PHONY: clean fitness select replace scoresel

clean:
    # this is very dumb. If you know a better way to remove all files in subdirectories,
    # please let me know! mailto:martinankerl@web.de
	rm -f *~ ${OBJECTS} core *.flc
	rm -f fitness/*~ fitness/*.o fitness/core fitness/*.flc
	rm -f select/*~ select/*.o select/core select/*.flc
	rm -f scoresel/*~ scoresel/*.o scoresel/core scoresel/*.flc
	rm -f replace/*~ replace/*.o replace/core replace/*.flc
	rm -f utils/*~ utils/*.o utils/core utils/*.flc
	rm -f utils/exhaust/*~ utils/exhaust/*.o utils/exhaust/core utils/exhaust/*.flc

