#
#	tutorial makefile
#

PROJECT			= sfd_t01_simple_play
USER_H_FILES	=
USER_C_FILES	= sfd_t01_simple_play.c
USER_LIB_FILES	= mwsfdps3ppu adxps3ppu mixer audio PSGL PSGLU gcm sysutil fs io m
USER_INC_DIRS	=
USER_SRC_DIRS	= ./
USER_LIB_DIRS	=
USER_CFLAGS		=
USER_LDFLAGS	=
USER_ASFLAGS	=
FPSHADER_SRCS	= smp_frag.cg
VPSHADER_SRCS	= smp_vert.cg

#=======================================
#	CRI LIB DIR
#=======================================
CRI_INC_DIR		:= $(CRISDK_PS3_ROOT)/ps3/include
CRI_LIB_DIR		:= $(CRISDK_PS3_ROOT)/ps3/libs

#=======================================
#	Compile environment
#=======================================
SHELL			:= /bin/sh
AS      		:= ppu-lv2-as
CC				:= ppu-lv2-gcc
LD      		:= ppu-lv2-ld
RANLIB  		:= ppu-lv2-ranlib
AR				:= ppu-lv2-ar
CP				:= cp -fuv
RM				:= rm -f
VPATH			:= $(USER_SRC_DIRS: =:)

#---------------------------------------
#	Cg tool
PSGL_CGC			= sce-cgc
PSGL_SHADER_BUILDER	= psgl_shader_builder

#=======================================
#	Options
#=======================================
ifdef	DEBUG
ENV_CFLAGS 		:=
MODULE_CFLAGS	:=
ENV_LDFLAGS 	:=
else
ENV_CFLAGS 		:=
MODULE_CFLAGS 	:=
ENV_LDFLAGS 	:=
endif

ENV_INC_DIRS	:= 
ENV_LIB_DIRS	:= $(CELL_SDK)/target/ppu/lib/PSGL/RSX/opt
ENV_LIB_FILES	:= 

#=======================================
#	Target
#=======================================
PPU_TARGET		:= $(PROJECT)
FPSHADER_TARGET	:= $(patsubst %.cg, %.fpo, $(FPSHADER_SRCS))
VPSHADER_TARGET	:= $(patsubst %.cg, %.vpo, $(VPSHADER_SRCS))

#=======================================
#	Object file
#=======================================
TGT_OBJS := $(USER_C_FILES:.c=.o)
TGT_OBJS += $(USER_CPP_FILES:.cpp=.o)
TGT_OBJS := $(TGT_OBJS) $(USER_OBJ_FILES:.obj=.o)
TGT_OBJS := $(filter %.o, $(TGT_OBJS))
FPSHADER_OBJS := $(FPSHADER_SRCS:.cg=.fpo)
VPSHADER_OBJS := $(VPSHADER_SRCS:.cg=.vpo)

#=======================================
#	Include
#=======================================
INC_DIRS		:= $(CRI_INC_DIR) $(ENV_INC_DIRS) $(USER_INC_DIRS)
INC_DIRS_FLAGS	:= $(addprefix -I,$(INC_DIRS))

#=======================================
#	Library
#=======================================
LIB_DIRS		:= $(CRI_LIB_DIR) $(ENV_LIB_DIRS) $(USER_LIB_DIRS)
LIB_DIRS_FLAGS	:= $(addprefix -L,$(LIB_DIRS))
LIB_FILES		:= $(ENV_LIB_FILES) $(USER_LIB_FILES)
LIB_FILES_FLAGS := $(addprefix -l,$(LIB_FILES))

#=======================================
#	Options
#=======================================
ifdef	DEBUG
COMMON_CFLAGS	:= -c -g -O0 -Wall $(INC_DIRS_FLAGS)
else
COMMON_CFLAGS	:= -c -g -O2 -Wall $(INC_DIRS_FLAGS)
endif
COMMON_LDFLAGS 	:= $(LIB_DIRS_FLAGS) $(LIB_FILES_FLAGS)

CFLAGS	:= $(USER_CFLAGS) $(COMMON_CFLAGS) $(ENV_CFLAGS) $(MODULE_CFLAGS)
LDFLAGS	:= $(USER_LDFLAGS) $(COMMON_LDFLAGS) $(ENV_LDFLAGS)
ARFLAGS	= -r

#---------------------------------------
#	Cg options
FPSHADER_QUIET		:= -quiet
FPSHADER_PROFILE	:= sce_fp_TypeC
FPSHADER_FLAGS		:=
VPSHADER_QUIET		:= -quiet
VPSHADER_PROFILE	:= sce_vp_TypeC
VPSHADER_FLAGS		:=

#=======================================
#	rule
#=======================================
all : $(PPU_TARGET) $(FPSHADER_OBJS) $(VPSHADER_OBJS)

#---------------------------------------
#	ppu target
$(PPU_TARGET) : $(TGT_OBJS)
	@echo $@
	@$(CC) -o $@ $(TGT_OBJS) $(LDFLAGS)

#---------------------------------------
#	.obj copy
%.o : %.obj
	@echo $@
	@cp $< $@

#---------------------------------------
#	.c compile
%.o : %.c
	@echo $@
	@$(CC) $(CFLAGS) $<

#---------------------------------------
#	.cpp compile
%.o : %.cpp
	@echo $@
	@$(CC) $(CFLAGS) $<

#---------------------------------------
#	generate dependency
%.d : %.c
	@echo $@
	@set -e
	@$(CC) -MM $(CFLAGS) $< | sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@
	@[ -s $@ ] || $(RM) -f $@

%.d : %.cpp
	@echo $@
	@set -e
	@$(CC) -MM $(CFLAGS) $< | sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@
	@[ -s $@ ] || $(RM) -f $@

#---------------------------------------
#	include dependency
ifeq (, $(findstring $(MAKECMDGOALS), "clean"))

ifneq ($(strip $(USER_C_FILES)),)
-include $(USER_C_FILES:.c=.d)
endif

ifneq ($(strip $(USER_CPP_FILES)),)
-include $(USER_CPP_FILES:.cpp=.d)
endif

endif

#---------------------------------------
#	
%.fpo : %.cg
	@echo $@
	@$(PSGL_CGC) $(FPSHADER_QUIET) -profile $(FPSHADER_PROFILE) $(FPSHADER_FLAGS) -o $@ $<

%.vpo : %.cg
	@echo $@
	@$(PSGL_CGC) $(VPSHADER_QUIET) -profile $(VPSHADER_PROFILE) $(VPSHADER_FLAGS) -o $@ $<

#=======================================
#	clean command
#=======================================
clean :
	@$(RM) $(PPU_TARGET) $(FPSHADER_OBJS) $(VPSHADER_OBJS) *.o *.map *.d

#=======================================
#	default target
#=======================================
.PHONY : all clean

