ENDIAN_FLAGS=-EB
CFLAGS=$(ENDIAN_FLAGS) -msoft-float -O2 -march=r3000 -I. -Wl,-M
LIBS=-lc -lm


AS=mipsel-elf-as
AR=mipsel-elf-ar
CC=mipsel-elf-gcc
LD=mipsel-elf-ld
OBJDUMP=mipsel-elf-objdump
OBJCOPY=mipsel-elf-objcopy
FLASHGEN=flashgen

PROG = hello.elf testbench.elf test_irq.elf dhry.elf queens.elf stanford.elf paranoia.elf rmd160_test.elf Bessel.elf whet.elf phrasen.elf dttl.elf richards_benchmark.elf test_exception.elf life.elf r3.elf gunzip.elf basic_math.elf jman_patches.elf jman_patchmeshes.elf jman_polys.elf test_hpi.elf test_vga.elf

all: $(PROG)

libsys.a: startup.S kernel.S libsys.c libsys.h xcpt.c syscalls.c irq.c dbg.c mipsdis.c mips_gfx.c mips_gfx.h mips_ps2.c mips_ps2.h
	$(CC) $(CFLAGS) -G 0 -c startup.S -o startup.o
	$(CC) $(CFLAGS) -G 0 -c kernel.S -o kernel.o
	$(CC) $(CFLAGS) -G 0 -c libsys.c -o libsys.o
	$(CC) $(CFLAGS) -G 0 -c xcpt.c -o xcpt.o
	$(CC) $(CFLAGS) -G 0 -c syscalls.c -o syscalls.o
	$(CC) $(CFLAGS) -G 0 -c irq.c -o irq.o
	$(CC) $(CFLAGS) -G 0 -c dbg.c -o dbg.o
	$(CC) $(CFLAGS) -G 0 -c mipsdis.c -o mipsdis.o
	$(CC) $(CFLAGS) -G 0 -c mips_gfx.c -o mips_gfx.o
	$(CC) $(CFLAGS) -G 0 -c mips_ps2.c -o mips_ps2.o
	$(AR) -r libsys.a libsys.o xcpt.o syscalls.o irq.o dbg.o mipsdis.o mips_gfx.o mips_ps2.o
	
hello.elf: hello.c libsys.a
	$(CC) $(CFLAGS) -o $@ -Os hello.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

testbench.elf: testbench.c  libsys.a
	$(CC) $(CFLAGS) -O3 -o $@ -DHZ=1000 -DNOSIGNAL -DBATCHMODE -DNOMAIN -Os -g testbench.c paranoia.c delay_mips.c bogomips.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

test_irq.elf: test_irq.c libsys.a
	$(CC) $(CFLAGS) -o $@ test_irq.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

dhry.elf: dhry_1.c dhry_2.c dhry.h libsys.a
	$(CC) $(CFLAGS) -o $@ -DHZ=1000 dhry_1.c dhry_2.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

queens.elf: queens.c libsys.a
	$(CC) $(CFLAGS) -o $@ -DUNIX_Old -DHZ=1000 queens.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

stanford.elf: stanford.c libsys.a
	$(CC) $(CFLAGS) -O3 -o $@ -DHZ=1000 stanford.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

paranoia.elf: paranoia.c libsys.a
	$(CC) $(CFLAGS) -O3 -o $@ -DNOSIGNAL -DBATCHMODE paranoia.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

rmd160_test.elf: rmd160_test.c rmd160.c rmd160.h libsys.a
	$(CC) $(CFLAGS) -O2 -o $@ -DNOSIGNAL -DBATCHMODE rmd160.c rmd160_test.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

Bessel.elf: Bessel.c libsys.a
	$(CC) $(CFLAGS) -o $@ Bessel.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

whet.elf: whet.c libsys.a
	$(CC) $(CFLAGS) -o $@ whet.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

phrasen.elf: phrasen.c libsys.a
	$(CC) $(CFLAGS) -o $@ phrasen.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

dttl.elf: dttl.c random.c libsys.a
	$(CC) $(CFLAGS) -o $@ dttl.c random.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

