aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2010-01-09 01:12:56 -0500
committerSteven Rostedt <rostedt@goodmis.org>2010-01-09 01:12:56 -0500
commitddfe24398d883b9e8e4ab4781726b8305776fd83 (patch)
tree4842b9061f95c64f488cd719ae3fd9fe7c21afca
parent17d741924a6f41d6f163891a6ef64497b6010497 (diff)
build: Restructure Makefile to handle depends and clean ups
Restructured the Makefile to automate the dependencies. Also a lot of changes to consolidate changes. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--Makefile302
1 files changed, 161 insertions, 141 deletions
diff --git a/Makefile b/Makefile
index 20819a6..c08b57e 100644
--- a/Makefile
+++ b/Makefile
@@ -9,19 +9,28 @@ KS_PATCHLEVEL = 1
9KS_EXTRAVERSION = 9KS_EXTRAVERSION =
10 10
11# file format version 11# file format version
12FILE_VERSION = 0 12FILE_VERSION = 5
13 13
14CC = gcc 14CC = gcc
15AR = ar 15AR = ar
16EXT = -std=gnu99 16EXT = -std=gnu99
17INCLUDES = -I. -I/usr/local/include 17
18MAKEFLAGS += --no-print-directory
18 19
19LIBS = -L. -ltracecmd -ldl 20LIBS = -L. -ltracecmd -ldl
21LIB_FILE = libtracecmd.a
20 22
21PACKAGES= gtk+-2.0 23PACKAGES= gtk+-2.0
22 24
25ifndef BUILDGUI
26 BUILDGUI = 0
27endif
28
23ifeq ($(BUILDGUI), 1) 29ifeq ($(BUILDGUI), 1)
24CONFIG_FLAGS = $(shell pkg-config --cflags $(PACKAGES)) -DBUILDGUI \ 30
31CONFIG_INCLUDES = $(shell pkg-config --cflags $(PACKAGES))
32
33CONFIG_FLAGS = -DBUILDGUI \
25 -DGTK_VERSION=$(shell pkg-config --modversion gtk+-2.0 | \ 34 -DGTK_VERSION=$(shell pkg-config --modversion gtk+-2.0 | \
26 awk 'BEGIN{FS="."}{ a = ($$1 * (2^16)) + $$2 * (2^8) + $$3; printf ("%d", a);}') 35 awk 'BEGIN{FS="."}{ a = ($$1 * (2^16)) + $$2 * (2^8) + $$3; printf ("%d", a);}')
27 36
@@ -34,8 +43,13 @@ EXTRAVERSION = $(KS_EXTRAVERSION)
34GUI = 'GUI ' 43GUI = 'GUI '
35GOBJ = $@ 44GOBJ = $@
36 45
46REBUILD_GUI = /bin/true
47G =
48N = @/bin/true ||
49
37else 50else
38 51
52CONFIG_INCLUDES =
39CONFIG_LIBS = 53CONFIG_LIBS =
40CONFIG_FLAGS = 54CONFIG_FLAGS =
41 55
@@ -46,18 +60,26 @@ EXTRAVERSION = $(TC_EXTRAVERSION)
46GUI = 60GUI =
47GOBJ = " "$@ 61GOBJ = " "$@
48 62
63REBUILD_GUI = $(MAKE) BUILDGUI=1 $@
64G = $(REBUILD_GUI); /bin/true ||
65N =
49endif 66endif
50 67
68export Q VERBOSE
69
51TRACECMD_VERSION = $(TC_VERSION).$(TC_PATCHLEVEL).$(TC_EXTRAVERSION) 70TRACECMD_VERSION = $(TC_VERSION).$(TC_PATCHLEVEL).$(TC_EXTRAVERSION)
52KERNELSHARK_VERSION = $(KS_VERSION).$(KS_PATCHLEVEL).$(KS_EXTRAVERSION) 71KERNELSHARK_VERSION = $(KS_VERSION).$(KS_PATCHLEVEL).$(KS_EXTRAVERSION)
53 72
54CFLAGS = -g -Wall $(CONFIG_FLAGS) 73INCLUDES = -I. -I/usr/local/include $(CONFIG_INCLUDES)
74
75CFLAGS = -g -Wall $(CONFIG_FLAGS) $(INCLUDES)
55 76
56# copy a bit from Linux kbuild 77# copy a bit from Linux kbuild
57 78
58ifeq ("$(origin V)", "command line") 79ifeq ("$(origin V)", "command line")
59 VERBOSE = $(V) 80 VERBOSE = $(V)
60else 81endif
82ifndef VERBOSE
61 VERBOSE = 0 83 VERBOSE = 0
62endif 84endif
63 85
@@ -71,52 +93,82 @@ ifeq ($(VERBOSE),1)
71 print_plugin_build = 93 print_plugin_build =
72else 94else
73 Q = @ 95 Q = @
74 print_compile = @echo ' $(GUI)COMPILE '$(GOBJ); 96 print_compile = echo ' $(GUI)COMPILE '$(GOBJ);
75 print_app_build = @echo ' $(GUI)BUILD '$(GOBJ); 97 print_app_build = echo ' $(GUI)BUILD '$(GOBJ);
76 print_fpic_compile = @echo ' $(GUI)COMPILE FPIC '$(GOBJ); 98 print_fpic_compile = echo ' $(GUI)COMPILE FPIC '$(GOBJ);
77 print_shared_lib_compile = @echo ' $(GUI)COMPILE SHARED LIB '$(GOBJ); 99 print_shared_lib_compile = echo ' $(GUI)COMPILE SHARED LIB '$(GOBJ);
78 print_plugin_obj_compile = @echo ' $(GUI)COMPILE PLUGIN OBJ '$(GOBJ); 100 print_plugin_obj_compile = echo ' $(GUI)COMPILE PLUGIN OBJ '$(GOBJ);
79 print_plugin_build = @echo ' $(GUI)BUILD PLUGIN '$(GOBJ); 101 print_plugin_build = echo ' $(GUI)BUILD PLUGIN '$(GOBJ);
80 print_static_lib_build = @echo ' $(GUI)BUILD STATIC LIB '$(GOBJ); 102 print_static_lib_build = echo ' $(GUI)BUILD STATIC LIB '$(GOBJ);
81endif 103endif
82 104
83do_fpic_compile = \ 105do_fpic_compile = \
84 $(Q)$(print_fpic_compile) \ 106 ($(print_fpic_compile) \
85 $(CC) -c $(CFLAGS) $(EXT) $(INCLUDES) -fPIC $< -o $@ 107 $(CC) -c $(CFLAGS) $(EXT) -fPIC $< -o $@)
86 108
87do_app_build = \ 109do_app_build = \
88 $(Q)$(print_app_build) \ 110 ($(print_app_build) \
89 $(CC) $^ -rdynamic -o $@ $(CONFIG_LIBS) $(LIBS) 111 $(CC) $^ -rdynamic -o $@ $(CONFIG_LIBS) $(LIBS))
90 112
91do_compile_shared_library = \ 113do_compile_shared_library = \
92 $(Q)$(print_shared_lib_compile) \ 114 ($(print_shared_lib_compile) \
93 $(CC) --shared $^ -o $@ 115 $(CC) --shared $^ -o $@)
94 116
95do_compile_plugin_obj = \ 117do_compile_plugin_obj = \
96 $(Q)$(print_plugin_obj_compile) \ 118 ($(print_plugin_obj_compile) \
97 $(CC) -c $(CFLAGS) -fPIC -o $@ $< 119 $(CC) -c $(CFLAGS) -fPIC -o $@ $<)
98 120
99do_plugin_build = \ 121do_plugin_build = \
100 $(Q)$(print_plugin_build) \ 122 ($(print_plugin_build) \
101 $(CC) -shared -nostartfiles -o $@ $< 123 $(CC) -shared -nostartfiles -o $@ $<)
102 124
103do_build_static_lib = \ 125do_build_static_lib = \
104 $(Q)$(print_static_lib_build) \ 126 ($(print_static_lib_build) \
105 $(RM) $@; $(AR) rcs $@ $^ 127 $(RM) $@; $(AR) rcs $@ $^)
128
129
130define check_gui
131 if [ $(BUILDGUI) -ne 1 -a ! -z "$(filter $(gui_objs),$(@))" ]; then \
132 $(REBUILD_GUI); \
133 else \
134 $(print_compile) \
135 $(CC) -c $(CFLAGS) $(EXT) $< -o $@; \
136 fi;
137endef
106 138
107%.o: %.c 139%.o: %.c
108 $(print_compile) 140 $(Q)$(call check_gui)
109 $(Q)$(CC) -c $(CFLAGS) $(EXT) $(INCLUDES) $< -o $@ 141
142
143TRACE_CMD_OBJS = trace-cmd.o trace-read.o
144TRACE_VIEW_OBJS = trace-view.o trace-view-store.o trace-filter.o trace-compat.o \
145 trace-hash.o
146TRACE_GRAPH_OBJS = trace-graph.o trace-compat.o trace-hash.o trace-filter.o
147TRACE_VIEW_MAIN_OBJS = trace-view-main.o $(TRACE_VIEW_OBJS)
148TRACE_GRAPH_MAIN_OBJS = trace-graph-main.o $(TRACE_GRAPH_OBJS)
149KERNEL_SHARK_OBJS = $(TRACE_VIEW_OBJS) $(TRACE_GRAPH_OBJS) kernel-shark.o
150
151PEVENT_LIB_OBJS = parse-events.o trace-seq.o
152TCMD_LIB_OBJS = $(PEVENT_LIB_OBJS) trace-util.o trace-input.o trace-ftrace.o \
153 trace-output.o trace-record.o
154
155PLUGIN_OBJS = plugin_hrtimer.o plugin_kmem.o plugin_sched_switch.o \
156 plugin_mac80211.o
157
158PLUGINS := $(PLUGIN_OBJS:.o=.so)
110 159
111PLUGINS = plugin_hrtimer.so plugin_mac80211.so plugin_sched_switch.so \ 160ALL_OBJS = $(TRACE_CMD_OBJS) $(KERNEL_SHARK_OBJS) $(TRACE_VIEW_OBJS) $(TRACE_GRAPH_OBJS) \
112 plugin_kmem.so 161 $(TCMD_LIB_OBJS) $(PLUGIN_OBJS)
113 162
114CMD_TARGETS = tc_version.h libparsevent.a libtracecmd.a trace-cmd $(PLUGINS) 163CMD_TARGETS = tc_version.h libparsevent.a $(LIB_FILE) trace-cmd $(PLUGINS)
115 164
116GUI_TARGETS = ks_version.h trace-graph trace-view kernelshark 165GUI_TARGETS = ks_version.h trace-graph trace-view kernelshark
117 166
118TARGETS = $(CMD_TARGETS) $(GUI_TARGETS) 167TARGETS = $(CMD_TARGETS) $(GUI_TARGETS)
119 168
169
170# cpp $(INCLUDES)
171
120### 172###
121# Default we just build trace-cmd 173# Default we just build trace-cmd
122# 174#
@@ -125,122 +177,54 @@ TARGETS = $(CMD_TARGETS) $(GUI_TARGETS)
125 177
126all: $(CMD_TARGETS) 178all: $(CMD_TARGETS)
127 179
128gui: $(CMD_TARGETS) 180gui: $(CMD_TARGETS)
129 $(Q)$(MAKE) BUILDGUI=1 all_gui 181 $(Q)$(MAKE) BUILDGUI=1 all_gui
130 182
131all_gui: $(GUI_TARGETS) 183all_gui: $(GUI_TARGETS)
132 184
133LIB_FILE = libtracecmd.a 185GUI_OBJS = $(KERNEL_SHARK_OBJS) $(TRACE_VIEW_MAIN_OBJS) $(TRACE_GRAPH_MAIN_OBJS)
134
135HEADERS = parse-events.h trace-cmd.h trace-local.h trace-hash.h
136
137trace-read.o:: $(HEADERS)
138trace-cmd.o:: $(HEADERS) $(LIB_FILE) tc_version.h
139trace-util.o:: $(HEADERS)
140trace-ftrace.o:: $(HEADERS)
141trace-input.o:: $(HEADERS)
142trace-view.o:: $(HEADERS) trace-view-store.h trace-view.h
143trace-view-store.o:: $(HEADERS) trace-view-store.h trace-view.h
144trace-view-main.o:: $(HEADERS) trace-view-store.h trace-view.h libtracecmd.a
145trace-filter.o:: $(HEADERS)
146trace-graph.o:: $(HEADERS) trace-graph.h
147trace-graph-main.o:: $(HEADERS) trace-graph.h libtracecmd.a
148kernel-shark.o:: $(HEADERS) kernel-shark.h libtracecmd.a ks_version.h
149
150TRACE_VIEW_OBJS = trace-view.o trace-view-store.o trace-filter.o trace-compat.o \
151 trace-hash.o
152
153trace-cmd:: trace-cmd.o trace-read.o
154 $(do_app_build)
155
156trace-view:: trace-view-main.o $(TRACE_VIEW_OBJS)
157 $(do_app_build)
158
159trace-graph:: trace-graph-main.o trace-graph.o trace-compat.o trace-hash.o trace-filter.o
160 $(do_app_build)
161
162ifeq ($(BUILDGUI), 1)
163kernelshark:: kernel-shark.o trace-compat.o $(TRACE_VIEW_OBJS) trace-graph.o \
164 trace-hash.o
165 $(do_app_build)
166else
167kernelshark: force
168 @echo '**************************************'
169 @echo '** To build kernel shark: make gui **'
170 @echo '**************************************'
171endif
172
173.PHONY: gtk_depends
174view_depends:
175 @pkg-config --cflags $(PACKAGES)
176 186
177trace-view.o:: parse-events.h 187gui_objs := $(sort $(GUI_OBJS))
178trace-graph.o:: parse-events.h
179 188
180parse-events.o: parse-events.c parse-events.h 189trace-cmd: $(TRACE_CMD_OBJS)
181 $(do_fpic_compile) 190 $(Q)$(do_app_build)
182 191
183trace-seq.o: trace-seq.c parse-events.h 192kernelshark: $(KERNEL_SHARK_OBJS)
184 $(do_fpic_compile) 193 $(Q)$(G)$(do_app_build)
185 194
186trace-util.o:: trace-util.c 195trace-view: $(TRACE_VIEW_MAIN_OBJS)
187 $(do_fpic_compile) 196 $(Q)$(G)$(do_app_build)
188 197
189trace-input.o:: trace-input.c 198trace-graph: $(TRACE_GRAPH_MAIN_OBJS)
190 $(do_fpic_compile) 199 $(Q)$(G)$(do_app_build)
191 200
192trace-output.o:: trace-output.c 201kernelshark: libtracecmd.a
193 $(do_fpic_compile) 202trace-view: libtracecmd.a
194 203trace-graph: libtracecmd.a
195trace-record.o:: trace-record.c
196 $(do_fpic_compile)
197
198trace-ftrace.o:: trace-ftrace.c
199 $(do_fpic_compile)
200
201PEVENT_LIB_OBJS = parse-events.o trace-seq.o
202 204
203libparsevent.so: $(PEVENT_LIB_OBJS) 205libparsevent.so: $(PEVENT_LIB_OBJS)
204 $(do_compile_shared_library) 206 $(Q)$(do_compile_shared_library)
205 207
206libparsevent.a: $(PEVENT_LIB_OBJS) 208libparsevent.a: $(PEVENT_LIB_OBJS)
207 $(do_build_static_lib) 209 $(Q)$(do_build_static_lib)
208 210
209TCMD_LIB_OBJS = $(PEVENT_LIB_OBJS) trace-util.o trace-input.o trace-ftrace.o \ 211$(TCMD_LIB_OBJS): %.o: %.c
210 trace-output.o trace-record.o 212 $(Q)$(do_fpic_compile)
211 213
212libtracecmd.so: $(TCMD_LIB_OBJS) 214libtracecmd.so: $(TCMD_LIB_OBJS)
213 $(do_compile_shared_library) 215 $(Q)$(do_compile_shared_library)
214 216
215libtracecmd.a: $(TCMD_LIB_OBJS) 217libtracecmd.a: $(TCMD_LIB_OBJS)
216 $(do_build_static_lib) 218 $(Q)$(do_build_static_lib)
217
218plugin_hrtimer.o: plugin_hrtimer.c parse-events.h trace-cmd.h
219 $(do_compile_plugin_obj)
220
221plugin_hrtimer.so: plugin_hrtimer.o
222 $(do_plugin_build)
223
224plugin_kmem.o: plugin_kmem.c parse-events.h trace-cmd.h
225 $(do_compile_plugin_obj)
226
227plugin_kmem.so: plugin_kmem.o
228 $(do_plugin_build)
229 219
230plugin_sched_switch.o: plugin_sched_switch.c parse-events.h trace-cmd.h 220$(PLUGIN_OBJS): %.o : %.c
231 $(do_compile_plugin_obj) 221 $(Q)$(do_compile_plugin_obj)
232 222
233plugin_sched_switch.so: plugin_sched_switch.o 223$(PLUGINS): %.so: %.o
234 $(do_plugin_build) 224 $(Q)$(do_plugin_build)
235
236plugin_mac80211.o: plugin_mac80211.c parse-events.h trace-cmd.h
237 $(do_compile_plugin_obj)
238
239plugin_mac80211.so: plugin_mac80211.o
240 $(do_plugin_build)
241 225
242define make_version.h 226define make_version.h
243 @(echo \#define VERSION_CODE $(shell \ 227 (echo \#define VERSION_CODE $(shell \
244 expr $(VERSION) \* 256 + $(PATCHLEVEL)); \ 228 expr $(VERSION) \* 256 + $(PATCHLEVEL)); \
245 echo '#define EXTRAVERSION ' $(EXTRAVERSION); \ 229 echo '#define EXTRAVERSION ' $(EXTRAVERSION); \
246 echo '#define VERSION_STRING "'$(VERSION).$(PATCHLEVEL)$(EXTRAVERSION)'"'; \ 230 echo '#define VERSION_STRING "'$(VERSION).$(PATCHLEVEL)$(EXTRAVERSION)'"'; \
@@ -249,20 +233,65 @@ define make_version.h
249endef 233endef
250 234
251define update_version.h 235define update_version.h
252 $(call make_version.h, $@.tmp); \ 236 ($(call make_version.h, $@.tmp); \
253 if [ -r $@ ] && cmp -s $@ $@.tmp; then \ 237 if [ -r $@ ] && cmp -s $@ $@.tmp; then \
254 rm -f $@.tmp; \ 238 rm -f $@.tmp; \
255 else \ 239 else \
256 echo ' UPD $@'; \ 240 echo ' UPDATE $@'; \
257 mv -f $@.tmp $@; \ 241 mv -f $@.tmp $@; \
258 fi; 242 fi);
259endef 243endef
260 244
261ks_version.h: force 245ks_version.h: force
262 $(call update_version.h) 246 $(Q)$(G)$(call update_version.h)
263 247
264tc_version.h: force 248tc_version.h: force
265 $(call update_version.h) 249 $(Q)$(N)$(call update_version.h)
250
251## make deps
252
253all_objs := $(sort $(ALL_OBJS))
254all_deps := $(all_objs:%.o=.%.d)
255gui_deps := $(gui_objs:%.o=.%.d)
256
257define check_gui_deps
258 if [ ! -z "$(filter $(gui_deps),$(@))" ]; then \
259 if [ $(BUILDGUI) -ne 1 ]; then \
260 $(REBUILD_GUI); \
261 else \
262 $(CC) -M $(CFLAGS) $< > $@; \
263 fi \
264 elif [ $(BUILDGUI) -eq 0 ]; then \
265 $(CC) -M $(CFLAGS) $< > $@; \
266 else \
267 echo SKIPPING $@; \
268 fi;
269endef
270
271$(all_deps): tc_version.h ks_version.h
272
273$(all_deps): .%.d: %.c
274 $(Q)$(call check_gui_deps)
275
276$(all_objs) : %.o : .%.d
277
278dep_includes := $(wildcard $(all_deps))
279
280ifneq ($(dep_includes),)
281 include $(dep_includes)
282endif
283
284.PHONY: force
285force:
286
287TAGS: force
288 find . -name '*.[ch]' | xargs etags
289
290clean:
291 $(RM) *.o *~ $(TARGETS) *.a *.so ctracecmd_wrap.c .*.d
292
293
294##### PYTHON STUFF #####
266 295
267PYTHON_INCLUDES = `python-config --includes` 296PYTHON_INCLUDES = `python-config --includes`
268PYGTK_CFLAGS = `pkg-config --cflags pygtk-2.0` 297PYGTK_CFLAGS = `pkg-config --cflags pygtk-2.0`
@@ -282,12 +311,3 @@ python: ctracecmd.so
282 311
283.PHONY: python-gui 312.PHONY: python-gui
284python-gui: ctracecmd.so ctracecmdgui.so 313python-gui: ctracecmd.so ctracecmdgui.so
285
286.PHONY: force
287force:
288
289TAGS: force
290 find . -name '*.[ch]' | xargs etags
291
292clean:
293 $(RM) *.o *~ $(TARGETS) *.a *.so ctracecmd_wrap.c