SUBMAKE = MAKE=$(MAKE) $(MAKE) -C

include $(PS2SDK)/Defs.make

EE_CPPFLAGS = -G0 -I $(PS2SDK)/ee/include -I $(PS2SDK)/common/include -I . -I zlib -I lzo -I ucl -D_EE -O3 -Wall -DDO_EXECPS2
EE_LDFLAGS = -T ./linkfile -L $(PS2SDK)/ee/lib -lc -lkernel -lc -lsyscall

TARGETS = \
zlib-1d00-stub zlib-0088-stub \
null-1d00-stub null-0088-stub \
null-kmode-1d00-stub null-kmode-0088-stub \
lzo-1d00-stub lzo-0088-stub \
lzo-kmode-1d00-stub lzo-kmode-0088-stub \
n2b-1d00-stub n2b-0088-stub \
n2b-kmode-1d00-stub n2b-kmode-0088-stub \
n2d-1d00-stub n2d-0088-stub \
n2d-kmode-1d00-stub n2d-kmode-0088-stub \
n2e-1d00-stub n2e-0088-stub \
n2e-kmode-1d00-stub n2e-kmode-0088-stub \
n2e-asm-1d00-stub n2e-asm-one-1d00-stub

all: $(TARGETS)

install: all
	install $(TARGETS) $(PREFIX)/share/ps2-packer/stub -m 644

dist: $(TARGETS)
	ee-strip $(TARGETS)

zlib-tag.stamp:
	$(SUBMAKE) zlib
	touch zlib-tag.stamp

lzo-tag.stamp:
	$(SUBMAKE) lzo
	touch lzo-tag.stamp

ucl-tag.stamp:
	$(SUBMAKE) ucl
	touch ucl-tag.stamp


ZLIB_SIGNATURE = -Wl,--defsym,_signature=0x42494c5a
NULL_SIGNATURE = -Wl,--defsym,_signature=0x4c4c554e
LZO_SIGNATURE = -Wl,--defsym,_signature=0x314f5a4c
N2B_SIGNATURE = -Wl,--defsym,_signature=0x3142324e
N2D_SIGNATURE = -Wl,--defsym,_signature=0x3144324e
N2E_SIGNATURE = -Wl,--defsym,_signature=0x3145324e

zlib-0088-stub: main.o zlib-stub.o zlib-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x0088000 -o zlib-0088-stub main.o zlib-stub.o ./zlib/zlib.a $(EE_LDFLAGS) $(ZLIB_SIGNATURE) dummy.s

zlib-1d00-stub: main.o zlib-stub.o zlib-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x1d00000 -o zlib-1d00-stub main.o zlib-stub.o ./zlib/zlib.a $(EE_LDFLAGS) $(ZLIB_SIGNATURE) dummy.s


null-0088-stub: main.o null-stub.o
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x0088000 -o null-0088-stub main.o null-stub.o $(EE_LDFLAGS) $(NULL_SIGNATURE) dummy.s

null-1d00-stub: main.o null-stub.o
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x1d00000 -o null-1d00-stub main.o null-stub.o $(EE_LDFLAGS) $(NULL_SIGNATURE) dummy.s


null-kmode-0088-stub: main-kmode.o null-stub.o
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x0088000 -o null-kmode-0088-stub main-kmode.o null-stub.o $(EE_LDFLAGS) $(NULL_SIGNATURE) dummy.s

null-kmode-1d00-stub: main-kmode.o null-stub.o
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x1d00000 -o null-kmode-1d00-stub main-kmode.o null-stub.o $(EE_LDFLAGS) $(NULL_SIGNATURE) dummy.s


lzo-0088-stub: main.o lzo-stub.o lzo-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x0088000 -o lzo-0088-stub main.o lzo-stub.o ./lzo/lzo.a $(EE_LDFLAGS) $(LZO_SIGNATURE) dummy.s

lzo-1d00-stub: main.o lzo-stub.o lzo-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x1d00000 -o lzo-1d00-stub main.o lzo-stub.o ./lzo/lzo.a $(EE_LDFLAGS) $(LZO_SIGNATURE) dummy.s


lzo-kmode-0088-stub: main-kmode.o lzo-stub.o lzo-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x0088000 -o lzo-kmode-0088-stub main-kmode.o lzo-stub.o ./lzo/lzo.a $(EE_LDFLAGS) $(LZO_SIGNATURE) dummy.s

lzo-kmode-1d00-stub: main-kmode.o lzo-stub.o lzo-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x1d00000 -o lzo-kmode-1d00-stub main-kmode.o lzo-stub.o ./lzo/lzo.a $(EE_LDFLAGS) $(LZO_SIGNATURE) dummy.s


