Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
  1# trace-cmd version
  2EP_VERSION = 1
  3EP_PATCHLEVEL = 1
  4EP_EXTRAVERSION = 0
  5
  6# file format version
  7FILE_VERSION = 6
  8
  9MAKEFLAGS += --no-print-directory
 10
 11
 12# Makefiles suck: This macro sets a default value of $(2) for the
 13# variable named by $(1), unless the variable has been set by
 14# environment or command line. This is necessary for CC and AR
 15# because make sets default values, so the simpler ?= approach
 16# won't work as expected.
 17define allow-override
 18  $(if $(or $(findstring environment,$(origin $(1))),\
 19            $(findstring command line,$(origin $(1)))),,\
 20    $(eval $(1) = $(2)))
 21endef
 22
 23# Allow setting CC and AR, or setting CROSS_COMPILE as a prefix.
 24$(call allow-override,CC,$(CROSS_COMPILE)gcc)
 25$(call allow-override,AR,$(CROSS_COMPILE)ar)
 26$(call allow-override,NM,$(CROSS_COMPILE)nm)
 27
 28EXT = -std=gnu99
 29INSTALL = install
 30
 31# Use DESTDIR for installing into a different root directory.
 32# This is useful for building a package. The program will be
 33# installed in this directory as if it was the root directory.
 34# Then the build tool can move it later.
 35DESTDIR ?=
 36DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))'
 37
 38LP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1)
 39ifeq ($(LP64), 1)
 40  libdir_relative = lib64
 41else
 42  libdir_relative = lib
 43endif
 44
 45prefix ?= /usr/local
 46libdir = $(prefix)/$(libdir_relative)
 47man_dir = $(prefix)/share/man
 48man_dir_SQ = '$(subst ','\'',$(man_dir))'
 49
 50export man_dir man_dir_SQ INSTALL
 51export DESTDIR DESTDIR_SQ
 52
 53set_plugin_dir := 1
 54
 55# Set plugin_dir to preffered global plugin location
 56# If we install under $HOME directory we go under
 57# $(HOME)/.traceevent/plugins
 58#
 59# We dont set PLUGIN_DIR in case we install under $HOME
 60# directory, because by default the code looks under:
 61# $(HOME)/.traceevent/plugins by default.
 62#
 63ifeq ($(plugin_dir),)
 64ifeq ($(prefix),$(HOME))
 65override plugin_dir = $(HOME)/.traceevent/plugins
 66set_plugin_dir := 0
 67else
 68override plugin_dir = $(libdir)/traceevent/plugins
 69endif
 70endif
 71
 72ifeq ($(set_plugin_dir),1)
 73PLUGIN_DIR = -DPLUGIN_DIR="$(plugin_dir)"
 74PLUGIN_DIR_SQ = '$(subst ','\'',$(PLUGIN_DIR))'
 75endif
 76
 77include ../../scripts/Makefile.include
 78
 79# copy a bit from Linux kbuild
 80
 81ifeq ("$(origin V)", "command line")
 82  VERBOSE = $(V)
 83endif
 84ifndef VERBOSE
 85  VERBOSE = 0
 86endif
 87
 88ifeq ($(srctree),)
 89srctree := $(patsubst %/,%,$(dir $(CURDIR)))
 90srctree := $(patsubst %/,%,$(dir $(srctree)))
 91srctree := $(patsubst %/,%,$(dir $(srctree)))
 92#$(info Determined 'srctree' to be $(srctree))
 93endif
 94
 95export prefix libdir src obj
 96
 97# Shell quotes
 98libdir_SQ = $(subst ','\'',$(libdir))
 99libdir_relative_SQ = $(subst ','\'',$(libdir_relative))
