CC		:= ppu-gcc
CXX		:= ppu-g++
LD		:= ppu-ld 
OBJCOPY		:= ppu-objcopy
OBJDUMP		:= ppu-objdump
AR 		:= ppu-ar
STRIP		:= ppu-strip
INCLUDE		= ../lv2/include ../lv1/include ../cryptcode/include ../debug/include
LIBSDIR         =
LIBS           	=
BUILD_TYPE     	= release


CFLAGS = -ffunction-sections -fdata-sections -Os -m64 -fno-builtin -fno-exceptions \
			   -Os -Wall -Wno-strict-aliasing -Wno-multichar $(foreach dir,$(INCLUDE),-I$(dir)) \
			   -DLV2 -DFIRMWARE_4_75 -DCFW -DUSE_LV1_PEEK_POKE -ffreestanding 
CFLAGS += --std=gnu99

ifeq ($(BUILD_TYPE), debug)
CFLAGS += -DDEBUG -DTEST 
endif

ifeq ($(BUILD_TYPE), ps2_debug)
CFLAGS += -DDEBUG -DPS2EMU_DEBUG -DTEST
endif

ifeq ($(BUILD_TYPE), test)
CFLAGS += -DTEST
endif

#CFLAGS += -DPSN_SUPPORT


#LDFLAGS= -T stage2.ld -nostartfiles -nostdlib -nodefaultlibs -Wl,-static -Wl,-s -L. $(foreach dir,$(LIBSDIR),-L$(dir)) $(LIBS) \
#	-Wl,--gc-sections -Wl,-Map=stage2.map
LDFLAGS= -T stage2.ld -nostartfiles -nostdlib -nodefaultlibs -Wl,-static -L. $(foreach dir,$(LIBSDIR),-L$(dir)) $(LIBS) \
	 -Wl,--gc-sections -Wl,-Map=stage2.map

OBJS = start.o ps3mapi_core.o main.o crypto.o modulespatch.o config.o drm.o psp_s.o mappath.o storage_ext.o region.o psp.o cobra.o permissions.o sm_ext.o  \
	../lv2/src/usb.o ../lv2/src/patch.o ../lv2/src/interrupt.o ../lv2/src/interrupt_c.o ../lv2/src/io.o ../lv2/src/libc.o \
	../lv2/src/libc_c.o ../lv2/src/memory.o ../lv2/src/memory_c.o ../lv2/src/thread.o ../lv2/src/thread_c.o ../lv2/src/process.o \
	../lv2/src/synchronization.o ../lv2/src/modules.o ../lv2/src/modules_c.o ../lv2/src/storage.o ../lv2/src/object.o \
	../lv2/src/security.o ../lv2/src/time.o ../lv2/src/hid.o ../lv2/src/pad.o ../lv2/src/syscall.o \
	../lv1/src/hvcall.o ../lv1/src/stor.o ../lv1/src/device.o 

ifeq ($(BUILD_TYPE), debug)
OBJS += laboratory.o ../debug/src/debug.o ../debug/src/printf.o ../debug/src/debug_util.o
endif

ifeq ($(BUILD_TYPE), ps2_debug)
OBJS += laboratory.o ../debug/src/debug.o ../debug/src/printf.o ../debug/src/debug_util.o
endif

all: stage2.cex.release

objdump: stage2.cex.release
	$(OBJDUMP) -D -EB -b binary -m powerpc:common64 stage2.cex.release

%.cex.release: %.elf
	$(OBJCOPY) -O binary $< $@	

stage2.elf: $(OBJS) stage2.ld
	$(CC) $(LDFLAGS) -o $@ $(OBJS)

%.o: %.S
	$(CC) $(CFLAGS) -c -o $@ $<

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

clean:
	rm -f *.o *.elf *.bin *.cex *.map *.lzma ../lv2/src/*.o ../lv1/src/*.o ../debug/src/*.o
