summaryrefslogtreecommitdiff
path: root/mk
diff options
context:
space:
mode:
authorLeo C2019-05-29 22:26:45 +0200
committerLeo C2019-05-29 23:03:12 +0200
commit8a500c7f3634212263ab1291c139d9c6a8967b8b (patch)
tree224d0479e8853b21b865b35b4fe4b8144cefdbf3 /mk
parent24ba732a4e11bae37bd42f3c9317a5d54597b11a (diff)
downloadz180-stamp-8a500c7f3634212263ab1291c139d9c6a8967b8b.zip
Add makefiles (replace Tup)
Diffstat (limited to 'mk')
-rw-r--r--mk/avr.rules.mk106
-rw-r--r--mk/cpm.rules.mk90
2 files changed, 196 insertions, 0 deletions
diff --git a/mk/avr.rules.mk b/mk/avr.rules.mk
new file mode 100644
index 0000000..155397c
--- /dev/null
+++ b/mk/avr.rules.mk
@@ -0,0 +1,106 @@
+
+
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+RM = rm -f
+COPY = cp
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F:%.o=%.d)
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) $(CFLAGS) $(GENDEPFLAGS)
+
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
+AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE)
+
+# Be silent per default, but 'make V=1' will show all compiler calls.
+ifneq ($(V),1)
+Q := @
+NULL := 2>/dev/null
+else
+QP := \#
+endif
+
+.PHONY: elf hex lss sym size
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+size: $(TARGET).elf
+ @$(QP)printf " SIZE $(TARGET).elf\n"
+ $(Q)$(SIZE) $(TARGET).elf
+
+# Program the device.
+.PHONY: flash fuses
+flash: $(TARGET).hex
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH)
+
+fuses:
+ $(AVRDUDE) $(AVRDUDE_FLAGS) -u -U hfuse:w:$(HFUSE):m -U lfuse:w:$(LFUSE):m
+
+
+.SUFFIXES: .elf .hex .eep .lss .sym
+
+%.hex: %.elf
+ @$(QP)printf " OBJCOPY $(*).hex\n"
+ $(Q)$(OBJCOPY) -Oihex -R .eeprom $< $@
+
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+ @$(QP)printf " OBJDUMP $@\n"
+ $(Q)$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+ @$(QP)printf " NM $@\n"
+ $(Q)$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf %.map: $(OBJ)
+ @$(QP)printf " LD $@\n"
+ $(Q)$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o: %.c
+ @$(QP)printf " CC $<\n"
+ $(Q)$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Target: clean project.
+.PHONY: clean distclean
+clean:
+ @$(QP)printf " CLEAN\n"
+ $(Q)$(RM) $(TARGET).elf $(TARGET).lss $(TARGET).map $(TARGET).sym \
+ $(OBJ) $(SRC:.c=.s) .dep/*
+
+distclean: clean
+ @$(QP)printf " DISTCLEAN\n"
+ $(Q)$(RM) $(TARGET).hex $(TARGET).tar.gz
+
+.PHONY: dist
+dist: build
+ tar cvfz $(TARGET).tar.gz \
+ $(SRC) \
+ $(TARGET).hex $(TARGET).eep
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
diff --git a/mk/cpm.rules.mk b/mk/cpm.rules.mk
new file mode 100644
index 0000000..a8ba51c
--- /dev/null
+++ b/mk/cpm.rules.mk
@@ -0,0 +1,90 @@
+
+
+# Define a helper macro for debugging make errors online
+# you can type "make print-VARIABLE" and it will show you
+# how that ended up being resolved by all of the included
+# makefiles.
+print-%:
+ @echo $*=$($*)
+
+
+
+#CP/M emulator
+CPMEMU = zxcc
+
+#Location of CP/M binaries
+CPMBIN = /usr/local/lib/cpm/bin80
+
+#AS = $(CPMEMU) $(CPMBIN)/m80.com
+AS = $(CPMEMU) slr180.com
+LN = $(CPMEMU) slrnk+.com
+#LN = $(CPMEMU) ccpline.com
+
+RM = rm -f
+
+
+ASM_OPT := HFS
+
+
+comma:= ,
+empty:=
+space:= $(empty) $(empty)
+
+ccpline = $(CPMEMU) $(1) -$(subst $(space),$(comma),$(strip $(2)))
+
+define cpm-asm =
+COMMAND="$(AS) -$*/$(ASM_OPT)"; \
+OUTPUT=$$(mktemp); echo $${COMMAND}; \
+$${COMMAND} < $< > $${OUTPUT}; \
+grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
+if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
+exit $${ERROR}
+endef
+
+define cpm-link =
+ COMMAND="$(call ccpline, slrnk+, $*/H/M /V \
+ /P:$(PROG_SEG) /D:$(DATA_SEG) $(basename $^) /E /Q)";\
+ OUTPUT=$$(mktemp); echo $${COMMAND};\
+ $${COMMAND} > $${OUTPUT};\
+ ERROR=0;\
+ cat $${OUTPUT};\
+ grep -q ' Duplicate Symbol ' $${OUTPUT} && ERROR=2; \
+ grep -q '\- Previously Defined' $${OUTPUT} && ERROR=2; \
+ [ "$${ERROR}" = "0" ] && grep -q '^ ** ' $${OUTPUT} && ERROR=1 ; \
+ [ "$${ERROR}" != "0" ] && rm -f $@; \
+ exit $${ERROR}
+endef
+
+#Use: MAKESYM Filename[.ext][/PXXXX][/DXXXX][/CXXXX]
+#egrep '^[[:xdigit:]]{4}[[:space:]]+[[:xdigit:]]{4}[[:space:]]+D.*init\.rel' hdrom.map
+define cpm-mksym =
+COMMAND="$(CPMEMU) makesym -$^ -/P0 -/D0"; \
+OUTPUT=$$(mktemp); echo $${COMMAND}; \
+$${COMMAND} > $${OUTPUT}; \
+grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
+if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
+exit $${ERROR}
+endef
+
+.SUFFIXES:
+
+
+%.hex %.lst: %.180
+ @$(cpm-asm)
+
+%.hex %.map: $(OBJ)
+ @#$(cpm-link)
+ ld80 -o $@ -ms $(@:.hex=.map) -P $(PROG_SEG) -D $(DATA_SEG) $^
+
+%.rel %.lst: %.180
+ @$(cpm-asm)
+
+%.c: %.hex
+ srec_cat -o $@ -c_array $* -C_COMpressed -include $< -Intel
+
+%.sym: %.lst
+ @$(cpm-mksym)
+
+.PHONY: clean
+clean:
+ $(RM) *.hex *.rel *.lst *.sym *.map *.c *.h