#---------------------------------------------------------------------
#
#        NEOGEO CDZ Emulator for PSP Makefile
#
#---------------------------------------------------------------------

TARGET = ncdzpsp

EXTRA_TARGETS = mkdir EBOOT.PBP
EXTRA_CLEAN = pspclean

PSP_EBOOT_TITLE = NCDZPSP 0.3.1
PSP_EBOOT_ICON = data/icon0.png
PSP_EBOOT_PIC1 = data/pic1.png

#---------------------------------------------------------------------
# Configration
#---------------------------------------------------------------------

# MAME_Z80 = 1
# EMULATE_RASTER_EFFECT = 1
SAVE_STATE = 1
# SUPPORT_BMP = 1


#---------------------------------------------------------------------
# Object File Output Directtory
#---------------------------------------------------------------------

OBJ = obj


#---------------------------------------------------------------------
# File include path
#---------------------------------------------------------------------

INCDIR = \
	src src/zip \
	src/cpu/m68000 \
	src/cpu/z80 \
	src/libmad \
	src/zlib \


#---------------------------------------------------------------------
# Compiler Flags
#---------------------------------------------------------------------

CFLAGS= -O3 -g \
	-fstrict-aliasing \
	-DINLINE="static inline" \
	-DFPM_MIPS \
	-DPSP

CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)


ifdef EMULATE_RASTER_EFFECT
CFLAGS += -DEMULATE_RASTER_EFFECT=1
endif

ifdef SAVE_STATE
CFLAGS += -DSAVE_STATE=1
endif

ifdef SUPPORT_BMP
CFLAGS += -DSUPPORT_BMP=1
endif

#---------------------------------------------------------------------
# Linker Flags
#---------------------------------------------------------------------

LIBDIR =
LDFLAGS =


#---------------------------------------------------------------------
# Library
#---------------------------------------------------------------------

USE_PSPSDK_LIBC=1
LIBS = -lm -lc -lpspaudio -lpspgu -lpsppower -lpsprtc


#---------------------------------------------------------------------
# Object files
#---------------------------------------------------------------------

OBJDIRS = \
	$(OBJ)	\
	$(OBJ)/cpu \
	$(OBJ)/cpu/m68000 \
	$(OBJ)/cpu/z80 \
	$(OBJ)/drivers \
	$(OBJ)/machine \
	$(OBJ)/sound \
	$(OBJ)/vidhrdw \
	$(OBJ)/zip \
	$(OBJ)/zlib \
	$(OBJ)/libmad \
	$(OBJ)/psp

ifdef MAME_Z80
Z80OBJS = $(OBJ)/cpu/z80/mamez80.o
CFLAGS += -DMAME_Z80
else
Z80OBJS = $(OBJ)/cpu/z80/z80.o $(OBJ)/cpu/z80/cz80.o
endif

MAINOBJS = \
	$(OBJ)/ncdz.o \
	$(OBJ)/inptport.o \
	$(OBJ)/memintrf.o \
	$(OBJ)/state.o \
	$(OBJ)/timer.o \
	$(OBJ)/cpu/m68000/m68000.o \
	$(OBJ)/cpu/m68000/c68k.o \
	$(OBJ)/cpu/m68000/c68kexec.o \
	$(Z80OBJS) \
	$(OBJ)/drivers/driver.o \
	$(OBJ)/machine/cdda.o \
	$(OBJ)/machine/cdrom.o \
	$(OBJ)/machine/d68k.o \
	$(OBJ)/machine/i68k.o \
	$(OBJ)/sound/sndintrf.o \
	$(OBJ)/sound/2610intf.o \
	$(OBJ)/sound/ym2610.o \
	$(OBJ)/vidhrdw/vidhrdw.o \
	$(OBJ)/vidhrdw/sprite.o \
	$(OBJ)/zip/zfile.o \
	$(OBJ)/zip/unzip.o

EXTOBJS = \
	$(OBJ)/psp/psp.o \
	$(OBJ)/psp/bmp.o \
	$(OBJ)/psp/config.o \
	$(OBJ)/psp/filer.o \
	$(OBJ)/psp/input.o \
	$(OBJ)/psp/menu.o \
	$(OBJ)/psp/misc.o \
	$(OBJ)/psp/mp3.o \
	$(OBJ)/psp/png.o \
	$(OBJ)/psp/sound.o \
	$(OBJ)/psp/ticker.o \
	$(OBJ)/psp/usrintrf.o \
	$(OBJ)/psp/video.o

NCDLIBS = \
	$(OBJ)/zlib.a \
	$(OBJ)/libmad.a

OBJS= $(MAINOBJS) $(EXTOBJS) $(NCDLIBS)


#---------------------------------------------------------------------
# Rules to make libraries
#---------------------------------------------------------------------

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

$(OBJ)/zlib.a:  $(OBJ)/zlib/adler32.o $(OBJ)/zlib/compress.o \
		$(OBJ)/zlib/crc32.o $(OBJ)/zlib/gzio.o \
		$(OBJ)/zlib/uncompr.o $(OBJ)/zlib/deflate.o \
		$(OBJ)/zlib/trees.o $(OBJ)/zlib/zutil.o \
		$(OBJ)/zlib/inflate.o $(OBJ)/zlib/infback.o \
		$(OBJ)/zlib/inftrees.o $(OBJ)/zlib/inffast.o

$(OBJ)/libmad.a:$(OBJ)/libmad/version.o $(OBJ)/libmad/fixed.o \
		$(OBJ)/libmad/bit.o $(OBJ)/libmad/timer.o \
		$(OBJ)/libmad/stream.o $(OBJ)/libmad/frame.o \
		$(OBJ)/libmad/synth.o $(OBJ)/libmad/decoder.o \
		$(OBJ)/libmad/layer12.o $(OBJ)/libmad/layer3.o \
		$(OBJ)/libmad/huffman.o


#---------------------------------------------------------------------
# Rules to manage files
#---------------------------------------------------------------------

pspclean:
	@echo Remove all $(OBJ)ect files and directories.
	@rm -rd $(OBJ)

$(OBJ)/%.o: src/%.c src/ncdz.h
	@echo Compiling $<...
	@$(CC) $(CDEFS) $(CFLAGS) -c $< -o$@

$(OBJ)/%.a:
	@echo Archiving $@...
	@$(AR) -r $@ $^

$(sort $(OBJDIRS)):
	@mkdir -p $(subst /,\,$@)

maketree:
	@echo Making $(OBJ)ect tree...

mkdir:	maketree $(sort $(OBJDIRS))
