* Yannick Brosseau ([email protected]) wrote: > (refs #40) Merged, thanks!
Mathieu > > Signed-off-by: Yannick Brosseau <[email protected]> > --- > doc/examples/gen-tp/Makefile | 19 +++++++++-- > doc/man/lttng-gen-tp.1 | 24 +++++++++++--- > tools/lttng-gen-tp | 72 > ++++++++++++++++++++++++++++++++++++++++-- > 3 files changed, 104 insertions(+), 11 deletions(-) > mode change 100644 => 100755 tools/lttng-gen-tp > > diff --git a/doc/examples/gen-tp/Makefile b/doc/examples/gen-tp/Makefile > index 664372f..c78fc67 100644 > --- a/doc/examples/gen-tp/Makefile > +++ b/doc/examples/gen-tp/Makefile > @@ -20,17 +20,30 @@ LIBS = -ldl -llttng-ust > > all: sample > > -sample: sample.o sample-tp.o > +sample: sample.o sample_tracepoint.o > $(CC) $(LIBS) -o $@ $^ > > sample.o: sample.c sample_tracepoint.h > $(CC) $(CFLAGS) -c -o $@ $< > > -sample-tp.o: sample_tracepoint.c sample_tracepoint.h > - $(CC) $(CFLAGS) -I. -c -o $@ $< > +# Use this command to compile the .c manually > +#sample_tracepoint.o: sample_tracepoint.c sample_tracepoint.h > +# $(CC) $(CFLAGS) -I. -c -o $@ $< > + > +# This rule generate .o only and depends on rules for generating > +# the .h and .c > +%.o: %.tp %.c %.h > + tools/lttng-gen-tp -o $@ $< > + > +# The following rule can be used to generate all files instead of having one > +# for each file type. Note that the sample.o has a dependency on the > +# .h, so you need to change that if you remove the %.h rule. > +#%.o: %.tp > +# lttng-gen-tp $< > > %.h: %.tp > lttng-gen-tp -o $@ $< > + > %.c: %.tp > lttng-gen-tp -o $@ $< > > diff --git a/doc/man/lttng-gen-tp.1 b/doc/man/lttng-gen-tp.1 > index 3c7034c..551f003 100644 > --- a/doc/man/lttng-gen-tp.1 > +++ b/doc/man/lttng-gen-tp.1 > @@ -21,10 +21,12 @@ The \fBlttng\-gen\-tp\fP tool simplify the generation of > the UST tracepoint > files. It takes a simple template file and generate the necessary code to > use the defined tracepoints in your application. > The section TEMPLATE FILE FORMAT describe the content of the template file. > > -Currently, the tool can generate the .h and .c associated to your > +Currently, the tool can generate the .h, .c and .o associated to your > tracepoint. The generated .h can be directly included in your application. > -You need to compile the .c into a .o, .a or .so at your choice and > -link it with your application. Refer to the UST documentation for the > +You can let the tool generate the .o or compile the .c yourself. > +You can compile the .c into a .o, .a or .so at your choice and > +link it with your application. > +Refer to the UST documentation for the > advantages and disadvantage of each form. > To compile the resulting .c file, you need to add the options > "-llttng-ust -I." > @@ -45,11 +47,11 @@ Increase verbosity. > .TP > .BR "\-o, \-\-output" > Specify the generated file. The type of the generated file depend on the file > -extension (.h, .c). > +extension (.h, .c, .o). > This option can be specfied multiple times to generate different file type. > > .PP > -When no output is specified de default files are generated with the same > base filename as the template file. The default files are: .h, .c. > +When no output is specified de default files are generated with the same > base filename as the template file. The default files are: .h, .c, .o. > > .SH "TEMPLATE FILE FORMAT" > > @@ -77,7 +79,19 @@ TRACEPOINT_EVENT( > ctf_string(message, text) > ) > ) > +.SH "ENVIRONMENT VARIABLES" > > +.PP > +When the tool generate an .o file, it will look for the following > environment variables > +.PP > + > +.PP > +.IP "CC" > +Specifer which C compiler to use. If the variable is not specified, the > +tool will try "cc" and "gcc" > + > +.IP "CFLAGS" > +Flags directly passed to the compiler > .SH "SEE ALSO" > > .PP > diff --git a/tools/lttng-gen-tp b/tools/lttng-gen-tp > old mode 100644 > new mode 100755 > index 9b08275..3f28534 > --- a/tools/lttng-gen-tp > +++ b/tools/lttng-gen-tp > @@ -19,6 +19,8 @@ > import sys > import getopt > import re > +import os > +import subprocess > > class Usage(Exception): > def __init__(self, msg): > @@ -90,6 +92,59 @@ class CFile: > headerFilename = headerFilename)) > outputFile.close() > > +class ObjFile: > + def __init__(self, filename, template): > + self.outputFilename = filename > + self.template = template > + def _detectCC(self): > + cc = "" > + if os.environ.has_key('CC'): > + cc = os.environ['CC'] > + try: > + subprocess.call(cc, > + stdout=subprocess.PIPE, > + stderr=subprocess.PIPE) > + except OSError, msg: > + print "Invalid CC environment variable" > + cc = "" > + > + else: > + # Try c first, if that fails try gcc > + try: > + useCC = True > + subprocess.call("cc", > + stdout=subprocess.PIPE, > + stderr=subprocess.PIPE) > + except OSError, msg: > + useCC = False > + if useCC: > + cc = "cc" > + > + else: > + try: > + useGCC = True > + subprocess.call("gcc", > + stdout=subprocess.PIPE, > + stderr=subprocess.PIPE) > + except OSError, msg: > + useGCC = False > + if useGCC: > + cc = "gcc" > + return cc > + > + def write(self): > + cFilename = self.outputFilename.replace(".o",".c") > + cc = self._detectCC() > + if cc == "": > + raise RuntimeError("No C Compiler detected") > + if os.environ.has_key('CFLAGS'): > + cflags = os.environ['CFLAGS'] > + else: > + cflags = "" > + > + command = cc + " -c " + cflags + " -I. -llttng-ust" + " -o " + > self.outputFilename + " " + cFilename > + subprocess.call(command.split()) > + > class TemplateFile: > def __init__(self, filename): > self.domain = "" > @@ -132,9 +187,9 @@ usage=""" > > If no OUTPUT_FILE is given, the .h and .c file will be generated. > (The basename of the template file with be used for the generated file. > - for example sample.tp will generate sample.h and sample.c) > + for example sample.tp will generate sample.h, sample.c and sample.o) > > - When using the -o option, the OUTPUT_FILE must end with either .h or .c > + When using the -o option, the OUTPUT_FILE must end with either .h, .c or .o > The -o option can be repeated multiple times. > > The template file must contains TRACEPOINT_EVENT and TRACEPOINT_LOGLEVEL > @@ -168,8 +223,10 @@ def main(argv=None): > > doCFile = None > doHeader = None > + doObj = None > headerFilename = None > cFilename = None > + objFilename = None > > if len(outputNames) > 0: > if len(args) > 1: > @@ -184,13 +241,15 @@ def main(argv=None): > doCFile = True > cFilename = outputName > elif outputName[-2:] == ".o": > - print "Not yet implemented, sorry" > + doObj = True > + objFilename = outputName > else: > print "output file type unsupported" > return(4) > else: > doHeader = True > doCFile = True > + doObj = True > > # process arguments > for arg in args: > @@ -210,6 +269,13 @@ def main(argv=None): > curFilename = re.sub("\.tp$",".c",arg) > dotc = CFile(curFilename, tpl) > dotc.write() > + if doObj: > + if objFilename: > + curFilename = objFilename > + else: > + curFilename = re.sub("\.tp$",".o",arg) > + dotobj = ObjFile(curFilename, tpl) > + dotobj.write() > > if __name__ == "__main__": > sys.exit(main()) > -- > 1.7.9 > > > _______________________________________________ > lttng-dev mailing list > [email protected] > http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev -- Mathieu Desnoyers Operating System Efficiency R&D Consultant EfficiOS Inc. http://www.efficios.com _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
