]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blob - cbios/Makefile
Makefile: add CPMLDR to dist files. replace echo by printf
[z180-stamp-cpm3.git] / cbios / Makefile
1
2
3 SRC := bioskrnl.180 boot.180 chario.180 drvtbl.180
4 SRC += move.180 time.180 mm.180 misc.180 utils.180
5 SRC += msgbuf.180 conbuf.180 ascip.180 sdio.180 cfio.180
6 SRC += scb.180
7 ALLSRC := $(SRC) ldrbios.180
8
9 INC := config.inc z180reg.inc z180.lib
10
11
12 OBJ := $(SRC:.180=.rel)
13 ALLOBJ := $(ALLSRC:.180=.rel)
14 ALLLST := $(ALLSRC:.180=.lst)
15
16
17 $(foreach X,$(subst =,:=,$(subst ",,$(filter VCS_%,\
18 $(shell autorevision -t sh -o $(CURDIR)/autorevision.cache)))),$(eval $X))
19
20 VERS := $(shell echo "$(VCS_TAG)" | sed -e 's/hexrel-/0./g' -e 's/^v//g')
21
22 ifneq ($(VCS_TICK),0)
23 VERS := $(VERS).$(VCS_TICK)
24 endif
25 ifneq ($(VCS_BRANCH),master)
26 VERS := $(VERS)-$(VCS_BRANCH)
27 endif
28 ifeq ($(VCS_WC_MODIFIED),1)
29 VERS := $(VERS)-dirty
30 endif
31
32
33 SYSFILE = cpm3_$(VERS).sys
34 MAPFILE = bnkbios3_$(VERS).map
35 DIST_NAME = z180-stamp-cpm3_$(VERS).zip
36 DIST_NAME_BIN = z180-stamp-cpm3-bin_$(VERS).zip
37 PREFIX = z180-stamp-cpm3_$(VERS)
38
39 SHELL = /bin/sh
40 CP = cp
41 RM = rm -f
42 GIT = git
43 ZIP = zip
44
45 #CP/M emulator
46 CPMEMU = zxcc
47
48 #Location of CP/M binaries
49 CPMBIN = /usr/local/lib/cpm/bin80
50
51 #AS = $(CPMEMU) $(CPMBIN)/m80.com
52 AS = $(CPMEMU) slr180.com
53 #LN = $(CPMEMU) slrnk+.com
54 #LN = $(CPMEMU) ccpline.com
55
56 AS_OPT := MFS
57
58 AS_QUIET = 1
59 LN_QUIET = 1
60
61 #LNKCMD =
62 LN_VERB = /V
63 LN_PROG = 0
64 LN_DATA = F000
65
66
67 .suffixes:
68 #.suffixes: .180 .rel
69
70 .phony: all
71 all: sys
72
73 .phony: sys bios map ldr
74 sys: $(SYSFILE)
75 bios: bnkbios3.spr
76 map: $(MAPFILE)
77 ldr: cpmldr.com
78
79 cpmldr.com: cpmldr.rel ldrbios.rel
80 ld80 -P 100 -o $@ $^
81
82 $(ALLOBJ): $(INC)
83 boot.rel: version.inc
84
85 version.inc: autorevision.cache
86 @echo update $@
87 @printf "defvers macro\r\n\
88 db '$(VERS)'\r\n\
89 endm\r\n\032" > $@
90
91
92 comma:= ,
93 empty:=
94 space:= $(empty) $(empty)
95
96 ccpline = $(CPMEMU) $(1) -$(subst $(space),$(comma),$(strip $(2)))
97
98 define cpm-asm =
99 COMMAND="$(AS) -$(basename $<)/$(AS_OPT)"; \
100 OUTPUT=$$(mktemp); echo $${COMMAND}; \
101 $${COMMAND} > $${OUTPUT}; \
102 grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
103 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
104 exit $${ERROR}
105 endef
106
107 define cpm-link =
108 COMMAND="$(call ccpline, slrnk+, $(basename $@)/H/M /V \
109 /P:$(LN_PROG) /D:$(LN_DATA) $(basename $^) /E /Q)";\
110 OUTPUT=$$(mktemp); echo $${COMMAND};\
111 $${COMMAND} > $${OUTPUT} || exit 1;\
112 ERROR=0;\
113 cat $${OUTPUT};\
114 grep -q ' Duplicate Symbol ' $${OUTPUT} && ERROR=2; \
115 grep -q '\- Previously Defined' $${OUTPUT} && ERROR=2; \
116 [ "$${ERROR}" = "0" ] && grep -q '^ ** ' $${OUTPUT} && ERROR=1 ; \
117 [ "$${ERROR}" != "0" ] && rm -f $@; \
118 exit $${ERROR}
119 endef
120
121 #link80 bnkbios3[b,q]=bioskrnl,boot,chario,drvtbl,...
122 define cpm-bioslink =
123 COMMAND="$(call ccpline, link80, \
124 $(basename $@)=$(basename $^))[b,q]";\
125 OUTPUT=$$(mktemp); echo $${COMMAND};\
126 $${COMMAND} > $${OUTPUT} || exit 1;\
127 ERROR=0;\
128 grep -Ev '^[@?$$._ 0-9A-Z]{7} [0-9A-F]{4}' $${OUTPUT};\
129 grep -Eq ':|UNRECOGNIZED' $${OUTPUT} && ERROR=2; \
130 [ "$${ERROR}" != "0" ] && rm -f $@; \
131 exit $${ERROR}
132 endef
133
134
135
136 #Use: MAKESYM Filename[.ext][/PXXXX][/DXXXX][/CXXXX]
137 #egrep '^[[:xdigit:]]{4}[[:space:]]+[[:xdigit:]]{4}[[:space:]]+D.*init\.rel' hdrom.map
138 define cpm-mksym =
139 COMMAND="$(CPMEMU) makesym -$^ -/P -D"; \
140 OUTPUT=$$(mktemp); echo $${COMMAND}; \
141 $${COMMAND} > $${OUTPUT}; \
142 grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
143 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
144 exit $${ERROR}
145 endef
146
147 PSEG = $(call SEGMENT-ADDR, 1)
148 DSEG = $(call SEGMENT-ADDR, 2)
149
150 #(call SEGMENT-ADDR,SEGNUM)
151 SEGMENT-ADDR = $(shell dd if=$(SYSFILE) bs=128 count=1 skip=1 2>/dev/null |\
152 awk -vn=$(strip $1) '/BNKBIOS3/ {if (++seg == n) print $$3}')
153
154 $(MAPFILE): $(SYSFILE)
155 ld80 -o /dev/null -ms $@ -P $(PSEG) -D $(DSEG) $(OBJ)
156
157
158 $(SYSFILE): bnkbios3.spr gencpm.dat
159 zxcc gencpm -AUTO
160 @mv cpm3.sys $@
161 @echo
162
163
164 bnkbios3.spr : $(OBJ)
165 @$(cpm-bioslink)
166 @#ld80 -o $@ -ms $(@:.hex=.map) -P $(LN_PROG) -D $(LN_DATA) $^
167
168 %.rel %lst: %.180
169 @$(cpm-asm)
170
171
172 .phony: bin-dist
173 bin-dist: $(SYSFILE) $(MAPFILE) cpmldr.com
174 $(ZIP) -9 $(DIST_NAME_BIN) $(SYSFILE) $(MAPFILE) cpmldr.com
175
176 .phony: dist
177 dist: $(SYSFILE) $(MAPFILE) cpmldr.com
178 $(GIT) archive --format=zip --prefix=$(PREFIX)/ -9 -o $(DIST_NAME) HEAD^{tree}
179 @mkdir -p $(PREFIX)
180 @$(CP) autorevision.cache version.inc $(PREFIX)
181 $(ZIP) -r -9 $(DIST_NAME) $(PREFIX) $(SYSFILE) $(MAPFILE) cpmldr.com
182 @$(RM) -r $(PREFIX)
183
184
185 .phony: clean realclean
186 clean:
187 $(RM) $(ALLOBJ) $(ALLLST) *.sym
188
189 realclean: clean
190 $(RM) *.map *.prn *~
191
192
193 #==================================================================
194
195 %.REL: %.MAC
196 @COMMAND="$(AS) =$<"; \
197 OUTPUT=$$(mktemp); echo $${COMMAND}; \
198 $${COMMAND} > $${OUTPUT}; \
199 grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \
200 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm $@; fi ; \
201 rm $${OUTPUT}; \
202 exit $${ERROR}
203
204
205 %.PRN: %.MAC
206 @COMMAND="$(AS) ,$@=$<"; \
207 OUTPUT=$$(mktemp); echo $${COMMAND}; \
208 $${COMMAND} > $${OUTPUT}; \
209 grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \
210 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; fi ; \
211 rm $${OUTPUT}; \
212 exit $${ERROR}