Skip to content
Snippets Groups Projects
Commit 1cdb63d4 authored by Philippe Proulx's avatar Philippe Proulx
Browse files

Add LTTngUSTLogger logger plugin


Signed-off-by: default avatarPhilippe Proulx <pproulx@efficios.com>
parent 708b3930
No related branches found
No related tags found
1 merge request!94Add LTTng-UST logger plugin
...@@ -91,6 +91,9 @@ CLI := yes ...@@ -91,6 +91,9 @@ CLI := yes
# set whether to build the JNI native library: (yes or no) # set whether to build the JNI native library: (yes or no)
JNI := yes JNI := yes
# Build the LTTng-UST logger plugin
LTTNGUSTLOGGER := no
# Path of the Java Developement Kit installation # Path of the Java Developement Kit installation
# (must be at least version 1.5.0_10) # (must be at least version 1.5.0_10)
JDKDIR := /usr/lib/jvm/default-java JDKDIR := /usr/lib/jvm/default-java
......
/******************************************************************************
* Copyright (c) 2016 EfficiOS Inc., Philippe Proulx
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Proulx, Philippe
******************************************************************************/
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#include <string>
#include <iostream>
#include <dlfcn.h>
#ifndef TITAN_RUNTIME_2
#include "RT1/TitanLoggerApi.hh"
#else
#include "RT2/TitanLoggerApi.hh"
#endif
#include "LTTngUSTLogger.hh"
#define TRACEPOINT_DEFINE
#define TRACEPOINT_PROBE_DYNAMIC_LINKAGE
#include "tp.hh"
#ifndef RTLD_NODELETE
# define RTLD_NODELETE 0
#endif
#define TPP_SO_FILENAME "lttngust-logger-tp.so"
extern "C"
{
ILoggerPlugin *create_plugin() { return new LTTngUSTLogger(); }
void destroy_plugin(ILoggerPlugin *plugin) { delete plugin; }
}
LTTngUSTLogger::LTTngUSTLogger()
{
major_version_ = 1;
minor_version_ = 0;
name_ = mcopystr("LTTngUSTLogger");
help_ = mcopystr("LTTngUSTLogger writes CTF traces using LTTng-UST");
is_configured_ = true;
/* Open tracepoint provider. */
hasTpp = (dlopen(TPP_SO_FILENAME, RTLD_NOW | RTLD_NODELETE) != NULL);
if (!hasTpp) {
TTCN_warning("Cannot open \"%s\" to load LTTng-UST tracepoint provider. "
"The LTTngUSTLogger plugin will not emit LTTng-UST events.",
TPP_SO_FILENAME);
}
}
LTTngUSTLogger::~LTTngUSTLogger()
{
Free(name_);
name_ = NULL;
Free(help_);
help_ = NULL;
}
CHARSTRING LTTngUSTLogger::joinStrings(const TitanLoggerApi::Strings& strings)
{
CHARSTRING mergedString("");
for (int i = 0; i < strings.str__list().n_elem(); i++) {
if (i != 0) {
mergedString += '\n';
}
mergedString += strings.str__list()[i];
}
return mergedString;
}
void LTTngUSTLogger::log(const TitanLoggerApi::TitanLogEvent& event,
bool log_buffered, bool separate_file,
bool use_emergency_mask)
{
using namespace TitanLoggerApi;
if (!hasTpp) {
return;
}
/* Read timestamp and severity (common arguments). */
const TimestampType& timestamp = event.timestamp();
int severity = (int) event.severity();
/* Log source infos of this event. */
for (int i = 0; i < event.sourceInfo__list().n_elem(); i++) {
tracepoint(titan_core, sourceInfo, timestamp, severity,
event.sourceInfo__list()[i]);
}
/* Log specific event type. */
const LogEventType_choice& eventTypeChoice = event.logEvent().choice();
switch (eventTypeChoice.get_selection()) {
case LogEventType_choice::ALT_actionEvent:
tracepoint(titan_core, actionEvent, timestamp, severity,
(const char *) joinStrings(eventTypeChoice.actionEvent()));
break;
case LogEventType_choice::ALT_defaultEvent:
{
const DefaultEvent_choice& defaultEventChoice =
eventTypeChoice.defaultEvent().choice();
switch (defaultEventChoice.get_selection()) {
case DefaultEvent_choice::ALT_defaultopActivate:
tracepoint(titan_core, defaultEvent_defaultopActivate,
timestamp, severity, defaultEventChoice.defaultopActivate());
break;
case DefaultEvent_choice::ALT_defaultopDeactivate:
tracepoint(titan_core, defaultEvent_defaultopDeactivate,
timestamp, severity, defaultEventChoice.defaultopDeactivate());
break;
case DefaultEvent_choice::ALT_defaultopExit:
tracepoint(titan_core, defaultEvent_defaultopExit,
timestamp, severity, defaultEventChoice.defaultopExit());
break;
default: break;
}
break;
}
case LogEventType_choice::ALT_errorLog:
tracepoint(titan_core, errorLog, timestamp, severity,
eventTypeChoice.errorLog());
break;
case LogEventType_choice::ALT_executorEvent:
{
const ExecutorEvent_choice& executorEventChoice =
eventTypeChoice.executorEvent().choice();
switch (executorEventChoice.get_selection()) {
case ExecutorEvent_choice::ALT_executorRuntime:
tracepoint(titan_core, executorEvent_executorRuntime,
timestamp, severity, executorEventChoice.executorRuntime());
break;
case ExecutorEvent_choice::ALT_executorConfigdata:
tracepoint(titan_core, executorEvent_executorConfigdata,
timestamp, severity, executorEventChoice.executorConfigdata());
break;
case ExecutorEvent_choice::ALT_extcommandStart:
tracepoint(titan_core, executorEvent_extcommandStart,
timestamp, severity, executorEventChoice.extcommandStart());
break;
case ExecutorEvent_choice::ALT_extcommandSuccess:
tracepoint(titan_core, executorEvent_extcommandSuccess,
timestamp, severity, executorEventChoice.extcommandSuccess());
break;
case ExecutorEvent_choice::ALT_executorComponent:
tracepoint(titan_core, executorEvent_executorComponent,
timestamp, severity, executorEventChoice.executorComponent());
break;
case ExecutorEvent_choice::ALT_logOptions:
tracepoint(titan_core, executorEvent_logOptions,
timestamp, severity, executorEventChoice.logOptions());
break;
case ExecutorEvent_choice::ALT_executorMisc:
tracepoint(titan_core, executorEvent_executorMisc,
timestamp, severity, executorEventChoice.executorMisc());
break;
default: break;
}
break;
}
case LogEventType_choice::ALT_functionEvent:
{
const FunctionEvent_choice& functionEventChoice =
eventTypeChoice.functionEvent().choice();
switch (functionEventChoice.get_selection()) {
case FunctionEvent_choice::ALT_unqualified:
tracepoint(titan_core, functionEvent_unqualified,
timestamp, severity,
(const char *) functionEventChoice.unqualified());
break;
case FunctionEvent_choice::ALT_random:
tracepoint(titan_core, functionEvent_random,
timestamp, severity, functionEventChoice.random());
break;
default: break;
}
break;
}
case LogEventType_choice::ALT_parallelEvent:
{
const ParallelEvent_choice& parallelEventChoice =
eventTypeChoice.parallelEvent().choice();
switch (parallelEventChoice.get_selection()) {
case ParallelEvent_choice::ALT_parallelPTC:
tracepoint(titan_core, parallelEvent_parallelPTC,
timestamp, severity,
parallelEventChoice.parallelPTC());
break;
case ParallelEvent_choice::ALT_parallelPTC__exit:
tracepoint(titan_core, parallelEvent_parallelPTC_exit,
timestamp, severity,
parallelEventChoice.parallelPTC__exit());
break;
case ParallelEvent_choice::ALT_parallelPort:
tracepoint(titan_core, parallelEvent_parallelPort,
timestamp, severity,
parallelEventChoice.parallelPort());
break;
default: break;
}
break;
}
case LogEventType_choice::ALT_testcaseOp:
{
const TestcaseEvent_choice& testcaseEventChoice =
eventTypeChoice.testcaseOp().choice();
switch (testcaseEventChoice.get_selection()) {
case TestcaseEvent_choice::ALT_testcaseStarted:
tracepoint(titan_core, testcaseOp_testcaseStarted,
timestamp, severity,
testcaseEventChoice.testcaseStarted());
break;
case TestcaseEvent_choice::ALT_testcaseFinished:
tracepoint(titan_core, testcaseOp_testcaseFinished,
timestamp, severity,
testcaseEventChoice.testcaseFinished());
break;
default: break;
}
break;
}
case LogEventType_choice::ALT_portEvent:
{
const PortEvent_choice& portEventChoice =
eventTypeChoice.portEvent().choice();
switch (portEventChoice.get_selection()) {
case PortEvent_choice::ALT_portQueue:
tracepoint(titan_core, portEvent_portQueue,
timestamp, severity,
portEventChoice.portQueue());
break;
case PortEvent_choice::ALT_portState:
tracepoint(titan_core, portEvent_portState,
timestamp, severity,
portEventChoice.portState());
break;
case PortEvent_choice::ALT_procPortSend:
tracepoint(titan_core, portEvent_procPortSend,
timestamp, severity,
portEventChoice.procPortSend());
break;
case PortEvent_choice::ALT_procPortRecv:
tracepoint(titan_core, portEvent_procPortRecv,
timestamp, severity,
portEventChoice.procPortRecv());
break;
case PortEvent_choice::ALT_msgPortSend:
tracepoint(titan_core, portEvent_msgPortSend,
timestamp, severity,
portEventChoice.msgPortSend());
break;
case PortEvent_choice::ALT_msgPortRecv:
tracepoint(titan_core, portEvent_msgPortRecv,
timestamp, severity,
portEventChoice.msgPortRecv());
break;
case PortEvent_choice::ALT_dualMapped:
tracepoint(titan_core, portEvent_dualMapped,
timestamp, severity,
portEventChoice.dualMapped());
break;
case PortEvent_choice::ALT_dualDiscard:
tracepoint(titan_core, portEvent_dualDiscard,
timestamp, severity,
portEventChoice.dualDiscard());
break;
case PortEvent_choice::ALT_portMisc:
tracepoint(titan_core, portEvent_portMisc,
timestamp, severity,
portEventChoice.portMisc());
break;
default: break;
}
break;
}
case LogEventType_choice::ALT_statistics:
{
const StatisticsType_choice& statsChoice =
eventTypeChoice.statistics().choice();
switch (statsChoice.get_selection()) {
case StatisticsType_choice::ALT_verdictStatistics:
tracepoint(titan_core, statistics_verdictStatistics,
timestamp, severity,
statsChoice.verdictStatistics());
break;
case StatisticsType_choice::ALT_controlpartStart:
tracepoint(titan_core, statistics_controlpartStart,
timestamp, severity,
statsChoice.controlpartStart());
break;
case StatisticsType_choice::ALT_controlpartFinish:
tracepoint(titan_core, statistics_controlpartFinish,
timestamp, severity,
statsChoice.controlpartFinish());
break;
case StatisticsType_choice::ALT_controlpartErrors:
tracepoint(titan_core, statistics_controlpartErrors,
timestamp, severity,
statsChoice.controlpartErrors());
break;
default: break;
}
break;
}
case LogEventType_choice::ALT_timerEvent:
{
const TimerEvent_choice& timerEventChoice =
eventTypeChoice.timerEvent().choice();
switch (timerEventChoice.get_selection()) {
case TimerEvent_choice::ALT_readTimer:
tracepoint(titan_core, timerEvent_readTimer,
timestamp, severity,
timerEventChoice.readTimer());
break;
case TimerEvent_choice::ALT_startTimer:
tracepoint(titan_core, timerEvent_startTimer,
timestamp, severity,
timerEventChoice.startTimer());
break;
case TimerEvent_choice::ALT_guardTimer:
tracepoint(titan_core, timerEvent_guardTimer,
timestamp, severity,
timerEventChoice.guardTimer());
break;
case TimerEvent_choice::ALT_stopTimer:
tracepoint(titan_core, timerEvent_stopTimer,
timestamp, severity,
timerEventChoice.stopTimer());
break;
case TimerEvent_choice::ALT_timeoutTimer:
tracepoint(titan_core, timerEvent_timeoutTimer,
timestamp, severity,
timerEventChoice.timeoutTimer());
break;
case TimerEvent_choice::ALT_timeoutAnyTimer:
tracepoint(titan_core, timerEvent_timeoutAnyTimer,
timestamp, severity,
timerEventChoice.timeoutAnyTimer());
break;
case TimerEvent_choice::ALT_unqualifiedTimer:
tracepoint(titan_core, timerEvent_unqualifiedTimer,
timestamp, severity,
(const char *) timerEventChoice.unqualifiedTimer());
break;
default: break;
}
break;
}
case LogEventType_choice::ALT_userLog:
tracepoint(titan_core, userLog, timestamp, severity,
(const char *) joinStrings(eventTypeChoice.userLog()));
break;
case LogEventType_choice::ALT_verdictOp:
{
const VerdictOp_choice& verdictOpChoice =
eventTypeChoice.verdictOp().choice();
switch (verdictOpChoice.get_selection()) {
case VerdictOp_choice::ALT_setVerdict:
tracepoint(titan_core, verdictOp_setVerdict,
timestamp, severity,
verdictOpChoice.setVerdict());
break;
case VerdictOp_choice::ALT_getVerdict:
tracepoint(titan_core, verdictOp_getVerdict,
timestamp, severity,
verdictOpChoice.getVerdict());
break;
case VerdictOp_choice::ALT_finalVerdict:
{
const FinalVerdictType_choice& finalVerdictTypeChoice =
verdictOpChoice.finalVerdict().choice();
switch (finalVerdictTypeChoice.get_selection()) {
case FinalVerdictType_choice::ALT_info:
tracepoint(titan_core, verdictOp_finalVerdict_info,
timestamp, severity,
finalVerdictTypeChoice.info());
break;
case FinalVerdictType_choice::ALT_notification:
tracepoint(titan_core, verdictOp_finalVerdict_notification,
timestamp, severity,
finalVerdictTypeChoice.notification());
break;
default: break;
}
break;
}
default: break;
}
break;
}
case LogEventType_choice::ALT_warningLog:
tracepoint(titan_core, warningLog, timestamp, severity,
eventTypeChoice.warningLog());
break;
case LogEventType_choice::ALT_matchingEvent:
{
const MatchingEvent_choice& matchingEventChoice =
eventTypeChoice.matchingEvent().choice();
switch (matchingEventChoice.get_selection()) {
case MatchingEvent_choice::ALT_matchingDone:
tracepoint(titan_core, matchingEvent_matchingDone,
timestamp, severity,
matchingEventChoice.matchingDone());
break;
case MatchingEvent_choice::ALT_matchingSuccess:
tracepoint(titan_core, matchingEvent_matchingSuccess,
timestamp, severity,
matchingEventChoice.matchingSuccess());
break;
case MatchingEvent_choice::ALT_matchingFailure:
switch (matchingEventChoice.matchingFailure().choice().get_selection()) {
case MatchingFailureType_choice::ALT_system__:
tracepoint(titan_core, matchingEvent_matchingFailure_system,
timestamp, severity,
matchingEventChoice.matchingFailure());
break;
case MatchingFailureType_choice::ALT_compref:
tracepoint(titan_core, matchingEvent_matchingFailure_compref,
timestamp, severity,
matchingEventChoice.matchingFailure());
break;
default: break;
}
break;
case MatchingEvent_choice::ALT_matchingProblem:
tracepoint(titan_core, matchingEvent_matchingProblem,
timestamp, severity,
matchingEventChoice.matchingProblem());
break;
case MatchingEvent_choice::ALT_matchingTimeout:
tracepoint(titan_core, matchingEvent_matchingTimeout,
timestamp, severity,
matchingEventChoice.matchingTimeout());
break;
default: break;
}
break;
}
case LogEventType_choice::ALT_debugLog:
tracepoint(titan_core, debugLog, timestamp, severity,
eventTypeChoice.debugLog());
break;
case LogEventType_choice::ALT_executionSummary:
tracepoint(titan_core, executionSummary, timestamp, severity,
eventTypeChoice.executionSummary());
break;
case LogEventType_choice::ALT_unhandledEvent:
tracepoint(titan_core, unhandledEvent, timestamp, severity,
(const char *) eventTypeChoice.unhandledEvent());
break;
default: break;
}
}
/******************************************************************************
* Copyright (c) 2016 EfficiOS Inc., Philippe Proulx
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Proulx, Philippe
******************************************************************************/
#ifndef LTTngUSTLogger_HH
#define LTTngUSTLogger_HH
#include <stdio.h>
#include "ILoggerPlugin.hh"
namespace TitanLoggerApi { class TitanLogEvent; }
class LTTngUSTLogger: public ILoggerPlugin
{
public:
LTTngUSTLogger();
virtual ~LTTngUSTLogger();
void log(const TitanLoggerApi::TitanLogEvent& event, bool log_buffered,
bool separate_file, bool use_emergency_mask);
inline bool is_static() { return false; }
inline void init(const char *options) { }
inline void fini() { }
private:
CHARSTRING joinStrings(const TitanLoggerApi::Strings& strings);
bool hasTpp;
};
#endif // LTTngUSTLogger_HH
##############################################################################
# Copyright (c) 2000-2016 Ericsson Telecom AB
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
# Balasko, Jeno
# Raduly, Csaba
# Busque, Antoine
# Proulx, Philippe
#
##############################################################################
TOP := ../..
include ../../Makefile.cfg
LIB_DIR := $(TTCN3_DIR)/lib
MAJOR := 1
MINOR := 0
TPP := lttngust-logger-tp.so
TPP_SRC := tp.cc
TPP_OBJ := $(TPP_SRC:.cc=.o)
TPP_HEADER := $(TPP_SRC:.cc=.hh)
SOURCES := LTTngUSTLogger.cc
STATIC_SOURCES := ${SOURCES} $(LTTNG_UST_SOURCES)
HEADERS := $(SOURCES:.cc=.hh) $(TPP_HEADER)
OBJECTS := $(SOURCES:.cc=.o)
OBJECTS_RT2 := $(addprefix FT/,$(OBJECTS))
SHARED_LIB := liblttng-ust-logger.so
SHARED_LIB_RT2 := liblttng-ust-logger-rt2.so
SHARED_LIB_PARALLEL := liblttng-ust-logger-parallel.so
SHARED_LIB_PARALLEL_RT2 := liblttng-ust-logger-parallel-rt2.so
CPPFLAGS += -I../../core -I$(ABS_SRC)/../../common -I$(ABS_SRC)/../../core -I.
# RT2 needs core2 (for RT2/TitanLoggerAPI.hh) in addition to core
CPPFLAGS_RT2 := $(CPPFLAGS) -I$(ABS_SRC)/../../core2 -DTITAN_RUNTIME_2
CXXFLAGS += -Werror
COMMON_LDFLAGS += -ldl
LDFLAGS_STD += $(COMMON_LDFLAGS) -g -L$(ABS_SRC)/../../core -Wl,-soname,$(SHARED_LIB).$(MAJOR) -o $(SHARED_LIB).$(MAJOR).$(MINOR)
LDFLAGS_RT2 += $(COMMON_LDFLAGS) -g -L$(ABS_SRC)/../../core2 -Wl,-soname,$(SHARED_LIB_RT2).$(MAJOR) -o $(SHARED_LIB_RT2).$(MAJOR).$(MINOR)
LDFLAGS_PARALLEL += $(COMMON_LDFLAGS) -g -L$(ABS_SRC)/../../core -Wl,-soname,$(SHARED_LIB_PARALLEL).$(MAJOR) -o $(SHARED_LIB_PARALLEL).$(MAJOR).$(MINOR)
LDFLAGS_PARALLEL_RT2 += $(COMMON_LDFLAGS) -g -L$(ABS_SRC)/../../core2 -Wl,-soname,$(SHARED_LIB_PARALLEL_RT2).$(MAJOR) -o $(SHARED_LIB_PARALLEL_RT2).$(MAJOR).$(MINOR)
LIBS := -lttcn3-dynamic
LIBS_RT2 := -lttcn3-rt2-dynamic
LIBS_PARALLEL := -lttcn3-parallel-dynamic
LIBS_PARALLEL_RT2 := -lttcn3-rt2-parallel-dynamic
TARGETS := $(TPP) $(SHARED_LIB) $(SHARED_LIB_PARALLEL) $(SHARED_LIB_RT2) $(SHARED_LIB_PARALLEL_RT2)
# .so with .major appended:
TARGETS_MAJOR := $(addsuffix .$(MAJOR), $(TARGETS))
# .so with .major.minor appended:
TARGETS_MAJOR_MINOR := $(addsuffix .$(MINOR), $(TARGETS_MAJOR))
# OBJECTS_RT2, TARGETS_MAJOR and TARGETS_MAJOR_MINOR are non-standard make variables,
# not taken into account by "clean" in Makefile.genrules
# Delete them as "miscellaneous" files.
TOBECLEANED := $(OBJECTS_RT2) $(TARGETS_MAJOR) $(TARGETS_MAJOR_MINOR) $(TPP_OBJ) $(TPP)
all run: $(TARGETS)
$(SHARED_LIB): $(OBJECTS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS_STD) $^ $(LIBS) -shared
ln -sf $@.$(MAJOR).$(MINOR) $@.$(MAJOR)
ln -sf $@.$(MAJOR) $@
$(SHARED_LIB_RT2): $(OBJECTS_RT2)
$(CXX) $(CPPFLAGS_RT2) $(CXXFLAGS) $(LDFLAGS_RT2) $^ $(LIBS_RT2) -shared
ln -sf $@.$(MAJOR).$(MINOR) $@.$(MAJOR)
ln -sf $@.$(MAJOR) $@
$(SHARED_LIB_PARALLEL): $(OBJECTS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS_PARALLEL) $^ $(LIBS_PARALLEL) -shared
ln -sf $@.$(MAJOR).$(MINOR) $@.$(MAJOR)
ln -sf $@.$(MAJOR) $@
$(SHARED_LIB_PARALLEL_RT2): $(OBJECTS_RT2)
$(CXX) $(CPPFLAGS_RT2) $(CXXFLAGS) $(LDFLAGS_PARALLEL_RT2) $^ $(LIBS_PARALLEL_RT2) -shared
ln -sf $@.$(MAJOR).$(MINOR) $@.$(MAJOR)
ln -sf $@.$(MAJOR) $@
$(OBJECTS): $(SOURCES)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $?
# The `-o $@' stuff is necessary, otherwise the result will be put into the
# current directory.
$(OBJECTS_RT2): $(SOURCES)
mkdir -p FT
$(CXX) $(CPPFLAGS_RT2) $(CXXFLAGS) -c $? -o $@
$(TPP_OBJ): $(TPP_SRC) $(TPP_HEADER)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I. -c -fpic $(TPP_SRC)
$(TPP): $(TPP_OBJ)
$(CXX) -o $@ $(LDFLAGS) -shared $^ -llttng-ust
dep:
@echo Doing nothing...
install: $(SHARED_LIB) $(SHARED_LIB_RT2) $(SHARED_LIB_PARALLEL) $(SHARED_LIB_PARALLEL_RT2)
mkdir -p $(LIB_DIR)
cp $(SHARED_LIB)* $(SHARED_LIB_RT2)* $(SHARED_LIB_PARALLEL)* $(SHARED_LIB_PARALLEL_RT2)* $(LIB_DIR)
cp $(TPP) $(LIB_DIR)
include ../../Makefile.genrules
/******************************************************************************
* Copyright (c) 2016 EfficiOS Inc., Philippe Proulx
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Proulx, Philippe
******************************************************************************/
#define TRACEPOINT_CREATE_PROBES
#ifndef TITAN_RUNTIME_2
#include "RT1/TitanLoggerApi.hh"
#else
#include "RT2/TitanLoggerApi.hh"
#endif
#include "tp.hh"
This diff is collapsed.
...@@ -12,8 +12,15 @@ ...@@ -12,8 +12,15 @@
# Susanszky, Eszter # Susanszky, Eszter
# #
############################################################################## ##############################################################################
TOP := ..
include ../Makefile.cfg
DIRS := \ DIRS := \
JUnitLogger TSTLogger JUnitLogger2 JUnitLogger TSTLogger JUnitLogger2
ifeq ($(LTTNGUSTLOGGER),yes)
DIRS += LTTngUSTLogger
endif
all run dep clean distclean install: all run dep clean distclean install:
for d in $(DIRS); do $(MAKE) -C $$d $@ || exit 1; done for d in $(DIRS); do $(MAKE) -C $$d $@ || exit 1; done
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment