#
# Configuration settings for Linux and generic UNIX
#

###
### Generic settings
###
XA = xa -M -v

# This may be uncommented if you have dmlib objlink utility installed,
# otherwise 'dd' and 'cat' will be used for "linking"
#OBJLINK = objlink


BINPATH ?= ./
OBJPATH ?= ./obj/unix/
RANLIB ?= ranlib
MKDIR ?= mkdir
MKDIR_P ?= $(MKDIR) -p


OUR_BINARIES += $(patsubst %.c,%,$(wildcard *.c))

TARGETS += $(addprefix $(BINPATH),$(addsuffix $(EXEEXT),$(OUR_BINARIES))) \
	$(patsubst %.asm,%.prg,$(wildcard *.asm))


EXTRA_PKG = COPYING.txt README.txt Makefile


###
### Generic rules
###
ifneq ($(V),1)
COMPILE_OBJ = @if test ! -d $(OBJPATH); then $(MKDIR_P) $(OBJPATH); fi && echo " CC $<" && $(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)
LINK_BIN = @if test ! -d $(BINPATH); then $(MKDIR_P) $(BINPATH); fi && echo " LINK $@" && $(CC) -o $@ $(filter %.o %.a,$+)
LINK_STATIC_LIB = @echo " AR $@" && $(AR) cru $@ $(filter %.o,$+) && $(RANLIB) $@
else
COMPILE_OBJ = @if test ! -d $(OBJPATH); then $(MKDIR_P) $(OBJPATH); fi && echo "$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)" && $(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)
LINK_BIN = @if test ! -d $(BINPATH); then $(MKDIR_P) $(BINPATH); fi && echo "$(CC) -o $@ $(filter %.o %.a,$+)" && $(CC) -o $@ $(filter %.o %.a,$+)
LINK_STATIC_LIB = @echo "$(AR) cru $@ $(filter %.o,$+)" && $(AR) cru $@ $(filter %.o,$+) && echo "$(RANLIB) $@" && $(RANLIB) $@
endif

all: $(TARGETS)


$(OBJPATH)%.o: %.c %.h
	$(COMPILE_OBJ)

$(OBJPATH)%.o: %.c
	$(COMPILE_OBJ)

%.o: %.asm
	@echo " XA $@"
	@$(XA) -o $@ $<

%.prg: %.o vw_%.bin
	@echo " LINK $@"
ifneq ($(OBJLINK),)
	@$(OBJLINK) -o $@ $(addprefix -p ,$+)
else
	(cat $(word 2,$^) && dd if=$< bs=1 skip=2) > $@
endif


###
### Specific rules
###

$(BINPATH)interptest$(EXEEXT): $(OBJPATH)interptest.o
	$(LINK_BIN)


$(BINPATH)mkfontdata$(EXEEXT): $(OBJPATH)mkfontdata.o
	$(LINK_BIN)

toobig_segs.dat: $(BINPATH)mkfontdata$(EXEEXT)
	@echo " MKFONTDATA $@"
	@$(BINPATH)mkfontdata$(EXEEXT) segs > $@

toobig_defs.dat: $(BINPATH)mkfontdata$(EXEEXT)
	@echo " MKFONTDATA $@"
	@$(BINPATH)mkfontdata$(EXEEXT) defs > $@

toobig.o: toobig.asm toobig_segs.dat toobig_defs.dat
	@echo " XA $@"
	@$(XA) -o $@ $<


toobig_src.zip: toobig.asm toobig.prg vw_toobig.bin mkfontdata.c $(EXTRA_PKG)
	-$(RM) -fr $(patsubst %.zip,%,$@)
	$(MKDIR_P) $(patsubst %.zip,%,$@) && cp $+ $(patsubst %.zip,%,$@) && \
	zip -9vvr $@ $(patsubst %.zip,%,$@)
	-$(RM) -fr $(patsubst %.zip,%,$@)

phosphor_src.zip: phosphor.asm phosphor.prg vw_phosphor.bin $(EXTRA_PKG)
	-$(RM) -fr $(patsubst %.zip,%,$@)
	$(MKDIR_P) $(patsubst %.zip,%,$@) && cp $+ $(patsubst %.zip,%,$@) && \
	zip -9vvr $@ $(patsubst %.zip,%,$@)
	-$(RM) -fr $(patsubst %.zip,%,$@)



###
### Special targets
###
clean:
	-$(RM) $(TARGETS) $(TMPFILES) $(OBJPATH)*.o *.o *.dat

