DEBUG := #-DDEBUG

LIB430COREDIR = ..

TEST_CSRC = \
	    mov_constants.s \
	    mov_addressing_dest.s \
	    mov_addressing_source.s \
	    add.s

TEST_OUT = $(patsubst %.c,%.o,$(patsubst %.s,%.o,$(TEST_CSRC)))

all: $(LIB430COREDIR)/lib430core.a $(TEST_OUT)

$(LIB430COREDIR)/lib430core.a:
	@$(MAKE) -C ..

.c.o:
	@echo "Testing" $< "..."
	@msp430-elf32-gcc -T../link.ld -O0 -ggdb -g3 $< -o tmp.elf -nostdlib -lgcc -lc
	@msp430-elf32-objcopy -Obinary tmp.elf tmp.bin
	@echo "#define TESTBIN \\" > test.h
	@od -t x1 tmp.bin | awk '{for (i=2; i<=NF; i++) printf "0x" $$i ", "}' >> test.h
	@printf "\n#define TESTSIZE %u \n" $$(msp430-elf32-objdump tmp.elf -Dj .text | grep -E "^\s+[0-9a-fA-F]+:" | wc -l) >> test.h
	@echo >> test.h
	@gcc -Os -ggdb -g3 -Wall -W -pedantic $(DEBUG) -I../src -o tmp \
		test_$< -L$(LIB430COREDIR) -l430core
	@./tmp
	@rm tmp.elf tmp.bin tmp test.h

.s.o:
	@echo "Testing" $< "..."
	@msp430-elf32-gcc -T../link.ld -O0 $< -o tmp.elf -nostdlib -lgcc -lc
	@msp430-elf32-objcopy -Obinary tmp.elf tmp.bin
	@echo "#define TESTBIN \\" > test.h
	@od -t x1 tmp.bin | awk '{for (i=2; i<=NF; i++) printf "0x" $$i ", "}' >> test.h
	@printf "\n#define TESTSIZE %u \n" $$(msp430-elf32-objdump tmp.elf -Dj .text | grep -E "^\s+[0-9a-fA-F]+:" | wc -l) >> test.h
	@echo >> test.h
	@gcc -Os -ggdb -g3 -Wall -W -pedantic $(DEBUG) -I../src -o tmp \
		test_$(patsubst %.s,%.c,$<) -L$(LIB430COREDIR) -l430core
	@./tmp
	@rm tmp.elf tmp.bin tmp test.h