# This script is sourced from the top-level Android emulator
# configuration script, and relies on the following macro
# definitions:
#
#  QEMU2_TOP_DIR: top-level QEMU2 source directory.
#  OUT_DIR: top-level build output directory.

QEMU2_AUTOGENERATED_DIR=$OUT_DIR/build/qemu2-qapi-auto-generated

replace_with_if_different () {
    cmp -s "$1" "$2" || mv "$2" "$1"
}

probe_prebuilts_dir "QEMU2 Dependencies" \
    QEMU2_DEPS_PREBUILTS_DIR \
    qemu-android-deps

echo "QEMU2_DEPS_PREBUILTS_DIR := $QEMU2_DEPS_PREBUILTS_DIR" >> $config_mk

python $QEMU2_TOP_DIR/scripts/qapi-types.py \
    --builtins \
    -o $QEMU2_AUTOGENERATED_DIR \
    $QEMU2_TOP_DIR/qapi-schema.json

python $QEMU2_TOP_DIR/scripts/qapi-visit.py \
    --builtins \
    -o $QEMU2_AUTOGENERATED_DIR \
    $QEMU2_TOP_DIR/qapi-schema.json

python $QEMU2_TOP_DIR/scripts/qapi-event.py \
    -o $QEMU2_AUTOGENERATED_DIR \
    $QEMU2_TOP_DIR/qapi-schema.json

python $QEMU2_TOP_DIR/scripts/qapi-introspect.py \
    -o $QEMU2_AUTOGENERATED_DIR \
    $QEMU2_TOP_DIR/qapi-schema.json

python $QEMU2_TOP_DIR/scripts/qapi-commands.py \
    --middle \
    -o $QEMU2_AUTOGENERATED_DIR \
    $QEMU2_TOP_DIR/qapi-schema.json

TRACE_EVENT_FILES="\
    trace-events \
    util/trace-events \
    crypto/trace-events \
    io/trace-events \
    migration/trace-events \
    block/trace-events \
    hw/block/trace-events \
    hw/char/trace-events \
    hw/intc/trace-events \
    hw/net/trace-events \
    hw/virtio/trace-events \
    hw/audio/trace-events \
    hw/misc/trace-events \
    hw/usb/trace-events \
    hw/scsi/trace-events \
    hw/nvram/trace-events \
    hw/display/trace-events \
    hw/input/trace-events \
    hw/timer/trace-events \
    hw/dma/trace-events \
    hw/sparc/trace-events \
    hw/sd/trace-events \
    hw/isa/trace-events \
    hw/i386/trace-events \
    hw/9pfs/trace-events \
    hw/ppc/trace-events \
    hw/pci/trace-events \
    hw/s390x/trace-events \
    hw/vfio/trace-events \
    hw/acpi/trace-events \
    hw/arm/trace-events \
    hw/alpha/trace-events \
    ui/trace-events \
    audio/trace-events \
    net/trace-events \
    target-i386/trace-events \
    target-sparc/trace-events \
    target-s390x/trace-events \
    target-ppc/trace-events \
    qom/trace-events \
    linux-user/trace-events \
"

TRACE_EVENTS_ALL=$QEMU2_AUTOGENERATED_DIR/trace-events-all
rm -f "$TRACE_EVENTS_ALL" && touch "$TRACE_EVENTS_ALL"
for TRACE_EVENT_FILE in $TRACE_EVENT_FILES; do
    (cat "$QEMU2_TOP_DIR/$TRACE_EVENT_FILE" >> $TRACE_EVENTS_ALL)
done

mkdir -p "$QEMU2_AUTOGENERATED_DIR"/trace

python $QEMU2_TOP_DIR/scripts/tracetool.py \
    --backends=nop \
    --format=h \
    --target-type system \
    < $TRACE_EVENTS_ALL \
    > $QEMU2_AUTOGENERATED_DIR/trace/generated-tracers.h

python $QEMU2_TOP_DIR/scripts/tracetool.py \
    --backends=nop \
    --format=c \
    --target-type system \
    < $TRACE_EVENTS_ALL \
    > $QEMU2_AUTOGENERATED_DIR/trace/generated-tracers.c

python $QEMU2_TOP_DIR/scripts/tracetool.py \
    --backends=nop \
    --format=events-h \
    --target-type system \
    < $TRACE_EVENTS_ALL \
    > $QEMU2_AUTOGENERATED_DIR/trace/generated-events.h

python $QEMU2_TOP_DIR/scripts/tracetool.py \
    --backends=nop \
    --format=events-c \
    --target-type system \
    < $TRACE_EVENTS_ALL \
    > $QEMU2_AUTOGENERATED_DIR/trace/generated-events.c

python $QEMU2_TOP_DIR/scripts/tracetool.py \
    --backends=nop \
    --format=tcg-helper-h \
    --target-type system \
    < $TRACE_EVENTS_ALL \
    > $QEMU2_AUTOGENERATED_DIR/trace/generated-helpers.h

