diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2020-08-27 23:09:44 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2020-08-27 23:09:45 +0100 |
commit | 332657245b59952306715bdf696037cb7ea35919 (patch) | |
tree | 0683d1794cce7f2239e81d0fe51ae18f2af62e1e | |
parent | 19591e9e0938ea5066984553c256a043bd5d822f (diff) | |
parent | 74938f0645e25f191247af55d7bf27d9c62f4768 (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.build | 2 | ||||
-rwxr-xr-x | configure | 39 | ||||
-rw-r--r-- | contrib/vhost-user-gpu/meson.build | 3 | ||||
-rw-r--r-- | meson.build | 70 | ||||
-rw-r--r-- | scripts/mtest2make.py | 11 | ||||
-rwxr-xr-x | scripts/ninjatool.py | 5 | ||||
-rwxr-xr-x | scripts/qemu-version.sh | 2 | ||||
-rw-r--r-- | trace/meson.build | 13 | ||||
-rw-r--r-- | ui/meson.build | 6 |
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 } @@ -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() |