trace: switch to modular code generation for sub-directories

Introduce rules in the top level Makefile that are able to generate
trace.[ch] files in every subdirectory which has a trace-events file.

The top level directory is handled specially, so instead of creating
trace.h, it creates trace-root.h. This allows sub-directories to
include the top level trace-root.h file, without ambiguity wrt to
the trace.g file in the current sub-dir.

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-id: 20170125161417.31949-7-berrange@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Daniel P. Berrange
2017-01-25 16:14:15 +00:00
committed by Stefan Hajnoczi
parent 2098c56a9b
commit 0ab8ed18a6
44 changed files with 283 additions and 209 deletions

View File

@@ -137,10 +137,12 @@ def main(args):
if probe_prefix is None:
probe_prefix = ".".join(["qemu", target_type, target_name])
if len(args) != 1:
if len(args) < 1:
error_opt("missing trace-events filepath")
with open(args[0], "r") as fh:
events = tracetool.read_events(fh)
events = []
for arg in args:
with open(arg, "r") as fh:
events.extend(tracetool.read_events(fh))
try:
tracetool.generate(events, arg_group, arg_format, arg_backends,

View File

@@ -36,7 +36,12 @@ def binary():
def generate_h_begin(events, group):
out('#include "trace/generated-tracers-dtrace.h"',
if group == "root":
header = "trace-dtrace-root.h"
else:
header = "trace-dtrace.h"
out('#include "%s"' % header,
'')

View File

@@ -44,7 +44,6 @@ def generate_h(event, group):
def generate_c_begin(events, group):
out('#include "qemu/osdep.h"',
'#include "trace.h"',
'#include "trace/control.h"',
'#include "trace/simple.h"',
'')

View File

@@ -20,8 +20,13 @@ PUBLIC = True
def generate_h_begin(events, group):
if group == "root":
header = "trace-ust-root.h"
else:
header = "trace-ust.h"
out('#include <lttng/tracepoint.h>',
'#include "trace/generated-ust-provider.h"',
'#include "%s"' % header,
'')

View File

@@ -20,10 +20,15 @@ def generate(events, backend, group):
active_events = [e for e in events
if "disable" not in e.properties]
if group == "root":
header = "trace-root.h"
else:
header = "trace.h"
out('/* This file is autogenerated by tracetool, do not edit. */',
'',
'#include "qemu/osdep.h"',
'#include "trace.h"',
'#include "%s"' % header,
'')
for e in events:

View File

@@ -28,13 +28,17 @@ def vcpu_transform_args(args):
def generate(events, backend, group):
if group == "root":
header = "trace-root.h"
else:
header = "trace.h"
out('/* This file is autogenerated by tracetool, do not edit. */',
'/* You must include this file after the inclusion of helper.h */',
'',
'#ifndef TRACE_%s_GENERATED_TCG_TRACERS_H' % group.upper(),
'#define TRACE_%s_GENERATED_TCG_TRACERS_H' % group.upper(),
'',
'#include "trace.h"',
'#include "exec/helper-proto.h"',
'',
)

View File

@@ -41,6 +41,11 @@ def vcpu_transform_args(args, mode):
def generate(events, backend, group):
if group == "root":
header = "trace-root.h"
else:
header = "trace.h"
events = [e for e in events
if "disable" not in e.properties]
@@ -49,7 +54,6 @@ def generate(events, backend, group):
'#include "qemu/osdep.h"',
'#include "qemu-common.h"',
'#include "cpu.h"',
'#include "trace.h"',
'#include "exec/helper-proto.h"',
'',
)

View File

@@ -32,4 +32,4 @@ def generate(events, backend, group):
' */',
'#pragma GCC diagnostic ignored "-Wredundant-decls"',
'',
'#include "generated-ust-provider.h"')
'#include "trace-ust-all.h"')

View File

@@ -20,13 +20,18 @@ def generate(events, backend, group):
events = [e for e in events
if "disabled" not in e.properties]
if group == "all":
include = "trace-ust-all.h"
else:
include = "trace-ust.h"
out('/* This file is autogenerated by tracetool, do not edit. */',
'',
'#undef TRACEPOINT_PROVIDER',
'#define TRACEPOINT_PROVIDER qemu',
'',
'#undef TRACEPOINT_INCLUDE_FILE',
'#define TRACEPOINT_INCLUDE_FILE ./generated-ust-provider.h',
'#define TRACEPOINT_INCLUDE_FILE ./%s' % include,
'',
'#if !defined (TRACE_%s_GENERATED_UST_H) || \\' % group.upper(),
' defined(TRACEPOINT_HEADER_MULTI_READ)',