-SDCC = gcc
-SDCCFLAGS = -Wall
+# Port specification for compiling on the host machines version of gcc
+SDCC = $(shell ( sh -c "gcc --version" 2>&1 ) > /dev/null && echo gcc || echo cc)
+SDCCFLAGS = -DPORT_HOST=1 -Wall -fsigned-char -fpack-struct -DREENTRANT= -I$(top_builddir) -I$(top_srcdir)
EXEEXT = .bin
+OBJEXT = .o
+INC_DIR = .
-EXTRAS = fwk/lib/testfwk$(OBJEXT) ports/$(PORT)/support$(OBJEXT)
+# otherwise `make` deletes testfwk.o and `make -j` will fail
+.PRECIOUS: $(PORT_CASES_DIR)/%$(OBJEXT)
-$(PORT_SUBRESULTS_DIR)/%.out: $(PORT_CASES_DIR)/%$(EXEEXT)
- mkdir -p `dirname $@`
+# Required extras
+EXTRAS = $(PORT_CASES_DIR)/testfwk$(OBJEXT) $(PORT_CASES_DIR)/support$(OBJEXT)
+
+%.out: %$(EXEEXT)
+ mkdir -p $(dir $@)
-$< > $@
- if grep -q FAIL $@; then echo FAILURES in $@; fi
+ -grep -n FAIL $@ /dev/null || true
%$(EXEEXT): %$(OBJEXT) $(EXTRAS)
- $(SDCC) $(SDCCFLAGS) -o $@ $< $(EXTRAS)
+ $(SDCC) $(SDCCFLAGS) -o $@ $< $(EXTRAS) -lm
+
+%$(OBJEXT): %.c
+ $(SDCC) $(SDCCFLAGS) -c $< -o $@
-%$(OBJEXT): %.c fwk/include/*.h
+$(PORT_CASES_DIR)/%$(OBJEXT): $(PORTS_DIR)/$(PORT)/%.c
$(SDCC) $(SDCCFLAGS) -c $< -o $@
+
+$(PORT_CASES_DIR)/%$(OBJEXT): fwk/lib/%.c
+ $(SDCC) $(SDCCFLAGS) -c $< -o $@
+
+_clean: