[lttng-dev] Updated easy-ust Makefile
Thibault, Daniel
Daniel.Thibault at drdc-rddc.gc.ca
Fri Mar 22 09:25:52 EDT 2013
In my previous note on this mailing list, forget the bit about LD_PRELOAD being beholden to the remaining library search. I got fooled into thinking that for unrelated reasons. Turns out LD_PRELOAD loads the so regardless of the search's outcome: it's just added to the list of dependencies to load (traversal is breadth-first, it turns out), and its initializer called last.
Here is a suggested updated lttng-ust/doc/examples/easy-ust/Makefile which fixes a minor problem (missing LDFLAGS preventing make from succeeding out-of-the-box) and adds additional targets demonstrating other ways tracepoints can be compiled into an application. Please review this for any factual errors.
- - - BEGIN - - -
# Copyright (C) 2011-2012 Matthew Khouzam <matthew.khouzam at ericsson.com>
# Copyright (C) 2012 Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
#
# THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
# OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
#
# Permission is hereby granted to use or copy this program for any
# purpose, provided the above notices are retained on all copies.
# Permission to modify the code and to distribute modified code is
# granted, provided the above notices are retained, and a notice that
# the code was modified is included with the above copyright notice.
#
# This makefile is not using automake so that people can see how to make
# simply. It builds a sample program in any one of four (really three) ways:
#
# ("static", default) with a statically embedded tracepoint provider probe,
# through inclusion.
#
# ("staticlib") with a statically embedded tracepoint provider probe, through
# a static library (libtp.a). The resulting samplestaticlib binary is identical
# to the samplestatic binary.
#
# ("dynamic", "dynamicfull") with a dynamically loaded shared library
# (libtp.so). The only difference between these two is that "dynamicfull" sets
# the TRACEPOINT_PROBE_DYNAMIC_LINKAGE define in order to avoid needing to be
# linked statically with the shared library.
#
# Currently, an instrumented application that would use a dynamically linked
# (as opposed to dynamically loaded) tracepoint provider shared library would
# still dynamically load it (using the dlopen() system call), so the difference
# is pointless.
#
# The dynamic samples must use LD_PRELOAD to run because the trace provider
# shared library (libtp.so) is not in the library search path; to obviate this
# requirement, you can either install your trace provider shared library in
# the library search path (e.g. /usr/local/lib) or add a DT_RUNPATH tag to your
# sample so it looks in its own directory for missing libraries (look for the
# commented-out "$(CC) ... -Wl,-rpath,\$ORIGIN,--enable-new-dtags" lines in
# the "dynamic" and "dynamicfull" targets). The latter option does have the
# disadvantage that the dynamic linker will look for all the required libraries
# (libdl.so, libc.so, liblttng-ust.so, etc.) in sample's directory first.
#
# The "html" target helps for documentation (req. code2html).
AR = ar
CC = gcc
LIBS = -ldl -llttng-ust # On Linux
#LIBS = -lc -llttng-ust # On BSD
CFLAGS = -I.
LDFLAGS = -L/usr/local/lib
SOFLAGS = -fPIC
SOVERSION_MAJOR = 1
SOVERSION_MINOR = 0
# default make is "all"
all: static
static: sample.o tp.o
$(CC) -o sample$@ $^ $(LDFLAGS) $(LIBS)
@echo " Use './sample$@' to run sample$@"
staticlib: sample.o libtp.a
$(CC) -o sample$@ $^ $(LDFLAGS) $(LIBS) -L.
@echo " Use './sample$@' to run sample$@"
dynamic: sample.o libtp.so
# $(CC) -o sample$@ $< $(LDFLAGS) $(LIBS) -L. -ltp \
# -Wl,-rpath,\$ORIGIN,--enable-new-dtags
$(CC) -o sample$@ $< $(LDFLAGS) $(LIBS) -L. -ltp
@echo " Use 'LD_PRELOAD=./libtp.so ./sample$@' to run sample$@"
dynamicfull: sampledynamic.o libtp.so
# $(CC) -o sample$@ $< $(LDFLAGS) $(LIBS) \
# -Wl,-rpath,\$ORIGIN,--enable-new-dtags
$(CC) -o sample$@ $< $(LDFLAGS) $(LIBS)
@echo " Use 'LD_PRELOAD=./libtp.so ./sample$@' to run sample$@"
sample.o: sample.c sample_component_provider.h
$(CC) $(CFLAGS) -c -o $@ $<
sampledynamic.o: sample.c sample_component_provider.h
$(CC) $(CFLAGS) -D TRACEPOINT_PROBE_DYNAMIC_LINKAGE -c -o $@ $<
libtp.a: tp.o
$(AR) -cq $@ $<
libtp.so: libtp.o
$(CC) -shared -Wl,-soname,$@.$(SOVERSION_MAJOR) -o \
$@.$(SOVERSION_MAJOR).$(SOVERSION_MINOR) $(LDFLAGS) $(LIBS) $<
ln -sf $@.$(SOVERSION_MAJOR).$(SOVERSION_MINOR) $@.$(SOVERSION_MAJOR)
ln -sf $@.$(SOVERSION_MAJOR) $@
libtp.o: tp.c sample_component_provider.h
$(CC) $(CFLAGS) $(SOFLAGS) -c -o $@ $<
tp.o: tp.c sample_component_provider.h
$(CC) $(CFLAGS) -c -o $@ $<
html: sample_component_provider.html sample.html tp.html
%.html: %.c
code2html -lc $< $@
%.html : %.h
code2html -lc $< $@
.PHONY: clean
clean:
rm -f *.html
rm -f *.o *.a *.so *.so.*
rm -f samplestatic* sampledynamic*
- - - END - - -
Daniel U. Thibault
R & D pour la défense Canada - Valcartier (RDDC Valcartier) / Defence R&D Canada - Valcartier (DRDC Valcartier)
Cyber sécurité pour les missions essentielles (CME) / Mission Critical Cyber Security (MCCS)
Protection des systèmes et contremesures (PSC) / Systems Protection & Countermeasures (SPC)
2459 route de la Bravoure
Québec, QC G3J 1X5
CANADA
Vox : (418) 844-4000 x4245
Fax : (418) 844-4538
NAC : 918V QSDJ <http://www.travelgis.com/map.asp?addr=918V%20QSDJ>
Gouvernement du Canada / Government of Canada
<http://www.valcartier.drdc-rddc.gc.ca/>
More information about the lttng-dev
mailing list