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
 -----BEGIN PGP SIGNATURE-----
 
 iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAl9H5i0UHHBib256aW5p
 QHJlZGhhdC5jb20ACgkQv/vSX3jHroNDqwf/fgtR+eMHNuY+/a+5aknaJ6SHWLDm
 VDK9a0lRGhQETRRdnprooB55VTGsMyVsrz5iDHOQYarZrixc5vxw549pEEWSEedP
 zHQAI5EgBZYhSy17V+bA2ZdhfnLOvFF2uqnTzvcXnx4gBKOzJLZyLSMAjbYKvZ5Z
 QW+293TiP345a/VjqFTTTQ79mVOvO5zl0Z9fMWKxqfWJ7rHZG4YNE/FZhbyjhv0O
 oV1tWvqOOyvdBo7lXf9d0L6f6cSaTuj43pvKnsMbj0EKBhoGY2VQzHgdczj4ByyS
 zB7m/A1c64uRJwftFw1kYw69He0k9HmkzfQtU9MWB9H1bd9SyeayBmPNaQ==
 =kFoB
 -----END PGP SIGNATURE-----

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>
This commit is contained in:
Peter Maydell 2020-08-27 23:09:44 +01:00
commit 332657245b
9 changed files with 87 additions and 64 deletions

View File

@ -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 }

39
configure vendored
View File

@ -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
@ -3922,20 +3937,6 @@ if test "$modules" = yes; then
fi
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
@ -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" \

View File

@ -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],

View File

@ -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']}

View File

@ -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'])))

View File

@ -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)

View File

@ -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 "")

View File

@ -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

View File

@ -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()