disas: Add capstone as submodule
Do not require the submodule, but use it if present. Allow the command-line to override system or git submodule either way. Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
b8d8720892
commit
e219c499e9
|
@ -37,3 +37,6 @@
|
||||||
[submodule "ui/keycodemapdb"]
|
[submodule "ui/keycodemapdb"]
|
||||||
path = ui/keycodemapdb
|
path = ui/keycodemapdb
|
||||||
url = git://git.qemu.org/keycodemapdb.git
|
url = git://git.qemu.org/keycodemapdb.git
|
||||||
|
[submodule "capstone"]
|
||||||
|
path = capstone
|
||||||
|
url = git://git.qemu.org/capstone.git
|
||||||
|
|
15
Makefile
15
Makefile
|
@ -383,6 +383,21 @@ subdir-dtc: .git-submodule-status dtc/libfdt dtc/tests
|
||||||
dtc/%: .git-submodule-status
|
dtc/%: .git-submodule-status
|
||||||
mkdir -p $@
|
mkdir -p $@
|
||||||
|
|
||||||
|
# Overriding CFLAGS causes us to lose defines added in the sub-makefile.
|
||||||
|
# Not overriding CFLAGS leads to mis-matches between compilation modes.
|
||||||
|
# Therefore we replicate some of the logic in the sub-makefile.
|
||||||
|
# Remove all the extra -Warning flags that QEMU uses that Capstone doesn't;
|
||||||
|
# no need to annoy QEMU developers with such things.
|
||||||
|
CAP_CFLAGS = $(patsubst -W%,,$(CFLAGS) $(QEMU_CFLAGS))
|
||||||
|
CAP_CFLAGS += -DCAPSTONE_USE_SYS_DYN_MEM
|
||||||
|
CAP_CFLAGS += -DCAPSTONE_HAS_ARM
|
||||||
|
CAP_CFLAGS += -DCAPSTONE_HAS_ARM64
|
||||||
|
CAP_CFLAGS += -DCAPSTONE_HAS_POWERPC
|
||||||
|
CAP_CFLAGS += -DCAPSTONE_HAS_X86
|
||||||
|
|
||||||
|
subdir-capstone: .git-submodule-status
|
||||||
|
$(call quiet-command,$(MAKE) -C $(SRC_PATH)/capstone CAPSTONE_SHARED=no BUILDDIR="$(BUILD_DIR)/capstone" CC="$(CC)" AR="$(AR)" LD="$(LD)" CFLAGS="$(CAP_CFLAGS)" $(SUBDIR_MAKEFLAGS) $(BUILD_DIR)/capstone/$(LIBCAPSTONE))
|
||||||
|
|
||||||
$(SUBDIR_RULES): libqemuutil.a $(common-obj-y) $(chardev-obj-y) \
|
$(SUBDIR_RULES): libqemuutil.a $(common-obj-y) $(chardev-obj-y) \
|
||||||
$(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY))
|
$(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY))
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 22ead3e0bfdb87516656453336160e0a37b066bf
|
|
@ -1299,6 +1299,10 @@ for opt do
|
||||||
;;
|
;;
|
||||||
--enable-capstone) capstone="yes"
|
--enable-capstone) capstone="yes"
|
||||||
;;
|
;;
|
||||||
|
--enable-capstone=git) capstone="git"
|
||||||
|
;;
|
||||||
|
--enable-capstone=system) capstone="system"
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo "ERROR: unknown option $opt"
|
echo "ERROR: unknown option $opt"
|
||||||
echo "Try '$0 --help' for more information"
|
echo "Try '$0 --help' for more information"
|
||||||
|
@ -4419,18 +4423,54 @@ fi
|
||||||
##########################################
|
##########################################
|
||||||
# capstone
|
# capstone
|
||||||
|
|
||||||
if test "$capstone" != no; then
|
case "$capstone" in
|
||||||
if $pkg_config capstone; then
|
"" | yes)
|
||||||
capstone=yes
|
if $pkg_config capstone; then
|
||||||
|
capstone=system
|
||||||
|
elif test -e "${source_path}/.git" ; then
|
||||||
|
capstone=git
|
||||||
|
elif test -e "${source_path}/capstone/Makefile" ; then
|
||||||
|
capstone=internal
|
||||||
|
elif test -z "$capstone" ; then
|
||||||
|
capstone=no
|
||||||
|
else
|
||||||
|
feature_not_found "capstone" "Install capstone devel or git submodule"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
system)
|
||||||
|
if ! $pkg_config capstone; then
|
||||||
|
feature_not_found "capstone" "Install capstone devel"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$capstone" in
|
||||||
|
git | internal)
|
||||||
|
if test "$capstone" = git; then
|
||||||
|
git_submodules="${git_submodules} capstone"
|
||||||
|
fi
|
||||||
|
mkdir -p capstone
|
||||||
|
QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
|
||||||
|
if test "$mingw32" = "yes"; then
|
||||||
|
LIBCAPSTONE=capstone.lib
|
||||||
|
else
|
||||||
|
LIBCAPSTONE=libcapstone.a
|
||||||
|
fi
|
||||||
|
LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
|
||||||
|
;;
|
||||||
|
|
||||||
|
system)
|
||||||
QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
|
QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
|
||||||
LIBS="$($pkg_config --libs capstone) $LIBS"
|
LIBS="$($pkg_config --libs capstone) $LIBS"
|
||||||
else
|
;;
|
||||||
if test "$capstone" = yes; then
|
|
||||||
feature_not_found capstone
|
no)
|
||||||
fi
|
;;
|
||||||
capstone=no
|
*)
|
||||||
fi
|
error_exit "Unknown state for capstone: $capstone"
|
||||||
fi
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
##########################################
|
##########################################
|
||||||
# check if we have fdatasync
|
# check if we have fdatasync
|
||||||
|
@ -6165,7 +6205,7 @@ fi
|
||||||
if test "$ivshmem" = "yes" ; then
|
if test "$ivshmem" = "yes" ; then
|
||||||
echo "CONFIG_IVSHMEM=y" >> $config_host_mak
|
echo "CONFIG_IVSHMEM=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
if test "$capstone" = "yes" ; then
|
if test "$capstone" != "no" ; then
|
||||||
echo "CONFIG_CAPSTONE=y" >> $config_host_mak
|
echo "CONFIG_CAPSTONE=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -6650,6 +6690,12 @@ done # for target in $targets
|
||||||
if [ "$dtc_internal" = "yes" ]; then
|
if [ "$dtc_internal" = "yes" ]; then
|
||||||
echo "config-host.h: subdir-dtc" >> $config_host_mak
|
echo "config-host.h: subdir-dtc" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
|
if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
|
||||||
|
echo "config-host.h: subdir-capstone" >> $config_host_mak
|
||||||
|
fi
|
||||||
|
if test -n "$LIBCAPSTONE"; then
|
||||||
|
echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
|
||||||
|
fi
|
||||||
|
|
||||||
if test "$numa" = "yes"; then
|
if test "$numa" = "yes"; then
|
||||||
echo "CONFIG_NUMA=y" >> $config_host_mak
|
echo "CONFIG_NUMA=y" >> $config_host_mak
|
||||||
|
|
Loading…
Reference in New Issue