Skip to content

Commit

Permalink
capstone: Remove the capstone submodule
Browse files Browse the repository at this point in the history
Now that we allow compiling with Capstone v3.0.5 again, all our supported
build hosts should provide at least this version of the disassembler
library, so we do not need to ship this as a submodule anymore.

Message-Id: <[email protected]>
Reviewed-by: Richard Henderson <[email protected]>
Signed-off-by: Thomas Huth <[email protected]>
  • Loading branch information
huth committed May 18, 2022
1 parent 43ecd16 commit 8360208
Show file tree
Hide file tree
Showing 8 changed files with 11 additions and 144 deletions.
4 changes: 2 additions & 2 deletions .gitlab-ci.d/buildtest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ build-system-ubuntu:
variables:
IMAGE: ubuntu2004
CONFIGURE_ARGS: --enable-docs --enable-fdt=system --enable-slirp=system
--enable-capstone=system
--enable-capstone
TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
microblazeel-softmmu mips64el-softmmu
MAKE_CHECK_ARGS: check-build
Expand Down Expand Up @@ -119,7 +119,7 @@ build-system-fedora:
variables:
IMAGE: fedora
CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
--enable-fdt=system --enable-slirp=system --enable-capstone=system
--enable-fdt=system --enable-slirp=system --enable-capstone
TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
MAKE_CHECK_ARGS: check-build
Expand Down
5 changes: 2 additions & 3 deletions .gitlab-ci.d/windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ msys2-64bit:
- $env:CHERE_INVOKING = 'yes' # Preserve the current working directory
- $env:MSYSTEM = 'MINGW64' # Start a 64 bit Mingw environment
- .\msys64\usr\bin\bash -lc './configure --target-list=x86_64-softmmu
--enable-capstone=system --without-default-devices'
--enable-capstone --without-default-devices'
- .\msys64\usr\bin\bash -lc "sed -i '/^ROMS=/d' build/config-host.mak"
- .\msys64\usr\bin\bash -lc 'make -j2'
- .\msys64\usr\bin\bash -lc 'make check'
Expand Down Expand Up @@ -90,7 +90,6 @@ msys2-32bit:
- $env:MSYSTEM = 'MINGW32' # Start a 32-bit MinG environment
- mkdir output
- cd output
- ..\msys64\usr\bin\bash -lc "../configure --target-list=ppc64-softmmu
--enable-capstone=system"
- ..\msys64\usr\bin\bash -lc "../configure --target-list=ppc64-softmmu"
- ..\msys64\usr\bin\bash -lc 'make -j2'
- ..\msys64\usr\bin\bash -lc 'make check'
3 changes: 0 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,6 @@
[submodule "ui/keycodemapdb"]
path = ui/keycodemapdb
url = https://gitlab.com/qemu-project/keycodemapdb.git
[submodule "capstone"]
path = capstone
url = https://gitlab.com/qemu-project/capstone.git
[submodule "roms/seabios-hppa"]
path = roms/seabios-hppa
url = https://gitlab.com/qemu-project/seabios-hppa.git
Expand Down
1 change: 0 additions & 1 deletion capstone
Submodule capstone deleted from f8b1b8
21 changes: 0 additions & 21 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -307,10 +307,8 @@ skip_meson=no

# 1. Track which submodules are needed
if test "$default_feature" = no ; then
capstone="disabled"
slirp="disabled"
else
capstone="auto"
slirp="auto"
fi
fdt="auto"
Expand Down Expand Up @@ -869,14 +867,6 @@ for opt do
--enable-uuid|--disable-uuid)
echo "$0: $opt is obsolete, UUID support is always built" >&2
;;
--disable-capstone) capstone="disabled"
;;
--enable-capstone) capstone="enabled"
;;
--enable-capstone=git) capstone="internal"
;;
--enable-capstone=*) capstone="$optarg"
;;
--with-git=*) git="$optarg"
;;
--with-git-submodules=*)
Expand Down Expand Up @@ -1566,16 +1556,6 @@ case "$fdt" in
;;
esac

##########################################
# capstone

case "$capstone" in
auto | enabled | internal)
# Simpler to always update submodule, even if not needed.
git_submodules="${git_submodules} capstone"
;;
esac

##########################################
# check and set a backend for coroutine

