DEFAULT_TARGET ?= alldebug
CELL_ARCH ?= CEB

INCLUDE_FLAGS = -I../../CryEngine/CryCommon -I../../CryEngine/CryAction
LIBS = 
DEP_OBJS = \
	$(HOME)/BinPS3/game \
	$(HOME)/BinPS3/cryaction \
	$(HOME)/BinPS3/crysystem \
	$(HOME)/BinPS3/crynetwork \
	$(HOME)/BinPS3/cry3dengine \
	$(HOME)/BinPS3/cryaisystem \
	$(HOME)/BinPS3/cryanimation \
	$(HOME)/BinPS3/cryentitysystem \
	$(HOME)/BinPS3/cryfont \
	$(HOME)/BinPS3/cryinput \
	$(HOME)/BinPS3/crymovie \
	$(HOME)/BinPS3/cryphysics \
	$(HOME)/BinPS3/cryscriptsystem \
	$(HOME)/BinPS3/crysoundsystem \
	$(HOME)/BinPS3/xrenderd3d9

PROJECTS = \
	$(HOME)/Code/CryEngine/Cry3DEngine \
	$(HOME)/Code/CryEngine/CryAnimation \
	$(HOME)/Code/CryEngine/CryFont \
	$(HOME)/Code/CryEngine/CryNetwork \
	$(HOME)/Code/CryEngine/CrySoundSystem \
	$(HOME)/Code/CryEngine/CryAction \
	$(HOME)/Code/CryEngine/CryInput \
	$(HOME)/Code/CryEngine/CryPhysics \
	$(HOME)/Code/CryEngine/CrySystem \
	$(HOME)/Code/CryEngine/CryAISystem \
	$(HOME)/Code/CryEngine/CryEntitySystem \
	$(HOME)/Code/CryEngine/CryMovie \
	$(HOME)/Code/CryEngine/CryScriptSystem \
	$(HOME)/Code/CryEngine/RenderDll/XRenderD3D9 \
	$(HOME)/Code/Game02/GameDll

MALLOCWRAPPER = DebugPS3/Malloc.o
#MALLOCWRAPPER = 
EXTRA_DEBUG_DEPS = $(MALLOCWRAPPER)

LIBS_NO_SUFFIX = -lvdec -lPSGL -lPSGLU
ifeq "$(CELL_ARCH)" "CEB"
LIBS_NO_SUFFIX += -lusbpad -lusbkb
else
LIBS_NO_SUFFIX += -lpad -lkb -lfs -lgcm -lsysutil
endif
LIBS_NO_SUFFIX += -lusbd -lio -lm $(MALLOCWRAPPER)

VPATH_ADD = ../../CryEngine/CryCommon

ifeq "$(CELL_ARCH)" "CEB"
PSGL_VERSION_DEBUG = TypeC/debug
PSGL_VERSION_RELEASE = TypeC/opt
else
# With SDK 0.8.1-005, the RSX/debug library crashes with an assertion, but the
# RSX/opt library works fine.  We'll use RSX/opt until the issue is solved.
#PSGL_VERSION_DEBUG = RSX/debug
PSGL_VERSION_DEBUG = RSX/opt
PSGL_VERSION_RELEASE = RSX/opt
endif
#PSGL_VERSION = $(PSGL_VERSION_RELEASE)
PSGL_VERSION = $(PSGL_VERSION_DEBUG)

FILES_ADD = ../../CryEngine/CryCommon/CryCommon.cpp
ifeq "$(CELL_ARCH)" "DEH"
FILES_ADD += ./Trio/trio.cpp ./Trio/triostr.cpp ./Trio/trionan.cpp
VPATH_ADD += ./Trio
endif

