[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