CELL_SDK ?= /usr/local/cell
CELL_MK_DIR ?= $(CELL_SDK)/samples/mk
include $(CELL_MK_DIR)/sdk.makedef.mk
CELL_HOST_PATH ?= $(CELL_SDK)/host-win32
MKFSELF_NPDRM = $(CELL_HOST_PATH)/bin/make_fself_npdrm
MKPKG_NPDRM = $(CELL_HOST_PATH)/bin/make_package_npdrm

STRIP = $(CELL_HOST_PATH)/ppu/bin/ppu-lv2-strip

SNES9X_API_DIR = ./snes9x

PPU_SRCS		=	zlib/adler32.c zlib/compress.c zlib/crc32.c zlib/deflate.c zlib/gzclose.c zlib/gzlib.c zlib/gzread.c zlib/gzwrite.c zlib/infback.c zlib/inffast.c zlib/inflate.c zlib/inftrees.c zlib/trees.c zlib/uncompr.c zlib/zutil.c zlib/contrib/minizip/ioapi.c zlib/contrib/minizip/mztools.c  zlib/contrib/minizip/zip.c zlib/contrib/minizip/unzip.c
#add cellgraphicspsgl.cpp for PSGL
PPU_SRCS		+=	menu.cpp emulator.cpp cellgraphics.cpp cellpad.cpp emulator_implementation.cpp $(foreach dir,$(SNES9X_API_DIR)/jma/,$(wildcard $(dir)/*.cpp)) $(foreach dir,$(SNES9x_API_DIR)/filter/,$(wildcard $(dir)/*.cpp)) $(SNES9X_API_DIR)/filter/snes_ntsc.c $(SNES9X_API_DIR)/bsx.cpp $(SNES9X_API_DIR)/c4.cpp $(SNES9X_API_DIR)/c4emu.cpp $(SNES9X_API_DIR)/cheats.cpp $(SNES9X_API_DIR)/cheats2.cpp $(SNES9X_API_DIR)/clip.cpp $(SNES9X_API_DIR)/conffile.cpp $(SNES9X_API_DIR)/controls.cpp $(SNES9X_API_DIR)/cpu.cpp $(SNES9X_API_DIR)/cpuexec.cpp $(SNES9X_API_DIR)/cpuops.cpp $(SNES9X_API_DIR)/crosshairs.cpp $(SNES9X_API_DIR)/debug.cpp $(SNES9X_API_DIR)/dma.cpp $(SNES9X_API_DIR)/dsp.cpp $(SNES9X_API_DIR)/dsp1.cpp $(SNES9X_API_DIR)/dsp2.cpp $(SNES9X_API_DIR)/dsp3.cpp $(SNES9X_API_DIR)/dsp4.cpp $(SNES9X_API_DIR)/fxdbg.cpp $(SNES9X_API_DIR)/fxemu.cpp $(SNES9X_API_DIR)/fxinst.cpp $(SNES9X_API_DIR)/gfx.cpp $(SNES9X_API_DIR)/globals.cpp $(SNES9X_API_DIR)/loadzip.cpp $(SNES9X_API_DIR)/logger.cpp $(SNES9X_API_DIR)/memmap.cpp $(SNES9X_API_DIR)/movie.cpp $(SNES9X_API_DIR)/netplay.cpp $(SNES9X_API_DIR)/obc1.cpp $(SNES9X_API_DIR)/ppu.cpp $(SNES9X_API_DIR)/reader.cpp $(SNES9X_API_DIR)/sa1.cpp $(SNES9X_API_DIR)/sa1cpu.cpp $(SNES9X_API_DIR)/screenshot.cpp $(SNES9X_API_DIR)/sdd1.cpp $(SNES9X_API_DIR)/sdd1emu.cpp $(SNES9X_API_DIR)/server.cpp $(SNES9X_API_DIR)/seta.cpp $(SNES9X_API_DIR)/seta010.cpp $(SNES9X_API_DIR)/seta011.cpp $(SNES9X_API_DIR)/seta018.cpp $(SNES9X_API_DIR)/snapshot.cpp $(SNES9X_API_DIR)/snes9x.cpp $(SNES9X_API_DIR)/spc7110.cpp $(SNES9X_API_DIR)/srtc.cpp $(SNES9X_API_DIR)/tile.cpp $(SNES9X_API_DIR)/apu/apu.cpp $(SNES9X_API_DIR)/apu/SNES_SPC.cpp $(SNES9X_API_DIR)/apu/SNES_SPC_misc.cpp $(SNES9X_API_DIR)/apu/SNES_SPC_state.cpp $(SNES9X_API_DIR)/apu/SPC_DSP.cpp $(SNES9X_API_DIR)/apu/SPC_Filter.cpp $(VPSHADER_PPU_OBJS) $(FPSHADER_PPU_OBJS)
PPU_TARGET		=	snes9x.ppu.elf

#Add -DZLIB and -DUNZIP_SUPPORT to PPU_CXXFLAGS for zlib/unzip
#Add -PSGL to PPU_CFLAGS and PPU_CXXFLAGS for PSGL
PPU_CFLAGS	+=	-I. -DUSE_FILE32API -Dunix -DPS3_SDK_3_41
PPU_CXXFLAGS	+=	-I./snes9x/ -DZLIB -DUNZIP_SUPPORT -DJMA_SUPPORT -DPS3_SDK_3_41
#Add this for PGL:
#$(CELL_TARGET_PATH)/ppu/lib/libcgc.a
PPU_LIBS		+=	$(CELL_TARGET_PATH)/ppu/lib/libgcm_cmd.a \
					$(CELL_TARGET_PATH)/ppu/lib/libgcm_sys_stub.a $(CELL_TARGET_PATH)/ppu/lib/libfs_stub.a $(CELL_TARGET_PATH)/ppu/lib/libl10n_stub.a 
#Add this to PPU_LDLIBS when we get PSGL working - for now, only run GCM
#PPU_LDLIBS		+=	-L$(CELL_SDK)/target/ppu/lib/PSGL/RSX/opt -lPSGL -lPSGLcgc -lPSGLU -LPSGLFX -lresc_stub -ldbgfont
PPU_LDLIBS		+= 	-L. -lio_stub -lm -lfs_stub -lsysutil_stub -ldbgfont_gcm -lsysmodule_stub  -laudio_stub
#Add -lz to PPU_LDLIBS for zlib/unzip support if linking static lib (include it at the end or wherever you like)

VPSHADER_SRCS	=	vpshader.cg
FPSHADER_SRCS	=	fpshader.cg

VPSHADER_PPU_OBJS = $(patsubst %.cg, $(OBJS_DIR)/%.ppu.o, $(VPSHADER_SRCS))
FPSHADER_PPU_OBJS = $(patsubst %.cg, $(OBJS_DIR)/%.ppu.o, $(FPSHADER_SRCS))

include $(CELL_MK_DIR)/sdk.target.mk

PPU_OBJS += $(VPSHADER_PPU_OBJS) $(FPSHADER_PPU_OBJS)

$(VPSHADER_PPU_OBJS): $(OBJS_DIR)/%.ppu.o : %.vpo
	@mkdir -p $(dir $(@))
	$(PPU_OBJCOPY)  -I binary -O elf64-powerpc-celloslv2 -B powerpc $< $@

$(FPSHADER_PPU_OBJS): $(OBJS_DIR)/%.ppu.o : %.fpo
	@mkdir -p $(dir $(@))
	$(PPU_OBJCOPY)  -I binary -O elf64-powerpc-celloslv2 -B powerpc $< $@

.PHONY: pkg
pkg: $(PPU_TARGET) 
	$(STRIP) $(PPU_TARGET)
	$(MKFSELF_NPDRM) $(PPU_TARGET) pkg/USRDIR/EBOOT.BIN
	$(MKPKG_NPDRM) pkg/package.conf pkg


