TARGET		    := retroarch_vita
DEBUG               ?= 0
HAVE_FILE_LOGGER	= 1
GRIFFIN_BUILD        = 0
WHOLE_ARCHIVE_LINK   = 0
HAVE_STATIC_DUMMY ?= 0

VITA_TITLE_ID	:= RETROARCH
VITA_TITLE_NAME	:= RetroArch

PC_DEVELOPMENT_IP_ADDRESS  =
PC_DEVELOPMENT_UDP_PORT	   =

OBJ :=

SCE_LIBC_SIZE := 4194304
DEFINES := -DHAVE_ONLINE_UPDATER -DHAVE_UPDATE_ASSETS -DHAVE_STB_VORBIS
INCDIRS :=

ifeq ($(GRIFFIN_BUILD), 1)
	OBJ += griffin/griffin.o
	DEFINES += -DHAVE_GRIFFIN=1 \
		   -DHAVE_REWIND \
		   -DHAVE_NEON \
		   -DHAVE_MENU \
		   -DHAVE_CONFIGFILE \
		   -DHAVE_PATCH \
		   -DHAVE_CHEATS \
		   -DHAVE_XMB \
		   -DHAVE_MATERIALUI \
		   -DHAVE_LIBRETRODB \
		   -DHAVE_KEYMAPPER \
		   -DHAVE_ZLIB \
		   -DHAVE_RPNG \
		   -DHAVE_RJPEG \
		   -DHAVE_RBMP \
		   -DHAVE_RTGA \
		   -DHAVE_CC_RESAMPLER \
		   -DHAVE_CORE_INFO_CACHE
	ifeq ($(DEBUG), 1)
		DEFINES += -DHAVE_NETLOGGER
	endif
	INCDIRS += -I. \
		   -Ideps/7zip \
		   -Ilibretro-common/include \
		   -Ilibretro-common/include/compat/zlib \
		   -Ideps/stb
else
	HAVE_REWIND		:= 1
	HAVE_UPDATE_ASSETS      := 1
	HAVE_ONLINE_UPDATER     := 1
	HAVE_NEON		:= 1
	HAVE_DSP_FILTER		:= 1
	HAVE_VIDEO_FILTER	:= 1
	HAVE_SCREENSHOTS	:= 1
	HAVE_FILTERS_BUILTIN	:= 1
	HAVE_LANGEXTRA		:= 1
	HAVE_RPNG		:= 1
	HAVE_RJPEG		:= 1
	HAVE_RBMP		:= 1
	HAVE_RTGA		:= 1
	HAVE_ZLIB		:= 1
	HAVE_7ZIP		:= 1
   ifeq ($(HAVE_VITAGLES), 1)
	HAVE_VITA2D		:= 0
	HAVE_VITAGL		:= 0
	HAVE_VITAGLES 		:= 1
	HAVE_OPENGL 		:= 1
	HAVE_OPENGLES 		:= 1
	HAVE_OPENGLES2 		:= 1
	HAVE_EGL 		:= 1
	HAVE_GLSL 		:= 1
	HAVE_SHADERPIPELINE 	:= 1
   else
	HAVE_VITA2D		:= 1
	HAVE_VITAGL		:= 0
   endif
	HAVE_NETWORKING		:= 1
	HAVE_IFINFO		:= 1
	HAVE_NETPLAYDISCOVERY	:= 1
	HAVE_SOCKET_LEGACY	:= 1
	HAVE_MENU		:= 1
	HAVE_MENU_COMMON	:= 1
	HAVE_GFX_WIDGETS 	:= 1
	HAVE_CONFIGFILE 	:= 1
	HAVE_PATCH      	:= 1
	HAVE_CHEATS     	:= 1
	HAVE_OVERLAY		:= 1
	HAVE_MATERIALUI		:= 1
	HAVE_XMB		:= 1
	HAVE_RGUI		:= 1
	HAVE_STB_FONT		:= 1
	HAVE_THREADS		:= 1
	HAVE_LIBRETRODB		:= 1
	HAVE_CC_RESAMPLER	:= 1
	HAVE_CHEEVOS		:= 1
	HAVE_RUNAHEAD		:= 1
	RARCH_CONSOLE		:= 1
	HAVE_STATIC_VIDEO_FILTERS = 1
	HAVE_STATIC_AUDIO_FILTERS = 1
	HAVE_AUDIOMIXER 	:= 1
	HAVE_RWAV       	:= 1
	HAVE_CORE_INFO_CACHE    := 1

	ifeq ($(DEBUG), 1)
		HAVE_NETLOGGER	= 1
	endif

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

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

export PATH := $(PATH):$(VITASDK)/bin

PREFIX := arm-vita-eabi-

CC      := $(PREFIX)gcc
CXX     := $(PREFIX)g++
AS      := $(PREFIX)as
AR      := $(PREFIX)ar
OBJCOPY := $(PREFIX)objcopy
STRIP   := $(PREFIX)strip
NM      := $(PREFIX)nm
LD      := $(CXX)

LIBDIRS := -L.

ARCHFLAGS := -march=armv7-a -mfpu=neon -mfloat-abi=hard -DVITA
ifeq ($(HAVE_VITAGLES), 1)
   ARCHFLAGS += -DSCE_LIBC_SIZE=$(SCE_LIBC_SIZE)
endif

CFLAGS    += $(ARCHFLAGS) -mword-relocations -fno-optimize-sibling-calls

ifeq ($(DEBUG), 1)
   CFLAGS += -g -Og
