# These are the definitions for each of the music formats allowed/supported
# to allow easy inclusion/exclusion of players from a certain build

# Set these values to enable/disable a certain gui setup
# NOTE: ONLY ENABLE ONE OF THESE!!!!
GUI_DEBUG_ENABLE = 0
GUI_DEFAULTNICE_ENABLE = 0
GUI_VIDTEST_ENABLE = 0
GUI_ASLIB_ENABLE = 0
GUI_GRAPHICAL_ENABLE = 1

# Set these values to enable/disable a certain codec
# NOTE: Enable as many of these as you want :)
MOD_ENABLE = 0
XM_ENABLE  = 0
AHX_ENABLE = 0
YMPLAY_ENABLE = 0
MIKMOD_ENABLE = 0
MP3_ENABLE = 1
OGG_ENABLE = 1
AAC_ENABLE = 0
XVID_ENABLE = 0

# Base - DO NOT ALTER!!!!
PLAYER_LIBS = 
PSP_CODEC_INIT = 
PSP_CODEC_INCLUDE = 

# These are for the include defines for codecs - DO NOT ALTER!!!!
CODEC_PRE  = ??=include \"
CODEC_POST =  \" '\n'

# Enable trigraphs, as we use them - DO NOT ALTER!!!!
PSP_CFLAGS := --trigraphs $(PSP_CFLAGS)


#
# From here are the gui setups
#
PSP_GUI_BASE = $(PSPMC_BASE)gui/

# Compile as a lib, for use by another program
ifeq ($(GUI_GRAPHICAL_ENABLE),1)
PSP_GUI_DIR = $(PSP_GUI_BASE)graphical/
PSP_CODEC_INC := $(PSP_GUI_DIR)gui.h
PSP_CODEC_INCLUDE := $(PSP_CODEC_INCLUDE)$(CODEC_PRE)$(PSP_CODEC_INC)$(CODEC_POST)
PSP_OBJS := $(PSP_OBJS) $(PSP_GUI_DIR)gui.o 
PSP_LIB_LDFLAGS := $(PSP_LIB_LDFLAGS) $(PSPSDK)/lib/libgu.a $(PSPSDK)/lib/libgum.a 
endif

# Compile as a lib, for use by another program
ifeq ($(GUI_ASLIB_ENABLE),1)
PSP_GUI_DIR = $(PSP_GUI_BASE)aslib/
PSP_OBJS := $(PSP_OBJS) libpspmc.o 
PSP_LIB_LDFLAGS := $(PSP_LIB_LDFLAGS) $(PSPSDK)/lib/libpspaudio.a $(PSPSDK)/lib/libpspaudiolib.a
endif

# DEBUG print based gui
ifeq ($(GUI_DEBUG_ENABLE),1)
PSP_GUI_DIR = $(PSP_GUI_BASE)debug/
PSP_CODEC_INC := $(PSP_GUI_DIR)gui.h
PSP_CODEC_INCLUDE := $(PSP_CODEC_INCLUDE)$(CODEC_PRE)$(PSP_CODEC_INC)$(CODEC_POST)
PSP_OBJS := $(PSP_OBJS) $(PSP_GUI_DIR)gui.o 
endif

# VIDTEST gui, for debugging video codecs
ifeq ($(GUI_VIDTEST_ENABLE),1)
PSP_GUI_DIR = $(PSP_GUI_BASE)vidtest/
PSP_CODEC_INC := $(PSP_GUI_DIR)gui.h
PSP_CODEC_INCLUDE := $(PSP_CODEC_INCLUDE)$(CODEC_PRE)$(PSP_CODEC_INC)$(CODEC_POST)
PSP_OBJS := $(PSP_OBJS) $(PSP_GUI_DIR)gui.o 
endif

# XBMC inspired gui
ifeq ($(GUI_DEFAULTNICE_ENABLE),1)
PSP_GUI_DIR = $(PSP_GUI_BASE)defaultnice/
PSP_CODEC_INC := $(PSP_GUI_DIR)gui.h
PSP_CODEC_INCLUDE := $(PSP_CODEC_INCLUDE)$(CODEC_PRE)$(PSP_CODEC_INC)$(CODEC_POST)
PSP_OBJS := $(PSP_OBJS) $(PSP_GUI_DIR)gui.o 
endif

#
# From here are any checks we need to do before codec handling
#

