#---------------------------------------------------------------------------------
# SNES9xCG - Snes9x 2002 port for Casio fx-CG50 / Graph 90+E
# Based on the NESizm project Makefile (MIT, tswilliamson)
#---------------------------------------------------------------------------------
.SUFFIXES:

ifeq ($(strip $(FXCGSDK)),)
export FXCGSDK := $(realpath ../../)
endif

include $(FXCGSDK)/toolchain/prizm_rules

TARGET		:=	snes9xcg
ifeq ($(strip $(CONFIG)),)
CONFIG := Release
endif
BUILD		:=	$(CONFIG)
SOURCES		:=	src/prizm src/snes9x
DATA		:=	data
INCLUDES	:=  src src/snes9x src/prizm

#---------------------------------------------------------------------------------
# options for code and add-in generation
#---------------------------------------------------------------------------------

MKG3AFLAGS := -n basic:SNES9xCG -i uns:../unselected.bmp -i sel:../selected.bmp

OPTIMIZATION = -O2 -funroll-loops

DEFINES += -DPRIZM=1 -DTARGET_PRIZM=1 -DMSB_FIRST -DRIGHTSHIFT_IS_SAR -D__OLD_RASTER_FX__ -DUSE_SA1 -DHAVE_STDINT_H

ifeq ($(strip $(FORCEINC)),)
export FORCEINC := -include $(CURDIR)/src/prizm/prizm_malloc.h
endif

CBASEFLAGS	= $(OPTIMIZATION) \
		  -Wall \
		  -fno-trapping-math \
		  -fno-trapv \
		  -fno-unwind-tables \
		  -Wno-switch \
		  -Wno-unused-variable \
		  -Wno-unused-but-set-variable \
		  -Wno-unused-function \
		  -Wno-sign-compare \
		  -Wno-maybe-uninitialized \
		  -fomit-frame-pointer \
		  -fsigned-char \
		  -mpretend-cmove \
		  -fdelayed-branch \
		  $(FORCEINC) \
		  $(MACHDEP) $(INCLUDE) $(DEFINES)

CFLAGS	=	$(CBASEFLAGS) \
		  -std=gnu99

CXXFLAGS	=  $(CBASEFLAGS) \
		  -fpermissive \
		  -fno-rtti \
		  -fno-exceptions \
		  -fno-threadsafe-statics \
		  -std=c++11

ASFLAGS	=	$(CFLAGS)

LDFLAGS	=  -Xlinker -Map=$(CURDIR)/output.map $(MACHDEP) $(OPTIMIZATION) -T$(FXCGSDK)/toolchain/prizm.x -Wl,-static -g

#---------------------------------------------------------------------------------
# libraries: only libc + libfxcg from the SDK
#---------------------------------------------------------------------------------
SYSTEMLIBS :=  -lc -lfxcg -lgcc
LIBS	:=	$(SYSTEMLIBS)

LIBDIRS	:=

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

export OUTPUT		:=	$(CURDIR)/$(BUILD)/$(TARGET)

export VPATH	:=	$(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
					$(foreach dir,$(DATA),$(CURDIR)/$(dir))

export DEPSDIR	:=	$(CURDIR)/$(BUILD)

CFILES		:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
CPPFILES	:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES		:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S)))
BINFILES	:=	$(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))

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

export OFILES	:=	$(addsuffix .o,$(BINFILES)) \
					$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \
					$(SFILES:.S=.o)

export INCLUDE	:=	$(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \
					$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
					-I$(CURDIR)/src/libretro-common/include \
					-I$(CURDIR)/$(BUILD) -I$(LIBFXCG_INC) -I$(UTILS_INC)

export LIBPATHS	:=	$(foreach dir,$(LIBDIRS),-L$(dir)/lib) \
					-L$(FXCGSDK)/utils/lib \
					-L$(LIBFXCG_LIB)

export OUTPUT		:=	$(CURDIR)/$(BUILD)/$(TARGET)
export OUTPUT_FINAL		:=	$(CURDIR)/$(TARGET)
.PHONY: $(BUILD) clean

$(BUILD):
	-mkdir $@
	@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile

export CYGWIN := nodosfilewarning
clean:
	$(call rmdir,$(BUILD))
	$(call rm,$(OUTPUT).bin)
	$(call rm,$(OUTPUT_FINAL).g3a)

else

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

$(OUTPUT_FINAL).g3a: $(OUTPUT).bin
	$(MKG3A) $(MKG3AFLAGS) $(OUTPUT).bin $@

.DEFAULT_GOAL := $(OUTPUT_FINAL).g3a

$(OUTPUT).bin: $(OFILES)

-include $(DEPENDS)

endif
