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