]> cloudbase.mooo.com Git - z180-stamp.git/blame - mk/cpm.rules.mk
Refactor makefiles
[z180-stamp.git] / mk / cpm.rules.mk
CommitLineData
8a500c7f
L
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.
7print-%:
8 @echo $*=$($*)
9
10
11
12#CP/M emulator
13CPMEMU = zxcc
14
15#Location of CP/M binaries
16CPMBIN = /usr/local/lib/cpm/bin80
17
18#AS = $(CPMEMU) $(CPMBIN)/m80.com
19AS = $(CPMEMU) slr180.com
20LN = $(CPMEMU) slrnk+.com
21#LN = $(CPMEMU) ccpline.com
22
23RM = rm -f
24
25
26ASM_OPT := HFS
27
28
29comma:= ,
30empty:=
31space:= $(empty) $(empty)
32
33ccpline = $(CPMEMU) $(1) -$(subst $(space),$(comma),$(strip $(2)))
34
35define cpm-asm =
36COMMAND="$(AS) -$*/$(ASM_OPT)"; \
37OUTPUT=$$(mktemp); echo $${COMMAND}; \
38$${COMMAND} < $< > $${OUTPUT}; \
39grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
40if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
41exit $${ERROR}
42endef
43
44define 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}
56endef
57
58#Use: MAKESYM Filename[.ext][/PXXXX][/DXXXX][/CXXXX]
59#egrep '^[[:xdigit:]]{4}[[:space:]]+[[:xdigit:]]{4}[[:space:]]+D.*init\.rel' hdrom.map
60define cpm-mksym =
61COMMAND="$(CPMEMU) makesym -$^ -/P0 -/D0"; \
62OUTPUT=$$(mktemp); echo $${COMMAND}; \
63$${COMMAND} > $${OUTPUT}; \
64grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
65if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
66exit $${ERROR}
67endef
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
89clean:
90 $(RM) *.hex *.rel *.lst *.sym *.map *.c *.h