2012-04-06 02:47:53 +04:00
# trace-cmd version
EP_VERSION = 1
EP_PATCHLEVEL = 1
EP_EXTRAVERSION = 0
# file format version
FILE_VERSION = 6
MAKEFLAGS += --no-print-directory
# Makefiles suck: This macro sets a default value of $(2) for the
# variable named by $(1), unless the variable has been set by
# environment or command line. This is necessary for CC and AR
# because make sets default values, so the simpler ?= approach
# won't work as expected.
d e f i n e a l l o w - o v e r r i d e
$( if $( or $( findstring environment,$( origin $( 1) ) ) ,\
$( findstring command line,$( origin $( 1) ) ) ) ,,\
$( eval $( 1) = $( 2) ) )
e n d e f
# Allow setting CC and AR, or setting CROSS_COMPILE as a prefix.
$( call allow -override ,CC ,$ ( CROSS_COMPILE ) gcc )
$( call allow -override ,AR ,$ ( CROSS_COMPILE ) ar )
2015-05-28 16:28:54 +03:00
$( call allow -override ,NM ,$ ( CROSS_COMPILE ) nm )
2012-04-06 02:47:53 +04:00
EXT = -std= gnu99
INSTALL = install
# Use DESTDIR for installing into a different root directory.
# This is useful for building a package. The program will be
# installed in this directory as if it was the root directory.
# Then the build tool can move it later.
DESTDIR ?=
DESTDIR_SQ = '$(subst ' ,'\' ',$(DESTDIR))'
2015-05-17 13:56:28 +03:00
LP64 := $( shell echo __LP64__ | ${ CC } ${ CFLAGS } -E -x c - | tail -n 1)
i f e q ( $( LP 64) , 1 )
libdir_relative = lib64
e l s e
libdir_relative = lib
e n d i f
2012-04-06 02:47:53 +04:00
prefix ?= /usr/local
2015-05-17 13:56:28 +03:00
libdir = $( prefix) /$( libdir_relative)
2012-04-06 02:47:53 +04:00
man_dir = $( prefix) /share/man
man_dir_SQ = '$(subst ' ,'\' ',$(man_dir))'
2013-06-04 09:20:16 +04:00
export man_dir man_dir_SQ INSTALL
2012-04-06 02:47:53 +04:00
export DESTDIR DESTDIR_SQ
2013-12-03 17:09:17 +04:00
set_plugin_dir := 1
# Set plugin_dir to preffered global plugin location
# If we install under $HOME directory we go under
# $(HOME)/.traceevent/plugins
#
# We dont set PLUGIN_DIR in case we install under $HOME
# directory, because by default the code looks under:
# $(HOME)/.traceevent/plugins by default.
#
i f e q ( $( plugin_dir ) , )
i f e q ( $( prefix ) , $( HOME ) )
o v e r r i d e plugin_dir = $( HOME) /.traceevent/plugins
set_plugin_dir := 0
e l s e
2015-05-17 13:56:28 +03:00
o v e r r i d e plugin_dir = $( libdir) /traceevent/plugins
2013-12-03 17:09:17 +04:00
e n d i f
e n d i f
i f e q ( $( set_plugin_dir ) , 1 )
2014-01-22 19:01:48 +04:00
PLUGIN_DIR = -DPLUGIN_DIR= " $( plugin_dir) "
2013-12-03 17:09:17 +04:00
PLUGIN_DIR_SQ = '$(subst ' ,'\' ',$(PLUGIN_DIR))'
e n d i f
2015-01-07 20:39:45 +03:00
i n c l u d e . . / . . / s c r i p t s / M a k e f i l e . i n c l u d e
2013-12-19 17:42:02 +04:00
2012-04-06 02:47:53 +04:00
# copy a bit from Linux kbuild
i f e q ( "$(origin V)" , "command line" )
VERBOSE = $( V)
e n d i f
i f n d e f V E R B O S E
VERBOSE = 0
e n d i f
2015-01-07 20:39:45 +03:00
i f e q ( $( srctree ) , )
2016-11-22 11:30:26 +03:00
srctree := $( patsubst %/,%,$( dir $( CURDIR) ) )
2015-01-07 20:39:45 +03:00
srctree := $( patsubst %/,%,$( dir $( srctree) ) )
srctree := $( patsubst %/,%,$( dir $( srctree) ) )
#$(info Determined 'srctree' to be $(srctree))
2012-04-06 02:47:53 +04:00
e n d i f
2015-05-17 13:56:28 +03:00
export prefix libdir src obj
2012-04-06 02:47:53 +04:00
# Shell quotes
2015-05-17 13:56:28 +03:00
libdir_SQ = $( subst ',' \' ' ,$( libdir) )
libdir_relative_SQ = $( subst ',' \' ' ,$( libdir_relative) )
2013-12-03 17:09:17 +04:00
plugin_dir_SQ = $( subst ',' \' ' ,$( plugin_dir) )
2012-04-06 02:47:53 +04:00
CONFIG_INCLUDES =
CONFIG_LIBS =
CONFIG_FLAGS =
VERSION = $( EP_VERSION)
PATCHLEVEL = $( EP_PATCHLEVEL)
EXTRAVERSION = $( EP_EXTRAVERSION)
OBJ = $@
N =
EVENT_PARSE_VERSION = $( EP_VERSION) .$( EP_PATCHLEVEL) .$( EP_EXTRAVERSION)
2016-07-31 17:52:34 +03:00
LIB_TARGET = libtraceevent.a libtraceevent.so.$( EVENT_PARSE_VERSION)
LIB_INSTALL = libtraceevent.a libtraceevent.so*
2015-01-07 20:39:45 +03:00
INCLUDES = -I. -I $( srctree) /tools/include $( CONFIG_INCLUDES)
2012-04-06 02:47:53 +04:00
2015-01-07 20:39:45 +03:00
# Set compile option CFLAGS
i f d e f E X T R A _ C F L A G S
CFLAGS := $( EXTRA_CFLAGS)
e l s e
CFLAGS := -g -Wall
e n d i f
2012-04-06 02:47:53 +04:00
# Append required CFLAGS
2015-01-07 20:39:45 +03:00
o v e r r i d e CFLAGS += -fPIC
2012-04-06 02:47:53 +04:00
o v e r r i d e CFLAGS += $( CONFIG_FLAGS) $( INCLUDES) $( PLUGIN_DIR_SQ)
2012-09-12 21:29:40 +04:00
o v e r r i d e CFLAGS += $( udis86-flags) -D_GNU_SOURCE
2012-04-06 02:47:53 +04:00
i f e q ( $( VERBOSE ) , 1 )
Q =
e l s e
Q = @
e n d i f
2017-03-10 03:16:33 +03:00
# Disable command line variables (CFLAGS) override from top
2015-01-07 20:39:45 +03:00
# level Makefile (perf), otherwise build Makefile will get
# the same command line setup.
MAKEOVERRIDES =
2012-04-06 02:47:53 +04:00
2015-01-07 20:39:45 +03:00
export srctree OUTPUT CC LD CFLAGS V
build := -f $( srctree) /tools/build/Makefile.build dir = . obj
2012-04-06 02:47:53 +04:00
2015-01-07 20:39:45 +03:00
PLUGINS = plugin_jbd2.so
PLUGINS += plugin_hrtimer.so
PLUGINS += plugin_kmem.so
PLUGINS += plugin_kvm.so
PLUGINS += plugin_mac80211.so
PLUGINS += plugin_sched_switch.so
PLUGINS += plugin_function.so
PLUGINS += plugin_xen.so
PLUGINS += plugin_scsi.so
PLUGINS += plugin_cfg80211.so
2012-04-06 02:47:53 +04:00
2015-01-07 20:39:45 +03:00
PLUGINS := $( addprefix $( OUTPUT) ,$( PLUGINS) )
PLUGINS_IN := $( PLUGINS:.so= -in.o)
2012-04-06 02:47:53 +04:00
2016-08-01 10:55:51 +03:00
TE_IN := $( OUTPUT) libtraceevent-in.o
LIB_TARGET := $( addprefix $( OUTPUT) ,$( LIB_TARGET) )
2015-05-28 16:28:54 +03:00
DYNAMIC_LIST_FILE := $( OUTPUT) libtraceevent-dynamic-list
2012-04-06 02:47:53 +04:00
2016-08-01 10:55:51 +03:00
CMD_TARGETS = $( LIB_TARGET) $( PLUGINS) $( DYNAMIC_LIST_FILE)
2012-04-06 02:47:53 +04:00
TARGETS = $( CMD_TARGETS)
all : all_cmd
all_cmd : $( CMD_TARGETS )
2015-01-07 20:39:45 +03:00
$(TE_IN) : force
$( Q) $( MAKE) $( build) = libtraceevent
2016-07-31 17:52:34 +03:00
$(OUTPUT)libtraceevent.so.$(EVENT_PARSE_VERSION) : $( TE_IN )
$( QUIET_LINK) $( CC) --shared $^ -Wl,-soname,libtraceevent.so.$( EP_VERSION) -o $@
@ln -sf $( @F) $( OUTPUT) libtraceevent.so
@ln -sf $( @F) $( OUTPUT) libtraceevent.so.$( EP_VERSION)
2012-04-06 02:47:53 +04:00
2015-01-07 20:39:45 +03:00
$(OUTPUT)libtraceevent.a : $( TE_IN )
2013-12-19 17:42:04 +04:00
$( QUIET_LINK) $( RM) $@ ; $( AR) rcs $@ $^
2012-04-06 02:47:53 +04:00
2015-05-28 16:28:54 +03:00
$(OUTPUT)libtraceevent-dynamic-list : $( PLUGINS )
$( QUIET_GEN) $( call do_generate_dynamic_list_file, $( PLUGINS) , $@ )
2013-12-03 17:09:17 +04:00
plugins : $( PLUGINS )
2015-01-07 20:39:45 +03:00
__plugin_obj = $( notdir $@ )
plugin_obj = $( __plugin_obj:-in.o= )
2012-04-06 02:47:53 +04:00
2015-01-07 20:39:45 +03:00
$(PLUGINS_IN) : force
$( Q) $( MAKE) $( build) = $( plugin_obj)
2013-12-03 17:09:17 +04:00
2015-01-07 20:39:45 +03:00
$(OUTPUT)%.so : $( OUTPUT ) %-in .o
$( QUIET_LINK) $( CC) $( CFLAGS) -shared -nostartfiles -o $@ $^
2013-12-03 17:09:17 +04:00
2012-04-06 02:47:53 +04:00
d e f i n e m a k e _ v e r s i o n . h
2014-01-02 13:53:04 +04:00
( echo '/* This file is automatically generated. Do not modify. */' ; \
echo \# define VERSION_CODE $( shell \
expr $( VERSION) \* 256 + $( PATCHLEVEL) ) ; \
echo '#define EXTRAVERSION ' $( EXTRAVERSION) ; \
echo '#define VERSION_STRING "' $( VERSION) .$( PATCHLEVEL) .$( EXTRAVERSION) '"' ; \
echo '#define FILE_VERSION ' $( FILE_VERSION) ; \
) > $1
2012-04-06 02:47:53 +04:00
e n d e f
d e f i n e u p d a t e _ v e r s i o n . h
2014-01-02 13:53:04 +04:00
( $( call make_version.h, $@ .tmp) ; \
if [ -r $@ ] && cmp -s $@ $@ .tmp; then \
rm -f $@ .tmp; \
else \
echo ' UPDATE $@' ; \
mv -f $@ .tmp $@ ; \
fi ) ;
2012-04-06 02:47:53 +04:00
e n d e f
ep_version.h : force
$( Q) $( N) $( call update_version.h)
VERSION_FILES = ep_version.h
d e f i n e u p d a t e _ d i r
2014-01-02 13:53:04 +04:00
( echo $1 > $@ .tmp; \
if [ -r $@ ] && cmp -s $@ $@ .tmp; then \
rm -f $@ .tmp; \
else \
echo ' UPDATE $@' ; \
mv -f $@ .tmp $@ ; \
fi ) ;
2012-04-06 02:47:53 +04:00
e n d e f
tags : force
$( RM) tags
2012-06-22 12:10:14 +04:00
find . -name '*.[ch]' | xargs ctags --extra= +f --c-kinds= +px \
--regex-c++= '/_PE\(([^,)]*).*/PEVENT_ERRNO__\1/'
2012-04-06 02:47:53 +04:00
TAGS : force
$( RM) TAGS
2012-06-22 12:10:14 +04:00
find . -name '*.[ch]' | xargs etags \
--regex= '/_PE(\([^,)]*\).*/PEVENT_ERRNO__\1/'
2012-04-06 02:47:53 +04:00
2016-07-31 17:49:33 +03:00
d e f i n e d o _ i n s t a l l _ m k d i r
if [ ! -d '$(DESTDIR_SQ)$1' ] ; then \
$( INSTALL) -d -m 755 '$(DESTDIR_SQ)$1' ; \
fi
e n d e f
2012-04-06 02:47:53 +04:00
d e f i n e d o _ i n s t a l l
2016-07-31 17:49:33 +03:00
$( call do_install_mkdir,$2 ) ; \
2016-07-16 19:57:51 +03:00
$( INSTALL) $( if $3 ,-m $3 ,) $1 '$(DESTDIR_SQ)$2'
2012-04-06 02:47:53 +04:00
e n d e f
2013-12-19 17:42:05 +04:00
d e f i n e d o _ i n s t a l l _ p l u g i n s
for plugin in $1 ; do \
$( call do_install,$$ plugin,$( plugin_dir_SQ) ) ; \
done
e n d e f
2013-12-03 17:09:17 +04:00
2015-05-28 16:28:54 +03:00
d e f i n e d o _ g e n e r a t e _ d y n a m i c _ l i s t _ f i l e
2017-02-08 08:28:40 +03:00
symbol_type = ` $( NM) -u -D $1 | awk 'NF>1 {print $$1}' | \
xargs echo "U W w" | tr ' ' '\n' | sort -u | xargs echo ` ; \
if [ " $$ symbol_type " = "U W w" ] ; then \
( echo '{' ; \
$( NM) -u -D $1 | awk 'NF>1 {print "\t"$$2";"}' | sort -u; \
echo '};' ; \
) > $2 ; \
else \
( echo Either missing one of [ $1 ] or bad version of $( NM) ) 1>& 2; \
fi
2015-05-28 16:28:54 +03:00
e n d e f
2013-12-19 17:42:05 +04:00
install_lib : all_cmd install_plugins
2016-08-01 10:55:51 +03:00
$( call QUIET_INSTALL, $( LIB_TARGET) ) \
2016-07-31 17:52:34 +03:00
$( call do_install_mkdir,$( libdir_SQ) ) ; \
cp -fpR $( LIB_INSTALL) $( DESTDIR) $( libdir_SQ)
2013-12-03 17:09:17 +04:00
2013-12-19 17:42:05 +04:00
install_plugins : $( PLUGINS )
$( call QUIET_INSTALL, trace_plugins) \
$( call do_install_plugins, $( PLUGINS) )
2013-12-03 17:09:17 +04:00
2016-07-16 19:57:51 +03:00
install_headers :
$( call QUIET_INSTALL, headers) \
$( call do_install,event-parse.h,$( prefix) /include/traceevent,644) ; \
$( call do_install,event-utils.h,$( prefix) /include/traceevent,644) ; \
$( call do_install,kbuffer.h,$( prefix) /include/traceevent,644)
2012-04-06 02:47:53 +04:00
install : install_lib
clean :
2013-12-19 17:42:06 +04:00
$( call QUIET_CLEAN, libtraceevent) \
2015-06-18 15:52:18 +03:00
$( RM) *.o *~ $( TARGETS) *.a *.so $( VERSION_FILES) .*.d .*.cmd \
2013-12-19 17:42:06 +04:00
$( RM) TRACEEVENT-CFLAGS tags TAGS
2012-04-06 02:47:53 +04:00
2014-01-01 20:50:50 +04:00
PHONY += force plugins
2012-04-06 02:47:53 +04:00
force :
# Declare the contents of the .PHONY variable as phony. We keep that
# information in a variable so we can use it in if_changed and friends.
.PHONY : $( PHONY )