PORT := 1234 CHECK := diff -q MKDIR_P := mkdir -p ECHO := echo -e NC := \033[0m RED := \033[0;31m GREEN := \033[0;32m YELLOW := \033[1;33m CC := lcc CFLAGS := -nostdlib QEMU := qemu-e2k QEMU_ARGS := GDB ?= e2k-linux-gdb GDB_ARGS := -q --batch --nx --nw -ix gdbinit GDB_BPS := -ex 'b _start' -ex 'b _stop' ifndef EMU GDB_SERVER := gdbserver GDB_SERVER_ARGS := :$(PORT) else GDB_SERVER := $(QEMU) GDB_SERVER_ARGS := -g $(PORT) $(QEMU_ARGS) endif tests := $(subst .s,,$(notdir $(wildcard src/*.s))) executables := $(addprefix build/,$(tests)) logs := $(addprefix build/,$(addsuffix .log,$(tests))) checks := $(addprefix check-,$(tests)) .PHONY: all build logs test gen-test mkdirs clean clean-logs $(checks) all: logs build: mkdirs $(executables) logs: mkdirs $(logs) gen-test: clean-logs logs test test: mkdirs $(checks) mkdirs: @$(MKDIR_P) build clean: clean-logs @$(RM) $(executables) clean-logs: @$(RM) $(logs) $(executables): build/%: src/%.s @$(ECHO) " $(GREEN)build $(NC)$*" @$(CC) $(CFLAGS) -o $@ $< $(logs): build/%.log: build/% src/%.gdb @$(ECHO) " $(GREEN)gen $(NC)$*.log" @$(GDB_SERVER) $(GDB_SERVER_ARGS) $< &> /dev/null & @$(GDB) $(GDB_ARGS) -ex 'file $<' $(GDB_BPS) \ -ex 'target remote :$(PORT)' -x src/$*.gdb > $@ .ONESHELL: $(checks): check-%: build/%.log src/%.log @$(ECHO) -n " $(GREEN)check $(NC)$*" $(CHECK) $^ &> /dev/null if [ $$? -eq 0 ] then $(ECHO) " $(GREEN)OK!$(NC)" true else $(ECHO) " $(RED)FAIL!$(NC)" false fi