#
# Default Makefile for each of the tests
# Used if the Makefile in particular test's directory is missing
#

MIPS_PREFIX = /opt/mips
MIPS_TARGET = mipsel-linux-gnu

MIPS_CC = $(MIPS_PREFIX)/bin/$(MIPS_TARGET)-gcc
MIPS_AS = $(MIPS_PREFIX)/bin/$(MIPS_TARGET)-as
MIPS_LD = $(MIPS_PREFIX)/bin/$(MIPS_TARGET)-ld
MIPS_OBJCOPY = $(MIPS_PREFIX)/bin/$(MIPS_TARGET)-objcopy

#
# -G 0		... threshold for putting objects into small data/bss sections
# -fno-pic	... don't generate position independent code using $gp
# -mno-abicalls	... don't generate SVR4-style position independent code
# -fno-builtin  ... don't recognize built-in functions without __builtin_ prefix
#

CCFLAGS = -O3 -mips3 -mabi=32 -mgp32 -msoft-float -mlong32 -G 0 -mno-abicalls -fno-pic -ffreestanding -pipe -Wall -g3 -I../..
LDFLAGS = -mips3 -G 0 -static -g

###

LDSFILE = ../binary.lds

###

FIRST_OBJECT = sys.o
TEST_OBJECT = test.o
KERNEL_OBJECTS := $(FIRST_OBJECT) $(wildcard ../prereq/*.o) $(TEST_OBJECT)
KERNEL_TARGET = kernel.bin

### phony targets

.PHONY:	all clean distclean

### default target

all: $(KERNEL_TARGET)

### default pattern

%.o: %.c
	$(MIPS_CC) $(CCFLAGS) -c $< -o $@

### binary image

$(KERNEL_TARGET): $(LDSFILE) $(KERNEL_OBJECTS)
	$(MIPS_LD) $(LDFLAGS) -T $(LDSFILE) $(KERNEL_OBJECTS) -Map $(basename $@).map -o $(basename $@).raw
	$(MIPS_OBJCOPY) -O binary $(basename $@).raw $@

### maintenance

clean:
	rm -f $(FIRST_OBJECT) $(TEST_OBJECT)
	rm -fr *~ core

distclean: clean
	rm -f $(KERNEL_TARGET) $(basename $(KERNEL_TARGET)).map $(basename $(KERNEL_TARGET)).raw
