This shows how to do some "computations" in meson.build using its array and dictionary data structures, and also a basic usage of the sourceset module for conditional compilation. Notice the new "if have_system" part of util/meson.build, which fixes a bug in the old build system was buggy: util/dbus.c was built even for non-softmmu builds, but the dependency on -lgio was lost when the linking was done through libqemuutil.a. Because all of its users required gio otherwise, the bug was hidden. Meson instead propagates libqemuutil's dependencies down to its users, and shows the problem. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
73 lines
1.8 KiB
Python
73 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
DTrace/SystemTAP backend.
|
|
"""
|
|
|
|
__author__ = "Lluís Vilanova <vilanova@ac.upc.edu>"
|
|
__copyright__ = "Copyright 2012-2017, Lluís Vilanova <vilanova@ac.upc.edu>"
|
|
__license__ = "GPL version 2 or (at your option) any later version"
|
|
|
|
__maintainer__ = "Stefan Hajnoczi"
|
|
__email__ = "stefanha@redhat.com"
|
|
|
|
|
|
from tracetool import out
|
|
|
|
|
|
PUBLIC = True
|
|
|
|
|
|
PROBEPREFIX = None
|
|
|
|
def probeprefix():
|
|
if PROBEPREFIX is None:
|
|
raise ValueError("you must set PROBEPREFIX")
|
|
return PROBEPREFIX
|
|
|
|
|
|
BINARY = None
|
|
|
|
def binary():
|
|
if BINARY is None:
|
|
raise ValueError("you must set BINARY")
|
|
return BINARY
|
|
|
|
|
|
def generate_h_begin(events, group):
|
|
if group == "root":
|
|
header = "trace-dtrace-root.h"
|
|
else:
|
|
header = "trace-dtrace-%s.h" % group
|
|
|
|
# Workaround for ust backend, which also includes <sys/sdt.h> and may
|
|
# require SDT_USE_VARIADIC to be defined. If dtrace includes <sys/sdt.h>
|
|
# first without defining SDT_USE_VARIADIC then ust breaks because the
|
|
# STAP_PROBEV() macro is not defined.
|
|
out('#ifndef SDT_USE_VARIADIC')
|
|
out('#define SDT_USE_VARIADIC 1')
|
|
out('#endif')
|
|
|
|
out('#include "%s"' % header,
|
|
'')
|
|
|
|
out('#undef SDT_USE_VARIADIC')
|
|
|
|
# SystemTap defines <provider>_<name>_ENABLED() but other DTrace
|
|
# implementations might not.
|
|
for e in events:
|
|
out('#ifndef QEMU_%(uppername)s_ENABLED',
|
|
'#define QEMU_%(uppername)s_ENABLED() true',
|
|
'#endif',
|
|
uppername=e.name.upper())
|
|
|
|
def generate_h(event, group):
|
|
out(' QEMU_%(uppername)s(%(argnames)s);',
|
|
uppername=event.name.upper(),
|
|
argnames=", ".join(event.args.names()))
|
|
|
|
|
|
def generate_h_backend_dstate(event, group):
|
|
out(' QEMU_%(uppername)s_ENABLED() || \\',
|
|
uppername=event.name.upper())
|