#******************************************************************************
#* makefile. - Makefile                                                       *
#******************************************************************************
#* Project      : jfyeNG                                                      *
#* Author       : Arnaud Storq (norecess@planet-d.net)                        *
#* Based on work of Stephane Guillard, Tony Saveski and Mickael Gilabert      *
#******************************************************************************

#----------------------------------------------------------------------------- COMMANDS
CC                          = /bin/eg-gcc
STRIP                       = ee-strip
AS                          = ee-as
LD                          = ee-elf-ld

#----------------------------------------------------------------------------- PATHS
PATH_JNG                    = ../..
PATH_JNG_PRJ                = $(PATH_JNG)/prj/ps2
PATH_JNG_OBJ                = $(PATH_JNG)/prj/ps2/obj
PATH_JNG_SRC                = $(PATH_JNG)/sources
PATH_JNG_LIB                = $(PATH_JNG)/sources/platform/os/ps2/lib

PATH_GCC                    = /dev/ps2/gcc
PATH_PS2LIB	                = /dev/ps2/libs/ps2lib

#----------------------------------------------------------------------------- TARGET
TARGET                      = $(PATH_JNG)/bin/ps2/JFYENG.ELF

#----------------------------------------------------------------------------- COMPILATION DEFINES
CFLAGS 	                    = -G0 -DPS2 -Wall -W -EL -O3 -mlong64 -mhard-float -ffreestanding -fnonnull-objects -mno-abicalls -fno-builtin -fshort-double -mno-memcpy -mcpu=r5900 -mips3 -nostdlib -DPS2_EE

INCLUDES                    = -I$(PATH_GCC)/ee/lib/gcc-lib/mips64r5900-sce-elf/2.9-ee-991111b/include \
	                          -I$(PATH_PS2LIB)/common/include \
	                          -I$(PATH_PS2LIB)/ee/include \
	                          -I$(PATH_JNG_SRC) \
                              -I$(PATH_PS2LIB)/iop/include
					      
LIBRARIES		            = -L$(PATH_JNG_LIB)/floatlib \
                              -L$(PATH_PS2LIB)/ee/lib

#----------------------------------------------------------------------------- FILELIST
FILELIST_OBJ_C              = ps2perf.o \
                              entry.o \
                              ps2.o \
                              ps2draw.o \
                              ps2drawtex.o \
                              ps2screen.o \
                              ps2matrix.o \
                              window.o \
			                  timer.o \
                              memblock.o \
			                  console.o \
			                  settings.o \
			                  splash.o \
			                  fileio.o \
			                  texhard.o \
                              matrix.o \
                              font.o \
                              math.o \
                              softpreca.o \
                              softdraw.o \
                              softdrawbilinear.o \
                              softdrawtriflat.o \
                              softdrawtriflatadd.o \
                              softdrawtritex.o \
                              softdrawtritexadd.o \
                              softtransf.o \
                              softtransf2dclip.o \
                              softtransfproj.o \
                              mem.o \
			                  crc32.o \
			                  file.o \
			                  filearc.o \
			                  filepack.o \
                              tex.o \
                              textga.o \
                              texjpgtiny.o \
                              texjpgtinyread.o \
                              texrgb.o \
                              texscale.o \
                              lwsplaylist.o \
                              snapshot.o \
                              lwo.o \
			                  lwodraw.o \
                              lwodrawstate.o \
			                  lwoinit.o \
                              lwomorph.o \
                              lwoinitnorm.o \
                              lwoinittri.o \
                              lwoinituv.o \
                              lwoparse.o \
                              lwoparsepnts.o \
                              lwoparsepols.o \
                              lwoparsesurf.o \
                              lwoparsetex.o \
                              lwoparsetools.o \
                              lwoparsevmap.o \
                              lws.o \
                              lwsdraw.o \
                              lwsdrawcam.o \
                              lwsdrawlight.o \
                              lwsinit.o \
                              lwsinterp.o \
                              lwsparse.o \
                              lwsparsetools.o

