]> cloudbase.mooo.com Git - z180-stamp.git/blob - mk/cpm.rules.mk
Add makefiles (replace Tup)
[z180-stamp.git] / mk / cpm.rules.mk
1
2
3 # Define a helper macro for debugging make errors online
4 # you can type "make print-VARIABLE" and it will show you
5 # how that ended up being resolved by all of the included
6 # makefiles.
7 print-%:
8 @echo $*=$($*)
9
10
11
12 #CP/M emulator
13 CPMEMU = zxcc
14
15 #Location of CP/M binaries
16 CPMBIN = /usr/local/lib/cpm/bin80
17
18 #AS = $(CPMEMU) $(CPMBIN)/m80.com
19 AS = $(CPMEMU) slr180.com
20 LN = $(CPMEMU) slrnk+.com
21 #LN = $(CPMEMU) ccpline.com
22
23 RM = rm -f
24
25
26 ASM_OPT := HFS
27
28
29 comma:= ,
30 empty:=
31 space:= $(empty) $(empty)
32
33 ccpline = $(CPMEMU) $(1) -$(subst $(space),$(comma),$(strip $(2)))
34
35 define cpm-asm =
36 COMMAND="$(AS) -$*/$(ASM_OPT)"; \
37 OUTPUT=$$(mktemp); echo $${COMMAND}; \
38 $${COMMAND} < $< > $${OUTPUT}; \
39 grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
40 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
41 exit $${ERROR}
42 endef
43
44 define cpm-link =
45 COMMAND="$(call ccpline, slrnk+, $*/H/M /V \
46 /P:$(PROG_SEG) /D:$(DATA_SEG) $(basename $^) /E /Q)";\
47 OUTPUT=$$(mktemp); echo $${COMMAND};\
48 $${COMMAND} > $${OUTPUT};\
49 ERROR=0;\
50 cat $${OUTPUT};\
51 grep -q ' Duplicate Symbol ' $${OUTPUT} && ERROR=2; \
52 grep -q '\- Previously Defined' $${OUTPUT} && ERROR=2; \
53 [ "$${ERROR}" = "0" ] && grep -q '^ ** ' $${OUTPUT} && ERROR=1 ; \
54 [ "$${ERROR}" != "0" ] && rm -f $@; \
55 exit $${ERROR}
56 endef
57
58 #Use: MAKESYM Filename[.ext][/PXXXX][/DXXXX][/CXXXX]
59 #egrep '^[[:xdigit:]]{4}[[:space:]]+[[:xdigit:]]{4}[[:space:]]+D.*init\.rel' hdrom.map
60 define cpm-mksym =
61 COMMAND="$(CPMEMU) makesym -$^ -/P0 -/D0"; \
62 OUTPUT=$$(mktemp); echo $${COMMAND}; \
63 $${COMMAND} > $${OUTPUT}; \
64 grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
65 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
66 exit $${ERROR}
67 endef
68
69 .SUFFIXES:
70
71
72 %.hex %.lst: %.180
73 @$(cpm-asm)
74
75 %.hex %.map: $(OBJ)
76 @#$(cpm-link)
77 ld80 -o $@ -ms $(@:.hex=.map) -P $(PROG_SEG) -D $(DATA_SEG) $^
78
79 %.rel %.lst: %.180
80 @$(cpm-asm)
81
82 %.c: %.hex
83 srec_cat -o $@ -c_array $* -C_COMpressed -include $< -Intel
84
85 %.sym: %.lst
86 @$(cpm-mksym)
87
88 .PHONY: clean
89 clean:
90 $(RM) *.hex *.rel *.lst *.sym *.map *.c *.h