TOOLS_DIR=../../tools

CFLAGS=-msoft-float -O2 -march=r3000 -I.
LFLAGS=-M -T link.ld
LIB_DIRS=-L . -L /usr/local/mipsel-elf/lib -L /usr/local/lib/gcc/mipsel-elf/4.3.2
LIBS=-lc -lm -lgcc

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=$(TOOLS_DIR)/flashgen_little

PROG = hello testbench test_irq dhry queens stanford paranoia rmd160_test Bessel whet phrasen dttl richards_benchmark

all: $(PROG)

libsys: startup.S init.S kernel.S libsys.c xcpt.c irq.c
	$(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 init.S -o init.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 irq.c -o irq.o
	$(AR) -r libsys.a init.o libsys.o xcpt.o irq.o

hello: hello.c 
	$(CC) $(CFLAGS) -c hello.c
	$(LD) $(LFLAGS) $(LIB_DIRS) hello.o -o $@.elf $(LIBS) >$@.map
	$(OBJDUMP) -d $@.elf > $@.dis
	$(OBJCOPY) $@.elf -O binary $@.bin
	$(OBJCOPY) -O srec $@.elf $@.srec
	$(FLASHGEN) $@.bin

testbench: testbench.c 
	$(CC) $(CFLAGS) -c testbench.c paranoia.c -DNOSIGNAL -DBATCHMODE -DNOMAIN
	$(LD) $(LFLAGS) $(LIB_DIRS) paranoia.o testbench.o -o $@.elf $(LIBS) >$@.map
	$(OBJDUMP) -d $@.elf > $@.dis
	$(OBJCOPY) $@.elf -O binary $@.bin
	$(OBJCOPY) -O srec $@.elf $@.srec
	$(FLASHGEN) $@.bin

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

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

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

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

paranoia: paranoia.c
	$(CC) $(CFLAGS) -DNOSIGNAL -DBATCHMODE -g -c paranoia.c
	$(LD) $(LFLAGS) $(LIB_DIRS) paranoia.o -o $@.elf $(LIBS) >$@.map
	$(OBJDUMP) -d $@.elf > $@.dis
	$(OBJCOPY) $@.elf -O binary $@.bin
	$(OBJCOPY) -O srec $@.elf $@.srec
	$(FLASHGEN) $@.bin

rmd160_test: rmd160_test.c rmd160.c rmd160.h
	$(CC) $(CFLAGS) -DNOSIGNAL -DBATCHMODE -g -c rmd160.c rmd160_test.c
	$(LD) $(LFLAGS) $(LIB_DIRS) rmd160.o rmd160_test.o -o $@.elf $(LIBS) >$@.map
	$(OBJDUMP) -d $@.elf > $@.dis
	$(OBJCOPY) $@.elf -O binary $@.bin
	$(OBJCOPY) -O srec $@.elf $@.srec
	$(FLASHGEN) $@.bin

Bessel: Bessel.c 
	$(CC) $(CFLAGS) -g -c Bessel.c
	$(LD) $(LFLAGS) $(LIB_DIRS) Bessel.o -o $@.elf $(LIBS) >$@.map
	$(OBJDUMP) -d $@.elf > $@.dis
	$(OBJCOPY) $@.elf -O binary $@.bin
	$(OBJCOPY) -O srec $@.elf $@.srec
	$(FLASHGEN) $@.bin

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

phrasen: phrasen.c 
	$(CC) $(CFLAGS) -g -c phrasen.c
	$(LD) $(LFLAGS) $(LIB_DIRS) phrasen.o -o $@.elf $(LIBS) >$@.map
	$(OBJDUMP) -d $@.elf > $@.dis
	$(OBJCOPY) $@.elf -O binary $@.bin
	$(OBJCOPY) -O srec $@.elf $@.srec
	$(FLASHGEN) $@.bin

dttl: dttl.c random.c
	$(CC) $(CFLAGS) -g -c dttl.c random.c
	$(LD) $(LFLAGS) $(LIB_DIRS) random.o dttl.o -o $@.elf $(LIBS) >$@.map
	$(OBJDUMP) -d $@.elf > $@.dis
	$(OBJCOPY) $@.elf -O binary $@.bin
	$(OBJCOPY) -O srec $@.elf $@.srec
	$(FLASHGEN) $@.bin

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

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