#------------------------------------------------------------------------------
#
#                      CPS2 Emulator for PSP Makefile
#
#------------------------------------------------------------------------------

TARGET = cps2psp

EXTRA_TARGETS = mkdir EBOOT.PBP
EXTRA_CLEAN = pspclean

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

SAVE_STATE = 1
#KERNEL_MODE = 1
#ADHOC = 1
RELEASE = 1

ifdef ADHOC
PSP_EBOOT_TITLE = CPS2PSP 1.0 (AdHoc)
else
PSP_EBOOT_TITLE = CPS2PSP 1.0
endif
PSP_EBOOT_ICON = data/icon0.png


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

OBJ = obj


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

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


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

ifdef ADHOC
CFLAGS = -O2 -G0 -Wundef -Wunused
else
CFLAGS = -O3 -Wundef -Wunused
endif

#------------------------------------------------------------------------------
# Compiler Defines
#------------------------------------------------------------------------------

CDEFS = -DINLINE='static __inline' \
	-Dinline=__inline \
	-D__inline__=__inline \
	-DPSP


ifdef ADHOC
CDEFS += -DKERNEL_MODE=1 -DADHOC=1
else
  ifdef KERNEL_MODE
  CDEFS += -DKERNEL_MODE=1
  endif
  ifdef SAVE_STATE
  CDEFS += -DSAVE_STATE=1
  endif
endif

ifdef RELEASE
CDEFS += -DRELEASE=1
endif


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

LIBDIR = src/adhoc
LDFLAGS =


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

USE_PSPSDK_LIBC=1

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

ifdef ADHOC
LIBS += -lpspwlan \
	-lpspnet_adhoc \
	-lpspnet_adhocctl \
	-lpspnet_adhocmatching \
	-lz
endif


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

OBJDIRS = \
	$(OBJ) \
	$(OBJ)/cps2 \
	$(OBJ)/cpu \
	$(OBJ)/cpu/m68000 \
	$(OBJ)/cpu/z80 \
	$(OBJ)/sound \
	$(OBJ)/zip \
	$(OBJ)/zlib \
	$(OBJ)/psp \
	$(OBJ)/psp/font

MAINOBJS = \
	$(OBJ)/emumain.o \
	$(OBJ)/cps2/cps2.o \
	$(OBJ)/cps2/cache.o \
	$(OBJ)/cps2/driver.o \
	$(OBJ)/cps2/memintrf.o \
	$(OBJ)/cps2/inptport.o \
	$(OBJ)/cps2/timer.o \
	$(OBJ)/cps2/vidhrdw.o \
	$(OBJ)/cps2/sndintrf.o \
	$(OBJ)/cps2/sprite.o \
	$(OBJ)/cps2/eeprom.o \
	$(OBJ)/cps2/state.o \
	$(OBJ)/cpu/m68000/m68000.o \
	$(OBJ)/cpu/m68000/c68k.o \
	$(OBJ)/cpu/m68000/c68kexec.o \
	$(OBJ)/cpu/z80/z80.o \
	$(OBJ)/cpu/z80/cz80.o \
	$(OBJ)/sound/qsound.o \
	$(OBJ)/zip/zfile.o \
	$(OBJ)/zip/unzip.o

FONTOBJS = \
	$(OBJ)/psp/font/jpnfont.o \
	$(OBJ)/psp/font/icon_s.o \
	$(OBJ)/psp/font/icon_l.o \
	$(OBJ)/psp/font/graphic.o \
	$(OBJ)/psp/font/ascii_14p.o \
	$(OBJ)/psp/font/font_s.o \
	$(OBJ)/psp/font/bshadow.o

ifdef ADHOC
ADHOCOBJS = \
	$(OBJ)/psp/adhoc.o
endif

EXTOBJS = \
	$(OBJ)/psp/bmp.o \
	$(OBJ)/psp/psp.o \
	$(OBJ)/psp/blend.o \
	$(OBJ)/psp/config.o \
	$(OBJ)/psp/filer.o \
	$(OBJ)/psp/help.o \
	$(OBJ)/psp/input.o \
	$(OBJ)/psp/menu.o \
	$(OBJ)/psp/mesbox.o \
	$(OBJ)/psp/misc.o \
	$(OBJ)/psp/sound.o \
	$(OBJ)/psp/ticker.o \
	$(OBJ)/psp/usrintrf.o \
	$(OBJ)/psp/video.o \
	$(FONTOBJS)

ZLIB = $(OBJ)/zlib.a

ifdef ADHOC
OBJS= $(MAINOBJS) $(EXTOBJS) $(ADHOCOBJS)
else
OBJS= $(MAINOBJS) $(EXTOBJS) $(ZLIB) $(ADHOCOBJS)
endif

#------------------------------------------------------------------------------
# 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

Z80_SRC = \
	src/cpu/z80/cz80.c \
	src/cpu/z80/cz80_op.c \
	src/cpu/z80/cz80_opCB.c \
	src/cpu/z80/cz80_opED.c \
	src/cpu/z80/cz80_opXY.c  \
	src/cpu/z80/cz80_opXYCB.c


#---------------------------------------------------------------------
# Rules to manage files (CZ80)
#---------------------------------------------------------------------

$(OBJ)/cpu/z80/cz80.o: $(Z80_SRC)
	@echo Compiling $<...
	@$(CC) $(CDEFS) $(CFLAGS) -c $< -o$@

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

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

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

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

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

maketree:
	@echo Making object tree...

mkdir:	maketree $(sort $(OBJDIRS))
