]>
Commit | Line | Data |
---|---|---|
f7d82350 SR |
1 | # trace-cmd version |
2 | EP_VERSION = 1 | |
3 | EP_PATCHLEVEL = 1 | |
4 | EP_EXTRAVERSION = 0 | |
5 | ||
6 | # file format version | |
7 | FILE_VERSION = 6 | |
8 | ||
9 | MAKEFLAGS += --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. | |
17 | define allow-override | |
18 | $(if $(or $(findstring environment,$(origin $(1))),\ | |
19 | $(findstring command line,$(origin $(1)))),,\ | |
20 | $(eval $(1) = $(2))) | |
21 | endef | |
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 | ||
27 | EXT = -std=gnu99 | |
28 | INSTALL = install | |
29 | ||
30 | # Use DESTDIR for installing into a different root directory. | |
31 | # This is useful for building a package. The program will be | |
32 | # installed in this directory as if it was the root directory. | |
33 | # Then the build tool can move it later. | |
34 | DESTDIR ?= | |
35 | DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))' | |
36 | ||
37 | prefix ?= /usr/local | |
38 | bindir_relative = bin | |
39 | bindir = $(prefix)/$(bindir_relative) | |
40 | man_dir = $(prefix)/share/man | |
41 | man_dir_SQ = '$(subst ','\'',$(man_dir))' | |
f7d82350 | 42 | |
9f1efa82 | 43 | export man_dir man_dir_SQ INSTALL |
f7d82350 SR |
44 | export DESTDIR DESTDIR_SQ |
45 | ||
e0e96d03 JO |
46 | set_plugin_dir := 1 |
47 | ||
48 | # Set plugin_dir to preffered global plugin location | |
49 | # If we install under $HOME directory we go under | |
50 | # $(HOME)/.traceevent/plugins | |
51 | # | |
52 | # We dont set PLUGIN_DIR in case we install under $HOME | |
53 | # directory, because by default the code looks under: | |
54 | # $(HOME)/.traceevent/plugins by default. | |
55 | # | |
56 | ifeq ($(plugin_dir),) | |
57 | ifeq ($(prefix),$(HOME)) | |
58 | override plugin_dir = $(HOME)/.traceevent/plugins | |
59 | set_plugin_dir := 0 | |
60 | else | |
61 | override plugin_dir = $(prefix)/lib/traceevent/plugins | |
62 | endif | |
63 | endif | |
64 | ||
65 | ifeq ($(set_plugin_dir),1) | |
b935a58d | 66 | PLUGIN_DIR = -DPLUGIN_DIR="$(plugin_dir)" |
e0e96d03 JO |
67 | PLUGIN_DIR_SQ = '$(subst ','\'',$(PLUGIN_DIR))' |
68 | endif | |
69 | ||
c3d090f4 JO |
70 | include $(if $(BUILD_SRC),$(BUILD_SRC)/)../../scripts/Makefile.include |
71 | ||
f7d82350 SR |
72 | # copy a bit from Linux kbuild |
73 | ||
74 | ifeq ("$(origin V)", "command line") | |
75 | VERBOSE = $(V) | |
76 | endif | |
77 | ifndef VERBOSE | |
78 | VERBOSE = 0 | |
79 | endif | |
80 | ||
81 | ifeq ("$(origin O)", "command line") | |
82 | BUILD_OUTPUT := $(O) | |
83 | endif | |
84 | ||
85 | ifeq ($(BUILD_SRC),) | |
4c7aafc9 | 86 | ifneq ($(OUTPUT),) |
f7d82350 SR |
87 | |
88 | define build_output | |
198430b5 JO |
89 | $(if $(VERBOSE:1=),@)+$(MAKE) -C $(OUTPUT) \ |
90 | BUILD_SRC=$(CURDIR)/ -f $(CURDIR)/Makefile $1 | |
f7d82350 SR |
91 | endef |
92 | ||
f7d82350 SR |
93 | all: sub-make |
94 | ||
4ccdf57d | 95 | $(MAKECMDGOALS): sub-make |
f7d82350 SR |
96 | |
97 | sub-make: force | |
98 | $(call build_output, $(MAKECMDGOALS)) | |
99 | ||
100 | ||
101 | # Leave processing to above invocation of make | |
102 | skip-makefile := 1 | |
103 | ||
4c7aafc9 | 104 | endif # OUTPUT |
f7d82350 SR |
105 | endif # BUILD_SRC |
106 | ||
107 | # We process the rest of the Makefile if this is the final invocation of make | |
108 | ifeq ($(skip-makefile),) | |
109 | ||
110 | srctree := $(if $(BUILD_SRC),$(BUILD_SRC),$(CURDIR)) | |
111 | objtree := $(CURDIR) | |
112 | src := $(srctree) | |
113 | obj := $(objtree) | |
114 | ||
115 | export prefix bindir src obj | |
116 | ||
117 | # Shell quotes | |
118 | bindir_SQ = $(subst ','\'',$(bindir)) | |
119 | bindir_relative_SQ = $(subst ','\'',$(bindir_relative)) | |
e0e96d03 | 120 | plugin_dir_SQ = $(subst ','\'',$(plugin_dir)) |
f7d82350 SR |
121 | |
122 | LIB_FILE = libtraceevent.a libtraceevent.so | |
123 | ||
124 | CONFIG_INCLUDES = | |
125 | CONFIG_LIBS = | |
126 | CONFIG_FLAGS = | |
127 | ||
128 | VERSION = $(EP_VERSION) | |
129 | PATCHLEVEL = $(EP_PATCHLEVEL) | |
130 | EXTRAVERSION = $(EP_EXTRAVERSION) | |
131 | ||
132 | OBJ = $@ | |
133 | N = | |
134 | ||
135 | export Q VERBOSE | |
136 | ||
137 | EVENT_PARSE_VERSION = $(EP_VERSION).$(EP_PATCHLEVEL).$(EP_EXTRAVERSION) | |
138 | ||
3c6d8d84 | 139 | INCLUDES = -I. -I $(srctree)/../../include $(CONFIG_INCLUDES) |
f7d82350 SR |
140 | |
141 | # Set compile option CFLAGS if not set elsewhere | |
142 | CFLAGS ?= -g -Wall | |
143 | ||
144 | # Append required CFLAGS | |
145 | override CFLAGS += $(CONFIG_FLAGS) $(INCLUDES) $(PLUGIN_DIR_SQ) | |
c055875b | 146 | override CFLAGS += $(udis86-flags) -D_GNU_SOURCE |
f7d82350 SR |
147 | |
148 | ifeq ($(VERBOSE),1) | |
149 | Q = | |
f7d82350 SR |
150 | else |
151 | Q = @ | |
f7d82350 SR |
152 | endif |
153 | ||
f7d82350 SR |
154 | do_compile_shared_library = \ |
155 | ($(print_shared_lib_compile) \ | |
156 | $(CC) --shared $^ -o $@) | |
157 | ||
f7d82350 SR |
158 | do_plugin_build = \ |
159 | ($(print_plugin_build) \ | |
160 | $(CC) $(CFLAGS) -shared -nostartfiles -o $@ $<) | |
161 | ||
162 | do_build_static_lib = \ | |
163 | ($(print_static_lib_build) \ | |
164 | $(RM) $@; $(AR) rcs $@ $^) | |
165 | ||
166 | ||
c3d090f4 | 167 | do_compile = $(QUIET_CC)$(CC) -c $(CFLAGS) $(EXT) $< -o $(obj)/$@; |
f7d82350 SR |
168 | |
169 | $(obj)/%.o: $(src)/%.c | |
c3d090f4 | 170 | $(call do_compile) |
f7d82350 SR |
171 | |
172 | %.o: $(src)/%.c | |
c3d090f4 | 173 | $(call do_compile) |
f7d82350 | 174 | |
c877bbd8 JO |
175 | PEVENT_LIB_OBJS = event-parse.o |
176 | PEVENT_LIB_OBJS += event-plugin.o | |
177 | PEVENT_LIB_OBJS += trace-seq.o | |
178 | PEVENT_LIB_OBJS += parse-filter.o | |
179 | PEVENT_LIB_OBJS += parse-utils.o | |
d6c25223 | 180 | PEVENT_LIB_OBJS += kbuffer-parse.o |
f7d82350 | 181 | |
d9d13f8b JO |
182 | PLUGIN_OBJS = plugin_jbd2.o |
183 | PLUGIN_OBJS += plugin_hrtimer.o | |
f8256288 | 184 | PLUGIN_OBJS += plugin_kmem.o |
35d79f9f | 185 | PLUGIN_OBJS += plugin_kvm.o |
de705e2e | 186 | PLUGIN_OBJS += plugin_mac80211.o |
83e815ee | 187 | PLUGIN_OBJS += plugin_sched_switch.o |
07a180a0 | 188 | PLUGIN_OBJS += plugin_function.o |
40c03ad5 | 189 | PLUGIN_OBJS += plugin_xen.o |
04010929 | 190 | PLUGIN_OBJS += plugin_scsi.o |
94371473 | 191 | PLUGIN_OBJS += plugin_cfg80211.o |
e0549f11 | 192 | |
e0e96d03 JO |
193 | PLUGINS := $(PLUGIN_OBJS:.o=.so) |
194 | ||
195 | ALL_OBJS = $(PEVENT_LIB_OBJS) $(PLUGIN_OBJS) | |
f7d82350 | 196 | |
e0e96d03 | 197 | CMD_TARGETS = $(LIB_FILE) $(PLUGINS) |
f7d82350 SR |
198 | |
199 | TARGETS = $(CMD_TARGETS) | |
200 | ||
201 | ||
202 | all: all_cmd | |
203 | ||
204 | all_cmd: $(CMD_TARGETS) | |
205 | ||
206 | libtraceevent.so: $(PEVENT_LIB_OBJS) | |
e6262e23 | 207 | $(QUIET_LINK)$(CC) --shared $^ -o $@ |
f7d82350 SR |
208 | |
209 | libtraceevent.a: $(PEVENT_LIB_OBJS) | |
e6262e23 | 210 | $(QUIET_LINK)$(RM) $@; $(AR) rcs $@ $^ |
f7d82350 | 211 | |
e0e96d03 JO |
212 | plugins: $(PLUGINS) |
213 | ||
52b5c0d4 | 214 | $(PEVENT_LIB_OBJS): %.o: $(src)/%.c TRACEEVENT-CFLAGS |
bdebbacd | 215 | $(QUIET_CC_FPIC)$(CC) -c $(CFLAGS) $(EXT) -fPIC $< -o $@ |
f7d82350 | 216 | |
e0e96d03 | 217 | $(PLUGIN_OBJS): %.o : $(src)/%.c |
bdebbacd | 218 | $(QUIET_CC_FPIC)$(CC) -c $(CFLAGS) -fPIC -o $@ $< |
e0e96d03 JO |
219 | |
220 | $(PLUGINS): %.so: %.o | |
e6262e23 | 221 | $(QUIET_LINK)$(CC) $(CFLAGS) -shared -nostartfiles -o $@ $< |
e0e96d03 | 222 | |
f7d82350 | 223 | define make_version.h |
198430b5 JO |
224 | (echo '/* This file is automatically generated. Do not modify. */'; \ |
225 | echo \#define VERSION_CODE $(shell \ | |
226 | expr $(VERSION) \* 256 + $(PATCHLEVEL)); \ | |
227 | echo '#define EXTRAVERSION ' $(EXTRAVERSION); \ | |
228 | echo '#define VERSION_STRING "'$(VERSION).$(PATCHLEVEL).$(EXTRAVERSION)'"'; \ | |
229 | echo '#define FILE_VERSION '$(FILE_VERSION); \ | |
230 | ) > $1 | |
f7d82350 SR |
231 | endef |
232 | ||
233 | define update_version.h | |
198430b5 JO |
234 | ($(call make_version.h, $@.tmp); \ |
235 | if [ -r $@ ] && cmp -s $@ $@.tmp; then \ | |
236 | rm -f $@.tmp; \ | |
237 | else \ | |
238 | echo ' UPDATE $@'; \ | |
239 | mv -f $@.tmp $@; \ | |
240 | fi); | |
f7d82350 SR |
241 | endef |
242 | ||
243 | ep_version.h: force | |
244 | $(Q)$(N)$(call update_version.h) | |
245 | ||
246 | VERSION_FILES = ep_version.h | |
247 | ||
248 | define update_dir | |
198430b5 JO |
249 | (echo $1 > $@.tmp; \ |
250 | if [ -r $@ ] && cmp -s $@ $@.tmp; then \ | |
251 | rm -f $@.tmp; \ | |
252 | else \ | |
253 | echo ' UPDATE $@'; \ | |
254 | mv -f $@.tmp $@; \ | |
255 | fi); | |
f7d82350 SR |
256 | endef |
257 | ||
258 | ## make deps | |
259 | ||
260 | all_objs := $(sort $(ALL_OBJS)) | |
261 | all_deps := $(all_objs:%.o=.%.d) | |
262 | ||
860df583 | 263 | # let .d file also depends on the source and header files |
f7d82350 | 264 | define check_deps |
198430b5 JO |
265 | @set -e; $(RM) $@; \ |
266 | $(CC) -MM $(CFLAGS) $< > $@.$$$$; \ | |
267 | sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \ | |
268 | $(RM) $@.$$$$ | |
f7d82350 SR |
269 | endef |
270 | ||
f7d82350 SR |
271 | $(all_deps): .%.d: $(src)/%.c |
272 | $(Q)$(call check_deps) | |
273 | ||
274 | $(all_objs) : %.o : .%.d | |
275 | ||
276 | dep_includes := $(wildcard $(all_deps)) | |
277 | ||
278 | ifneq ($(dep_includes),) | |
279 | include $(dep_includes) | |
280 | endif | |
281 | ||
52b5c0d4 NK |
282 | ### Detect environment changes |
283 | TRACK_CFLAGS = $(subst ','\'',$(CFLAGS)):$(ARCH):$(CROSS_COMPILE) | |
284 | ||
285 | TRACEEVENT-CFLAGS: force | |
286 | @FLAGS='$(TRACK_CFLAGS)'; \ | |
287 | if test x"$$FLAGS" != x"`cat TRACEEVENT-CFLAGS 2>/dev/null`" ; then \ | |
65fb0992 | 288 | echo 1>&2 " FLAGS: * new build flags or cross compiler"; \ |
52b5c0d4 NK |
289 | echo "$$FLAGS" >TRACEEVENT-CFLAGS; \ |
290 | fi | |
291 | ||
f7d82350 SR |
292 | tags: force |
293 | $(RM) tags | |
6545e3a8 NK |
294 | find . -name '*.[ch]' | xargs ctags --extra=+f --c-kinds=+px \ |
295 | --regex-c++='/_PE\(([^,)]*).*/PEVENT_ERRNO__\1/' | |
f7d82350 SR |
296 | |
297 | TAGS: force | |
298 | $(RM) TAGS | |
6545e3a8 NK |
299 | find . -name '*.[ch]' | xargs etags \ |
300 | --regex='/_PE(\([^,)]*\).*/PEVENT_ERRNO__\1/' | |
f7d82350 SR |
301 | |
302 | define do_install | |
f7d82350 SR |
303 | if [ ! -d '$(DESTDIR_SQ)$2' ]; then \ |
304 | $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$2'; \ | |
305 | fi; \ | |
306 | $(INSTALL) $1 '$(DESTDIR_SQ)$2' | |
307 | endef | |
308 | ||
02a82c7b JO |
309 | define do_install_plugins |
310 | for plugin in $1; do \ | |
311 | $(call do_install,$$plugin,$(plugin_dir_SQ)); \ | |
312 | done | |
313 | endef | |
e0e96d03 | 314 | |
02a82c7b JO |
315 | install_lib: all_cmd install_plugins |
316 | $(call QUIET_INSTALL, $(LIB_FILE)) \ | |
317 | $(call do_install,$(LIB_FILE),$(bindir_SQ)) | |
e0e96d03 | 318 | |
02a82c7b JO |
319 | install_plugins: $(PLUGINS) |
320 | $(call QUIET_INSTALL, trace_plugins) \ | |
321 | $(call do_install_plugins, $(PLUGINS)) | |
e0e96d03 | 322 | |
f7d82350 SR |
323 | install: install_lib |
324 | ||
325 | clean: | |
4a953c71 JO |
326 | $(call QUIET_CLEAN, libtraceevent) \ |
327 | $(RM) *.o *~ $(TARGETS) *.a *.so $(VERSION_FILES) .*.d \ | |
328 | $(RM) TRACEEVENT-CFLAGS tags TAGS | |
f7d82350 SR |
329 | |
330 | endif # skip-makefile | |
331 | ||
9bb8e5ed | 332 | PHONY += force plugins |
f7d82350 SR |
333 | force: |
334 | ||
9bb8e5ed JO |
335 | plugins: |
336 | @echo > /dev/null | |
337 | ||
f7d82350 SR |
338 | # Declare the contents of the .PHONY variable as phony. We keep that |
339 | # information in a variable so we can use it in if_changed and friends. | |
340 | .PHONY: $(PHONY) |