n2b-0088-stub: main.o n2b-stub.o ucl-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x0088000 -o n2b-0088-stub main.o n2b-stub.o ./ucl/ucl.a $(EE_LDFLAGS) $(N2B_SIGNATURE) dummy.s

n2b-1d00-stub: main.o n2b-stub.o ucl-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x1d00000 -o n2b-1d00-stub main.o n2b-stub.o ./ucl/ucl.a $(EE_LDFLAGS) $(N2B_SIGNATURE) dummy.s


n2b-kmode-0088-stub: main-kmode.o n2b-stub.o ucl-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x0088000 -o n2b-kmode-0088-stub main-kmode.o n2b-stub.o ./ucl/ucl.a $(EE_LDFLAGS) $(N2B_SIGNATURE) dummy.s

n2b-kmode-1d00-stub: main-kmode.o n2b-stub.o ucl-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x1d00000 -o n2b-kmode-1d00-stub main-kmode.o n2b-stub.o ./ucl/ucl.a $(EE_LDFLAGS) $(N2B_SIGNATURE) dummy.s


n2d-0088-stub: main.o n2d-stub.o ucl-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x0088000 -o n2d-0088-stub main.o n2d-stub.o ./ucl/ucl.a $(EE_LDFLAGS) $(N2D_SIGNATURE) dummy.s

n2d-1d00-stub: main.o n2d-stub.o ucl-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x1d00000 -o n2d-1d00-stub main.o n2d-stub.o ./ucl/ucl.a $(EE_LDFLAGS) $(N2D_SIGNATURE) dummy.s


n2d-kmode-0088-stub: main-kmode.o n2d-stub.o ucl-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x0088000 -o n2d-kmode-0088-stub main-kmode.o n2d-stub.o ./ucl/ucl.a $(EE_LDFLAGS) $(N2D_SIGNATURE) dummy.s

n2d-kmode-1d00-stub: main-kmode.o n2d-stub.o ucl-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x1d00000 -o n2d-kmode-1d00-stub main-kmode.o n2d-stub.o ./ucl/ucl.a $(EE_LDFLAGS) $(N2D_SIGNATURE) dummy.s


n2e-0088-stub: main.o n2e-stub.o ucl-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x0088000 -o n2e-0088-stub main.o n2e-stub.o ./ucl/ucl.a $(EE_LDFLAGS) $(N2E_SIGNATURE) dummy.s

n2e-1d00-stub: main.o n2e-stub.o ucl-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x1d00000 -o n2e-1d00-stub main.o n2e-stub.o ./ucl/ucl.a $(EE_LDFLAGS) $(N2E_SIGNATURE) dummy.s


n2e-kmode-0088-stub: main-kmode.o n2e-stub.o ucl-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x0088000 -o n2e-kmode-0088-stub main-kmode.o n2e-stub.o ./ucl/ucl.a $(EE_LDFLAGS) $(N2E_SIGNATURE) dummy.s

n2e-kmode-1d00-stub: main-kmode.o n2e-stub.o ucl-tag.stamp
	$(EE_CC) -nostartfiles ./crt0.s -Wl,--defsym,_start_address=0x1d00000 -o n2e-kmode-1d00-stub main-kmode.o n2e-stub.o ./ucl/ucl.a $(EE_LDFLAGS) $(N2E_SIGNATURE) dummy.s


n2e-asm-1d00-stub: n2e-asm-stub.S ucl/n2e.S
	$(EE_CC) -nostartfiles -Wl,--defsym,_start_address=0x1d00000 -o n2e-asm-1d00-stub n2e-asm-stub.S $(EE_LDFLAGS) $(N2E_SIGNATURE) dummy.s -DARGS_IN_S

n2e-asm-one-1d00-stub: n2e-asm-one-stub.S ucl/n2e.S
	$(EE_CC) -nostartfiles -Wl,--defsym,_start_address=0x1d00000 -o n2e-asm-one-1d00-stub n2e-asm-one-stub.S $(EE_LDFLAGS) $(N2E_SIGNATURE) dummy.s -DARGS_IN_S


clean:
	rm -f *.o $(TARGETS) *-tag.stamp
	$(SUBMAKE) zlib clean
	$(SUBMAKE) lzo clean
	$(SUBMAKE) ucl clean

rebuild: clean all

%.o : %.c
	$(EE_CC) $(EE_CFLAGS) $(EE_CPPFLAGS) $(EE_INCS) -c $< -o $@