# If MIKMOD is enabled, then check if the MOD and XM players are enabled as they use the same extensions 
# This will stop compilation in that case
ifeq ($(MIKMOD_ENABLE),1)
ifeq ($(MOD_ENABLE),1)
$(error ERROR - mikmod and mod player both enabled)
endif
ifeq ($(XM_ENABLE),1)
$(error ERROR - mikmod and xm player both enabled)
endif
endif

#
# From here are the codec setups
#
PSP_CODECS_DIR := $(PSPMC_BASE)codec/

# MOD
ifeq ($(MOD_ENABLE),1)
PSP_MOD_DIR = $(PSP_CODECS_DIR)mod/
PSP_CODEC_INC := $(PSP_MOD_DIR)modplayer.h
PSP_CODEC_INIT := $(PSP_CODEC_INIT)MODsetStubs(&stubs[stubnum++]);
PSP_CODEC_INCLUDE := $(PSP_CODEC_INCLUDE)$(CODEC_PRE)$(PSP_CODEC_INC)$(CODEC_POST)
PSP_OBJS := $(PSP_OBJS) $(PSP_MOD_DIR)modplayer.o 
endif

# XM
ifeq ($(XM_ENABLE),1)
PSP_XM_DIR = $(PSP_CODECS_DIR)xm/
XM2M := $(PSP_XM_DIR)mpl/
XM2V := $(PSP_XM_DIR)vbf/
PSP_CODEC_INC := $(PSP_XM_DIR)xmplayer.h
PSP_CODEC_INIT := $(PSP_CODEC_INIT)XMPLAYsetStubs(&stubs[stubnum++]);
PSP_CODEC_INCLUDE := $(PSP_CODEC_INCLUDE)$(CODEC_PRE)$(PSP_CODEC_INC)$(CODEC_POST)
PSP_OBJS := $(PSP_OBJS) $(PSP_XM_DIR)xmplayer.o \
$(XM2M)biquad.o $(XM2M)/sys/critsect.o $(XM2M)/sys/msg_box.o $(XM2M)/sys/mem.o \
$(XM2M)dsp_std.o $(XM2M)ml.o $(XM2M)ml_xm.o $(XM2M)mp.o $(XM2M)mp_xm.o  $(XM2M)mx.o $(XM2M)mx_std.o \
$(XM2M)sd_std.o $(XM2M)snddev.o $(XM2M)string.o $(XM2V)vbf.o $(XM2V)vbf_mem.o $(XM2V)vbf_util.o $(XM2V)vbf_std.o
endif

# AHX
ifeq ($(AHX_ENABLE),1)
PSP_AHX_DIR = $(PSP_CODECS_DIR)ahx/
PSP_CODEC_INC := $(PSP_AHX_DIR)ahx.h
PSP_CODEC_INIT := $(PSP_CODEC_INIT)AHXsetStubs(&stubs[stubnum++]);
PSP_CODEC_INCLUDE := $(PSP_CODEC_INCLUDE)$(CODEC_PRE)$(PSP_CODEC_INC)$(CODEC_POST)
PSP_OBJS := $(PSP_OBJS) $(PSP_AHX_DIR)ahx.o 
endif

# MP3
ifeq ($(MP3_ENABLE),1)
PSP_MP3_DIR = $(PSP_CODECS_DIR)mp3/
PSP_MP3_BASE=$(PSPSDK)/
PSP_CODEC_INC := $(PSP_MP3_DIR)mp3player.h
PSP_CODEC_INIT := $(PSP_CODEC_INIT)MP3setStubs(&stubs[stubnum++]);
PSP_CODEC_INCLUDE := $(PSP_CODEC_INCLUDE)$(CODEC_PRE)$(PSP_CODEC_INC)$(CODEC_POST)
PSP_OBJS := $(PSP_OBJS) $(PSP_MP3_DIR)mp3player.o
PSP_CFLAGS := $(PSP_CFLAGS) -I$(PSP_MP3_BASE)include 
PSP_LDFLAGS := $(PSP_LDFLAGS) -L$(PSP_MP3_BASE)lib
PSP_LIB_LDFLAGS := $(PSP_LIB_LDFLAGS) $(PSP_MP3_BASE)lib/libmad.a
PLAYER_LIBS := $(PLAYER_LIBS) -lmad 
endif

