TARGET := retroarch_ps2
TARGET_RELEASE = retroarchps2.elf

BUILD_FOR_PCSX2    = 0
DEBUG              = 0
SCREEN_DEBUG       = 0
GRIFFIN_BUILD      = 0
HAVE_THREADS       = 0
MUTE_WARNINGS      = 1
WHOLE_ARCHIVE_LINK = 0
HAVE_STATIC_DUMMY ?= 0
PS2_IP = 192.168.1.10

ifeq ($(DEBUG), 1)
   OPTIMIZE_LV	:= -O0 -g
	DEFINES += -DDEBUG
else
   OPTIMIZE_LV	:= -O3
	# LDFLAGS :=  -s
endif

ifeq ($(MUTE_WARNINGS), 1)
   DISABLE_WARNINGS := -Wno-unused -Wno-format -Wno-format-truncation
endif

ifeq ($(HAVE_STATIC_DUMMY),1)
  DEFINES += -DHAVE_STATIC_DUMMY
else
  LIBS += -lretro_ps2
endif

ifeq ($(SCREEN_DEBUG), 1)
LIBS += -ldebug
DEFINES += -DSCREEN_DEBUG
endif

ifeq ($(BUILD_FOR_PCSX2), 1)
DEFINES += -DBUILD_FOR_PCSX2
endif

DEFINES += -DRARCH_INTERNAL -DRARCH_CONSOLE

ifeq ($(GRIFFIN_BUILD), 1)
	OBJ += griffin/griffin.o
	DEFINES += -DHAVE_GRIFFIN=1 -DHAVE_SCREENSHOTS -DHAVE_REWIND -DHAVE_MENU -DHAVE_CONFIGFILE -DHAVE_PATCH -DHAVE_CHEATS
	DEFINES += -DHAVE_ZLIB -DHAVE_NO_BUILTINZLIB -DHAVE_RPNG -DHAVE_RJPEG -DHAVE_FILTERS_BUILTIN -DHAVE_7ZIP -D_7ZIP_ST -DHAVE_CC_RESAMPLER -DHAVE_AUDIOMIXER
	DEFINES += -DHAVE_VIDEO_FILTER -DHAVE_RGUI -DHAVE_WINDOW_OFFSET
	DEFINES += -DHAVE_DSP_FILTER
else
	HAVE_CC_RESAMPLER = 1
	HAVE_MENU_COMMON = 1
	HAVE_RPNG = 1
	HAVE_RJPEG = 1
	HAVE_RBMP = 1
	HAVE_MENU = 1
	HAVE_CONFIGFILE = 1
	HAVE_PATCH = 1
	HAVE_CHEATS = 1
	HAVE_RGUI = 1
	HAVE_MATERIALUI = 0
	HAVE_XMB = 0
	HAVE_OZONE = 0
	HAVE_ZLIB = 1
	HAVE_NO_BUILTINZLIB = 1
	HAVE_7ZIP = 1
	HAVE_SCREENSHOTS = 1
	HAVE_REWIND = 1
	HAVE_AUDIOMIXER = 1
	HAVE_RWAV = 1
	HAVE_DSP_FILTER = 1
	HAVE_VIDEO_FILTER = 1
	HAVE_FILTERS_BUILTIN = 1
	HAVE_WINDOW_OFFSET = 1

	include Makefile.common
	CFLAGS += $(DEF_FLAGS)
	BLACKLIST :=
	OBJ := $(filter-out $(BLACKLIST),$(OBJ))
	INCDIRS += $(INCLUDE_DIRS)
endif

ifeq ($(strip $(PS2SDK)),)
$(error "Please set PS2SDK in your environment. export PS2SDK=<path to>ps2sdk")
endif

INCDIR = -I$(PS2DEV)/gsKit/include -I$(PS2SDK)/ports/include
INCDIR += -Ips2/include -Ilibretro-common/include -Ideps -Ideps/stb -Ideps/7zip

LDFLAGS += -L$(PS2DEV)/gsKit/lib -L$(PS2SDK)/ports/lib -L.
# Lib cdvd is needed to get proper time
LIBS += -lpatches -lgskit -ldmakit -laudsrv -lmtap -lpadx -lz -lcdvd -lelf-loader -lfileXio -lpoweroff


CFLAGS = $(OPTIMIZE_LV) $(DISABLE_WARNINGS) $(DEFINES) -DPS2 -ffast-math -fsingle-precision-constant
ASFLAGS = $(CFLAGS)

# IRX libs
IRX_FILES += sio2man.irx iomanX.irx fileXio.irx
IRX_FILES += mcman.irx mcserv.irx
IRX_FILES += usbd.irx bdm.irx bdmfs_vfat.irx usbmass_bd.irx
IRX_FILES += libsd.irx audsrv.irx
IRX_FILES += cdfs.irx
IRX_FILES += ps2dev9.irx ps2atad.irx ps2hdd.irx ps2fs.irx poweroff.irx
IRX_FILES += mtapman.irx padman.irx
EE_OBJS += $(IRX_FILES:.irx=_irx.o)

# Missing objecst on the PS2SDK
EE_OBJS += ps2/compat_files/ps2_devices.o

EE_OBJS += $(OBJ)

EE_CFLAGS = $(CFLAGS)
EE_CXXFLAGS = $(CFLAGS)
EE_LDFLAGS = $(LDFLAGS)
EE_LIBS = $(LIBS)
EE_ASFLAGS = $(ASFLAGS)
EE_INCS = $(INCDIR)
EE_BIN = $(TARGET).elf
EE_GPVAL = $(GPVAL)


all: $(EE_BIN)

clean:
	rm -f $(EE_BIN) $(EE_OBJS)

prepare:
	ps2client -h $(PS2_IP) reset
	ps2client -h $(PS2_IP) netdump

run:
	ps2client -h $(PS2_IP) execee host:$(EE_BIN)

sim:
	PCSX2 --elf=$(PWD)/$(EE_BIN) --nogui

debug: clean all run

release: all
	ps2-packer $(EE_BIN) $(TARGET_RELEASE)

# IRX files
%_irx.c:
	$(PS2SDK)/bin/bin2c $(PS2SDK)/iop/irx/$*.irx $@ $*_irx

#Include preferences
include $(PS2SDK)/samples/Makefile.pref
include $(PS2SDK)/samples/Makefile.eeglobal_cpp