summaryrefslogtreecommitdiffstats
path: root/mkspecs
diff options
context:
space:
mode:
authorRafael Roquetto <rafael.roquetto@kdab.com>2017-02-01 17:32:13 -0200
committerSérgio Martins <sergio.martins@kdab.com>2018-01-28 19:17:02 +0000
commit48bce2e8f0d787342f3e0f86335460fa25e8ac8f (patch)
tree038af77f6e112f6c9a348a386e9c1eaff3aeab47 /mkspecs
parent2b7de16fbe399daa00986f2d32d05cfe51966b66 (diff)
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 <oswald.buddenhagen@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'mkspecs')
-rw-r--r--mkspecs/features/exclusive_builds.prf4
-rw-r--r--mkspecs/features/qt_build_config.prf1
-rw-r--r--mkspecs/features/qt_tracepoints.prf54
3 files changed, 57 insertions, 2 deletions
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 <private/qtrace_p.h>"
+ write_file($$HEADER_PATH, header_file_contents)|error()
+ }
+}