# OGG
ifeq ($(OGG_ENABLE),1)
PSP_OGG_DIR = $(PSP_CODECS_DIR)ogg/
PSP_OGG_BASE=$(PSPSDK)/
PSP_CODEC_INC := $(PSP_OGG_DIR)oggplayer.h
PSP_CODEC_INIT := $(PSP_CODEC_INIT)OGGsetStubs(&stubs[stubnum++]);
PSP_CODEC_INCLUDE := $(PSP_CODEC_INCLUDE)$(CODEC_PRE)$(PSP_CODEC_INC)$(CODEC_POST)
PSP_OBJS := $(PSP_OBJS) $(PSP_OGG_DIR)oggplayer.o
PSP_CFLAGS := $(PSP_CFLAGS) -I$(PSP_OGG_BASE)include 
PSP_LDFLAGS := $(PSP_LDFLAGS) -L$(PSP_OGG_BASE)lib
PSP_LIB_LDFLAGS := $(PSP_LIB_LDFLAGS) $(PSP_OGG_BASE)lib/libvorbisidec.a
PLAYER_LIBS := $(PLAYER_LIBS) -lvorbisidec 
endif

# AAC
ifeq ($(AAC_ENABLE),1)
PSP_AAC_DIR = $(PSP_CODECS_DIR)aac/
PSP_AAC_BASE=$(PSPSDK)/
PSP_CODEC_INC := $(PSP_AAC_DIR)aacplayer.h
PSP_CODEC_INIT := $(PSP_CODEC_INIT)AACsetStubs(&stubs[stubnum++]);
PSP_CODEC_INCLUDE := $(PSP_CODEC_INCLUDE)$(CODEC_PRE)$(PSP_CODEC_INC)$(CODEC_POST)
PSP_OBJS := $(PSP_OBJS) $(PSP_AAC_DIR)aacplayer.o
PSP_CFLAGS := $(PSP_CFLAGS) -I$(PSP_AAC_BASE)include 
PSP_LDFLAGS := $(PSP_LDFLAGS) -L$(PSP_AAC_BASE)lib
PSP_LIB_LDFLAGS := $(PSP_LIB_LDFLAGS) $(PSP_AAC_BASE)lib/libaac.a
PLAYER_LIBS := $(PLAYER_LIBS) -laac
endif

# XVID
ifeq ($(XVID_ENABLE),1)
PSP_XVID_DIR = $(PSP_CODECS_DIR)xvid/
PSP_XVID_BASE=$(PSP_CODECS_DIR)./xvid/
PSP_CODEC_INC := $(PSP_XVID_DIR)xvid.h
//PSP_CODEC_INIT := $(PSP_CODEC_INIT)XVIDsetStubs(&stubs[stubnum++]);
PSP_CODEC_INCLUDE := $(PSP_CODEC_INCLUDE)$(CODEC_PRE)$(PSP_CODEC_INC)$(CODEC_POST)
PSP_OBJS := $(PSP_OBJS) $(PSP_XVID_DIR)/xvid.o \
					$(PSP_XVID_DIR)/decoder.o \
					$(PSP_XVID_DIR)/encoder.o \
					$(PSP_XVID_DIR)/bitstream/bitstream.o \
					$(PSP_XVID_DIR)/bitstream/cbp.o \
					$(PSP_XVID_DIR)/bitstream/mbcoding.o \
					$(PSP_XVID_DIR)/dct/fdct.o \
					$(PSP_XVID_DIR)/dct/idct.o \
					$(PSP_XVID_DIR)/dct/simple_idct.o \
					$(PSP_XVID_DIR)/image/colorspace.o \
					$(PSP_XVID_DIR)/image/font.o \
					$(PSP_XVID_DIR)/image/image.o \
					$(PSP_XVID_DIR)/image/interpolate8x8.o \
					$(PSP_XVID_DIR)/image/postprocessing.o \
					$(PSP_XVID_DIR)/image/qpel.o \
					$(PSP_XVID_DIR)/image/reduced.o \
					$(PSP_XVID_DIR)/motion/estimation_bvop.o \
					$(PSP_XVID_DIR)/motion/estimation_common.o \
					$(PSP_XVID_DIR)/motion/estimation_gmc.o \
					$(PSP_XVID_DIR)/motion/estimation_pvop.o \
					$(PSP_XVID_DIR)/motion/estimation_rd_based.o \
					$(PSP_XVID_DIR)/motion/estimation_rd_based_bvop.o \
					$(PSP_XVID_DIR)/motion/gmc.o \
					$(PSP_XVID_DIR)/motion/motion_comp.o \
					$(PSP_XVID_DIR)/motion/sad.o \
					$(PSP_XVID_DIR)/motion/vop_type_decision.o \
					$(PSP_XVID_DIR)/prediction/mbprediction.o \
					$(PSP_XVID_DIR)/quant/quant_h263.o \
					$(PSP_XVID_DIR)/quant/quant_matrix.o \
					$(PSP_XVID_DIR)/quant/quant_mpeg.o \
					$(PSP_XVID_DIR)/utils/emms.o \
					$(PSP_XVID_DIR)/utils/mbtransquant.o \
					$(PSP_XVID_DIR)/utils/mem_align.o \
					$(PSP_XVID_DIR)/utils/mem_transfer.o \
					$(PSP_XVID_DIR)/utils/timer.o

