From 48bce2e8f0d787342f3e0f86335460fa25e8ac8f Mon Sep 17 00:00:00 2001 From: Rafael Roquetto Date: Wed, 1 Feb 2017 17:32:13 -0200 Subject: Support for LTTNG and ETW tracing This commit introduces minimal support for instrumentation within Qt. Currently, only LTTNG/Linux and ETW/Windows are supported. Change-Id: I59b48cf83acf5532a998bb493e6379e9177e14c8 Reviewed-by: Oswald Buddenhagen Reviewed-by: Shawn Rutledge Reviewed-by: Thiago Macieira --- mkspecs/features/exclusive_builds.prf | 4 +-- mkspecs/features/qt_build_config.prf | 1 + mkspecs/features/qt_tracepoints.prf | 54 +++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 mkspecs/features/qt_tracepoints.prf (limited to 'mkspecs') diff --git a/mkspecs/features/exclusive_builds.prf b/mkspecs/features/exclusive_builds.prf index f40cc99172..b477cff162 100644 --- a/mkspecs/features/exclusive_builds.prf +++ b/mkspecs/features/exclusive_builds.prf @@ -38,5 +38,5 @@ defineTest(addExclusiveBuilds) { } # Default directories to process -QMAKE_DIR_REPLACE = OBJECTS_DIR MOC_DIR RCC_DIR PRECOMPILED_DIR QGLTF_DIR DESTDIR -QMAKE_DIR_REPLACE_SANE += QGLTF_DIR +QMAKE_DIR_REPLACE = OBJECTS_DIR MOC_DIR RCC_DIR PRECOMPILED_DIR QGLTF_DIR DESTDIR TRACEGEN_DIR +QMAKE_DIR_REPLACE_SANE += QGLTF_DIR TRACEGEN_DIR diff --git a/mkspecs/features/qt_build_config.prf b/mkspecs/features/qt_build_config.prf index 76e1d15319..a2fa1be481 100644 --- a/mkspecs/features/qt_build_config.prf +++ b/mkspecs/features/qt_build_config.prf @@ -25,6 +25,7 @@ OBJECTS_DIR = .obj MOC_DIR = .moc RCC_DIR = .rcc UI_DIR = .uic +TRACEGEN_DIR = .tracegen intel_icl { # ICL 14.0 has a bug that makes it not find #includes in dirs starting with . MOC_DIR = tmp/moc diff --git a/mkspecs/features/qt_tracepoints.prf b/mkspecs/features/qt_tracepoints.prf new file mode 100644 index 0000000000..d1b45a47cb --- /dev/null +++ b/mkspecs/features/qt_tracepoints.prf @@ -0,0 +1,54 @@ +# W A R N I N G +# ------------- +# +# This file is not part of the Qt API. It exists purely as an +# implementation detail. It may change from version to version +# without notice, or even be removed. +# +# We mean it. +# + +qtPrepareTool(QMAKE_TRACEGEN, tracegen) + +isEmpty(TRACEGEN_DIR): TRACEGEN_DIR = . + +PROVIDER_NAME = qt$$lower($$MODULE) +INCLUDEPATH += $$absolute_path($$TRACEGEN_DIR, $$OUT_PWD) +HEADER_PATH = $$OUT_PWD/$$TRACEGEN_DIR/$${PROVIDER_NAME}_tracepoints_p$${first(QMAKE_EXT_H)} + +!force_bootstrap:if(qtConfig(lttng)|qtConfig(etw)) { + SOURCE_PATH = $$OUT_PWD/$$TRACEGEN_DIR/$${PROVIDER_NAME}_tracepoints$${first(QMAKE_EXT_CPP)} + + isEmpty(BUILDS)|build_pass { + impl_file_contents = \ + "$${LITERAL_HASH}define TRACEPOINT_CREATE_PROBES" \ + "$${LITERAL_HASH}define TRACEPOINT_DEFINE" \ + "$${LITERAL_HASH}include \"$${HEADER_PATH}\"" + + write_file($$SOURCE_PATH, impl_file_contents)|error() + } + + GENERATED_SOURCES += $$SOURCE_PATH + + tracegen.input = TRACEPOINT_PROVIDER + tracegen.output = $$HEADER_PATH + tracegen.variable_out = HEADERS + tracegen.depends += $$QMAKE_TRACEGEN_EXE + tracegen.CONFIG = target_predeps + + qtConfig(lttng) { + tracegen.commands = $$QMAKE_TRACEGEN lttng ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT} + QMAKE_USE_PRIVATE += lttng-ust + } else { + tracegen.commands = $$QMAKE_TRACEGEN etw ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT} + } + + QMAKE_EXTRA_COMPILERS += tracegen + + DEFINES += Q_TRACEPOINT +} else { + isEmpty(BUILDS)|build_pass { + header_file_contents = "$${LITERAL_HASH}include " + write_file($$HEADER_PATH, header_file_contents)|error() + } +} -- cgit v1.2.3