else
   CFLAGS += -O2
endif

ASFLAGS := $(CFLAGS)
LDFLAGS := -Wl,-q

CFLAGS += -Wall -ffast-math
CFLAGS += -DRARCH_INTERNAL -DHAVE_SCREENSHOTS -DRARCH_CONSOLE
CFLAGS += -DHAVE_DSP_FILTER
CFLAGS += -DHAVE_VIDEO_FILTER
CFLAGS += -DHAVE_FILTERS_BUILTIN $(DEFINES)

ifneq ($(PC_DEVELOPMENT_IP_ADDRESS),)
   CFLAGS += -DPC_DEVELOPMENT_IP_ADDRESS='"$(PC_DEVELOPMENT_IP_ADDRESS)"'
endif

ifneq ($(PC_DEVELOPMENT_UDP_PORT),)
   CFLAGS += -DPC_DEVELOPMENT_UDP_PORT=$(PC_DEVELOPMENT_UDP_PORT)
endif

ifeq ($(WHOLE_ARCHIVE_LINK), 1)
   WHOLE_START := -Wl,--whole-archive
   WHOLE_END := -Wl,--no-whole-archive
endif
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions

VITA_LIBS := -lSceDisplay_stub -lSceGxm_stub -lSceNet_stub -lSceNetCtl_stub -lSceAppUtil_stub \
	-lSceSysmodule_stub -lSceCtrl_stub -lSceHid_stub -lSceTouch_stub -lSceAudio_stub \
	-lScePower_stub -lSceRtc_stub -lSceCommonDialog_stub -lScePgf_stub -lSceMotion_stub \
	-lSceFiber_stub -lSceMotion_stub -lSceAppMgr_stub -lpthread -lpng -lz -lSceShaccCg_stub

ifeq ($(HAVE_VITAGLES), 1)
   VITA_LIBS += -llibScePiglet_stub -ltaihen_stub
   FSELF_FLAGS := -ss
else
   VITA_LIBS += -lvitaGL -lvitashark
   FSELF_FLAGS := -s
endif

LIBS	:= $(WHOLE_START) 

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

LIBS    += $(WHOLE_END) $(VITA_LIBS) -lm -lc

TARGETS := $(TARGET).vpk

DEPFLAGS    = -MT $@ -MMD -MP -MF $*.Tdepend
POSTCOMPILE = mv -f $*.Tdepend $*.depend

all: $(TARGETS)

%.o: %.cpp
%.o: %.cpp %.depend
	$(CXX) -c -o $@ $< $(CXXFLAGS) $(INCDIRS) $(DEPFLAGS)
	$(POSTCOMPILE)

%.o: %.c
%.o: %.c %.depend
	$(CC) -c -o $@ $< $(CFLAGS) $(INCDIRS) $(DEPFLAGS)
	$(POSTCOMPILE)

%.o: %.S
%.o: %.S %.depend
	$(CC) -c -o $@ $< $(ASFLAGS) $(INCDIRS) $(DEPFLAGS)
	$(POSTCOMPILE)

%.o: %.s
%.o: %.s %.depend
	$(CC) -c -o $@ $< $(ASFLAGS) $(INCDIRS) $(DEPFLAGS)
	$(POSTCOMPILE)

%.depend: ;

liblibScePiglet_stub.a:
	mkdir -p deps/Pigs-In-A-Blanket/piglet_stub/libScePiglet
	vita-libs-gen deps/Pigs-In-A-Blanket/piglet_stub/nids.yml deps/Pigs-In-A-Blanket/piglet_stub/libScePiglet
	make -C deps/Pigs-In-A-Blanket/piglet_stub/libScePiglet ARCH=arm-vita-eabi
	cp deps/Pigs-In-A-Blanket/piglet_stub/libScePiglet/liblibScePiglet_stub.a .

$(TARGET).elf: $(OBJ) liblibScePiglet_stub.a
	$(LD) $(OBJ) $(LDFLAGS) $(LIBDIRS) $(LIBS) -o $@

%.velf: %.elf
	cp $< $<.unstripped.elf
	$(PREFIX)strip -g $<
	vita-elf-create $< $@

%.self: %.velf
	vita-make-fself -c $(FSELF_FLAGS) $< $@

%.vpk: %.self
	vita-mksfoex -s TITLE_ID=$(VITA_TITLE_ID) "$(VITA_TITLE_NAME)" -d ATTRIBUTE2=12 param.sfo
	vita-pack-vpk -s param.sfo -b $< $@

clean:
	rm -f $(OBJ) $(TARGET).elf $(TARGET).elf.unstripped.elf $(TARGET).velf $(TARGET).self param.sfo $(TARGET).vpk 
	rm -rf  deps/Pigs-In-A-Blanket/piglet_stub/libScePiglet
	rm -f $(OBJ:.o=.depend)

# Useful for developers
vpksend: $(TARGET).vpk
	curl -T $< ftp://$(PSVITAIP):1337/ux0:/

send: $(TARGET).self
	curl -T $< ftp://$(PSVITAIP):1337/ux0:/app/$(VITA_TITLE_ID)/eboot.bin

launch: $(TARGET).self
	curl -T $< ftp://$(PSVITAIP):1337/ux0:/app/$(VITA_TITLE_ID)/eboot.bin
	echo "launch $(VITA_TITLE_ID)" | nc ${PSVITAIP} 1338

.PHONY: clean all send vpksend
.PRECIOUS: %.depend

-include $(OBJ:.o=.depend)