1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# trace-cmd version
2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengEP_VERSION = 1
3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengEP_PATCHLEVEL = 1
4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengEP_EXTRAVERSION = 0
5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# file format version
7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengFILE_VERSION = 6
8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengMAKEFLAGS += --no-print-directory
10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Makefiles suck: This macro sets a default value of $(2) for the
13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# variable named by $(1), unless the variable has been set by
14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# environment or command line. This is necessary for CC and AR
15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# because make sets default values, so the simpler ?= approach
16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# won't work as expected.
17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine allow-override
18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  $(if $(or $(findstring environment,$(origin $(1))),\
19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng            $(findstring command line,$(origin $(1)))),,\
20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    $(eval $(1) = $(2)))
21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef
22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Allow setting CC and AR, or setting CROSS_COMPILE as a prefix.
24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng$(call allow-override,CC,$(CROSS_COMPILE)gcc)
25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng$(call allow-override,AR,$(CROSS_COMPILE)ar)
26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengEXT = -std=gnu99
28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengINSTALL = install
29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Use DESTDIR for installing into a different root directory.
31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# This is useful for building a package. The program will be
32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# installed in this directory as if it was the root directory.
33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Then the build tool can move it later.
34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengDESTDIR ?=
35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengDESTDIR_SQ = '$(subst ','\'',$(DESTDIR))'
36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengprefix ?= /usr/local
38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengbindir_relative = bin
39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengbindir = $(prefix)/$(bindir_relative)
40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengman_dir = $(prefix)/share/man
41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengman_dir_SQ = '$(subst ','\'',$(man_dir))'
42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengexport man_dir man_dir_SQ INSTALL
44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengexport DESTDIR DESTDIR_SQ
45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# copy a bit from Linux kbuild
47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ("$(origin V)", "command line")
49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  VERBOSE = $(V)
50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef VERBOSE
52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  VERBOSE = 0
53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
54e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
55e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ("$(origin O)", "command line")
56e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  BUILD_OUTPUT := $(O)
57e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
58e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
59e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(BUILD_SRC),)
60e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifneq ($(BUILD_OUTPUT),)
61e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
62e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine build_output
63e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(if $(VERBOSE:1=),@)+$(MAKE) -C $(BUILD_OUTPUT) 	\
64e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	BUILD_SRC=$(CURDIR) -f $(CURDIR)/Makefile $1
65e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef
66e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
67e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsaved-output := $(BUILD_OUTPUT)
68e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengBUILD_OUTPUT := $(shell cd $(BUILD_OUTPUT) && /bin/pwd)
69e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng$(if $(BUILD_OUTPUT),, \
70e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng     $(error output directory "$(saved-output)" does not exist))
71e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
72e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengall: sub-make
73e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
74e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng$(MAKECMDGOALS): sub-make
75e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
76e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsub-make: force
77e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(call build_output, $(MAKECMDGOALS))
78e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
79e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
80e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Leave processing to above invocation of make
81e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengskip-makefile := 1
82e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
83e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # BUILD_OUTPUT
84e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # BUILD_SRC
85e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
86e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# We process the rest of the Makefile if this is the final invocation of make
87e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(skip-makefile),)
88e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
89e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsrctree		:= $(if $(BUILD_SRC),$(BUILD_SRC),$(CURDIR))
90e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengobjtree		:= $(CURDIR)
91e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsrc		:= $(srctree)
92e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengobj		:= $(objtree)
93e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
94e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengexport prefix bindir src obj
95e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
96e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Shell quotes
97e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengbindir_SQ = $(subst ','\'',$(bindir))
98e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengbindir_relative_SQ = $(subst ','\'',$(bindir_relative))
99e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
100e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengLIB_FILE = libtraceevent.a libtraceevent.so
101e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
102e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCONFIG_INCLUDES = 
103e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCONFIG_LIBS	=
104e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCONFIG_FLAGS	=
105e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
106e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengVERSION		= $(EP_VERSION)
107e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengPATCHLEVEL	= $(EP_PATCHLEVEL)
108e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengEXTRAVERSION	= $(EP_EXTRAVERSION)
109e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
110e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengOBJ		= $@
111e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengN		=
112e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
113e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengexport Q VERBOSE
114e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
115e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengEVENT_PARSE_VERSION = $(EP_VERSION).$(EP_PATCHLEVEL).$(EP_EXTRAVERSION)
116e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
117e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengINCLUDES = -I. $(CONFIG_INCLUDES)
118e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
119e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Set compile option CFLAGS if not set elsewhere
120e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS ?= -g -Wall
121e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
122e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Append required CFLAGS
123e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengoverride CFLAGS += $(CONFIG_FLAGS) $(INCLUDES) $(PLUGIN_DIR_SQ)
124e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengoverride CFLAGS += $(udis86-flags) -D_GNU_SOURCE
125e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
126e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(VERBOSE),1)
127e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  Q =
128e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  print_compile =
129e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  print_app_build =
130e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  print_fpic_compile =
131e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  print_shared_lib_compile =
132e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  print_plugin_obj_compile =
133e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  print_plugin_build =
134e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  print_install =
135e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengelse
136e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  Q = @
137e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  print_compile =		echo '  CC                 '$(OBJ);
138e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  print_app_build =		echo '  BUILD              '$(OBJ);
139e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  print_fpic_compile =		echo '  CC FPIC            '$(OBJ);
140e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  print_shared_lib_compile =	echo '  BUILD SHARED LIB   '$(OBJ);
141e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  print_plugin_obj_compile =	echo '  CC PLUGIN OBJ      '$(OBJ);
142e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  print_plugin_build =		echo '  CC PLUGI           '$(OBJ);
143e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  print_static_lib_build =	echo '  BUILD STATIC LIB   '$(OBJ);
144e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  print_install =		echo '  INSTALL     '$1'	to	$(DESTDIR_SQ)$2';
145e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
146e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
147e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdo_fpic_compile =					\
148e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	($(print_fpic_compile)				\
149e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(CC) -c $(CFLAGS) $(EXT) -fPIC $< -o $@)
150e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
151e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdo_app_build =						\
152e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	($(print_app_build)				\
153e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(CC) $^ -rdynamic -o $@ $(CONFIG_LIBS) $(LIBS))
154e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
155e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdo_compile_shared_library =			\
156e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	($(print_shared_lib_compile)		\
157e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(CC) --shared $^ -o $@)
158e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
159e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdo_compile_plugin_obj =				\
160e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	($(print_plugin_obj_compile)		\
161e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(CC) -c $(CFLAGS) -fPIC -o $@ $<)
162e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
163e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdo_plugin_build =				\
164e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	($(print_plugin_build)			\
165e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(CC) $(CFLAGS) -shared -nostartfiles -o $@ $<)
166e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
167e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdo_build_static_lib =				\
168e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	($(print_static_lib_build)		\
169e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(RM) $@;  $(AR) rcs $@ $^)
170e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
171e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
172e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine do_compile
173e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(print_compile)						\
174e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(CC) -c $(CFLAGS) $(EXT) $< -o $(obj)/$@;
175e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef
176e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
177e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng$(obj)/%.o: $(src)/%.c
178e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(Q)$(call do_compile)
179e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
180e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng%.o: $(src)/%.c
181e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(Q)$(call do_compile)
182e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
183e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengPEVENT_LIB_OBJS = event-parse.o trace-seq.o parse-filter.o parse-utils.o
184e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengPEVENT_LIB_OBJS += kbuffer-parse.o
185e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
186e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengALL_OBJS = $(PEVENT_LIB_OBJS)
187e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
188e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCMD_TARGETS = $(LIB_FILE)
189e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
190e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengTARGETS = $(CMD_TARGETS)
191e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
192e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
193e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengall: all_cmd
194e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
195e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengall_cmd: $(CMD_TARGETS)
196e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
197e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenglibtraceevent.so: $(PEVENT_LIB_OBJS)
198e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(Q)$(do_compile_shared_library)
199e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
200e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenglibtraceevent.a: $(PEVENT_LIB_OBJS)
201e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(Q)$(do_build_static_lib)
202e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
203e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng$(PEVENT_LIB_OBJS): %.o: $(src)/%.c TRACEEVENT-CFLAGS
204e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(Q)$(do_fpic_compile)
205e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
206e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine make_version.h
207e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	(echo '/* This file is automatically generated. Do not modify. */';		\
208e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	echo \#define VERSION_CODE $(shell						\
209e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	expr $(VERSION) \* 256 + $(PATCHLEVEL));					\
210e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	echo '#define EXTRAVERSION ' $(EXTRAVERSION);					\
211e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	echo '#define VERSION_STRING "'$(VERSION).$(PATCHLEVEL).$(EXTRAVERSION)'"';	\
212e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	echo '#define FILE_VERSION '$(FILE_VERSION);					\
213e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	) > $1
214e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef
215e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
216e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine update_version.h
217e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	($(call make_version.h, $@.tmp);		\
218e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	if [ -r $@ ] && cmp -s $@ $@.tmp; then		\
219e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		rm -f $@.tmp;				\
220e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	else						\
221e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		echo '  UPDATE                 $@';	\
222e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		mv -f $@.tmp $@;			\
223e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	fi);
224e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef
225e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
226e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengep_version.h: force
227e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(Q)$(N)$(call update_version.h)
228e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
229e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengVERSION_FILES = ep_version.h
230e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
231e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine update_dir
232e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	(echo $1 > $@.tmp;	\
233e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	if [ -r $@ ] && cmp -s $@ $@.tmp; then		\
234e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		rm -f $@.tmp;				\
235e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	else						\
236e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		echo '  UPDATE                 $@';	\
237e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		mv -f $@.tmp $@;			\
238e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	fi);
239e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef
240e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
241e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng## make deps
242e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
243e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengall_objs := $(sort $(ALL_OBJS))
244e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengall_deps := $(all_objs:%.o=.%.d)
245e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
246e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# let .d file also depends on the source and header files
247e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine check_deps
248e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		@set -e; $(RM) $@; \
249e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		$(CC) -MM $(CFLAGS) $< > $@.$$$$; \
250e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
251e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		$(RM) $@.$$$$
252e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef
253e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
254e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng$(all_deps): .%.d: $(src)/%.c
255e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(Q)$(call check_deps)
256e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
257e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng$(all_objs) : %.o : .%.d
258e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
259e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdep_includes := $(wildcard $(all_deps))
260e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
261e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifneq ($(dep_includes),)
262e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng include $(dep_includes)
263e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
264e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
265e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng### Detect environment changes
266e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengTRACK_CFLAGS = $(subst ','\'',$(CFLAGS)):$(ARCH):$(CROSS_COMPILE)
267e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
268e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengTRACEEVENT-CFLAGS: force
269e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	@FLAGS='$(TRACK_CFLAGS)'; \
270e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	    if test x"$$FLAGS" != x"`cat TRACEEVENT-CFLAGS 2>/dev/null`" ; then \
271e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		echo 1>&2 "    * new build flags or cross compiler"; \
272e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		echo "$$FLAGS" >TRACEEVENT-CFLAGS; \
273e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng            fi
274e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
275e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengtags:	force
276e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(RM) tags
277e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	find . -name '*.[ch]' | xargs ctags --extra=+f --c-kinds=+px \
278e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	--regex-c++='/_PE\(([^,)]*).*/PEVENT_ERRNO__\1/'
279e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
280e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengTAGS:	force
281e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(RM) TAGS
282e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	find . -name '*.[ch]' | xargs etags \
283e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	--regex='/_PE(\([^,)]*\).*/PEVENT_ERRNO__\1/'
284e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
285e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine do_install
286e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(print_install)				\
287e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	if [ ! -d '$(DESTDIR_SQ)$2' ]; then		\
288e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$2';	\
289e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	fi;						\
290e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(INSTALL) $1 '$(DESTDIR_SQ)$2'
291e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef
292e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
293e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenginstall_lib: all_cmd
294e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(Q)$(call do_install,$(LIB_FILE),$(bindir_SQ))
295e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
296e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenginstall: install_lib
297e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
298e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengclean:
299e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(RM) *.o *~ $(TARGETS) *.a *.so $(VERSION_FILES) .*.d
300e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	$(RM) TRACEEVENT-CFLAGS tags TAGS
301e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
302e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # skip-makefile
303e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
304e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengPHONY += force
305e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengforce:
306e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
307e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Declare the contents of the .PHONY variable as phony.  We keep that
308e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# information in a variable so we can use it in if_changed and friends.
309e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.PHONY: $(PHONY)
310