76 lines
1.5 KiB
Makefile
76 lines
1.5 KiB
Makefile
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
|