# MAGIC KIT MAKEFILE
#

RM       = del
CC       = gcc


CFLAGS   = -O -Wall -I.
PCEFLAGS = $(CFLAGS) -D PCENGINE
NESFLAGS = $(CFLAGS) -D NES

OBJS     = macro.o func.o symbol.o pcx.o output.o

PCEDIR   = pce
PCEOBJS  = $(PCEDIR)/main.o\
           $(PCEDIR)/input.o\
           $(PCEDIR)/assemble.o\
           $(PCEDIR)/expr.o\
           $(PCEDIR)/code.o\
           $(PCEDIR)/command.o\
           $(PCEDIR)/pce_cmd.o\
           $(PCEDIR)/pce.o

NESDIR   = nes
NESOBJS  = $(NESDIR)/main.o\
           $(NESDIR)/input.o\
           $(NESDIR)/assemble.o\
           $(NESDIR)/expr.o\
           $(NESDIR)/code.o\
           $(NESDIR)/command.o\
           $(NESDIR)/nes_cmd.o\
           $(NESDIR)/nes.o

EXEDIR   = ../../bin

TARGPCE  = $(EXEDIR)/pceas.exe
TARGNES  = $(EXEDIR)/nesasm.exe
TARGETS  = $(TARGPCE) $(TARGNES)

#
#

all: $(TARGETS)

#
# For DOS commands (ie. del), still need backslashes
#   and you can't put items in a list
#
clean:
	$(RM) *.o
	$(RM) $(PCEDIR)\*.o
	$(RM) $(NESDIR)\*.o
	$(RM) $(EXEDIR)\pceas.exe
	$(RM) $(EXEDIR)\nesasm.exe

# COMMON STUFF
#

$(OBJS) : defs.h externs.h protos.h
%.o : %.c
	$(CC) $(CFLAGS) -o $@ -c $<

# PCE ASSEMBLER
#

$(PCEOBJS) : defs.h externs.h protos.h
$(PCEDIR)/main.o : vars.h
$(PCEDIR)/expr.o : expr.h
$(PCEDIR)/pce.o  : $(PCEDIR)/pce.c $(PCEDIR)/pce_inst.h
	$(CC) $(PCEFLAGS) -o $(PCEDIR)/pce.o     -c $(PCEDIR)/pce.c
$(PCEDIR)/pce_cmd.o : $(PCEDIR)/pce_cmd.c
	$(CC) $(PCEFLAGS) -o $(PCEDIR)/pce_cmd.o -c $(PCEDIR)/pce_cmd.c
$(PCEDIR)/%.o : %.c
	$(CC) $(PCEFLAGS) -o $@ -c $<

# NES ASSEMBLER
#

$(NESOBJS) : defs.h externs.h protos.h
$(NESDIR)/main.o : vars.h
$(NESDIR)/expr.o : expr.h
$(NESDIR)/nes.o  : $(NESDIR)/nes.c $(NESDIR)/nes_inst.h
	$(CC) $(NESFLAGS) -o $(NESDIR)/nes.o     -c $(NESDIR)/nes.c
$(NESDIR)/nes_cmd.o  : $(NESDIR)/nes_cmd.c
	$(CC) $(NESFLAGS) -o $(NESDIR)/nes_cmd.o -c $(NESDIR)/nes_cmd.c
$(NESDIR)/%.o : %.c
	$(CC) $(NESFLAGS) -o $@ -c $<

# EXE
#

$(TARGPCE) : $(OBJS) $(PCEOBJS)
	$(CC) -o $(TARGPCE) -s $(OBJS) $(PCEOBJS)
$(TARGNES) : $(OBJS) $(NESOBJS)
	$(CC) -o $(TARGNES) -s $(OBJS) $(NESOBJS)

