aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2020-08-27 23:09:44 +0100
committerPeter Maydell <peter.maydell@linaro.org>2020-08-27 23:09:45 +0100
commit332657245b59952306715bdf696037cb7ea35919 (patch)
tree0683d1794cce7f2239e81d0fe51ae18f2af62e1e
parent19591e9e0938ea5066984553c256a043bd5d822f (diff)
parent74938f0645e25f191247af55d7bf27d9c62f4768 (diff)
Merge remote-tracking branch 'remotes/bonzini-gitlab/tags/for-upstream' into staging
meson fixes: * fix PIE default for Windows * tweak conditions for requiring SDL2 and pixman * move NSIS building to Meson * fix creation of systemtap files * add --ninja option for Windows builds * other fixes for stupid bugs and for Windows paths meson related: * forward port of dtrace fix for MacOS * change colorout option to auto # gpg: Signature made Thu 27 Aug 2020 17:58:21 BST # gpg: using RSA key F13338574B662389866C7682BFFBD25F78C7AE83 # gpg: issuer "pbonzini@redhat.com" # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full] # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * remotes/bonzini-gitlab/tags/for-upstream: ninjatool: Fixes E$$: in generated Makefile.ninja meson: set colorout to auto meson: Mingw64 gcc doesn't recognize system include_type for sdl2 meson: fix relpath failure on Win32 ninjatool: quote dollars in variables meson: don't require CONFIG_VTE for the GTK UI meson: cleanup xkbcommon detection configure: add --ninja option meson: skip SDL2 detection if --disable-system meson: move pixman detection to meson configure: default to PIE disabled on Windows platforms meson: Fix chardev-baum.so name meson: Fix meson build with --enable-libdaxctl scripts/qemu-version.sh: Add missing space before ']' meson: Don't make object files for dtrace on macOS meson: Build qemu-nbd on macOS again trace: fix creation of systemtap files Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--chardev/meson.build2
-rwxr-xr-xconfigure39
-rw-r--r--contrib/vhost-user-gpu/meson.build3
-rw-r--r--meson.build70
-rw-r--r--scripts/mtest2make.py11
-rwxr-xr-xscripts/ninjatool.py5
-rwxr-xr-xscripts/qemu-version.sh2
-rw-r--r--trace/meson.build13
-rw-r--r--ui/meson.build6
9 files changed, 87 insertions, 64 deletions
diff --git a/chardev/meson.build b/chardev/meson.build
index a46a6237be..7726837e34 100644
--- a/chardev/meson.build
+++ b/chardev/meson.build
@@ -39,7 +39,7 @@ chardev_modules = {}
if config_host.has_key('CONFIG_BRLAPI') and sdl.found()
module_ss = ss.source_set()
module_ss.add(when: [sdl, brlapi], if_true: files('baum.c'))
- chardev_modules += { 'brlapi': module_ss }
+ chardev_modules += { 'baum': module_ss }
endif
modules += { 'chardev': chardev_modules }
diff --git a/configure b/configure
index b1e11397a8..6ecaff429b 100755
--- a/configure
+++ b/configure
@@ -568,6 +568,7 @@ rng_none="no"
secret_keyring=""
libdaxctl=""
meson=""
+ninja=""
skip_meson=no
gettext=""
@@ -857,6 +858,7 @@ MINGW32*)
audio_drv_list=""
fi
supported_os="yes"
+ pie="no"
;;
GNU/kFreeBSD)
bsd="yes"
@@ -1051,6 +1053,8 @@ for opt do
;;
--meson=*) meson="$optarg"
;;
+ --ninja=*) ninja="$optarg"
+ ;;
--smbd=*) smbd="$optarg"
;;
--extra-cflags=*)
@@ -1819,6 +1823,7 @@ Advanced options (experts only):
--python=PYTHON use specified python [$python]
--sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
--meson=MESON use specified meson [$meson]
+ --ninja=NINJA use specified ninja [$ninja]
--smbd=SMBD use specified smbd [$smbd]
--with-git=GIT use specified git [$git]
--static enable static build [$static]
@@ -2057,6 +2062,16 @@ case "$meson" in
*) meson=$(command -v meson) ;;
esac
+# Probe for ninja (used for compdb)
+
+if test -z "$ninja"; then
+ for c in ninja ninja-build samu; do
+ if has $c; then
+ ninja=$(command -v "$c")
+ break
+ fi
+ done
+fi
# Check that the C compiler works. Doing this here before testing
# the host CPU ensures that we had a valid CC to autodetect the
@@ -3923,20 +3938,6 @@ if test "$modules" = yes; then
fi
##########################################
-# pixman support probe
-
-if test "$softmmu" = "no"; then
- pixman_cflags=
- pixman_libs=
-elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
- pixman_cflags=$($pkg_config --cflags pixman-1)
- pixman_libs=$($pkg_config --libs pixman-1)
-else
- error_exit "pixman >= 0.21.8 not present." \
- "Please install the pixman devel package."
-fi
-
-##########################################
# libmpathpersist probe
if test "$mpath" != "no" ; then
@@ -6648,8 +6649,8 @@ echo_version() {
fi
}
-# prepend pixman and ftd flags after all config tests are done
-QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
+# prepend ftd flags after all config tests are done
+QEMU_CFLAGS="$fdt_cflags $QEMU_CFLAGS"
QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
config_host_mak="config-host.mak"
@@ -7467,6 +7468,7 @@ fi
if test "$libdaxctl" = "yes" ; then
echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
+ echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
fi
if test "$bochs" = "yes" ; then
@@ -8054,9 +8056,6 @@ fi
done # for target in $targets
-echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
-echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
-
if [ "$fdt" = "git" ]; then
subdirs="$subdirs dtc"
fi
@@ -8212,7 +8211,7 @@ fi
mv $cross config-meson.cross
rm -rf meson-private meson-info meson-logs
-NINJA=$PWD/ninjatool $meson setup \
+NINJA=${ninja:-$PWD/ninjatool} $meson setup \
--prefix "${pre_prefix}$prefix" \
--libdir "${pre_prefix}$libdir" \
--libexecdir "${pre_prefix}$libexecdir" \
diff --git a/contrib/vhost-user-gpu/meson.build b/contrib/vhost-user-gpu/meson.build
index 6c1459f54a..12d608c2e7 100644
--- a/contrib/vhost-user-gpu/meson.build
+++ b/contrib/vhost-user-gpu/meson.build
@@ -1,5 +1,6 @@
if 'CONFIG_TOOLS' in config_host and 'CONFIG_VIRGL' in config_host \
- and 'CONFIG_GBM' in config_host and 'CONFIG_LINUX' in config_host
+ and 'CONFIG_GBM' in config_host and 'CONFIG_LINUX' in config_host \
+ and pixman.found()
executable('vhost-user-gpu', files('vhost-user-gpu.c', 'virgl.c', 'vugbm.c'),
link_with: libvhost_user,
dependencies: [qemuutil, pixman, gbm, virgl],
diff --git a/meson.build b/meson.build
index f0fe5f8799..74f8ea0c2e 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,6 @@
project('qemu', ['c'], meson_version: '>=0.55.0',
- default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11', 'b_lundef=false'],
+ default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11',
+ 'b_lundef=false','b_colorout=auto'],
version: run_command('head', meson.source_root() / 'VERSION').stdout().strip())
not_found = dependency('', required: false)
@@ -20,6 +21,16 @@ build_docs = 'BUILD_DOCS' in config_host
config_host_data = configuration_data()
genh = []
+target_dirs = config_host['TARGET_DIRS'].split()
+have_user = false
+have_system = false
+foreach target : target_dirs
+ have_user = have_user or target.endswith('-user')
+ have_system = have_system or target.endswith('-softmmu')
+endforeach
+have_tools = 'CONFIG_TOOLS' in config_host
+have_block = have_system or have_tools
+
add_project_arguments(config_host['QEMU_CFLAGS'].split(),
native: false, language: ['c', 'objc'])
add_project_arguments(config_host['QEMU_CXXFLAGS'].split(),
@@ -113,8 +124,11 @@ if 'CONFIG_GNUTLS' in config_host
gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(),
link_args: config_host['GNUTLS_LIBS'].split())
endif
-pixman = declare_dependency(compile_args: config_host['PIXMAN_CFLAGS'].split(),
- link_args: config_host['PIXMAN_LIBS'].split())
+pixman = not_found
+if have_system or have_tools
+ pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8',
+ static: enable_static)
+endif
pam = not_found
if 'CONFIG_AUTH_PAM' in config_host
pam = cc.find_library('pam')
@@ -152,10 +166,11 @@ libcap_ng = not_found
if 'CONFIG_LIBCAP_NG' in config_host
libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split())
endif
-xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'), static: enable_static,
- include_type: 'system')
-if xkbcommon.found()
- xkbcommon = declare_dependency(dependencies: xkbcommon)
+if get_option('xkbcommon').auto() and not have_system and not have_tools
+ xkbcommon = not_found
+else
+ xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'),
+ static: enable_static)
endif
slirp = not_found
if config_host.has_key('CONFIG_SLIRP')
@@ -224,9 +239,11 @@ if 'CONFIG_BRLAPI' in config_host
brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split())
endif
-sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static,
- include_type: 'system')
-sdl_image = not_found
+sdl = not_found
+if have_system
+ sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static)
+ sdl_image = not_found
+endif
if sdl.found()
# work around 2.0.8 bug
sdl = declare_dependency(compile_args: '-Wno-undef',
@@ -380,6 +397,10 @@ if 'CONFIG_LIBPMEM' in config_host
libpmem = declare_dependency(compile_args: config_host['LIBPMEM_CFLAGS'].split(),
link_args: config_host['LIBPMEM_LIBS'].split())
endif
+libdaxctl = not_found
+if 'CONFIG_LIBDAXCTL' in config_host
+ libdaxctl = declare_dependency(link_args: config_host['LIBDAXCTL_LIBS'].split())
+endif
# Create config-host.h
@@ -419,9 +440,6 @@ endforeach
genh += configure_file(output: 'config-host.h', configuration: config_host_data)
minikconf = find_program('scripts/minikconf.py')
-target_dirs = config_host['TARGET_DIRS'].split()
-have_user = false
-have_system = false
config_devices_mak_list = []
config_devices_h = {}
config_target_h = {}
@@ -442,7 +460,6 @@ kconfig_external_symbols = [
]
ignored = ['TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_DIRS']
foreach target : target_dirs
- have_user = have_user or target.endswith('-user')
config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak')
config_target_data = configuration_data()
@@ -465,8 +482,6 @@ foreach target : target_dirs
configuration: config_target_data)}
if target.endswith('-softmmu')
- have_system = true
-
base_kconfig = []
foreach sym : kconfig_external_symbols
if sym in config_target or sym in config_host
@@ -496,8 +511,6 @@ foreach target : target_dirs
endif
config_target_mak += {target: config_target}
endforeach
-have_tools = 'CONFIG_TOOLS' in config_host
-have_block = have_system or have_tools
grepy = find_program('scripts/grepy.sh')
# This configuration is used to build files that are shared by
@@ -787,7 +800,7 @@ common_ss.add(files('cpus-common.c'))
subdir('softmmu')
-specific_ss.add(files('disas.c', 'exec.c', 'gdbstub.c'), capstone, libpmem)
+specific_ss.add(files('disas.c', 'exec.c', 'gdbstub.c'), capstone, libpmem, libdaxctl)
specific_ss.add(files('exec-vary.c'))
specific_ss.add(when: 'CONFIG_TCG', if_true: files(
'fpu/softfloat.c',
@@ -977,6 +990,7 @@ foreach target : target_dirs
lib = static_library('qemu-' + target,
sources: arch_srcs + genh,
+ dependencies: arch_deps,
objects: objects,
include_directories: target_inc,
c_args: c_args,
@@ -1029,14 +1043,14 @@ foreach target : target_dirs
if 'CONFIG_TRACE_SYSTEMTAP' in config_host
foreach stp: [
- {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe_name, 'install': false},
- {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe_name, 'install': true},
+ {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false},
+ {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true},
{'ext': '-simpletrace.stp', 'fmt': 'simpletrace-stap', 'bin': '', 'install': true},
{'ext': '-log.stp', 'fmt': 'log-stap', 'bin': '', 'install': true},
]
- custom_target(exe_name + stp['ext'],
+ custom_target(exe['name'] + stp['ext'],
input: trace_events_all,
- output: exe_name + stp['ext'],
+ output: exe['name'] + stp['ext'],
capture: true,
install: stp['install'],
install_dir: config_host['qemu_datadir'] / '../systemtap/tapset',
@@ -1065,9 +1079,6 @@ endif
# Don't build qemu-keymap if xkbcommon is not explicitly enabled
# when we don't build tools or system
-if get_option('xkbcommon').auto() and not have_system and not have_tools
- xkbcommon = not_found
-endif
if xkbcommon.found()
# used for the update-keymaps target, so include rules even if !have_tools
qemu_keymap = executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c') + genh,
@@ -1081,7 +1092,7 @@ if have_tools
qemu_io = executable('qemu-io', files('qemu-io.c'),
dependencies: [block, qemuutil], install: true)
qemu_block_tools += [qemu_img, qemu_io]
- if targetos == 'linux' or targetos == 'sunos' or targetos.endswith('bsd')
+ if targetos != 'windows'
qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'),
dependencies: [block, qemuutil], install: true)
qemu_block_tools += [qemu_nbd]
@@ -1098,9 +1109,7 @@ if have_tools
if 'CONFIG_VHOST_USER' in config_host
subdir('contrib/libvhost-user')
subdir('contrib/vhost-user-blk')
- if 'CONFIG_LINUX' in config_host
- subdir('contrib/vhost-user-gpu')
- endif
+ subdir('contrib/vhost-user-gpu')
subdir('contrib/vhost-user-input')
subdir('contrib/vhost-user-scsi')
endif
@@ -1281,6 +1290,7 @@ summary_info += {'SDL image support': sdl_image.found()}
# TODO: add back version
summary_info += {'GTK support': config_host.has_key('CONFIG_GTK')}
summary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')}
+summary_info += {'pixman': pixman.found()}
# TODO: add back version
summary_info += {'VTE support': config_host.has_key('CONFIG_VTE')}
summary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']}
diff --git a/scripts/mtest2make.py b/scripts/mtest2make.py
index bdb257bbd9..d7a51bf97e 100644
--- a/scripts/mtest2make.py
+++ b/scripts/mtest2make.py
@@ -53,9 +53,16 @@ i = 0
for test in json.load(sys.stdin):
env = ' '.join(('%s=%s' % (shlex.quote(k), shlex.quote(v))
for k, v in test['env'].items()))
- executable = os.path.relpath(test['cmd'][0])
+ executable = test['cmd'][0]
+ try:
+ executable = os.path.relpath(executable)
+ except:
+ pass
if test['workdir'] is not None:
- test['cmd'][0] = os.path.relpath(test['cmd'][0], test['workdir'])
+ try:
+ test['cmd'][0] = os.path.relpath(executable, test['workdir'])
+ except:
+ test['cmd'][0] = executable
else:
test['cmd'][0] = executable
cmd = '$(.test.env) %s %s' % (env, ' '.join((shlex.quote(x) for x in test['cmd'])))
diff --git a/scripts/ninjatool.py b/scripts/ninjatool.py
index cc77d51aa8..ba6bd9a2a6 100755
--- a/scripts/ninjatool.py
+++ b/scripts/ninjatool.py
@@ -55,7 +55,7 @@ else:
PATH_RE = r"[^$\s:|]+|\$[$ :]|\$[a-zA-Z0-9_-]+|\$\{[a-zA-Z0-9_.-]+\}"
-SIMPLE_PATH_RE = re.compile(r"[^$\s:|]+")
+SIMPLE_PATH_RE = re.compile(r"^[^$\s:|]+$")
IDENT_RE = re.compile(r"[a-zA-Z0-9_.-]+$")
STRING_RE = re.compile(r"(" + PATH_RE + r"|[\s:|])(?:\r?\n)?|.")
TOPLEVEL_RE = re.compile(r"([=:#]|\|\|?|^ +|(?:" + PATH_RE + r")+)\s*|.")
@@ -834,7 +834,8 @@ class Ninja2Make(NinjaParserEventsWithVars):
self.print()
for targets in self.build_vars:
for name, value in self.build_vars[targets].items():
- self.print('%s: private .var.%s := %s' % (targets, name, value))
+ self.print('%s: private .var.%s := %s' %
+ (targets, name, value.replace('$', '$$')))
self.print()
if not self.seen_default:
default_targets = sorted(self.all_outs - self.all_ins, key=natural_sort_key)
diff --git a/scripts/qemu-version.sh b/scripts/qemu-version.sh
index 4847385e42..03128c56a2 100755
--- a/scripts/qemu-version.sh
+++ b/scripts/qemu-version.sh
@@ -6,7 +6,7 @@ dir="$1"
pkgversion="$2"
version="$3"
-if [ -z "$pkgversion"]; then
+if [ -z "$pkgversion" ]; then
cd "$dir"
if [ -e .git ]; then
pkgversion=$(git describe --match 'v*' --dirty | echo "")
diff --git a/trace/meson.build b/trace/meson.build
index 56e870848e..1c1fb31a61 100644
--- a/trace/meson.build
+++ b/trace/meson.build
@@ -39,12 +39,15 @@ foreach dir : [ '.' ] + trace_events_subdirs
output: fmt.format('trace-dtrace', 'h'),
input: trace_dtrace,
command: [ 'dtrace', '-o', '@OUTPUT@', '-h', '-s', '@INPUT@' ])
- trace_dtrace_o = custom_target(fmt.format('trace-dtrace', 'o'),
- output: fmt.format('trace-dtrace', 'o'),
- input: trace_dtrace,
- command: [ 'dtrace', '-o', '@OUTPUT@', '-G', '-s', '@INPUT@' ])
+ trace_ss.add(trace_dtrace_h)
+ if host_machine.system() != 'darwin'
+ trace_dtrace_o = custom_target(fmt.format('trace-dtrace', 'o'),
+ output: fmt.format('trace-dtrace', 'o'),
+ input: trace_dtrace,
+ command: [ 'dtrace', '-o', '@OUTPUT@', '-G', '-s', '@INPUT@' ])
+ trace_ss.add(trace_dtrace_o)
+ endif
- trace_ss.add(trace_dtrace_h, trace_dtrace_o)
genh += trace_dtrace_h
endif
endforeach
diff --git a/ui/meson.build b/ui/meson.build
index 018c5698bf..962e776569 100644
--- a/ui/meson.build
+++ b/ui/meson.build
@@ -1,3 +1,6 @@
+softmmu_ss.add(pixman)
+specific_ss.add(pixman) # for the include path
+
softmmu_ss.add(files(
'console.c',
'cursor.c',
@@ -9,7 +12,6 @@ softmmu_ss.add(files(
'keymaps.c',
'qemu-pixman.c',
))
-softmmu_ss.add(pixman)
softmmu_ss.add(when: 'CONFIG_LINUX', if_true: files('input-linux.c'))
softmmu_ss.add(when: 'CONFIG_SPICE', if_true: files('spice-core.c', 'spice-input.c', 'spice-display.c'))
@@ -42,7 +44,7 @@ if config_host.has_key('CONFIG_CURSES')
ui_modules += {'curses' : curses_ss}
endif
-if config_host.has_key('CONFIG_GTK') and config_host.has_key('CONFIG_VTE')
+if config_host.has_key('CONFIG_GTK')
softmmu_ss.add(when: 'CONFIG_WIN32', if_true: files('win32-kbd-hook.c'))
gtk_ss = ss.source_set()