PSP_CFLAGS := $(PSP_CFLAGS) -DXVID_ENABLE  -I$(PSP_XVID_BASE)include 
PSP_LDFLAGS := $(PSP_LDFLAGS) -L/cygdrive/p/PSPWare
#$(PSP_XVID_BASE)lib
PLAYER_LIBS := $(PLAYER_LIBS) -lm -lpsppower -lpsprtc
endif


# YM Sound Player (STSound)
ifeq ($(YMPLAY_ENABLE),1)
PSP_YMPLAY_DIR = $(PSP_CODECS_DIR)ymplay/
PSP_YMPLAY_BASE=$(PSPDEV)/mysource/stsoundgpl/StSoundLibrary
PSP_CODEC_INC := $(PSP_YMPLAY_DIR)player.h
PSP_CODEC_INIT := $(PSP_CODEC_INIT)YMPLAYsetStubs(&stubs[stubnum++]);
PSP_CODEC_INCLUDE := $(PSP_CODEC_INCLUDE)$(CODEC_PRE)$(PSP_CODEC_INC)$(CODEC_POST)
PSP_OBJS := $(PSP_OBJS) $(PSP_YMPLAY_DIR)player.o 
PSP_CFLAGS := $(PSP_CFLAGS) -I$(PSP_YMPLAY_BASE)
PSP_LDFLAGS := $(PSP_LDFLAGS) -L$(PSP_YMPLAY_BASE)
PSP_LIB_LDFLAGS := $(PSP_LIB_LDFLAGS) $(PSP_YMPLAY_BASE)/libstsound.a 
PLAYER_LIBS := $(PLAYER_LIBS) -lstsound -lstdc++
endif

# MIKMOD PLAYER
ifeq ($(MIKMOD_ENABLE),1)
PSP_MIKMOD_DIR = $(PSP_CODECS_DIR)mikmod/
PSP_MIKMOD_BASE=$(PSPDEV)/mysource/mikmod-3.0.3/
PSP_CODEC_INC := $(PSP_MIKMOD_DIR)player.h
PSP_CODEC_INIT := $(PSP_CODEC_INIT)MIKMODsetStubs(&stubs[stubnum++]);
PSP_CODEC_INCLUDE := $(PSP_CODEC_INCLUDE)$(CODEC_PRE)$(PSP_CODEC_INC)$(CODEC_POST)
PSP_OBJS := $(PSP_OBJS) $(PSP_MIKMOD_DIR)player.o 
PSP_CFLAGS := $(PSP_CFLAGS) -I$(PSP_MIKMOD_BASE)include 
PSP_LDFLAGS := $(PSP_LDFLAGS) -L$(PSP_MIKMOD_BASE)lib
PSP_LIB_LDFLAGS := $(PSP_LIB_LDFLAGS) $(PSP_MIKMOD_BASE)lib/libmmio.a
PLAYER_LIBS := $(PLAYER_LIBS) -lmikmod -lmmio
endif

# Addon the INIT flag
PSP_CFLAGS := $(PSP_CFLAGS) -DCODEC_INITSTUBS="$(PSP_CODEC_INIT)" 

#
# USB Setup
#
ifeq ($(USB_ENABLE),1)
PSP_CFLAGS := $(PSP_CFLAGS) -DUSB_ENABLED
PLAYER_LIBS := $(PLAYER_LIBS) -lpspusb -lpspusbstor
endif