100plugin_dir_SQ = $(subst ','\'',$(plugin_dir))
101
102CONFIG_INCLUDES = 
103CONFIG_LIBS	=
104CONFIG_FLAGS	=
105
106VERSION		= $(EP_VERSION)
107PATCHLEVEL	= $(EP_PATCHLEVEL)
108EXTRAVERSION	= $(EP_EXTRAVERSION)
109
110OBJ		= $@
111N		=
112
113EVENT_PARSE_VERSION = $(EP_VERSION).$(EP_PATCHLEVEL).$(EP_EXTRAVERSION)
114
115LIB_TARGET  = libtraceevent.a libtraceevent.so.$(EVENT_PARSE_VERSION)
116LIB_INSTALL = libtraceevent.a libtraceevent.so*
117
118INCLUDES = -I. -I $(srctree)/tools/include $(CONFIG_INCLUDES)
119
120# Set compile option CFLAGS
121ifdef EXTRA_CFLAGS
122  CFLAGS := $(EXTRA_CFLAGS)
123else
124  CFLAGS := -g -Wall
125endif
126
127# Append required CFLAGS
128override CFLAGS += -fPIC
129override CFLAGS += $(CONFIG_FLAGS) $(INCLUDES) $(PLUGIN_DIR_SQ)
130override CFLAGS += $(udis86-flags) -D_GNU_SOURCE
131
132ifeq ($(VERBOSE),1)
133  Q =
134else
135  Q = @
136endif
137
138# Disable command line variables (CFLAGS) overide from top
139# level Makefile (perf), otherwise build Makefile will get
140# the same command line setup.
141MAKEOVERRIDES=
142
143export srctree OUTPUT CC LD CFLAGS V
144build := -f $(srctree)/tools/build/Makefile.build dir=. obj
145
146PLUGINS  = plugin_jbd2.so
147PLUGINS += plugin_hrtimer.so
148PLUGINS += plugin_kmem.so
149PLUGINS += plugin_kvm.so
150PLUGINS += plugin_mac80211.so
151PLUGINS += plugin_sched_switch.so
152PLUGINS += plugin_function.so
153PLUGINS += plugin_xen.so
154PLUGINS += plugin_scsi.so
155PLUGINS += plugin_cfg80211.so
156
157PLUGINS    := $(addprefix $(OUTPUT),$(PLUGINS))
158PLUGINS_IN := $(PLUGINS:.so=-in.o)
159
160TE_IN      := $(OUTPUT)libtraceevent-in.o
161LIB_TARGET := $(addprefix $(OUTPUT),$(LIB_TARGET))
162DYNAMIC_LIST_FILE := $(OUTPUT)libtraceevent-dynamic-list
163
164CMD_TARGETS = $(LIB_TARGET) $(PLUGINS) $(DYNAMIC_LIST_FILE)
165
166TARGETS = $(CMD_TARGETS)
167
168all: all_cmd
169
170all_cmd: $(CMD_TARGETS)
171
172$(TE_IN): force
173	$(Q)$(MAKE) $(build)=libtraceevent
174
175$(OUTPUT)libtraceevent.so.$(EVENT_PARSE_VERSION): $(TE_IN)
176	$(QUIET_LINK)$(CC) --shared $^ -Wl,-soname,libtraceevent.so.$(EP_VERSION) -o $@
177	@ln -sf $(@F) $(OUTPUT)libtraceevent.so
178	@ln -sf $(@F) $(OUTPUT)libtraceevent.so.$(EP_VERSION)
179
180$(OUTPUT)libtraceevent.a: $(TE_IN)
181	$(QUIET_LINK)$(RM) $@; $(AR) rcs $@ $^
182
183$(OUTPUT)libtraceevent-dynamic-list: $(PLUGINS)
184	$(QUIET_GEN)$(call do_generate_dynamic_list_file, $(PLUGINS), $@)
185
186plugins: $(PLUGINS)
187
188__plugin_obj = $(notdir $@)
189  plugin_obj = $(__plugin_obj:-in.o=)
190
191$(PLUGINS_IN): force
192	$(Q)$(MAKE) $(build)=$(plugin_obj)
193
194$(OUTPUT)%.so: $(OUTPUT)%-in.o
195	$(QUIET_LINK)$(CC) $(CFLAGS) -shared -nostartfiles -o $@ $^
196
197define make_version.h
198  (echo '/* This file is automatically generated. Do not modify. */';		\
199   echo \#define VERSION_CODE $(shell						\
200   expr $(VERSION) \* 256 + $(PATCHLEVEL));					\
201   echo '#define EXTRAVERSION ' $(EXTRAVERSION);				\
202   echo '#define VERSION_STRING "'$(VERSION).$(PATCHLEVEL).$(EXTRAVERSION)'"';	\
203   echo '#define FILE_VERSION '$(FILE_VERSION);					\
204  ) > $1
205endef
206
207define update_version.h
208  ($(call make_version.h, $@.tmp);		\
209    if [ -r $@ ] && cmp -s $@ $@.tmp; then	\
210      rm -f $@.tmp;				\
211    else					\
212      echo '  UPDATE                 $@';	\
213      mv -f $@.tmp $@;				\
214    fi);
215endef
216
217ep_version.h: force
218	$(Q)$(N)$(call update_version.h)
219
220VERSION_FILES = ep_version.h
221
222define update_dir
223  (echo $1 > $@.tmp;				\
224   if [ -r $@ ] && cmp -s $@ $@.tmp; then	\
225     rm -f $@.tmp;				\
226   else						\
227     echo '  UPDATE                 $@';	\
228     mv -f $@.tmp $@;				\
229   fi);
230endef
231
232tags:	force
233	$(RM) tags
234	find . -name '*.[ch]' | xargs ctags --extra=+f --c-kinds=+px \
235	--regex-c++='/_PE\(([^,)]*).*/PEVENT_ERRNO__\1/'
236
237TAGS:	force
238	$(RM) TAGS
239	find . -name '*.[ch]' | xargs etags \
240	--regex='/_PE(\([^,)]*\).*/PEVENT_ERRNO__\1/'
241
242define do_install_mkdir
243	if [ ! -d '$(DESTDIR_SQ)$1' ]; then		\
244		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$1';	\
245	fi
246endef
247
248define do_install
249	$(call do_install_mkdir,$2);			\
250	$(INSTALL) $(if $3,-m $3,) $1 '$(DESTDIR_SQ)$2'
251endef
252
253define do_install_plugins
254	for plugin in $1; do				\
255	  $(call do_install,$$plugin,$(plugin_dir_SQ));	\
256	done
257endef
258
259define do_generate_dynamic_list_file
260	(echo '{';							\
261	$(NM) -u -D $1 | awk 'NF>1 {print "\t"$$2";"}' | sort -u;	\
262	echo '};';							\
263	) > $2
264endef
265
266install_lib: all_cmd install_plugins
267	$(call QUIET_INSTALL, $(LIB_TARGET)) \
268		$(call do_install_mkdir,$(libdir_SQ)); \
269		cp -fpR $(LIB_INSTALL) $(DESTDIR)$(libdir_SQ)
270
271install_plugins: $(PLUGINS)
272	$(call QUIET_INSTALL, trace_plugins) \
273		$(call do_install_plugins, $(PLUGINS))
274
275install_headers:
276	$(call QUIET_INSTALL, headers) \
277		$(call do_install,event-parse.h,$(prefix)/include/traceevent,644); \
278		$(call do_install,event-utils.h,$(prefix)/include/traceevent,644); \
279		$(call do_install,kbuffer.h,$(prefix)/include/traceevent,644)
280
281install: install_lib
282
283clean:
284	$(call QUIET_CLEAN, libtraceevent) \
285		$(RM) *.o *~ $(TARGETS) *.a *.so $(VERSION_FILES) .*.d .*.cmd \
286		$(RM) TRACEEVENT-CFLAGS tags TAGS
287
288PHONY += force plugins
289force:
290
291# Declare the contents of the .PHONY variable as phony.  We keep that
292# information in a variable so we can use it in if_changed and friends.
293.PHONY: $(PHONY)