9 MAKEFLAGS
+= --no-print-directory
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.
18 $(if
$(or
$(findstring environment
,$(origin $(1))),\
19 $(findstring command line
,$(origin $(1)))),,\
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)
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.
35 DESTDIR_SQ
= '$(subst ','\'',$(DESTDIR
))'
39 bindir = $(prefix)/$(bindir_relative)
40 man_dir = $(prefix)/share/man
41 man_dir_SQ = '$(subst ','\'',$(man_dir))'
42 html_install
= $(prefix)/share
/kernelshark
/html
43 html_install_SQ
= '$(subst ','\'',$(html_install
))'
44 img_install = $(prefix)/share/kernelshark/html/images
45 img_install_SQ = '$(subst ','\'',$(img_install))'
47 export man_dir man_dir_SQ html_install html_install_SQ INSTALL
48 export img_install img_install_SQ
49 export DESTDIR DESTDIR_SQ
51 # copy a bit from Linux kbuild
53 ifeq ("$(origin V)", "command line")
60 ifeq ("$(origin O)", "command line")
65 ifneq ($(BUILD_OUTPUT
),)
68 $(if
$(VERBOSE
:1=),@
)$(MAKE
) -C
$(BUILD_OUTPUT
) \
69 BUILD_SRC
=$(CURDIR
) -f
$(CURDIR
)/Makefile
$1
72 saved-output
:= $(BUILD_OUTPUT
)
73 BUILD_OUTPUT
:= $(shell cd
$(BUILD_OUTPUT
) && /bin
/pwd
)
74 $(if
$(BUILD_OUTPUT
),, \
75 $(error output directory
"$(saved-output)" does not exist
))
80 $(call build_output
, all_cmd
)
82 $(filter-out gui
,$(MAKECMDGOALS
)): sub-make
85 $(call build_output
, $(MAKECMDGOALS
))
88 # Leave processing to above invocation of make
94 # We process the rest of the Makefile if this is the final invocation of make
95 ifeq ($(skip-makefile
),)
97 srctree
:= $(if
$(BUILD_SRC
),$(BUILD_SRC
),$(CURDIR
))
102 export prefix bindir src obj
105 bindir_SQ
= $(subst ','\'',$(bindir))
106 bindir_relative_SQ = $(subst ','\'',$(bindir_relative
))
108 LIB_FILE
= libtraceevent.a libtraceevent.so
114 VERSION
= $(EP_VERSION
)
115 PATCHLEVEL
= $(EP_PATCHLEVEL
)
116 EXTRAVERSION
= $(EP_EXTRAVERSION
)
123 EVENT_PARSE_VERSION
= $(EP_VERSION
).
$(EP_PATCHLEVEL
).
$(EP_EXTRAVERSION
)
125 INCLUDES
= -I.
$(CONFIG_INCLUDES
)
127 # Set compile option CFLAGS if not set elsewhere
130 # Append required CFLAGS
131 override CFLAGS
+= $(CONFIG_FLAGS
) $(INCLUDES
) $(PLUGIN_DIR_SQ
)
132 override CFLAGS
+= $(udis86-flags
) -D_GNU_SOURCE
139 print_shared_lib_compile
=
140 print_plugin_obj_compile
=
145 print_compile
= echo
' CC '$(OBJ
);
146 print_app_build
= echo
' BUILD '$(OBJ
);
147 print_fpic_compile
= echo
' CC FPIC '$(OBJ
);
148 print_shared_lib_compile
= echo
' BUILD SHARED LIB '$(OBJ
);
149 print_plugin_obj_compile
= echo
' CC PLUGIN OBJ '$(OBJ
);
150 print_plugin_build
= echo
' CC PLUGI '$(OBJ
);
151 print_static_lib_build
= echo
' BUILD STATIC LIB '$(OBJ
);
152 print_install
= echo
' INSTALL '$1' to $(DESTDIR_SQ)$2';
156 ($(print_fpic_compile
) \
157 $(CC
) -c
$(CFLAGS
) $(EXT
) -fPIC
$< -o
$@
)
160 ($(print_app_build
) \
161 $(CC
) $^
-rdynamic
-o
$@
$(CONFIG_LIBS
) $(LIBS
))
163 do_compile_shared_library
= \
164 ($(print_shared_lib_compile
) \
165 $(CC
) --shared
$^
-o
$@
)
167 do_compile_plugin_obj
= \
168 ($(print_plugin_obj_compile
) \
169 $(CC
) -c
$(CFLAGS
) -fPIC
-o
$@
$<)
172 ($(print_plugin_build
) \
173 $(CC
) $(CFLAGS
) -shared
-nostartfiles
-o
$@
$<)
175 do_build_static_lib
= \
176 ($(print_static_lib_build
) \
177 $(RM
) $@
; $(AR
) rcs
$@
$^
)
182 $(CC
) -c
$(CFLAGS
) $(EXT
) $< -o
$(obj
)/$@
;
185 $(obj
)/%.o
: $(src
)/%.c
186 $(Q
)$(call do_compile
)
189 $(Q
)$(call do_compile
)
191 PEVENT_LIB_OBJS
= event-parse.o trace-seq.o parse-filter.o parse-utils.o
193 ALL_OBJS
= $(PEVENT_LIB_OBJS
)
195 CMD_TARGETS
= $(LIB_FILE
)
197 TARGETS
= $(CMD_TARGETS
)
202 all_cmd
: $(CMD_TARGETS
)
204 libtraceevent.so
: $(PEVENT_LIB_OBJS
)
205 $(Q
)$(do_compile_shared_library
)
207 libtraceevent.a
: $(PEVENT_LIB_OBJS
)
208 $(Q
)$(do_build_static_lib
)
210 $(PEVENT_LIB_OBJS
): %.o
: $(src
)/%.c TRACEEVENT-CFLAGS
211 $(Q
)$(do_fpic_compile
)
213 define make_version.h
214 (echo
'/* This file is automatically generated. Do not modify. */'; \
215 echo \
#define VERSION_CODE $(shell \
216 expr
$(VERSION
) \
* 256 + $(PATCHLEVEL
)); \
217 echo
'#define EXTRAVERSION ' $(EXTRAVERSION
); \
218 echo
'#define VERSION_STRING "'$(VERSION
).
$(PATCHLEVEL
).
$(EXTRAVERSION
)'"'; \
219 echo
'#define FILE_VERSION '$(FILE_VERSION
); \
223 define update_version.h
224 ($(call make_version.h
, $@.tmp
); \
225 if
[ -r
$@
] && cmp
-s
$@
$@.tmp
; then \
234 $(Q
)$(N
)$(call update_version.h
)
236 VERSION_FILES
= ep_version.h
240 if
[ -r
$@
] && cmp
-s
$@
$@.tmp
; then \
250 all_objs
:= $(sort $(ALL_OBJS
))
251 all_deps
:= $(all_objs
:%.o
=.
%.d
)
253 # let .d file also depends on the source and header files
256 $(CC
) -MM
$(CFLAGS
) $< > $@.
$$$$; \
257 sed
's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.
$$$$ > $@
; \
261 $(gui_deps
): ks_version.h
262 $(non_gui_deps
): tc_version.h
264 $(all_deps
): .
%.d
: $(src
)/%.c
265 $(Q
)$(call check_deps
)
267 $(all_objs
) : %.o
: .
%.d
269 dep_includes
:= $(wildcard $(all_deps
))
271 ifneq ($(dep_includes
),)
272 include $(dep_includes
)
275 ### Detect environment changes
276 TRACK_CFLAGS
= $(subst ','\'',$(CFLAGS)):$(ARCH):$(CROSS_COMPILE)
278 TRACEEVENT-CFLAGS: force
279 @FLAGS='$(TRACK_CFLAGS
)'; \
280 if test x"$$FLAGS" != x"`cat TRACEEVENT-CFLAGS 2>/dev/null`" ; then \
281 echo 1>&2 " * new build flags or cross compiler"; \
282 echo "$$FLAGS" >TRACEEVENT-CFLAGS; \
287 find . -name '*.
[ch
]' | xargs ctags --extra=+f --c-kinds=+px \
288 --regex-c++='/_PE\
(([^
,)]*).
*/PEVENT_ERRNO__\
1/'
292 find . -name '*.
[ch
]' | xargs etags \
293 --regex='/_PE
(\
([^
,)]*\
).
*/PEVENT_ERRNO__\
1/'
297 if [ ! -d '$(DESTDIR_SQ
)$2' ]; then \
298 $(INSTALL) -d -m 755 '$(DESTDIR_SQ
)$2'; \
300 $(INSTALL) $1 '$(DESTDIR_SQ
)$2'
303 install_lib: all_cmd install_plugins install_python
304 $(Q)$(call do_install,$(LIB_FILE),$(bindir_SQ))
309 $(RM) *.o *~ $(TARGETS) *.a *.so $(VERSION_FILES) .*.d
310 $(RM) TRACEEVENT-CFLAGS tags TAGS
312 endif # skip-makefile
317 # Declare the contents of the .PHONY variable as phony. We keep that
318 # information in a variable so we can use it in if_changed and friends.