diff options
author | Leo C | 2019-05-29 22:26:45 +0200 |
---|---|---|
committer | Leo C | 2019-05-29 23:03:12 +0200 |
commit | 8a500c7f3634212263ab1291c139d9c6a8967b8b (patch) | |
tree | 224d0479e8853b21b865b35b4fe4b8144cefdbf3 /mk | |
parent | 24ba732a4e11bae37bd42f3c9317a5d54597b11a (diff) | |
download | z180-stamp-8a500c7f3634212263ab1291c139d9c6a8967b8b.zip |
Add makefiles (replace Tup)
Diffstat (limited to 'mk')
-rw-r--r-- | mk/avr.rules.mk | 106 | ||||
-rw-r--r-- | mk/cpm.rules.mk | 90 |
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 |