# Additional dependencies
DebugPS3/CryCommon.o: ../../CryEngine/CryCommon/WinBase.cpp
DebugPS3/CryCommon.o: ../../CryEngine/CryCommon/TypeInfo.cpp
DebugPS3/CryCommon.o: ../../CryEngine/CryCommon/AutoTypeInfo.cpp
DebugPS3/CryCommon.o: ../../CryEngine/CryCommon/MTPseudoRandom.cpp
DebugPS3/CryCommon.o: ../../CryEngine/CryCommon/CryStructPack.cpp
ProfilePS3/CryCommon.o: ../../CryEngine/CryCommon/WinBase.cpp
ProfilePS3/CryCommon.o: ../../CryEngine/CryCommon/TypeInfo.cpp
ProfilePS3/CryCommon.o: ../../CryEngine/CryCommon/AutoTypeInfo.cpp
ProfilePS3/CryCommon.o: ../../CryEngine/CryCommon/MTPseudoRandom.cpp
ProfilePS3/CryCommon.o: ../../CryEngine/CryCommon/CryStructPack.cpp

# Special rules for buiding the mallocwrapper object Malloc.o.  We don't want
# to use the mallocwrapper for profile - the rules are for DebugPS3 only.
DebugPS3/Malloc.o: DebugPS3/MallocWrapper.o DebugPS3/RealMalloc.o
	@$(BUILD) \
	  --echo 'Linking Malloc.o (MallocWrapper)...' \
		$(LD) -g -r -o DebugPS3/Malloc.o \
		DebugPS3/MallocWrapper.o \
		DebugPS3/RealMalloc.o

DebugPS3/RealMalloc.o: RealMalloc.c
	@$(BUILD) \
		--echo RealMalloc.c \
		$(CC) -g -c -o DebugPS3/RealMalloc_tmp1.o RealMalloc.c
	@$(BUILD) \
	  --echo 'Linking malloc symbols...' \
		$(LD) -g $(COMMON_LIB_PATH) -r \
		-o DebugPS3/RealMalloc_tmp2.o \
		DebugPS3/RealMalloc_tmp1.o -lc
	@rm -f DebugPS3/RealMalloc_tmp1.o
	@$(BUILD) \
		--echo 'Redefining malloc symbols...' \
		$(OBJCOPY) \
		--redefine-sym malloc=libc_malloc \
		--redefine-sym .malloc=.libc_malloc \
		--redefine-sym calloc=libc_calloc \
		--redefine-sym .calloc=.libc_calloc \
		--redefine-sym realloc=libc_realloc \
		--redefine-sym .realloc=.libc_realloc \
		--redefine-sym free=libc_free \
		--redefine-sym .free=.libc_free \
		DebugPS3/RealMalloc_tmp2.o \
		DebugPS3/RealMalloc.o
	@rm -f DebugPS3/RealMalloc_tmp2.o

DebugPS3/MallocWrapper.o: MallocWrapper.c
	@$(BUILD) \
	  --echo MallocWrapper.c \
		$(CC) -c -o DebugPS3/MallocWrapper.o MallocWrapper.c

OUTPUT = ps3launcher
PROJECT = PS3Launcher
OUTPUT_TYPE = program

CXXFLAGS_OPT_LEVEL = -O0

ifeq "$(HOST_SYSTEM)" "linux"
all: $(DEFAULT_TARGET)

.PHONY: alldebug
alldebug: _build_libs_debug

.PHONY: allrelease
allrelease: _build_libs_release

clean: cleandebug cleanrelease
	rm -f $(addsuffix .o, $(DEP_OBJS))
	rm -f $(addsuffix _debug.o, $(DEP_OBJS))
	rm -f $(RELEASE_OUTPUT)
	rm -f $(DEBUG_OUTPUT)
	@for P in $(PROJECTS); do \
		$(MAKE) -C "$$P" cleandebug cleanrelease; \
	done
	@(find '$(HOME)' -name '*.gch'; echo none.gch) |xargs rm -vf
	rm -f DebugPS3/Malloc.o DebugPS3/MallocWrapper.o DebugPS3/RealMalloc.o

depend: _depend
	@for P in $(PROJECTS); do \
		$(MAKE) -C "$$P" _depend; \
	done
endif

include ../../CryEngine/CryCommon/Makefile.include

ifeq "$(HOST_SYSTEM)" "linux"
.PHONY: _build_libs_debug
_build_libs_debug:
	@for P in $(PROJECTS); do \
		$(MAKE) -C "$$P" alldebug || exit $?; \
	done

.PHONY: _build_libs_release
_build_libs_release:
	@for P in $(PROJECTS); do \
		$(MAKE) -C "$$P" allrelease || exit $?; \
	done
endif

