.SUFFIXES:
ifeq ($(strip $(PSL1GHT)),)
$(error "PSL1GHT must be set in the environment.")
endif

include $(PSL1GHT)/Makefile.base

TARGET		:=	$(notdir $(CURDIR))
BUILD		:=	build
SOURCE		:=	source \
			source/images \
			source/sounds
INCLUDE		:=	include
DATA		:=	data
#AUDIOLIBS	:=  -lspu_sound -laudioplayer -lmpg123 -lvorbisfile -lvorbis -logg -laudio
AUDIOLIBS	:=  -laudioplayer -lmpg123 -lvorbisfile -lvorbis -logg -laudio
LIBS		:=	-ltiny3d -lgcm_sys -lreality -lsysutil -lio -lpngdec -lsysmodule -lm -lfreetype -lz $(AUDIOLIBS)

TITLE		:=	Connect4
APPID		:=	CONNECT4Z
CONTENTID	:=	UP0001-$(APPID)_00-0000000000000000

CFLAGS		+= -g -O2 -Wall --std=gnu99
CXXFLAGS	+= -g -O2 -Wall


ifneq ($(BUILD),$(notdir $(CURDIR)))

export OUTPUT	:=	$(CURDIR)/$(TARGET)
export VPATH	:=	$(foreach dir,$(SOURCE),$(CURDIR)/$(dir)) \
					$(foreach dir,$(DATA),$(CURDIR)/$(dir))
export BUILDDIR	:=	$(CURDIR)/$(BUILD)
export DEPSDIR	:=	$(BUILDDIR)

CFILES		:= $(foreach dir,$(SOURCE),$(notdir $(wildcard $(dir)/*.c)))
CXXFILES	:= $(foreach dir,$(SOURCE),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES		:= $(foreach dir,$(SOURCE),$(notdir $(wildcard $(dir)/*.S)))
BINFILES	:= $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.bin)))
VCGFILES	:= $(foreach dir,$(SOURCE),$(notdir $(wildcard $(dir)/*.vcg)))
TTFFILES	:= $(foreach dir,$(SOURCE),$(notdir $(wildcard $(dir)/*.ttf)))
PNGFILES	:=	$(foreach dir,$(SOURCE),$(notdir $(wildcard $(dir)/*.png)))
PCMFILES	:=	$(foreach dir,$(SOURCE),$(notdir $(wildcard $(dir)/*.pcm)))
OGGFILES	:=	$(foreach dir,$(SOURCE),$(notdir $(wildcard $(dir)/*.ogg)))
MP3FILES	:=	$(foreach dir,$(SOURCE),$(notdir $(wildcard $(dir)/*.mp3)))
WAVFILES	:=	$(foreach dir,$(SOURCE),$(notdir $(wildcard $(dir)/*.wav)))

export OFILES	:=	$(CFILES:.c=.o) \
					$(CXXFILES:.cpp=.o) \
					$(SFILES:.S=.o) $(TTFFILES:.ttf=.ttf.o) \
					$(BINFILES:.bin=.bin.o) $(PCMFILES:.pcm=.pcm.o) \
					$(PNGFILES:.png=.png.o) $(OGGFILES:.ogg=.ogg.o) \
					$(VCGFILES:.vcg=.vcg.o) $(MP3FILES:.mp3=.mp3.o) \
					$(WAVFILES:.wav=.wav.o)

export BINFILES	:=	$(BINFILES:.bin=.bin.h)
export VCGFILES	:=	$(VCGFILES:.vcg=.vcg.h)

export INCLUDES	:=	$(foreach dir,$(INCLUDE),-I$(CURDIR)/$(dir)) \
					-I$(CURDIR)/$(BUILD)

#psl1ght is using "gcc" as "as". but im stubborn and i want to use "as", so this is "my as"
export MYAS := $(PREFIX)as

ifeq ($(strip $(CXXFILES)),)
	export LD	=	$(CC)
else
	export LD	=	$(CXX)
endif

.PHONY: $(BUILD) clean

$(BUILD):
	@[ -d $@ ] || mkdir -p $@
	@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile

clean:
	@echo Clean...
	@rm -rf $(BUILD) $(OUTPUT).elf $(OUTPUT).self $(OUTPUT).a $(OUTPUT).pkg

pkg: $(BUILD)
	@echo Creating PKG...
	@mkdir -p $(BUILD)/pkg
	@mkdir -p $(BUILD)/pkg/USRDIR
	@cp $(ICON0) $(BUILD)/pkg/
	@$(FSELF) -n $(BUILD)/$(TARGET).elf $(BUILD)/pkg/USRDIR/EBOOT.BIN
	@$(SFO) --title "$(TITLE)" --appid "$(APPID)" -f $(SFOXML) $(BUILD)/pkg/PARAM.SFO
	@$(PKG) --contentid $(CONTENTID) $(BUILD)/pkg/ $(OUTPUT).pkg

run: $(BUILD)
	@$(PS3LOADAPP) $(OUTPUT).self

else

DEPENDS	:= $(OFILES:.o=.d)

$(OUTPUT).self: $(OUTPUT).elf
$(OUTPUT).elf: $(OFILES)
$(OFILES): $(BINFILES) $(VCGFILES)

-include $(DEPENDS)

#some other file types used for resources

%.ttf.o : %.ttf
	@echo [BIN2S] $(notdir $<)
	@bin2s -a 32 $< | $(MYAS) -o $(@)

%.png.o : %.png
	@echo [BIN2S] $(notdir $<)
	@bin2s -a 32 $< | $(MYAS) -o $(@)

%.pcm.o : %.pcm
	@echo [BIN2S] $(notdir $<)
	@bin2s -a 32 $< | $(MYAS) -o $(@)

%.ogg.o : %.ogg
	@echo [BIN2S] $(notdir $<)
	@bin2s -a 32 $< | $(MYAS) -o $(@)

%.mp3.o : %.mp3
	@echo [BIN2S] $(notdir $<)
	@bin2s -a 32 $< | $(MYAS) -o $(@)

%.wav.o : %.wav
	@echo [BIN2S] $(notdir $<)
	@bin2s -a 32 $< | $(MYAS) -o $(@)
endif
