
#makefile hell...

SHELL       = /bin/sh

TOP         = /usr/local/sce/ee
LIBDIR      = $(TOP)/lib
INCDIR      = $(TOP)/include

PS2_SOURCE  = ../source/ps2
DLIB_PS2_SOURCE  = ../source/dlib/ps2
DLIB_COMMON_SOURCE  = ../source/dlib/common

OBJS_DIR  = ./obj
BUILD_OUTPUT = ../build_output



TARGET      = main
OBJS         =$(OBJS_DIR)/crt0.o\
              $(OBJS_DIR)/$(TARGET).o\
              $(OBJS_DIR)/dh_db.o\
	      $(OBJS_DIR)/ps2pad.o\
	      $(OBJS_DIR)/dlib_pad.o\
	      $(OBJS_DIR)/dlib_rfont.o\
              $(OBJS_DIR)/ramfont1612.o\
	      $(OBJS_DIR)/ramfont88.o\
              $(OBJS_DIR)/dlib_error.o\
	      $(OBJS_DIR)/dlib_disk_access.o\
	      $(OBJS_DIR)/dlib_filegrouper.o 	

#use custom app.cmd file to get around hardcoded location of crt0.o
LCFILE      = app.cmd
LIBS        = $(LIBDIR)/libgraph.a \
              $(LIBDIR)/libdma.a \
              $(LIBDIR)/libdev.a \
              $(LIBDIR)/libpkt.a \
              $(LIBDIR)/libpad.a \
	      $(LIBDIR)/libvu0.a

PREFIX      = ee
AS          = $(PREFIX)-gcc
CC          = $(PREFIX)-gcc
LD          = $(PREFIX)-gcc
DVPASM      = $(PREFIX)-dvp-as
OBJDUMP     = $(PREFIX)-objdump
RUN         = dsedb -r run
RM          = /bin/rm -f

CFLAGS      = -O2 -Wall -Werror -Wa,-al -fno-common -fno-common -fno-strict-aliasing
CXXFLAGS    = -O2 -Wall -Werror -Wa,-al -fno-exceptions -fno-common -fno-strict-aliasing
ASFLAGS     = -c -xassembler-with-cpp -Wa,-al
DVPASMFLAGS =  
LDFLAGS     = -Wl,-Map,$(TARGET).map -mno-crt0 -L$(LIBDIR) -lm
TMPFLAGS    = -DPS2

.SUFFIXES: .c .s .cc .dsm .cpp .o

all: $(TARGET).elf frd.bin frd.dat

$(TARGET).elf: $(OBJS) $(LIBS)
	$(LD) -o $@ -T $(LCFILE) $(OBJS) $(LIBS) $(LDFLAGS)


$(OBJS_DIR)/crt0.o: $(LIBDIR)/crt0.s
	$(AS) $(ASFLAGS) $(TMPFLAGS) -o $@ $< > $*.lst

.s.o:
	$(AS) $(ASFLAGS) $(TMPFLAGS) -I$(INCDIR) -o $@ $< > $*.lst

.dsm.o:
	$(DVPASM) $(DVPASMFLAGS) -I$(INCDIR) -o $@ $< > $*.lst

.c.o:
	$(CC) $(CFLAGS) $(TMPFLAGS) -I$(INCDIR) -c $< -o $*.o > $*.lst

.cc.o:
	$(CC) $(CXXFLAGS) $(TMPFLAGS) -I$(INCDIR) -c $< -o $*.o > $*.lst

### build the application specific sources
$(OBJS_DIR)/%.o : $(PS2_SOURCE)/%.cpp 
	$(CC) $(CXXFLAGS) $(TMPFLAGS)  -I$(INCDIR) -I$(PS2_SOURCE) -I$(DLIB_PS2_SOURCE) -I$(DLIB_COMMON_SOURCE) -c $< -o $(OBJS_DIR)/$*.o > $(OBJS_DIR)/$*.lst

### build the ps2 specific part of the development library
$(OBJS_DIR)/%.o : $(DLIB_PS2_SOURCE)/%.cpp 
	$(CC) $(CXXFLAGS) $(TMPFLAGS)  -I$(INCDIR) -I$(PS2_SOURCE) -I$(DLIB_PS2_SOURCE) -I$(DLIB_COMMON_SOURCE) -c $< -o $(OBJS_DIR)/$*.o > $(OBJS_DIR)/$*.lst

### this builds the 2 fonts
$(OBJS_DIR)/%.o : $(DLIB_PS2_SOURCE)/%.s 
	$(AS) $(ASFLAGS) $(TMPFLAGS) -o $(OBJS_DIR)/$*.o  $< > $(OBJS_DIR)/$*.lst

### build the common (ps2 and pc/linux) part of the development library
$(OBJS_DIR)/%.o : $(DLIB_COMMON_SOURCE)/%.cpp 
	$(CC) $(CXXFLAGS) $(TMPFLAGS)  -I$(INCDIR) -I$(PS2_SOURCE) -I$(DLIB_PS2_SOURCE) -I$(DLIB_COMMON_SOURCE) -c $< -o $(OBJS_DIR)/$*.o > $(OBJS_DIR)/$*.lst

run: all
	../filegrouper_linux_app/filegrouper.elf -c ../demos/demos.fgr
	../filegrouper_linux_app/filegrouper.elf -p ../demos/demos.fgr -a ../demos/marionette.bin
	../filegrouper_linux_app/filegrouper.elf -p ../demos/demos.fgr -a ../demos/marionette.dat
	../filegrouper_linux_app/filegrouper.elf -p ../demos/demos.fgr -a ../demos/marionette.hlp
	../filegrouper_linux_app/filegrouper.elf -p ../demos/demos.fgr -a ../demos/marionette.inf
	../filegrouper_linux_app/filegrouper.elf -p ../demos/demos.fgr -a frd.bin
	../filegrouper_linux_app/filegrouper.elf -p ../demos/demos.fgr -a frd.dat
	../filegrouper_linux_app/filegrouper.elf -p ../demos/demos.fgr -a frd.hlp
	../filegrouper_linux_app/filegrouper.elf -p ../demos/demos.fgr -a frd.inf
	../filegrouper_linux_app/filegrouper.elf -p ../demos/demos.fgr -a ../demos/peewee.bin
	../filegrouper_linux_app/filegrouper.elf -p ../demos/demos.fgr -a ../demos/peewee.dat
	../filegrouper_linux_app/filegrouper.elf -p ../demos/demos.fgr -a ../demos/peewee.hlp
	../filegrouper_linux_app/filegrouper.elf -p ../demos/demos.fgr -a ../demos/peewee.inf
	$(RUN) $(TARGET).elf

frd.bin: frd.dsm frd.vsm
	echo make frd.bin
	ee-dvp-as -o frd.o frd.dsm
	ee-objcopy -O binary frd.o frd.bin

frd.dat: makedata.c rings.h map.h
	cc -o makedata makedata.c
	makedata

clean:
	$(RM) $(OBJS_DIR)/*.o *.map $(OBJS_DIR)/*.lst core *.dis *.elf