Expand Down Expand Up @@ -2220,7 +2200,6 @@ if test "$skip_meson" = no; then
test "$werror" = yes && meson_option_add -Dwerror=true

# QEMU options
test "$capstone" != auto && meson_option_add "-Dcapstone=$capstone"
test "$cfi" != false && meson_option_add "-Dcfi=$cfi"
test "$fdt" != auto && meson_option_add "-Dfdt=$fdt"
test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add "-Dfuzzing_engine=$LIB_FUZZING_ENGINE"
Expand Down
113 changes: 5 additions & 108 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -2522,13 +2522,10 @@ genh += custom_target('config-poison.h',
##############

capstone = not_found
capstone_opt = get_option('capstone')
if capstone_opt in ['enabled', 'auto', 'system']
have_internal = fs.exists(meson.current_source_dir() / 'capstone/Makefile')
if not get_option('capstone').auto() or have_system or have_user
capstone = dependency('capstone', version: '>=3.0.5',
kwargs: static_kwargs, method: 'pkg-config',
required: capstone_opt == 'system' or
capstone_opt == 'enabled' and not have_internal)
required: get_option('capstone'))

# Some versions of capstone have broken pkg-config file
# that reports a wrong -I path, causing the #include to
Expand All @@ -2537,110 +2534,10 @@ if capstone_opt in ['enabled', 'auto', 'system']
if capstone.found() and not cc.compiles('#include <capstone.h>',
dependencies: [capstone])
capstone = not_found
if capstone_opt == 'system'
error('system capstone requested, it does not appear to work')
if get_option('capstone').enabled()
error('capstone requested, but it does not appear to work')
endif
endif

if capstone.found()
capstone_opt = 'system'
elif have_internal
capstone_opt = 'internal'
else
capstone_opt = 'disabled'
endif
endif
if capstone_opt == 'internal'
capstone_data = configuration_data()
capstone_data.set('CAPSTONE_USE_SYS_DYN_MEM', '1')

capstone_files = files(
'capstone/cs.c',
'capstone/MCInst.c',
'capstone/MCInstrDesc.c',
'capstone/MCRegisterInfo.c',
'capstone/SStream.c',
'capstone/utils.c'
)

if 'CONFIG_ARM_DIS' in config_all_disas
capstone_data.set('CAPSTONE_HAS_ARM', '1')
capstone_files += files(
'capstone/arch/ARM/ARMDisassembler.c',
'capstone/arch/ARM/ARMInstPrinter.c',
'capstone/arch/ARM/ARMMapping.c',
'capstone/arch/ARM/ARMModule.c'
)
endif

# FIXME: This config entry currently depends on a c++ compiler.
# Which is needed for building libvixl, but not for capstone.
if 'CONFIG_ARM_A64_DIS' in config_all_disas
capstone_data.set('CAPSTONE_HAS_ARM64', '1')
capstone_files += files(
'capstone/arch/AArch64/AArch64BaseInfo.c',
'capstone/arch/AArch64/AArch64Disassembler.c',
'capstone/arch/AArch64/AArch64InstPrinter.c',
'capstone/arch/AArch64/AArch64Mapping.c',
'capstone/arch/AArch64/AArch64Module.c'
)
endif

if 'CONFIG_PPC_DIS' in config_all_disas
capstone_data.set('CAPSTONE_HAS_POWERPC', '1')
capstone_files += files(
'capstone/arch/PowerPC/PPCDisassembler.c',
'capstone/arch/PowerPC/PPCInstPrinter.c',
'capstone/arch/PowerPC/PPCMapping.c',
'capstone/arch/PowerPC/PPCModule.c'
)
endif

if 'CONFIG_S390_DIS' in config_all_disas
capstone_data.set('CAPSTONE_HAS_SYSZ', '1')
capstone_files += files(
'capstone/arch/SystemZ/SystemZDisassembler.c',
'capstone/arch/SystemZ/SystemZInstPrinter.c',
'capstone/arch/SystemZ/SystemZMapping.c',
'capstone/arch/SystemZ/SystemZModule.c',
'capstone/arch/SystemZ/SystemZMCTargetDesc.c'
)
endif