FILELIST_OBJ_ASM            = crt0_asm.o \
                              ps2_asm.o

FILELIST_OBJ                = $(addprefix $(PATH_JNG_OBJ)/, $(FILELIST_OBJ_C) $(FILELIST_OBJ_ASM))

#----------------------------------------------------------------------------- COMPILING MACROS
DO_C_COMPILE                = $(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@

DO_ASM_COMPILE              = $(CC) -xassembler-with-cpp -c $(CFLAGS) $(INCLUDES) $< -o $@

#----------------------------------------------------------------------------- BUILD TARGET
$(TARGET): $(FILELIST_OBJ)
	$(CC) $(CFLAGS) $(INCLUDES) $(LIBRARIES) -Tlinkfile -o $(TARGET) $(FILELIST_OBJ) $(PATH_JNG_LIB)/floatlib/libmf.a -lm -lc -lkernel -lgcc
	$(STRIP) --strip-all $(TARGET)

#----------------------------------------------------------------------------- BUILD C SOURCE FILES
$(PATH_JNG_OBJ)/ps2perf.o:   $(PATH_JNG_SRC)/platform/os/ps2/lib/ps2perf/ps2perf.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/entry.o:     $(PATH_JNG_SRC)/platform/os/ps2/entry.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/ps2.o:       $(PATH_JNG_SRC)/platform/os/ps2/ps2.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/ps2draw.o:   $(PATH_JNG_SRC)/platform/os/ps2/ps2draw.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/ps2drawtex.o: $(PATH_JNG_SRC)/platform/os/ps2/ps2drawtex.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/ps2screen.o: $(PATH_JNG_SRC)/platform/os/ps2/ps2screen.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/ps2matrix.o: $(PATH_JNG_SRC)/platform/os/ps2/ps2matrix.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/window.o:    $(PATH_JNG_SRC)/platform/os/ps2/window.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/timer.o:     $(PATH_JNG_SRC)/platform/os/ps2/timer.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/memblock.o:  $(PATH_JNG_SRC)/platform/os/ps2/memblock.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/console.o:   $(PATH_JNG_SRC)/platform/os/ps2/console.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/settings.o:  $(PATH_JNG_SRC)/platform/os/ps2/settings.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/splash.o:    $(PATH_JNG_SRC)/platform/os/ps2/splash.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/mem.o:       $(PATH_JNG_SRC)/system/mem.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/crc32.o:     $(PATH_JNG_SRC)/system/crc32.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/file.o:      $(PATH_JNG_SRC)/system/file.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/filearc.o:   $(PATH_JNG_SRC)/system/filearc.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/filepack.o:  $(PATH_JNG_SRC)/system/filepack.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/fileio.o:    $(PATH_JNG_SRC)/platform/os/ps2/fileio.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/matrix.o:    $(PATH_JNG_SRC)/platform/renderer/ps2/matrix.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/font.o:      $(PATH_JNG_SRC)/platform/os/ps2/font.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/math.o:      $(PATH_JNG_SRC)/platform/os/ps2/math.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/softpreca.o: $(PATH_JNG_SRC)/platform/software/softpreca.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/softdraw.o:  $(PATH_JNG_SRC)/platform/software/softdraw.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/softdrawbilinear.o: $(PATH_JNG_SRC)/platform/software/softdrawbilinear.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/softdrawtriflat.o: $(PATH_JNG_SRC)/platform/software/softdrawtriflat.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/softdrawtriflatadd.o: $(PATH_JNG_SRC)/platform/software/softdrawtriflatadd.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/softdrawtritex.o: $(PATH_JNG_SRC)/platform/software/softdrawtritex.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/softdrawtritexadd.o: $(PATH_JNG_SRC)/platform/software/softdrawtritexadd.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/softtransf.o: $(PATH_JNG_SRC)/platform/software/softtransf.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/softtransf2dclip.o: $(PATH_JNG_SRC)/platform/software/softtransf2dclip.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/softtransfproj.o: $(PATH_JNG_SRC)/platform/software/softtransfproj.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/tex.o:       $(PATH_JNG_SRC)/texture/tex.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/textga.o:    $(PATH_JNG_SRC)/texture/textga.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/texjpgtiny.o: $(PATH_JNG_SRC)/texture/texjpgtiny.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/texjpgtinyread.o: $(PATH_JNG_SRC)/texture/texjpgtinyread.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/texrgb.o:    $(PATH_JNG_SRC)/texture/texrgb.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/texscale.o:  $(PATH_JNG_SRC)/texture/texscale.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/texhard.o:   $(PATH_JNG_SRC)/platform/renderer/ps2/texhard.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwsplaylist.o: $(PATH_JNG_SRC)/lightwave/lws/lwsplaylist.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/snapshot.o:  $(PATH_JNG_SRC)/system/snapshot.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwo.o:       $(PATH_JNG_SRC)/lightwave/lwo/lwo.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwodraw.o:   $(PATH_JNG_SRC)/platform/renderer/ps2/lwodraw.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwodrawstate.o:   $(PATH_JNG_SRC)/platform/renderer/ps2/lwodrawstate.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwoinit.o:   $(PATH_JNG_SRC)/lightwave/lwo/lwoinit.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwomorph.o: $(PATH_JNG_SRC)/lightwave/lwo/lwomorph.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwoinitnorm.o: $(PATH_JNG_SRC)/lightwave/lwo/lwoinitnorm.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwoinittri.o: $(PATH_JNG_SRC)/lightwave/lwo/lwoinittri.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwoinituv.o: $(PATH_JNG_SRC)/lightwave/lwo/lwoinituv.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwoparse.o:  $(PATH_JNG_SRC)/lightwave/lwo/lwoparse.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwoparsepnts.o: $(PATH_JNG_SRC)/lightwave/lwo/lwoparsepnts.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwoparsepols.o: $(PATH_JNG_SRC)/lightwave/lwo/lwoparsepols.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwoparsesurf.o: $(PATH_JNG_SRC)/lightwave/lwo/lwoparsesurf.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwoparsetex.o: $(PATH_JNG_SRC)/lightwave/lwo/lwoparsetex.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwoparsetools.o: $(PATH_JNG_SRC)/lightwave/lwo/lwoparsetools.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwoparsevmap.o: $(PATH_JNG_SRC)/lightwave/lwo/lwoparsevmap.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lws.o:       $(PATH_JNG_SRC)/lightwave/lws/lws.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwsdraw.o:   $(PATH_JNG_SRC)/platform/renderer/ps2/lwsdraw.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwsdrawcam.o: $(PATH_JNG_SRC)/platform/renderer/ps2/lwsdrawcam.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwsdrawlight.o: $(PATH_JNG_SRC)/platform/renderer/ps2/lwsdrawlight.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwsinit.o:   $(PATH_JNG_SRC)/lightwave/lws/lwsinit.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwsinterp.o: $(PATH_JNG_SRC)/lightwave/lws/lwsinterp.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwsparse.o:  $(PATH_JNG_SRC)/lightwave/lws/lwsparse.c
	$(DO_C_COMPILE)

$(PATH_JNG_OBJ)/lwsparsetools.o: $(PATH_JNG_SRC)/lightwave/lws/lwsparsetools.c
	$(DO_C_COMPILE)

#----------------------------------------------------------------------------- BUILD ASM SOURCE FILES
$(PATH_JNG_OBJ)/crt0_asm.o:  $(PATH_JNG_SRC)/platform/os/ps2/crt0_asm.s
	$(DO_ASM_COMPILE)

$(PATH_JNG_OBJ)/ps2_asm.o:   $(PATH_JNG_SRC)/platform/os/ps2/ps2_asm.s
	$(DO_ASM_COMPILE)