richards_benchmark.elf: richards_benchmark.c libsys.a
	$(CC) $(CFLAGS) -o $@ richards_benchmark.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

test_exception.elf: test_exception.c libsys.a
	$(CC) $(CFLAGS) -o $@ -O1 test_exception.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

life.elf: life.c libsys.a
	$(CC) $(CFLAGS) -o $@ -g life.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

r3.elf: r3.c libsys.a
	$(CC) $(CFLAGS) -O3 -o $@ -DJMIPS_VGA -O2 r3.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

gunzip.elf: gunzip.c inflate.c crc32.c libsys.a
	$(CC) $(CFLAGS) -o $@ -o $@ gunzip.c inflate.c crc32.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

basic_math.elf: basicmath_small.c   rad2deg.c  cubic.c   isqrt.c libsys.a
	$(CC) $(CFLAGS) -o $@ -o $@ basicmath_small.c rad2deg.c cubic.c isqrt.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

JMAN_SRC= \
	jman/bintree.c \
	jman/camset.c \
	jman/engine.c \
	jman/graph_state.c \
	jman/grid.c \
	jman/imageio.c \
	jman/linklist.c \
	jman/matrix.c \
	jman/object.c \
	jman/render.c \
	jman/ri.c \
	jman/ribgen.c \
	jman/stack.c \
	jman/vars.c

jman_patches.elf:	$(JMAN_SRC) jman/main_patches.c libsys.a
	$(CC) $(CFLAGS) -I../ -o $@ -o $@ jman/main_patches.c $(JMAN_SRC) $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

jman_patchmeshes.elf:	$(JMAN_SRC) jman/main_patchmeshes.c jman/patches2.c libsys.a
	$(CC) $(CFLAGS) -I../ -o $@ -o $@ jman/main_patchmeshes.c jman/patches2.c $(JMAN_SRC) $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

jman_polys.elf:	$(JMAN_SRC) jman/main_polypin.c jman/polys.c  libsys.a
	$(CC) $(CFLAGS) -I../ -o $@ -o $@ jman/main_polypin.c jman/polys.c $(JMAN_SRC) $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

serdump.elf: serdump.c  libsys.a
	$(CC) $(CFLAGS) -O3 -o $@ -O2 serdump.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

pppi.elf: pppissue/test1.c pppissue/utils.c pppissue/pppd.h libsys.a
	$(CC) $(CFLAGS) -O2 -o $@ -O2 pppissue/test1.c pppissue/utils.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

lwl.elf: lwl.c  libsys.a
	$(CC) $(CFLAGS) -O2 -o $@ lwl.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

ucb.elf: ucb.c  libsys.a
	$(CC) $(CFLAGS) -O2 -o $@ ucb.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

test_hpi.elf: hpi.c test_hpi.c cfiflash.c libsys.a
	$(CC) $(CFLAGS) -o $@ -g hpi.c test_hpi.c cfiflash.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin

test_vga.elf: test_vga.c libsys.a
	$(CC) $(CFLAGS) -o $@ test_vga.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

barcode.elf: barcode.c libsys.a
	$(CC) $(CFLAGS) -o $@ barcode.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

lua.elf: lua_init.c libsys.a
	$(CC) $(CFLAGS) -I./lua-5.1.4/etc -I./lua-5.1.4/src -o $@ lua_init.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

mandelbrot.elf: mandelbrot.c libsys.a
	$(CC) $(CFLAGS) -o $@ mandelbrot.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

bogomips.elf: bogomips.c delay_mips.c libsys.a
	$(CC) $(CFLAGS) -DHZ=1000 -o $@ bogomips.c delay_mips.c $(LIBS) >$@.map
	$(OBJDUMP) -d $@ > $@.dis
	$(OBJCOPY) $@ -O binary $@.bin
	$(OBJCOPY) -O srec $@ $@.srec
	$(FLASHGEN) $@.bin $(ENDIAN_FLAGS)

clean:
	rm -rf *.a *.o *.bin *.map *.dis *.srec *.elf $(PROG) > /dev/null
