]> cloudbase.mooo.com Git - z180-stamp.git/blob - Z180/Makefile
63483a07187e0d566d5956085910373f63fe4e6b
[z180-stamp.git] / Z180 / Makefile
1
2
3 SRC := r3init.180 ddtz.180
4 SRC += fifoio.180 msgbuf.180 ser1-i.180 console.180
5 SRC += romend.180
6
7 INC := config.inc z180reg.inc z180.lib
8
9 OBJ := $(SRC:.180=.rel)
10
11 #CP/M emulator
12 CPMEMU = zxcc
13
14 #Location of CP/M binaries
15 CPMBIN = /usr/local/lib/cpm/bin80
16
17 #AS = $(CPMEMU) $(CPMBIN)/m80.com
18 AS = $(CPMEMU) slr180.com
19 LN = $(CPMEMU) slrnk+.com
20 #LN = $(CPMEMU) ccpline.com
21
22 AS_OPT := MFS
23
24 AS_QUIET = 1
25 LN_QUIET = 1
26
27 #LNKCMD =
28 LN_VERB = /V
29 LN_PROG = 0
30 LN_DATA = C000
31
32
33 .suffixes:
34 #.suffixes: .180 .rel
35
36 .phony: all
37 all: ../stm32/hdrom.c ../stm32/hdrom.h
38
39 $(OBJ): $(INC)
40
41 ../stm32/hdrom.h: ../stm32/hdrom.c
42
43 comma:= ,
44 empty:=
45 space:= $(empty) $(empty)
46
47 ccpline = $(CPMEMU) $(1) -$(subst $(space),$(comma),$(strip $(2)))
48
49 define cpm-asm =
50 COMMAND="$(AS) -$(basename $<)/$(AS_OPT)"; \
51 OUTPUT=$$(mktemp); echo $${COMMAND}; \
52 $${COMMAND} > $${OUTPUT}; \
53 grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
54 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
55 exit $${ERROR}
56 endef
57
58 define cpm-link =
59 COMMAND="$(call ccpline, slrnk+, $(basename $@)/H/M /V \
60 /P:$(LN_PROG) /D:$(LN_DATA) $(basename $^) /E /Q)";\
61 OUTPUT=$$(mktemp); echo $${COMMAND};\
62 $${COMMAND} > $${OUTPUT};\
63 ERROR=0;\
64 cat $${OUTPUT};\
65 grep -q ' Duplicate Symbol ' $${OUTPUT} && ERROR=2; \
66 grep -q '\- Previously Defined' $${OUTPUT} && ERROR=2; \
67 [ "$${ERROR}" = "0" ] && grep -q '^ ** ' $${OUTPUT} && ERROR=1 ; \
68 [ "$${ERROR}" != "0" ] && rm -f $@; \
69 exit $${ERROR}
70 endef
71
72 #Use: MAKESYM Filename[.ext][/PXXXX][/DXXXX][/CXXXX]
73 #egrep '^[[:xdigit:]]{4}[[:space:]]+[[:xdigit:]]{4}[[:space:]]+D.*r3init\.rel' hdrom.map
74 define cpm-mksym =
75 COMMAND="$(CPMEMU) makesym -$^ -/P -D"; \
76 OUTPUT=$$(mktemp); echo $${COMMAND}; \
77 $${COMMAND} > $${OUTPUT}; \
78 grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
79 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
80 exit $${ERROR}
81 endef
82
83 ../stm32/hdrom.c: hdrom.hex
84 srec_cat -o $@ -c_array $(basename $<) -C_COMpressed -include $< -Intel
85
86 hdrom.hex : $(OBJ)
87 @#$(cpm-link)
88 ld80 -o $@ -ms $(@:.hex=.map) -P $(LN_PROG) -D $(LN_DATA) $^
89
90 %.rel %lst: %.180
91 @$(cpm-asm)
92
93 hdrom.map: hdrom.hex
94
95 %.sym: hdrom.map %.lst
96 @$(cpm-mksym)
97
98 .phony: clean realclean
99 clean:
100 rm -f $(OBJ) $(OBJ:.rel=.lst) $(OBJ:.rel=.sym) hdrom.hex
101
102 realclean: clean
103 rm -f *.prn *~ hdrom.map
104
105
106 #==================================================================
107
108 %.REL: %.MAC
109 @COMMAND="$(AS) =$<"; \
110 OUTPUT=$$(mktemp); echo $${COMMAND}; \
111 $${COMMAND} > $${OUTPUT}; \
112 grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \
113 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm $@; fi ; \
114 rm $${OUTPUT}; \
115 exit $${ERROR}
116
117
118 %.PRN: %.MAC
119 @COMMAND="$(AS) ,$@=$<"; \
120 OUTPUT=$$(mktemp); echo $${COMMAND}; \
121 $${COMMAND} > $${OUTPUT}; \
122 grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \
123 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; fi ; \
124 rm $${OUTPUT}; \
125 exit $${ERROR}
126