#
# Makefile for exomizer
#
WFLAGS = -Wall -Wstrict-prototypes
CFLAGS = $(WFLAGS) -O3 -ffast-math -mtune=i686 -fomit-frame-pointer -fgcse -pedantic
LDFLAGS = -s

#CFLAGS = -g -mtune=i686 $(WFLAGS)
#LDFLAGS = -g -mtune=i686

SHARED_OBJS = getflag.o log.o membuf.o
RAW_OBJS = match.o search.o exo_raw.o optimal.o output.o membuf_io.o \
           chunkpool.o radix.o exo_helper.o exodec.o progress.o exo_util.o
EXO_OBJS = match.o search.o exo_main.o optimal.o output.o membuf_io.o \
           chunkpool.o radix.o exo_helper.o exodec.o progress.o asm.tab.o \
           lex.yy.o parse.o expr.o pc.o vec.o named_buffer.o map.o desfx.o \
	   6502emu.o exo_util.o sfxdecr.o
BAS_OBJS = bas_main.o bprg_renumber.o bprg_link_patch.o bprg_trampoline.o \
           bprg.o vec.o
ALL_OBJS = $(EXO_OBJS) $(RAW_OBJS) $(BAS_OBJS) $(SHARED_OBJS)

#.SILENT:

.PHONY: build clean

build: $(MAKEFILE) exomizer exoraw exobasic

exomizer: deps $(EXO_OBJS) $(SHARED_OBJS)
	@echo "Linking $@"
	@$(CC) $(LDFLAGS) -o $@ $(EXO_OBJS) $(SHARED_OBJS)

exoraw: deps $(RAW_OBJS) $(SHARED_OBJS)
	@echo "Linking $@"
	@$(CC) $(LDFLAGS) -o $@ $(RAW_OBJS) $(SHARED_OBJS)

exobasic: deps $(BAS_OBJS) $(SHARED_OBJS)
	@echo "Linking $@"
	@$(CC) $(LDFLAGS) -o $@ $(BAS_OBJS) $(SHARED_OBJS)

clean:
	@echo "Cleaning project"
	-@$(RM) $(EXO_OBJS) $(RAW_OBJS) $(BAS_OBJS) $(SHARED_OBJS)
	-@$(RM) b2membuf.o b2membuf b2membuf.exe sfxdecr sfxdecr.c deps
	-@$(RM) exomizer exoraw exobasic exomizer.exe exoraw.exe exobasic.exe


asm.tab.h asm.tab.c: asm.y
	bison -t -d asm.y

lex.yy.c: asm.yy
	flex -B asm.yy

sfxdecr.c: sfxdecr b2membuf
	@./b2membuf sfxdecr >sfxdecr.c

sfxdecr: sfxdecr.s exoraw
	@echo "Compressing $<"
	@./exoraw -q sfxdecr.s -o sfxdecr

-include deps

deps: $(wildcard *.h) asm.tab.h
	@echo "Generating dependencies"
	@$(CC) -MM $(wildcard *.c) >$@

%.o:	%.c
	@echo "Compiling $<"
	@$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<

%:	%.o
	@$(CC) $(LDFLAGS) $< -o $@