python $QEMU2_TOP_DIR/scripts/tracetool.py \
    --backends=nop \
    --format=tcg-helper-wrapper-h \
    --target-type system \
    < $TRACE_EVENTS_ALL \
    > $QEMU2_AUTOGENERATED_DIR/trace/generated-helpers-wrappers.h

python $QEMU2_TOP_DIR/scripts/tracetool.py \
    --backends=nop \
    --format=tcg-h \
    --target-type system \
    < $TRACE_EVENTS_ALL \
    > $QEMU2_AUTOGENERATED_DIR/trace/generated-tcg-tracers.h

bash $QEMU2_TOP_DIR/scripts/hxtool -h \
    < $QEMU2_TOP_DIR/qemu-options.hx \
    > $QEMU2_AUTOGENERATED_DIR/qemu-options.def

replace_with_if_different \
    "$QEMU2_TOP_DIR/qemu-options.def" \
    $QEMU2_AUTOGENERATED_DIR/qemu-options.def


bash $QEMU2_TOP_DIR/scripts/hxtool -h \
    < $QEMU2_TOP_DIR/hmp-commands.hx \
    > $QEMU2_AUTOGENERATED_DIR/hmp-commands.h

bash $QEMU2_TOP_DIR/scripts/hxtool -h \
    < $QEMU2_TOP_DIR/hmp-commands-info.hx \
    > $QEMU2_AUTOGENERATED_DIR/hmp-commands-info.h

bash $QEMU2_TOP_DIR/scripts/hxtool -h \
    < $QEMU2_TOP_DIR/qmp-commands.hx \
    > $QEMU2_AUTOGENERATED_DIR/qmp-commands-old.h

bash $QEMU2_TOP_DIR/scripts/hxtool -h \
    < $QEMU2_TOP_DIR/qemu-img-cmds.hx \
    > $QEMU2_AUTOGENERATED_DIR/qemu-img-cmds.h

rm -f $QEMU2_AUTOGENERATED_DIR/gdbstub-xml-arm64.c
bash $QEMU2_TOP_DIR/scripts/feature_to_c.sh \
    $QEMU2_AUTOGENERATED_DIR/gdbstub-xml-arm64.c \
    $QEMU2_TOP_DIR/gdb-xml/aarch64-core.xml \
    $QEMU2_TOP_DIR/gdb-xml/aarch64-fpu.xml \
    $QEMU2_TOP_DIR/gdb-xml/arm-core.xml \
    $QEMU2_TOP_DIR/gdb-xml/arm-vfp.xml \
    $QEMU2_TOP_DIR/gdb-xml/arm-vfp3.xml \
    $QEMU2_TOP_DIR/gdb-xml/arm-neon.xml

rm -f $QEMU2_AUTOGENERATED_DIR/gdbstub-xml-arm.c
bash $QEMU2_TOP_DIR/scripts/feature_to_c.sh \
    $QEMU2_AUTOGENERATED_DIR/gdbstub-xml-arm.c \
    $QEMU2_TOP_DIR/gdb-xml/arm-core.xml \
    $QEMU2_TOP_DIR/gdb-xml/arm-vfp.xml \
    $QEMU2_TOP_DIR/gdb-xml/arm-vfp3.xml \
    $QEMU2_TOP_DIR/gdb-xml/arm-neon.xml

if [ "$OPT_MINGW" ]; then
    $OUT_DIR/objs/build/toolchain/x86_64-mingw32-windres \
        -o $QEMU2_AUTOGENERATED_DIR/version.o \
        $QEMU2_TOP_DIR/version.rc
fi

# Generate qemu-version.h from Git history.
QEMU_VERSION_H=$QEMU2_AUTOGENERATED_DIR/qemu-version.h
QEMU_VERSION_H_TMP=$QEMU_VERSION_H.tmp
rm -f "$QEMU_VERSION_H"
if [ -d "$QEMU2_TOP_DIR/.git" ]; then
    QEMU_VERSION=$(cd "$QEMU2_TOP_DIR" && git describe --match 'v*' 2>/dev/null | tr -d '\n')
else
    QEMU_VERSION=$(date "+%Y-%m-%d")
fi

echo "QEMU2    : Version [$QEMU_VERSION]"

printf "#define QEMU_PKGVERSION \"(android-%s)\"\n" "$QEMU_VERSION" > $QEMU_VERSION_H_TMP
replace_with_if_different "$QEMU_VERSION_H" "$QEMU_VERSION_H_TMP"
rm -f "$QEMU_VERSION_TMP_H"

# Work-around for a QEMU2 bug:
# $QEMU2/linux-headers/linux/kvm.h includes <asm/kvm.h>
# but $QEMU2/linux-headers/asm/ doesn't exist. It is supposed
# to be a symlink to $QEMU2/linux-headers/asm-x86/
#
# The end result is that the <asm/kvm.h> from the host system
# or toolchain sysroot is being included, which ends up in a
# conflict. Work around it by creating a symlink here
rm -f $QEMU2_AUTOGENERATED_DIR/asm
ln -sf $QEMU2_TOP_DIR/linux-headers/asm-x86 $QEMU2_AUTOGENERATED_DIR/asm
