1#!/bin/sh
2set -e
3
4cat <<EOF
5rule cxx
6    command = $CXX $CFLAGS \$flags -I. -c -o \$out \$in -MMD -MF \$out.d
7    description = CXX \$in
8    depfile = \$out.d
9    deps = gcc
10    
11rule library
12    command = $AR \$out \$in
13    description = AR \$in
14
15rule link
16    command = $CXX $LDFLAGS -o \$out \$in \$flags $LIBS
17    description = LINK \$in
18
19rule test
20    command = \$in && touch \$out
21    description = TEST \$in
22
23rule strip
24    command = cp -f \$in \$out && $STRIP \$out
25    description = STRIP \$in
26EOF
27
28buildlibrary() {
29    local lib
30    lib=$1
31    shift
32
33    local flags
34    flags=
35    while true; do
36        case $1 in
37            -*)
38                flags="$flags $1"
39                shift
40                ;;
41
42            *)
43                break
44        esac
45    done
46
47    local oobjs
48	local dobjs
49    oobjs=
50	dobjs=
51    for src in "$@"; do
52        local obj
53        obj="$OBJDIR/opt/${src%%.c*}.o"
54        oobjs="$oobjs $obj"
55
56        echo build $obj : cxx $src
57        echo "    flags=$flags $COPTFLAGS"
58
59        obj="$OBJDIR/dbg/${src%%.c*}.o"
60        dobjs="$dobjs $obj"
61
62        echo build $obj : cxx $src
63        echo "    flags=$flags $CDBGFLAGS"
64    done
65
66    echo build $OBJDIR/opt/$lib : library $oobjs
67    echo build $OBJDIR/dbg/$lib : library $dobjs
68}
69
70buildprogram() {
71    local prog
72    prog=$1
73    shift
74
75    local flags
76    flags=
77    while true; do
78        case $1 in
79            -*)
80                flags="$flags $1"
81                shift
82                ;;
83
84            *)
85                break
86        esac
87    done
88
89    local oobjs
90	local dobjs
91    oobjs=
92	dobjs=
93    for src in "$@"; do
94        oobjs="$oobjs $OBJDIR/opt/$src"
95        dobjs="$dobjs $OBJDIR/dbg/$src"
96    done
97
98    echo build $prog-debug$EXTENSION : link $dobjs
99    echo "    flags=$flags $LDDBGFLAGS"
100
101    echo build $prog$EXTENSION : link $oobjs
102    echo "    flags=$flags $LDOPTFLAGS"
103
104}
105
106buildsimpleprogram() {
107	local prog
108	prog=$1
109	shift
110
111    local flags
112    flags=
113    while true; do
114        case $1 in
115            -*)
116                flags="$flags $1"
117                shift
118                ;;
119
120            *)
121                break
122        esac
123    done
124
125	local src
126	src=$1
127	shift
128
129	buildlibrary lib$prog.a $flags $src
130	buildprogram $prog lib$prog.a "$@"
131}
132
133runtest() {
134    local prog
135    prog=$1
136    shift
137
138    buildlibrary lib$prog.a \
139        "$@"
140
141    buildprogram $OBJDIR/$prog \
142        lib$prog.a \
143        libbackend.a \
144		libagg.a \
145        libfmt.a
146
147    echo build $OBJDIR/$prog.stamp : test $OBJDIR/$prog-debug$EXTENSION
148}
149
150buildlibrary libagg.a \
151	-Idep/agg/include \
152	dep/stb/stb_image_write.c \
153	dep/agg/src/*.cpp
154
155buildlibrary libfmt.a \
156    dep/fmt/format.cc \
157    dep/fmt/posix.cc \
158
159buildlibrary libbackend.a \
160	lib/imagereader/diskcopyimagereader.cc \
161	lib/imagereader/imagereader.cc \
162	lib/imagereader/imgimagereader.cc \
163	lib/imagereader/jv3imagereader.cc \
164	lib/imagewriter/d64imagewriter.cc \
165	lib/imagewriter/diskcopyimagewriter.cc \
166	lib/imagewriter/imagewriter.cc \
167	lib/imagewriter/imgimagewriter.cc \
168	lib/imagewriter/ldbsimagewriter.cc \
169    arch/aeslanier/decoder.cc \
170    arch/amiga/decoder.cc \
171    arch/amiga/encoder.cc \
172    arch/amiga/amiga.cc \
173    arch/apple2/decoder.cc \
174    arch/brother/decoder.cc \
175    arch/brother/encoder.cc \
176    arch/c64/decoder.cc \
177    arch/f85/decoder.cc \
178    arch/fb100/decoder.cc \
179    arch/ibm/decoder.cc \
180    arch/ibm/encoder.cc \
181    arch/macintosh/decoder.cc \
182    arch/macintosh/encoder.cc \
183    arch/micropolis/decoder.cc \
184    arch/mx/decoder.cc \
185	arch/tids990/decoder.cc \
186	arch/tids990/encoder.cc \
187    arch/victor9k/decoder.cc \
188    arch/zilogmcz/decoder.cc \
189    lib/bytes.cc \
190    lib/crc.cc \
191    lib/dataspec.cc \
192    lib/decoders/decoders.cc \
193    lib/decoders/fluxmapreader.cc \
194    lib/decoders/fmmfm.cc \
195    lib/encoders/encoders.cc \
196    lib/flags.cc \
197    lib/fluxmap.cc \
198    lib/fluxsink/fluxsink.cc \
199    lib/fluxsink/hardwarefluxsink.cc \
200    lib/fluxsink/sqlitefluxsink.cc \
201    lib/fluxsource/fluxsource.cc \
202    lib/fluxsource/hardwarefluxsource.cc \
203    lib/fluxsource/kryoflux.cc \
204    lib/fluxsource/sqlitefluxsource.cc \
205    lib/fluxsource/streamfluxsource.cc \
206    lib/usb/usb.cc \
207    lib/usb/fluxengineusb.cc \
208    lib/usb/greaseweazle.cc \
209    lib/usb/greaseweazleusb.cc \
210    lib/globals.cc \
211    lib/hexdump.cc \
212    lib/ldbs.cc \
213    lib/reader.cc \
214    lib/sector.cc \
215    lib/sectorset.cc \
216    lib/sql.cc \
217	lib/utils.cc \
218    lib/visualiser.cc \
219    lib/writer.cc \
220
221buildlibrary libfrontend.a \
222	src/fe-analysedriveresponse.cc \
223    src/fe-cwftoflux.cc \
224    src/fe-erase.cc \
225    src/fe-fluxtoau.cc \
226    src/fe-fluxtoscp.cc \
227    src/fe-fluxtovcd.cc \
228    src/fe-image.cc \
229    src/fe-inspect.cc \
230    src/fe-readadfs.cc \
231    src/fe-readaeslanier.cc \
232    src/fe-readamiga.cc \
233    src/fe-readampro.cc \
234    src/fe-readapple2.cc \
235    src/fe-readatarist.cc \
236    src/fe-readbrother.cc \
237    src/fe-readc64.cc \
238    src/fe-readdfs.cc \
239    src/fe-readf85.cc \
240    src/fe-readfb100.cc \
241    src/fe-readibm.cc \
242    src/fe-readmac.cc \
243    src/fe-readmicropolis.cc \
244    src/fe-readmx.cc \
245	src/fe-readtids990.cc \
246    src/fe-readvictor9k.cc \
247    src/fe-readzilogmcz.cc \
248    src/fe-rpm.cc \
249    src/fe-scptoflux.cc \
250    src/fe-seek.cc \
251    src/fe-testbandwidth.cc \
252    src/fe-testvoltages.cc \
253    src/fe-upgradefluxfile.cc \
254    src/fe-writeamiga.cc \
255    src/fe-writebrother.cc \
256    src/fe-writeibm.cc \
257    src/fe-writemac.cc \
258    src/fe-writetids990.cc \
259    src/fe-writeflux.cc \
260    src/fe-writetestpattern.cc \
261    src/fluxengine.cc \
262
263buildprogram fluxengine \
264    libfrontend.a \
265    libbackend.a \
266    libfmt.a \
267	libagg.a \
268
269buildlibrary libemu.a \
270    dep/emu/fnmatch.c
271
272buildsimpleprogram brother120tool \
273	-Idep/emu \
274    tools/brother120tool.cc \
275    libbackend.a \
276    libemu.a \
277    libfmt.a \
278
279buildsimpleprogram brother240tool \
280	-Idep/emu \
281    tools/brother240tool.cc \
282    libbackend.a \
283    libemu.a \
284    libfmt.a \
285
286runtest agg-test			tests/agg.cc
287runtest amiga-test          tests/amiga.cc
288runtest bitaccumulator-test tests/bitaccumulator.cc
289runtest bytes-test          tests/bytes.cc
290runtest compression-test    tests/compression.cc
291runtest dataspec-test       tests/dataspec.cc
292runtest flags-test          tests/flags.cc
293runtest fluxpattern-test    tests/fluxpattern.cc
294runtest fmmfm-test          tests/fmmfm.cc
295runtest greaseweazle-test   tests/greaseweazle.cc
296runtest kryoflux-test       tests/kryoflux.cc
297runtest ldbs-test           tests/ldbs.cc
298
299