This directory contains the source code for the LTTng integration plugins for
Eclipse, which includes the generic Tracing and Monitoring Framework (TMF).

The plugins are categorized as follows:
org.eclipse.linuxtools.ctf.*          Common Trace Format (CTF) reader library
org.eclipse.linuxtools.gdbtrace.*     Support for reading and viewing GDB traces
org.eclipse.linuxtools.lttng2.*       LTTng 2.x integration
org.eclipse.linuxtools.tmf.*          Tracing and Monitoring Framework
org.eclipse.linuxtools.tracing.rcp.*  Code specific to the RCP version

See the plugins.svg file for a diagram showing the dependencies between the
different plugins.


To set up the environment to build TMF from within Eclipse, see this wiki page:
http://wiki.eclipse.org/Linux_Tools_Project/LTTng_Eclipse_Plug-in_Development_Environment_Setup




To build the plugins manually, first cd to the directory then invoke Maven:
$ cd lttng/
$ mvn clean install

The default command will compile and run the unit tests. Running the tests can
take some time, to skip them you can append "-Dmaven.test.skip=true" to the
'mvn' command:
$ mvn clean install -Dmaven.test.skip=true

The RCP is not built by default, to build it you need to add "-PtracingRcp" to
the 'mvn' command:
$ mvn clean install -PtracingRcp -Dmaven.test.skip=true

This will build the RCP for all supported architectures. The resulting archives
will be placed in lttng/org.eclipse.linuxtools.tracing.rcp.product/target/products