if 'CONFIG_I386_DIS' in config_all_disas
capstone_data.set('CAPSTONE_HAS_X86', 1)
capstone_files += files(
'capstone/arch/X86/X86Disassembler.c',
'capstone/arch/X86/X86DisassemblerDecoder.c',
'capstone/arch/X86/X86ATTInstPrinter.c',
'capstone/arch/X86/X86IntelInstPrinter.c',
'capstone/arch/X86/X86InstPrinterCommon.c',
'capstone/arch/X86/X86Mapping.c',
'capstone/arch/X86/X86Module.c'
)
endif

configure_file(output: 'capstone-defs.h', configuration: capstone_data)

capstone_cargs = [
# FIXME: There does not seem to be a way to completely replace the c_args
# that come from add_project_arguments() -- we can only add to them.
# So: disable all warnings with a big hammer.
'-Wno-error', '-w',

# Include all configuration defines via a header file, which will wind up
# as a dependency on the object file, and thus changes here will result
# in a rebuild.
'-include', 'capstone-defs.h'
]

libcapstone = static_library('capstone',
build_by_default: false,
sources: capstone_files,
c_args: capstone_cargs,
include_directories: 'capstone/include')
capstone = declare_dependency(link_with: libcapstone,
include_directories: 'capstone/include/capstone')
endif

slirp = not_found
Expand Down Expand Up @@ -3970,7 +3867,7 @@ summary_info += {'bzip2 support': libbzip2}
summary_info += {'lzfse support': liblzfse}
summary_info += {'zstd support': zstd}
summary_info += {'NUMA host support': numa}
summary_info += {'capstone': capstone_opt == 'internal' ? capstone_opt : capstone}
summary_info += {'capstone': capstone}
summary_info += {'libpmem support': libpmem}
summary_info += {'libdaxctl support': libdaxctl}
summary_info += {'libudev': libudev}
Expand Down
3 changes: 1 addition & 2 deletions meson_options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -252,8 +252,7 @@ option('virtfs', type: 'feature', value: 'auto',
option('virtiofsd', type: 'feature', value: 'auto',
description: 'build virtiofs daemon (virtiofsd)')

option('capstone', type: 'combo', value: 'auto',
choices: ['disabled', 'enabled', 'auto', 'system', 'internal'],
option('capstone', type: 'feature', value: 'auto',
description: 'Whether and how to find the capstone library')
option('slirp', type: 'combo', value: 'auto',
choices: ['disabled', 'enabled', 'auto', 'system', 'internal'],
Expand Down
5 changes: 1 addition & 4 deletions scripts/meson-buildoptions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@ meson_options_help() {
printf "%s\n" ' --enable-block-drv-whitelist-in-tools'
printf "%s\n" ' use block whitelist also in tools instead of only'
printf "%s\n" ' QEMU'
printf "%s\n" ' --enable-capstone[=CHOICE]'
printf "%s\n" ' Whether and how to find the capstone library'
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
printf "%s\n" ' --enable-cfi Control-Flow Integrity (CFI)'
printf "%s\n" ' --enable-cfi-debug Verbose errors in case of CFI violation'
printf "%s\n" ' --enable-debug-mutex mutex debugging support'
Expand Down Expand Up @@ -77,6 +74,7 @@ meson_options_help() {
printf "%s\n" ' brlapi brlapi character device driver'
printf "%s\n" ' bzip2 bzip2 support for DMG images'
printf "%s\n" ' cap-ng cap_ng support'
printf "%s\n" ' capstone Whether and how to find the capstone library'
printf "%s\n" ' cloop cloop image format support'
printf "%s\n" ' cocoa Cocoa user interface (macOS only)'
printf "%s\n" ' coreaudio CoreAudio sound support'
Expand Down Expand Up @@ -209,7 +207,6 @@ _meson_option_parse() {
--disable-cap-ng) printf "%s" -Dcap_ng=disabled ;;
--enable-capstone) printf "%s" -Dcapstone=enabled ;;
--disable-capstone) printf "%s" -Dcapstone=disabled ;;
--enable-capstone=*) quote_sh "-Dcapstone=$2" ;;
--enable-cfi) printf "%s" -Dcfi=true ;;
--disable-cfi) printf "%s" -Dcfi=false ;;
--enable-cfi-debug) printf "%s" -Dcfi_debug=true ;;
Expand Down

0 comments on commit 8360208

Please sign in to comment.