Files
fluxengine/mkninja.sh
David Given f634988356 Add support for emitting index sync bytes to the Northstar encoder. This tells
the FluxEngine to wait for the next index pulse before continuing the write.
This also allows FluxEngine to decode its own encoded bytestreams, allowing
encodedecodetest to work.
2022-03-14 22:11:08 +01:00

684 lines
16 KiB
Bash

#!/bin/sh
set -e
cat <<EOF
rule cxx
command = $CXX $CXXFLAGS \$flags -I. -c -o \$out \$in -MMD -MF \$out.d
description = CXX \$out
depfile = \$out.d
deps = gcc
rule cc
command = $CC $CFLAGS \$flags -I. -c -o \$out \$in -MMD -MF \$out.d
description = CC \$out
depfile = \$out.d
deps = gcc
rule cobjc
command = $COBJC $CFLAGS \$flags -I. -c -o \$out \$in -MMD -MF \$out.d
description = COBJC \$out
depfile = \$out.d
deps = gcc
rule proto
command = (echo \$in > \$def) && $PROTOC \$flags \$in
description = PROTO \$in
restat = yes
rule protoencode
command = (echo '#include <string>' && echo 'static const unsigned char data[] = {' && $PROTOC \$flags --encode=\$messagetype \$\$(cat \$def)< \$in > \$out.bin && $XXD -i < \$out.bin && echo '}; extern std::string \$name(); std::string \$name() { return std::string((const char*)data, sizeof(data)); }') > \$out
description = PROTOENCODE \$in
restat = yes
rule binencode
command = xxd -i \$in > \$out
description = XXD \$in
restat = true
rule library
command = $AR \$out \$in && $RANLIB \$out
description = AR \$in
rule link
command = $CXX $LDFLAGS -o \$out \$in \$flags $LIBS
description = LINK \$in
rule linkgui
command = $CXX $LDFLAGS $GUILDFLAGS -o \$out \$in \$flags $LIBS $GUILIBS
description = LINK-GUI \$in
rule test
command = \$in && touch \$out
description = TEST \$in
rule encodedecode
command = sh scripts/encodedecodetest.sh \$format \$fluxx \$configs > \$out
description = ENCODEDECODE \$fluxx \$format
rule strip
command = cp -f \$in \$out && $STRIP \$out
description = STRIP \$in
rule mktable
command = sh scripts/mktable.sh \$kind \$words > \$out
description = MKTABLE \$kind
restat = true
EOF
buildlibrary() {
local lib
lib=$1
shift
local flags
flags=
local deps
deps=
while true; do
case $1 in
-d)
deps="$deps $2"
shift
shift
;;
-*)
flags="$flags $1"
shift
;;
*)
break
esac
done
local oobjs
local dobjs
oobjs=
dobjs=
for src in "$@"; do
local obj
local dobj
obj="$OBJDIR/opt/${src%%.c*}.o"
oobjs="$oobjs $obj"
dobj="$OBJDIR/dbg/${src%%.c*}.o"
dobjs="$dobjs $dobj"
case "${src##*.}" in
m)
echo "build $obj : cobjc $src | $deps"
echo " flags=$flags $COPTFLAGS"
echo "build $dobj : cobjc $src | $deps"
echo " flags=$flags $CDBGFLAGS"
;;
c)
echo "build $obj : cc $src | $deps"
echo " flags=$flags $COPTFLAGS"
echo "build $dobj : cc $src | $deps"
echo " flags=$flags $CDBGFLAGS"
;;
cc|cpp)
echo "build $obj : cxx $src | $deps"
echo " flags=$flags $COPTFLAGS"
echo "build $dobj : cxx $src | $deps"
echo " flags=$flags $CDBGFLAGS"
;;
*)
echo "Unknown file extension" >&2
exit 1
;;
esac
done
echo build $OBJDIR/opt/$lib : library $oobjs
echo build $OBJDIR/dbg/$lib : library $dobjs
}
buildproto() {
local lib
lib=$1
shift
local def
def=$OBJDIR/proto/${lib%%.a}.def
local flags
flags=
local deps
deps=
while true; do
case $1 in
-d)
deps="$deps $2"
shift
shift
;;
-*)
flags="$flags $1"
shift
;;
*)
break
esac
done
local cfiles
local hfiles
cfiles=
hfiles=
for src in "$@"; do
local cfile
local hfile
cfile="$OBJDIR/proto/${src%%.proto}.pb.cc"
hfile="$OBJDIR/proto/${src%%.proto}.pb.h"
cfiles="$cfiles $cfile"
hfiles="$hfiles $hfile"
done
echo "build $cfiles $hfiles $def : proto $@ | $deps"
echo " flags=$flags --cpp_out=$OBJDIR/proto"
echo " def=$def"
buildlibrary $lib -I$OBJDIR/proto $cfiles
}
buildencodedproto() {
local def
local message
local name
local input
local output
def=$1
message=$2
name=$3
input=$4
output=$5
echo "build $output : protoencode $input | $def"
echo " name=$name"
echo " def=$def"
echo " messagetype=$message"
}
buildprogram() {
local prog
prog=$1
shift
local flags
flags=
local rule
rule=link
while true; do
case $1 in
-rule)
rule=$2
shift
shift
;;
-*)
flags="$flags $1"
shift
;;
*)
break
esac
done
local oobjs
local dobjs
oobjs=
dobjs=
for src in "$@"; do
oobjs="$oobjs $OBJDIR/opt/$src"
dobjs="$dobjs $OBJDIR/dbg/$src"
done
echo build $prog-debug$EXTENSION : $rule $dobjs
echo " flags=$flags $LDDBGFLAGS"
echo build $prog$EXTENSION-unstripped : $rule $oobjs
echo " flags=$flags $LDOPTFLAGS"
echo build $prog$EXTENSION : strip $prog$EXTENSION-unstripped
}
buildsimpleprogram() {
local prog
prog=$1
shift
local flags
flags=
while true; do
case $1 in
-*)
flags="$flags $1"
shift
;;
*)
break
esac
done
local src
src=$1
shift
buildlibrary lib$prog.a $flags $src
buildprogram $prog lib$prog.a "$@"
}
buildmktable() {
local kind
local out
kind=$1
out=$2
shift
shift
echo "build $out : mktable scripts/mktable.sh"
echo " words=$@"
echo " kind=$kind"
}
runtest() {
local prog
prog=$1
shift
buildlibrary lib$prog.a \
-Idep/snowhouse/include \
-d $OBJDIR/proto/libconfig.def \
"$@"
buildprogram $OBJDIR/$prog \
lib$prog.a \
libbackend.a \
libconfig.a \
libtestproto.a \
libagg.a \
libfmt.a
echo build $OBJDIR/$prog.stamp : test $OBJDIR/$prog-debug$EXTENSION
}
encodedecodetest() {
local format
format=$1
shift
echo "build $OBJDIR/$format.encodedecode.flux.stamp : encodedecode | fluxengine$EXTENSION scripts/encodedecodetest.sh $*"
echo " format=$format"
echo " configs=$*"
echo " fluxx=flux"
#echo "build $OBJDIR/$format.encodedecode.scp.stamp : encodedecode | fluxengine$EXTENSION scripts/encodedecodetest.sh $*"
#echo " format=$format"
#echo " configs=$*"
#echo " fluxx=scp"
}
buildlibrary libagg.a \
-Idep/agg/include \
dep/stb/stb_image_write.c \
dep/agg/src/*.cpp
case "$(uname)" in
Darwin)
buildlibrary libusbp.a \
-Idep/libusbp/include \
-Idep/libusbp/src \
dep/libusbp/src/*.c \
dep/libusbp/src/mac/*.c
;;
MINGW*)
buildlibrary libusbp.a \
-Idep/libusbp/include \
-Idep/libusbp/src \
dep/libusbp/src/*.c \
dep/libusbp/src/windows/*.c
;;
*)
buildlibrary libusbp.a \
-Idep/libusbp/include \
-Idep/libusbp/src \
dep/libusbp/src/*.c \
dep/libusbp/src/linux/*.c
;;
esac
buildlibrary libfmt.a \
dep/fmt/format.cc \
dep/fmt/os.cc \
buildproto libconfig.a \
arch/aeslanier/aeslanier.proto \
arch/amiga/amiga.proto \
arch/apple2/apple2.proto \
arch/brother/brother.proto \
arch/c64/c64.proto \
arch/f85/f85.proto \
arch/fb100/fb100.proto \
arch/ibm/ibm.proto \
arch/macintosh/macintosh.proto \
arch/micropolis/micropolis.proto \
arch/mx/mx.proto \
arch/northstar/northstar.proto \
arch/tids990/tids990.proto \
arch/victor9k/victor9k.proto \
arch/zilogmcz/zilogmcz.proto \
lib/common.proto \
lib/config.proto \
lib/decoders/decoders.proto \
lib/drive.proto \
lib/encoders/encoders.proto \
lib/fluxsink/fluxsink.proto \
lib/fluxsource/fluxsource.proto \
lib/imagereader/imagereader.proto \
lib/imagewriter/imagewriter.proto \
lib/usb/usb.proto \
buildproto libfl2.a \
lib/fl2.proto
buildlibrary libbackend.a \
-I$OBJDIR/proto \
-Idep/libusbp/include \
-d $OBJDIR/proto/libconfig.def \
-d $OBJDIR/proto/libfl2.def \
arch/aeslanier/decoder.cc \
arch/amiga/amiga.cc \
arch/amiga/decoder.cc \
arch/amiga/encoder.cc \
arch/apple2/decoder.cc \
arch/apple2/encoder.cc \
arch/brother/decoder.cc \
arch/brother/encoder.cc \
arch/c64/decoder.cc \
arch/c64/encoder.cc \
arch/f85/decoder.cc \
arch/fb100/decoder.cc \
arch/ibm/decoder.cc \
arch/ibm/encoder.cc \
arch/macintosh/decoder.cc \
arch/macintosh/encoder.cc \
arch/micropolis/decoder.cc \
arch/micropolis/encoder.cc \
arch/mx/decoder.cc \
arch/northstar/decoder.cc \
arch/northstar/encoder.cc \
arch/tids990/decoder.cc \
arch/tids990/encoder.cc \
arch/victor9k/decoder.cc \
arch/victor9k/encoder.cc \
arch/zilogmcz/decoder.cc \
lib/bitmap.cc \
lib/bytes.cc \
lib/crc.cc \
lib/csvreader.cc \
lib/decoders/decoders.cc \
lib/decoders/fluxdecoder.cc \
lib/decoders/fluxmapreader.cc \
lib/decoders/fmmfm.cc \
lib/encoders/encoders.cc \
lib/flags.cc \
lib/fluxmap.cc \
lib/fluxsink/aufluxsink.cc \
lib/fluxsink/fl2fluxsink.cc \
lib/fluxsink/fluxsink.cc \
lib/fluxsink/hardwarefluxsink.cc \
lib/fluxsink/scpfluxsink.cc \
lib/fluxsink/vcdfluxsink.cc \
lib/fluxsource/cwffluxsource.cc \
lib/fluxsource/erasefluxsource.cc \
lib/fluxsource/fl2fluxsource.cc \
lib/fluxsource/fluxsource.cc \
lib/fluxsource/hardwarefluxsource.cc \
lib/fluxsource/kryoflux.cc \
lib/fluxsource/kryofluxfluxsource.cc \
lib/fluxsource/scpfluxsource.cc \
lib/fluxsource/testpatternfluxsource.cc \
lib/globals.cc \
lib/hexdump.cc \
lib/image.cc \
lib/imagereader/d64imagereader.cc \
lib/imagereader/diskcopyimagereader.cc \
lib/imagereader/imagereader.cc \
lib/imagereader/imdimagereader.cc \
lib/imagereader/imgimagereader.cc \
lib/imagereader/jv3imagereader.cc \
lib/imagereader/nsiimagereader.cc \
lib/imagereader/td0imagereader.cc \
lib/imagereader/dimimagereader.cc \
lib/imagereader/fdiimagereader.cc \
lib/imagereader/d88imagereader.cc \
lib/imagewriter/d64imagewriter.cc \
lib/imagewriter/diskcopyimagewriter.cc \
lib/imagewriter/imagewriter.cc \
lib/imagewriter/imgimagewriter.cc \
lib/imagewriter/ldbsimagewriter.cc \
lib/imagereader/nfdimagereader.cc \
lib/imagewriter/nsiimagewriter.cc \
lib/imagewriter/rawimagewriter.cc \
lib/imginputoutpututils.cc \
lib/ldbs.cc \
lib/logger.cc \
lib/proto.cc \
lib/reader.cc \
lib/sector.cc \
lib/usb/fluxengineusb.cc \
lib/usb/greaseweazle.cc \
lib/usb/greaseweazleusb.cc \
lib/usb/serial.cc \
lib/usb/usb.cc \
lib/usb/usbfinder.cc \
lib/utils.cc \
lib/writer.cc \
FORMATS="\
acornadfs \
acorndfs \
aeslanier \
amiga \
ampro \
apple2 \
atarist360 \
atarist370 \
atarist400 \
atarist410 \
atarist720 \
atarist740 \
atarist800 \
atarist820 \
brother120 \
brother240 \
commodore1541 \
commodore1581 \
eco1 \
f85 \
fb100 \
hp9121 \
hplif770 \
ibm \
ibm1200_525 \
ibm1232 \
ibm1440 \
ibm180_525 \
ibm360_525 \
ibm720 \
ibm720_525 \
mac400 \
mac800 \
micropolis143 \
micropolis287 \
micropolis315 \
micropolis630 \
mx \
n88basic \
northstar175 \
northstar350 \
northstar87 \
rx50 \
tids990 \
vgi \
victor9k_ss \
victor9k_ds \
zilogmcz \
"
for pb in $FORMATS; do
buildencodedproto $OBJDIR/proto/libconfig.def ConfigProto \
formats_${pb}_pb src/formats/$pb.textpb $OBJDIR/proto/src/formats/$pb.cc
done
buildmktable formats $OBJDIR/formats.cc $FORMATS
buildlibrary libformats.a \
-I$OBJDIR/proto \
-d $OBJDIR/proto/libconfig.def \
$(for a in $FORMATS; do echo $OBJDIR/proto/src/formats/$a.cc; done) \
$OBJDIR/formats.cc \
buildlibrary libfrontend.a \
-I$OBJDIR/proto \
-d $OBJDIR/proto/libconfig.def \
src/fe-analysedriveresponse.cc \
src/fe-analyselayout.cc \
src/fe-inspect.cc \
src/fe-rawread.cc \
src/fe-rawwrite.cc \
src/fe-read.cc \
src/fe-rpm.cc \
src/fe-seek.cc \
src/fe-testbandwidth.cc \
src/fe-testvoltages.cc \
src/fe-write.cc \
src/fluxengine.cc \
buildlibrary libgui.a \
-I$OBJDIR/proto \
-Idep/libusbp/include \
-d $OBJDIR/proto/libconfig.def \
src/gui/main.cc \
src/gui/layout.cpp \
src/gui/visualisation.cc \
src/gui/mainwindow.cc \
buildprogram fluxengine \
libfrontend.a \
libformats.a \
libbackend.a \
libconfig.a \
libfl2.a \
libusbp.a \
libfmt.a \
libagg.a \
buildprogram fluxengine-gui \
-rule linkgui \
libgui.a \
libformats.a \
libbackend.a \
libconfig.a \
libfl2.a \
libusbp.a \
libfmt.a \
buildlibrary libemu.a \
dep/emu/fnmatch.c
buildsimpleprogram brother120tool \
-Idep/emu \
tools/brother120tool.cc \
libbackend.a \
libemu.a \
libfmt.a \
buildsimpleprogram brother240tool \
-Idep/emu \
tools/brother240tool.cc \
libbackend.a \
libemu.a \
libfmt.a \
buildsimpleprogram upgrade-flux-file \
-Idep/emu \
tools/upgrade-flux-file.cc \
libbackend.a \
libfl2.a \
libconfig.a \
libemu.a \
libfmt.a \
buildproto libtestproto.a \
-d $OBJDIR/proto/lib/common.pb.h \
tests/testproto.proto \
buildencodedproto $OBJDIR/proto/libtestproto.def TestProto testproto_pb tests/testproto.textpb $OBJDIR/proto/tests/testproto.cc
runtest agg-test tests/agg.cc
runtest amiga-test tests/amiga.cc
runtest bitaccumulator-test tests/bitaccumulator.cc
runtest bytes-test tests/bytes.cc
runtest compression-test tests/compression.cc
runtest csvreader-test tests/csvreader.cc
runtest flags-test tests/flags.cc
runtest fluxmapreader-test tests/fluxmapreader.cc
runtest fluxpattern-test tests/fluxpattern.cc
runtest fmmfm-test tests/fmmfm.cc
runtest greaseweazle-test tests/greaseweazle.cc
runtest kryoflux-test tests/kryoflux.cc
runtest ldbs-test tests/ldbs.cc
runtest utils-test tests/utils.cc
runtest proto-test -I$OBJDIR/proto \
-d $OBJDIR/proto/libconfig.def \
-d $OBJDIR/proto/libtestproto.def \
tests/proto.cc \
$OBJDIR/proto/tests/testproto.cc
encodedecodetest amiga
encodedecodetest apple2
encodedecodetest atarist360
encodedecodetest atarist370
encodedecodetest atarist400
encodedecodetest atarist410
encodedecodetest atarist720
encodedecodetest atarist740
encodedecodetest atarist800
encodedecodetest atarist820
encodedecodetest brother120
encodedecodetest brother240
encodedecodetest commodore1541 scripts/commodore1541_test.textpb
encodedecodetest commodore1581
encodedecodetest hp9121
encodedecodetest ibm1200_525
encodedecodetest ibm1232
encodedecodetest ibm1440
encodedecodetest ibm180_525
encodedecodetest ibm360_525
encodedecodetest ibm720
encodedecodetest ibm720_525
encodedecodetest mac400 scripts/mac400_test.textpb
encodedecodetest mac800 scripts/mac800_test.textpb
encodedecodetest n88basic
encodedecodetest rx50
encodedecodetest tids990
encodedecodetest victor9k_ss
encodedecodetest victor9k_ds
encodedecodetest northstar87 scripts/northstar87_test.textpb
# vim: sw=4 ts=4 et