# PS2 build (SCE toolchain). PC builds are generated by premake.
# Build librw for ps2 first: premake5 gmake; make -C build librw config=debug_ps2

CC=ee-gcc
CXX=ee-g++

TARGET=demoreel

LIBRW := ../..
OBJDIR := obj/ps2

SRC := main.cpp proctex.cpp scene_tunnel.cpp scene_particles.cpp scene_knot.cpp
SKELSRC := skeleton.cpp ps2.cpp

SCELIBDIR := /usr/local/sce/ee/lib

CFLAGS := -Os -DRW_PS2 -fno-common -fno-exceptions

LIBS =	$(LIBRW)/lib/ps2/Debug/librw.a	\
	$(SCELIBDIR)/libgraph.a	\
	$(SCELIBDIR)/libdma.a	\
	$(SCELIBDIR)/libmc.a	\
	$(SCELIBDIR)/libpc.a	\
	$(SCELIBDIR)/libpad.a	\
	$(SCELIBDIR)/libcdvd.a	\
	$(SCELIBDIR)/libscf.a

GCCLIB := /usr/local/sce/ee/gcc/lib/gcc-lib/ee/3.2-ee-030926
CRT_BEGIN := $(OBJDIR)/crt0.o $(GCCLIB)/crti.o $(GCCLIB)/crtbegin.o
CRT_END := $(GCCLIB)/crtend.o $(GCCLIB)/crtn.o

OBJ := $(addprefix $(OBJDIR)/,$(SRC:.cpp=.o) $(SKELSRC:.cpp=.o))
DEP := $(OBJ:.o=.d)

INC :=	-I.	\
	-I$(LIBRW)	\
	-I$(LIBRW)/skeleton	\
	-I/usr/local/sce/common/include	\
	-I/usr/local/sce/ee/include

$(TARGET).elf: $(OBJDIR)/crt0.o $(OBJ)
	$(CXX) -o $@ $(CRT_BEGIN) $(OBJ) $(LIBS) $(CRT_END) -T $(SCELIBDIR)/app.cmd -L$(SCELIBDIR) -lm -nostartfiles -Wl,--gc-sections

run: $(TARGET).elf
	dsedb -r run $(TARGET).elf

$(OBJDIR)/crt0.o:
	@mkdir -p $(@D)
	$(CC) -c -xassembler-with-cpp -o $@ $(SCELIBDIR)/crt0.s

$(OBJDIR)/%.o: %.cpp
	@mkdir -p $(@D)
	$(CXX) $(CFLAGS) $(INC) -MMD -c $< -o $@

$(OBJDIR)/%.o: $(LIBRW)/skeleton/%.cpp
	@mkdir -p $(@D)
	$(CXX) $(CFLAGS) $(INC) -MMD -c $< -o $@

clean:
	rm -rf $(OBJDIR) $(TARGET).elf

-include $(DEP)
