Makefile 26.7 KB
Newer Older
B
Borislav Petkov 已提交
1
include ../scripts/Makefile.include
2

3
# The default target of this Makefile is...
4
all:
5

6 7
include config/utilities.mak

8
# Define V to have a more verbose compile.
9
#
10 11 12 13 14 15 16 17 18 19
# Define O to save output files in a separate directory.
#
# Define ARCH as name of target architecture if you want cross-builds.
#
# Define CROSS_COMPILE as prefix name of compiler if you want cross-builds.
#
# Define NO_LIBPERL to disable perl script extension.
#
# Define NO_LIBPYTHON to disable python script extension.
#
20 21 22 23 24 25
# Define PYTHON to point to the python binary if the default
# `python' is not correct; for example: PYTHON=python2
#
# Define PYTHON_CONFIG to point to the python-config binary if
# the default `$(PYTHON)-config' is not correct.
#
26 27 28 29
# Define ASCIIDOC8 if you want to format documentation with AsciiDoc 8
#
# Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72.
#
30
# Define LDFLAGS=-static to build a static binary.
31 32
#
# Define EXTRA_CFLAGS=-m64 or EXTRA_CFLAGS=-m32 as appropriate for cross-builds.
33 34
#
# Define NO_DWARF if you do not want debug-info analysis feature at all.
35 36
#
# Define WERROR=0 to disable treating any warnings as errors.
37
#
38 39 40
# Define NO_NEWT if you do not want TUI support. (deprecated)
#
# Define NO_SLANG if you do not want TUI support.
41
#
42 43
# Define NO_GTK2 if you do not want GTK+ GUI support.
#
44
# Define NO_DEMANGLE if you do not want C++ symbol demangling.
45 46 47
#
# Define NO_LIBELF if you do not want libelf dependency (e.g. cross-builds)
#
48 49
# Define NO_LIBUNWIND if you do not want libunwind dependency for dwarf
# backtrace post unwind.
50 51
#
# Define NO_BACKTRACE if you do not want stack backtrace debug feature
52 53
#
# Define NO_LIBNUMA if you do not want numa perf benchmark
54

55 56 57 58 59 60 61 62 63 64 65 66 67 68
ifeq ($(srctree),)
srctree := $(patsubst %/,%,$(dir $(shell pwd)))
srctree := $(patsubst %/,%,$(dir $(srctree)))
#$(info Determined 'srctree' to be $(srctree))
endif

ifneq ($(objtree),)
#$(info Determined 'objtree' to be $(objtree))
endif

ifneq ($(OUTPUT),)
#$(info Determined 'OUTPUT' to be $(OUTPUT))
endif

69 70
$(OUTPUT)PERF-VERSION-FILE: .FORCE-PERF-VERSION-FILE
	@$(SHELL_PATH) util/PERF-VERSION-GEN $(OUTPUT)
71

72 73 74
CC = $(CROSS_COMPILE)gcc
AR = $(CROSS_COMPILE)ar

75 76 77 78 79 80 81 82
RM      = rm -f
MKDIR   = mkdir
FIND    = find
INSTALL = install
FLEX    = flex
BISON   = bison
STRIP  ?= strip

83 84 85
LK_DIR = ../lib/lk/
TRACE_EVENT_DIR = ../lib/traceevent/

86 87 88 89 90 91 92 93 94 95 96 97 98 99
# include config/Makefile by default and rule out
# non-config cases
config := 1

NON_CONFIG_TARGETS := clean TAGS tags cscope help

ifdef MAKECMDGOALS
ifeq ($(filter-out $(NON_CONFIG_TARGETS),$(MAKECMDGOALS)),)
  config := 0
endif
endif

ifeq ($(config),1)
include config/Makefile
100 101
endif

102 103 104 105 106 107 108 109 110 111
export prefix bindir sharedir sysconfdir

# sparse is architecture-neutral, which means that we need to tell it
# explicitly what architecture to check for. Fix this up for yours..
SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__

# Guard against environment variables
BUILTIN_OBJS =
LIB_H =
LIB_OBJS =
112
PYRF_OBJS =
113 114
SCRIPT_SH =

115
SCRIPT_SH += perf-archive.sh
116

117 118 119
grep-libs = $(filter -l%,$(1))
strip-libs = $(filter-out -l%,$(1))

120 121
LK_PATH=$(LK_DIR)

122 123
ifneq ($(OUTPUT),)
	TE_PATH=$(OUTPUT)
124 125 126 127 128
ifneq ($(subdir),)
	LK_PATH=$(OUTPUT)$(LK_DIR)
else
	LK_PATH=$(OUTPUT)
endif
129 130 131 132 133
else
	TE_PATH=$(TRACE_EVENT_DIR)
endif

LIBTRACEEVENT = $(TE_PATH)libtraceevent.a
134 135
export LIBTRACEEVENT

136 137 138
LIBLK = $(LK_PATH)liblk.a
export LIBLK

139 140 141 142 143 144 145 146
# python extension build directories
PYTHON_EXTBUILD     := $(OUTPUT)python_ext_build/
PYTHON_EXTBUILD_LIB := $(PYTHON_EXTBUILD)lib/
PYTHON_EXTBUILD_TMP := $(PYTHON_EXTBUILD)tmp/
export PYTHON_EXTBUILD_LIB PYTHON_EXTBUILD_TMP

python-clean := rm -rf $(PYTHON_EXTBUILD) $(OUTPUT)python/perf.so

147
PYTHON_EXT_SRCS := $(shell grep -v ^\# util/python-ext-sources)
148
PYTHON_EXT_DEPS := util/python-ext-sources util/setup.py $(LIBTRACEEVENT)
149

150
$(OUTPUT)python/perf.so: $(PYTHON_EXT_SRCS) $(PYTHON_EXT_DEPS)
151
	$(QUIET_GEN)CFLAGS='$(BASIC_CFLAGS)' $(PYTHON_WORD) util/setup.py \
152 153 154
	  --quiet build_ext; \
	mkdir -p $(OUTPUT)python && \
	cp $(PYTHON_EXTBUILD_LIB)perf.so $(OUTPUT)python/
155 156 157 158
#
# No Perl scripts right now:
#

159
SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH))
160

161
#
162
# Single 'perf' binary right now:
163
#
164
PROGRAMS += $(OUTPUT)perf
165

166
# what 'all' will build and 'install' will install, in perfexecdir
167
ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
168

169
# what 'all' will build but not install in perfexecdir
170
OTHER_PROGRAMS = $(OUTPUT)perf
171 172 173 174 175 176 177 178 179 180 181

# Set paths to tools early so that they can be used for version tests.
ifndef SHELL_PATH
	SHELL_PATH = /bin/sh
endif
ifndef PERL_PATH
	PERL_PATH = /usr/bin/perl
endif

export PERL_PATH

E
Eric Sandeen 已提交
182
$(OUTPUT)util/parse-events-flex.c: util/parse-events.l $(OUTPUT)util/parse-events-bison.c
183
	$(QUIET_FLEX)$(FLEX) --header-file=$(OUTPUT)util/parse-events-flex.h $(PARSER_DEBUG_FLEX) -t util/parse-events.l > $(OUTPUT)util/parse-events-flex.c
184

185
$(OUTPUT)util/parse-events-bison.c: util/parse-events.y
186
	$(QUIET_BISON)$(BISON) -v util/parse-events.y -d $(PARSER_DEBUG_BISON) -o $(OUTPUT)util/parse-events-bison.c -p parse_events_
187

E
Eric Sandeen 已提交
188
$(OUTPUT)util/pmu-flex.c: util/pmu.l $(OUTPUT)util/pmu-bison.c
189 190
	$(QUIET_FLEX)$(FLEX) --header-file=$(OUTPUT)util/pmu-flex.h -t util/pmu.l > $(OUTPUT)util/pmu-flex.c

191
$(OUTPUT)util/pmu-bison.c: util/pmu.y
192
	$(QUIET_BISON)$(BISON) -v util/pmu.y -d -o $(OUTPUT)util/pmu-bison.c -p perf_pmu_
193

194 195
$(OUTPUT)util/parse-events.o: $(OUTPUT)util/parse-events-flex.c $(OUTPUT)util/parse-events-bison.c
$(OUTPUT)util/pmu.o: $(OUTPUT)util/pmu-flex.c $(OUTPUT)util/pmu-bison.c
196

197
LIB_FILE=$(OUTPUT)libperf.a
198

I
Ingo Molnar 已提交
199
LIB_H += ../../include/uapi/linux/perf_event.h
200
LIB_H += ../../include/linux/rbtree.h
201
LIB_H += ../../include/linux/list.h
I
Ingo Molnar 已提交
202
LIB_H += ../../include/uapi/linux/const.h
203
LIB_H += ../../include/linux/hash.h
204
LIB_H += ../../include/linux/stringify.h
205 206 207
LIB_H += util/include/linux/bitmap.h
LIB_H += util/include/linux/bitops.h
LIB_H += util/include/linux/compiler.h
208
LIB_H += util/include/linux/const.h
209 210
LIB_H += util/include/linux/ctype.h
LIB_H += util/include/linux/kernel.h
211
LIB_H += util/include/linux/list.h
212
LIB_H += util/include/linux/export.h
213
LIB_H += util/include/linux/magic.h
214 215 216
LIB_H += util/include/linux/poison.h
LIB_H += util/include/linux/prefetch.h
LIB_H += util/include/linux/rbtree.h
217
LIB_H += util/include/linux/rbtree_augmented.h
218
LIB_H += util/include/linux/string.h
219
LIB_H += util/include/linux/types.h
220
LIB_H += util/include/linux/linkage.h
221
LIB_H += util/include/asm/asm-offsets.h
222
LIB_H += util/include/asm/bug.h
223
LIB_H += util/include/asm/byteorder.h
224
LIB_H += util/include/asm/hweight.h
225 226 227
LIB_H += util/include/asm/swab.h
LIB_H += util/include/asm/system.h
LIB_H += util/include/asm/uaccess.h
228
LIB_H += util/include/dwarf-regs.h
229 230
LIB_H += util/include/asm/dwarf2.h
LIB_H += util/include/asm/cpufeature.h
231 232
LIB_H += util/include/asm/unistd_32.h
LIB_H += util/include/asm/unistd_64.h
233
LIB_H += perf.h
234
LIB_H += util/annotate.h
235 236
LIB_H += util/cache.h
LIB_H += util/callchain.h
237
LIB_H += util/build-id.h
238
LIB_H += util/debug.h
239
LIB_H += util/sysfs.h
240
LIB_H += util/pmu.h
241
LIB_H += util/event.h
242
LIB_H += util/evsel.h
243
LIB_H += util/evlist.h
244
LIB_H += util/exec_cmd.h
245
LIB_H += util/types.h
246
LIB_H += util/levenshtein.h
247
LIB_H += util/machine.h
248
LIB_H += util/map.h
249
LIB_H += util/parse-options.h
250
LIB_H += util/parse-events.h
251 252
LIB_H += util/quote.h
LIB_H += util/util.h
253
LIB_H += util/xyarray.h
254
LIB_H += util/header.h
255
LIB_H += util/help.h
256
LIB_H += util/session.h
257
LIB_H += util/strbuf.h
258
LIB_H += util/strlist.h
259
LIB_H += util/strfilter.h
260
LIB_H += util/svghelper.h
261
LIB_H += util/tool.h
262
LIB_H += util/run-command.h
263
LIB_H += util/sigchain.h
264
LIB_H += util/dso.h
265
LIB_H += util/symbol.h
266
LIB_H += util/color.h
267
LIB_H += util/values.h
268
LIB_H += util/sort.h
269
LIB_H += util/hist.h
270
LIB_H += util/thread.h
271
LIB_H += util/thread_map.h
272
LIB_H += util/trace-event.h
273
LIB_H += util/probe-finder.h
274
LIB_H += util/dwarf-aux.h
275
LIB_H += util/probe-event.h
276
LIB_H += util/pstack.h
277
LIB_H += util/cpumap.h
278
LIB_H += util/top.h
279
LIB_H += $(ARCH_INCLUDE)
S
Stephane Eranian 已提交
280
LIB_H += util/cgroup.h
281
LIB_H += $(TRACE_EVENT_DIR)event-parse.h
282
LIB_H += util/target.h
D
David Ahern 已提交
283
LIB_H += util/rblist.h
D
David Ahern 已提交
284
LIB_H += util/intlist.h
285
LIB_H += util/perf_regs.h
286
LIB_H += util/unwind.h
287
LIB_H += util/vdso.h
288 289 290 291
LIB_H += ui/helpline.h
LIB_H += ui/progress.h
LIB_H += ui/util.h
LIB_H += ui/ui.h
292

293 294
LIB_OBJS += $(OUTPUT)util/abspath.o
LIB_OBJS += $(OUTPUT)util/alias.o
295
LIB_OBJS += $(OUTPUT)util/annotate.o
296 297 298
LIB_OBJS += $(OUTPUT)util/build-id.o
LIB_OBJS += $(OUTPUT)util/config.o
LIB_OBJS += $(OUTPUT)util/ctype.o
299
LIB_OBJS += $(OUTPUT)util/sysfs.o
300
LIB_OBJS += $(OUTPUT)util/pmu.o
301 302
LIB_OBJS += $(OUTPUT)util/environment.o
LIB_OBJS += $(OUTPUT)util/event.o
303
LIB_OBJS += $(OUTPUT)util/evlist.o
304
LIB_OBJS += $(OUTPUT)util/evsel.o
305 306 307 308 309 310 311 312 313 314 315 316 317 318
LIB_OBJS += $(OUTPUT)util/exec_cmd.o
LIB_OBJS += $(OUTPUT)util/help.o
LIB_OBJS += $(OUTPUT)util/levenshtein.o
LIB_OBJS += $(OUTPUT)util/parse-options.o
LIB_OBJS += $(OUTPUT)util/parse-events.o
LIB_OBJS += $(OUTPUT)util/path.o
LIB_OBJS += $(OUTPUT)util/rbtree.o
LIB_OBJS += $(OUTPUT)util/bitmap.o
LIB_OBJS += $(OUTPUT)util/hweight.o
LIB_OBJS += $(OUTPUT)util/run-command.o
LIB_OBJS += $(OUTPUT)util/quote.o
LIB_OBJS += $(OUTPUT)util/strbuf.o
LIB_OBJS += $(OUTPUT)util/string.o
LIB_OBJS += $(OUTPUT)util/strlist.o
319
LIB_OBJS += $(OUTPUT)util/strfilter.o
320
LIB_OBJS += $(OUTPUT)util/top.o
321 322 323
LIB_OBJS += $(OUTPUT)util/usage.o
LIB_OBJS += $(OUTPUT)util/wrapper.o
LIB_OBJS += $(OUTPUT)util/sigchain.o
324
LIB_OBJS += $(OUTPUT)util/dso.o
325
LIB_OBJS += $(OUTPUT)util/symbol.o
326
LIB_OBJS += $(OUTPUT)util/symbol-elf.o
327 328 329 330 331 332
LIB_OBJS += $(OUTPUT)util/color.o
LIB_OBJS += $(OUTPUT)util/pager.o
LIB_OBJS += $(OUTPUT)util/header.o
LIB_OBJS += $(OUTPUT)util/callchain.o
LIB_OBJS += $(OUTPUT)util/values.o
LIB_OBJS += $(OUTPUT)util/debug.o
333
LIB_OBJS += $(OUTPUT)util/machine.o
334
LIB_OBJS += $(OUTPUT)util/map.o
335
LIB_OBJS += $(OUTPUT)util/pstack.o
336 337
LIB_OBJS += $(OUTPUT)util/session.o
LIB_OBJS += $(OUTPUT)util/thread.o
338
LIB_OBJS += $(OUTPUT)util/thread_map.o
339
LIB_OBJS += $(OUTPUT)util/trace-event-parse.o
340 341
LIB_OBJS += $(OUTPUT)util/parse-events-flex.o
LIB_OBJS += $(OUTPUT)util/parse-events-bison.o
342 343
LIB_OBJS += $(OUTPUT)util/pmu-flex.o
LIB_OBJS += $(OUTPUT)util/pmu-bison.o
344 345 346 347 348 349 350 351
LIB_OBJS += $(OUTPUT)util/trace-event-read.o
LIB_OBJS += $(OUTPUT)util/trace-event-info.o
LIB_OBJS += $(OUTPUT)util/trace-event-scripting.o
LIB_OBJS += $(OUTPUT)util/svghelper.o
LIB_OBJS += $(OUTPUT)util/sort.o
LIB_OBJS += $(OUTPUT)util/hist.o
LIB_OBJS += $(OUTPUT)util/probe-event.o
LIB_OBJS += $(OUTPUT)util/util.o
352
LIB_OBJS += $(OUTPUT)util/xyarray.o
353
LIB_OBJS += $(OUTPUT)util/cpumap.o
S
Stephane Eranian 已提交
354
LIB_OBJS += $(OUTPUT)util/cgroup.o
355
LIB_OBJS += $(OUTPUT)util/target.o
D
David Ahern 已提交
356
LIB_OBJS += $(OUTPUT)util/rblist.o
D
David Ahern 已提交
357
LIB_OBJS += $(OUTPUT)util/intlist.o
358
LIB_OBJS += $(OUTPUT)util/vdso.o
359
LIB_OBJS += $(OUTPUT)util/stat.o
360

361
LIB_OBJS += $(OUTPUT)ui/setup.o
362
LIB_OBJS += $(OUTPUT)ui/helpline.o
363
LIB_OBJS += $(OUTPUT)ui/progress.o
364
LIB_OBJS += $(OUTPUT)ui/util.o
365
LIB_OBJS += $(OUTPUT)ui/hist.o
366
LIB_OBJS += $(OUTPUT)ui/stdio/hist.o
367

368 369
LIB_OBJS += $(OUTPUT)arch/common.o

370 371
LIB_OBJS += $(OUTPUT)tests/parse-events.o
LIB_OBJS += $(OUTPUT)tests/dso-data.o
372
LIB_OBJS += $(OUTPUT)tests/attr.o
373
LIB_OBJS += $(OUTPUT)tests/vmlinux-kallsyms.o
374
LIB_OBJS += $(OUTPUT)tests/open-syscall.o
375
LIB_OBJS += $(OUTPUT)tests/open-syscall-all-cpus.o
376
LIB_OBJS += $(OUTPUT)tests/open-syscall-tp-fields.o
377
LIB_OBJS += $(OUTPUT)tests/mmap-basic.o
378
LIB_OBJS += $(OUTPUT)tests/perf-record.o
379
LIB_OBJS += $(OUTPUT)tests/rdpmc.o
380
LIB_OBJS += $(OUTPUT)tests/evsel-roundtrip-name.o
381
LIB_OBJS += $(OUTPUT)tests/evsel-tp-sched.o
382
LIB_OBJS += $(OUTPUT)tests/pmu.o
383
LIB_OBJS += $(OUTPUT)tests/hists_link.o
384
LIB_OBJS += $(OUTPUT)tests/python-use.o
385
LIB_OBJS += $(OUTPUT)tests/bp_signal.o
386
LIB_OBJS += $(OUTPUT)tests/bp_signal_overflow.o
387
LIB_OBJS += $(OUTPUT)tests/task-exit.o
388
LIB_OBJS += $(OUTPUT)tests/sw-clock.o
389

390 391
BUILTIN_OBJS += $(OUTPUT)builtin-annotate.o
BUILTIN_OBJS += $(OUTPUT)builtin-bench.o
392
# Benchmark modules
393 394
BUILTIN_OBJS += $(OUTPUT)bench/sched-messaging.o
BUILTIN_OBJS += $(OUTPUT)bench/sched-pipe.o
395 396
ifeq ($(RAW_ARCH),x86_64)
BUILTIN_OBJS += $(OUTPUT)bench/mem-memcpy-x86-64-asm.o
397
BUILTIN_OBJS += $(OUTPUT)bench/mem-memset-x86-64-asm.o
398
endif
399
BUILTIN_OBJS += $(OUTPUT)bench/mem-memcpy.o
400
BUILTIN_OBJS += $(OUTPUT)bench/mem-memset.o
401 402

BUILTIN_OBJS += $(OUTPUT)builtin-diff.o
403
BUILTIN_OBJS += $(OUTPUT)builtin-evlist.o
404 405 406 407 408 409 410 411 412 413
BUILTIN_OBJS += $(OUTPUT)builtin-help.o
BUILTIN_OBJS += $(OUTPUT)builtin-sched.o
BUILTIN_OBJS += $(OUTPUT)builtin-buildid-list.o
BUILTIN_OBJS += $(OUTPUT)builtin-buildid-cache.o
BUILTIN_OBJS += $(OUTPUT)builtin-list.o
BUILTIN_OBJS += $(OUTPUT)builtin-record.o
BUILTIN_OBJS += $(OUTPUT)builtin-report.o
BUILTIN_OBJS += $(OUTPUT)builtin-stat.o
BUILTIN_OBJS += $(OUTPUT)builtin-timechart.o
BUILTIN_OBJS += $(OUTPUT)builtin-top.o
414
BUILTIN_OBJS += $(OUTPUT)builtin-script.o
415 416 417
BUILTIN_OBJS += $(OUTPUT)builtin-probe.o
BUILTIN_OBJS += $(OUTPUT)builtin-kmem.o
BUILTIN_OBJS += $(OUTPUT)builtin-lock.o
418
BUILTIN_OBJS += $(OUTPUT)builtin-kvm.o
T
Tom Zanussi 已提交
419
BUILTIN_OBJS += $(OUTPUT)builtin-inject.o
420
BUILTIN_OBJS += $(OUTPUT)tests/builtin-test.o
421
BUILTIN_OBJS += $(OUTPUT)builtin-mem.o
422

423
PERFLIBS = $(LIB_FILE) $(LIBLK) $(LIBTRACEEVENT)
424 425 426 427

#
# Platform specific tweaks
#
428
ifneq ($(MAKECMDGOALS),clean)
429
ifneq ($(MAKECMDGOALS),tags)
430

431 432
-include config/feature-tests.mak

433 434 435 436
# We choose to avoid "if .. else if .. else .. endif endif"
# because maintaining the nesting to match is a pain.  If
# we had "elif" things would have been much nicer...

437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457
-include arch/$(ARCH)/Makefile

ifneq ($(OUTPUT),)
	BASIC_CFLAGS += -I$(OUTPUT)
endif

ifdef NO_LIBELF
EXTLIBS := $(filter-out -lelf,$(EXTLIBS))

# Remove ELF/DWARF dependent codes
LIB_OBJS := $(filter-out $(OUTPUT)util/symbol-elf.o,$(LIB_OBJS))
LIB_OBJS := $(filter-out $(OUTPUT)util/dwarf-aux.o,$(LIB_OBJS))
LIB_OBJS := $(filter-out $(OUTPUT)util/probe-event.o,$(LIB_OBJS))
LIB_OBJS := $(filter-out $(OUTPUT)util/probe-finder.o,$(LIB_OBJS))

BUILTIN_OBJS := $(filter-out $(OUTPUT)builtin-probe.o,$(BUILTIN_OBJS))

# Use minimal symbol handling
LIB_OBJS += $(OUTPUT)util/symbol-minimal.o

else # NO_LIBELF
458
ifndef NO_DWARF
459
	LIB_OBJS += $(OUTPUT)util/probe-finder.o
460
	LIB_OBJS += $(OUTPUT)util/dwarf-aux.o
461
endif # NO_DWARF
462
endif # NO_LIBELF
463

464
ifndef NO_LIBUNWIND
465
	LIB_OBJS += $(OUTPUT)util/unwind.o
466 467
endif

468
ifndef NO_LIBAUDIT
469
	BUILTIN_OBJS += $(OUTPUT)builtin-trace.o
470 471
endif

472
ifndef NO_SLANG
473 474 475 476 477 478 479 480 481 482 483 484 485
	LIB_OBJS += $(OUTPUT)ui/browser.o
	LIB_OBJS += $(OUTPUT)ui/browsers/annotate.o
	LIB_OBJS += $(OUTPUT)ui/browsers/hists.o
	LIB_OBJS += $(OUTPUT)ui/browsers/map.o
	LIB_OBJS += $(OUTPUT)ui/browsers/scripts.o
	LIB_OBJS += $(OUTPUT)ui/tui/setup.o
	LIB_OBJS += $(OUTPUT)ui/tui/util.o
	LIB_OBJS += $(OUTPUT)ui/tui/helpline.o
	LIB_OBJS += $(OUTPUT)ui/tui/progress.o
	LIB_H += ui/browser.h
	LIB_H += ui/browsers/map.h
	LIB_H += ui/keysyms.h
	LIB_H += ui/libslang.h
J
Jamie Iles 已提交
486
endif
487

N
Namhyung Kim 已提交
488
ifndef NO_GTK2
489 490 491 492 493 494 495
	LIB_OBJS += $(OUTPUT)ui/gtk/browser.o
	LIB_OBJS += $(OUTPUT)ui/gtk/hists.o
	LIB_OBJS += $(OUTPUT)ui/gtk/setup.o
	LIB_OBJS += $(OUTPUT)ui/gtk/util.o
	LIB_OBJS += $(OUTPUT)ui/gtk/helpline.o
	LIB_OBJS += $(OUTPUT)ui/gtk/progress.o
	LIB_OBJS += $(OUTPUT)ui/gtk/annotate.o
496 497
endif

498 499 500
ifndef NO_LIBPERL
	LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-perl.o
	LIB_OBJS += $(OUTPUT)scripts/perl/Perf-Trace-Util/Context.o
501 502
endif

503 504 505
ifndef NO_LIBPYTHON
	LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-python.o
	LIB_OBJS += $(OUTPUT)scripts/python/Perf-Trace-Util/Context.o
506 507
endif

508 509 510 511 512
ifeq ($(NO_PERF_REGS),0)
	ifeq ($(ARCH),x86)
		LIB_H += arch/x86/include/perf_regs.h
	endif
endif
513

514
ifndef NO_LIBNUMA
515
	BUILTIN_OBJS += $(OUTPUT)bench/numa.o
516 517
endif

518 519 520 521
ifdef ASCIIDOC8
	export ASCIIDOC8
endif

522
endif # MAKECMDGOALS != tags
523 524
endif # MAKECMDGOALS != clean

525
LIBS = -Wl,--whole-archive $(PERFLIBS) -Wl,--no-whole-archive -Wl,--start-group $(EXTLIBS) -Wl,--end-group
526 527

ALL_CFLAGS += $(BASIC_CFLAGS)
528
ALL_CFLAGS += $(ARCH_CFLAGS)
529 530
ALL_LDFLAGS += $(BASIC_LDFLAGS)

531
export INSTALL SHELL_PATH
532 533 534 535 536

### Build rules

SHELL = $(SHELL_PATH)

537
all: shell_compatibility_test $(ALL_PROGRAMS) $(LANG_BINDINGS) $(OTHER_PROGRAMS)
538 539 540 541 542 543

please_set_SHELL_PATH_to_a_more_modern_shell:
	@$$(:)

shell_compatibility_test: please_set_SHELL_PATH_to_a_more_modern_shell

544 545
strip: $(PROGRAMS) $(OUTPUT)perf
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) $(OUTPUT)perf
546

547
$(OUTPUT)perf.o: perf.c $(OUTPUT)common-cmds.h $(OUTPUT)PERF-CFLAGS
548
	$(QUIET_CC)$(CC) -include $(OUTPUT)PERF-VERSION-FILE \
549
		'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
550
		$(ALL_CFLAGS) -c $(filter %.c,$^) -o $@
551

552
$(OUTPUT)perf: $(OUTPUT)perf.o $(BUILTIN_OBJS) $(PERFLIBS)
553 554
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(OUTPUT)perf.o \
               $(BUILTIN_OBJS) $(LIBS) -o $@
555

556 557
$(OUTPUT)builtin-help.o: builtin-help.c $(OUTPUT)common-cmds.h $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) \
558 559
		'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
		'-DPERF_MAN_PATH="$(mandir_SQ)"' \
A
Arjan van de Ven 已提交
560 561
		'-DPERF_INFO_PATH="$(infodir_SQ)"' $<

562 563
$(OUTPUT)builtin-timechart.o: builtin-timechart.c $(OUTPUT)common-cmds.h $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) \
A
Arjan van de Ven 已提交
564 565
		'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
		'-DPERF_MAN_PATH="$(mandir_SQ)"' \
566
		'-DPERF_INFO_PATH="$(infodir_SQ)"' $<
567

568
$(OUTPUT)common-cmds.h: util/generate-cmdlist.sh command-list.txt
569

570
$(OUTPUT)common-cmds.h: $(wildcard Documentation/perf-*.txt)
571
	$(QUIET_GEN). util/generate-cmdlist.sh > $@+ && mv $@+ $@
572

573 574
$(SCRIPTS) : % : %.sh
	$(QUIET_GEN)$(INSTALL) '$@.sh' '$(OUTPUT)$@'
575

576
# These can record PERF_VERSION
577
$(OUTPUT)perf.o perf.spec \
578
	$(SCRIPTS) \
579
	: $(OUTPUT)PERF-VERSION-FILE
580

581 582 583
.SUFFIXES:
.SUFFIXES: .o .c .S .s

584 585 586 587
# These two need to be here so that when O= is not used they take precedence
# over the general rule for .o

$(OUTPUT)util/%-flex.o: $(OUTPUT)util/%-flex.c $(OUTPUT)PERF-CFLAGS
588
	$(QUIET_CC)$(CC) -o $@ -c -Iutil/ $(ALL_CFLAGS) -w $<
589 590

$(OUTPUT)util/%-bison.o: $(OUTPUT)util/%-bison.c $(OUTPUT)PERF-CFLAGS
591
	$(QUIET_CC)$(CC) -o $@ -c -Iutil/ $(ALL_CFLAGS) -DYYENABLE_NLS=0 -DYYLTYPE_IS_TRIVIAL=0 -w $<
592

593 594
$(OUTPUT)%.o: %.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $<
J
Jan Beulich 已提交
595 596
$(OUTPUT)%.i: %.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -E $(ALL_CFLAGS) $<
597
$(OUTPUT)%.s: %.c $(OUTPUT)PERF-CFLAGS
J
Jan Beulich 已提交
598
	$(QUIET_CC)$(CC) -o $@ -S $(ALL_CFLAGS) $<
599 600
$(OUTPUT)%.o: %.S
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $<
J
Jan Beulich 已提交
601 602
$(OUTPUT)%.s: %.S
	$(QUIET_CC)$(CC) -o $@ -E $(ALL_CFLAGS) $<
603

604 605
$(OUTPUT)util/exec_cmd.o: util/exec_cmd.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) \
606
		'-DPERF_EXEC_PATH="$(perfexecdir_SQ)"' \
607 608 609
		'-DPREFIX="$(prefix_SQ)"' \
		$<

610 611
$(OUTPUT)tests/attr.o: tests/attr.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) \
612
		'-DBINDIR="$(bindir_SQ)"' -DPYTHON='"$(PYTHON_WORD)"' \
613 614
		$<

615
$(OUTPUT)tests/python-use.o: tests/python-use.c $(OUTPUT)PERF-CFLAGS
616
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) \
617
		-DPYTHONPATH='"$(OUTPUT)python"' \
618 619
		-DPYTHON='"$(PYTHON_WORD)"' \
		$<
620

621 622
$(OUTPUT)util/config.o: util/config.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DETC_PERFCONFIG='"$(ETC_PERFCONFIG_SQ)"' $<
623

624
$(OUTPUT)ui/browser.o: ui/browser.c $(OUTPUT)PERF-CFLAGS
625 626
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<

627
$(OUTPUT)ui/browsers/annotate.o: ui/browsers/annotate.c $(OUTPUT)PERF-CFLAGS
628 629
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<

630
$(OUTPUT)ui/browsers/hists.o: ui/browsers/hists.c $(OUTPUT)PERF-CFLAGS
631 632
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<

633
$(OUTPUT)ui/browsers/map.o: ui/browsers/map.c $(OUTPUT)PERF-CFLAGS
634 635
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<

636 637 638
$(OUTPUT)ui/browsers/scripts.o: ui/browsers/scripts.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<

639
$(OUTPUT)util/rbtree.o: ../../lib/rbtree.c $(OUTPUT)PERF-CFLAGS
640
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -Wno-unused-parameter -DETC_PERFCONFIG='"$(ETC_PERFCONFIG_SQ)"' $<
641

642 643 644
$(OUTPUT)util/parse-events.o: util/parse-events.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -Wno-redundant-decls $<

645 646
$(OUTPUT)util/scripting-engines/trace-event-perl.o: util/scripting-engines/trace-event-perl.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $(PERL_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-shadow $<
647

648 649
$(OUTPUT)scripts/perl/Perf-Trace-Util/Context.o: scripts/perl/Perf-Trace-Util/Context.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $(PERL_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-nested-externs $<
650

651 652
$(OUTPUT)util/scripting-engines/trace-event-python.o: util/scripting-engines/trace-event-python.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $(PYTHON_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-shadow $<
653

654 655
$(OUTPUT)scripts/python/Perf-Trace-Util/Context.o: scripts/python/Perf-Trace-Util/Context.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $(PYTHON_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-nested-externs $<
656

657
$(OUTPUT)perf-%: %.o $(PERFLIBS)
658 659 660
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)

$(LIB_OBJS) $(BUILTIN_OBJS): $(LIB_H)
661
$(patsubst perf-%,%.o,$(PROGRAMS)): $(LIB_H) $(wildcard */*.h)
662

663 664 665
# we compile into subdirectories. if the target directory is not the source directory, they might not exists. So
# we depend the various files onto their directories.
DIRECTORY_DEPS = $(LIB_OBJS) $(BUILTIN_OBJS) $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h
K
Kusanagi Kouichi 已提交
666
$(DIRECTORY_DEPS): | $(sort $(dir $(DIRECTORY_DEPS)))
667 668 669 670
# In the second step, we make a rule to actually create these directories
$(sort $(dir $(DIRECTORY_DEPS))):
	$(QUIET_MKDIR)$(MKDIR) -p $@ 2>/dev/null

671 672 673
$(LIB_FILE): $(LIB_OBJS)
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)

674 675
# libtraceevent.a
$(LIBTRACEEVENT):
676
	$(QUIET_SUBDIR0)$(TRACE_EVENT_DIR) $(QUIET_SUBDIR1) O=$(OUTPUT) libtraceevent.a
S
Steven Rostedt 已提交
677

678 679 680
$(LIBTRACEEVENT)-clean:
	$(QUIET_SUBDIR0)$(TRACE_EVENT_DIR) $(QUIET_SUBDIR1) O=$(OUTPUT) clean

681 682 683 684 685 686 687 688 689 690 691 692
# if subdir is set, we've been called from above so target has been built
# already
$(LIBLK):
ifeq ($(subdir),)
	$(QUIET_SUBDIR0)$(LK_DIR) $(QUIET_SUBDIR1) O=$(OUTPUT) liblk.a
endif

$(LIBLK)-clean:
ifeq ($(subdir),)
	$(QUIET_SUBDIR0)$(LK_DIR) $(QUIET_SUBDIR1) O=$(OUTPUT) clean
endif

693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721
help:
	@echo 'Perf make targets:'
	@echo '  doc		- make *all* documentation (see below)'
	@echo '  man		- make manpage documentation (access with man <foo>)'
	@echo '  html		- make html documentation'
	@echo '  info		- make GNU info documentation (access with info <foo>)'
	@echo '  pdf		- make pdf documentation'
	@echo '  TAGS		- use etags to make tag information for source browsing'
	@echo '  tags		- use ctags to make tag information for source browsing'
	@echo '  cscope	- use cscope to make interactive browsing database'
	@echo ''
	@echo 'Perf install targets:'
	@echo '  NOTE: documentation build requires asciidoc, xmlto packages to be installed'
	@echo '  HINT: use "make prefix=<path> <install target>" to install to a particular'
	@echo '        path like make prefix=/usr/local install install-doc'
	@echo '  install	- install compiled binaries'
	@echo '  install-doc	- install *all* documentation'
	@echo '  install-man	- install manpage documentation'
	@echo '  install-html	- install html documentation'
	@echo '  install-info	- install GNU info documentation'
	@echo '  install-pdf	- install pdf documentation'
	@echo ''
	@echo '  quick-install-doc	- alias for quick-install-man'
	@echo '  quick-install-man	- install the documentation quickly'
	@echo '  quick-install-html	- install the html documentation quickly'
	@echo ''
	@echo 'Perf maintainer targets:'
	@echo '  clean			- clean all binary objects and build output'

722

723
DOC_TARGETS := doc man html info pdf
724

725 726
INSTALL_DOC_TARGETS := $(patsubst %,install-%,$(DOC_TARGETS)) try-install-man
INSTALL_DOC_TARGETS += quick-install-doc quick-install-man quick-install-html
727

728 729
# 'make doc' should call 'make -C Documentation all'
$(DOC_TARGETS):
730
	$(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) $(@:doc=all)
731

732 733 734 735 736 737 738 739 740 741 742 743 744 745
TAGS:
	$(RM) TAGS
	$(FIND) . -name '*.[hcS]' -print | xargs etags -a

tags:
	$(RM) tags
	$(FIND) . -name '*.[hcS]' -print | xargs ctags -a

cscope:
	$(RM) cscope*
	$(FIND) . -name '*.[hcS]' -print | xargs cscope -b

### Detect prefix changes
TRACK_CFLAGS = $(subst ','\'',$(ALL_CFLAGS)):\
746
             $(bindir_SQ):$(perfexecdir_SQ):$(template_dir_SQ):$(prefix_SQ)
747

748
$(OUTPUT)PERF-CFLAGS: .FORCE-PERF-CFLAGS
749
	@FLAGS='$(TRACK_CFLAGS)'; \
750
	    if test x"$$FLAGS" != x"`cat $(OUTPUT)PERF-CFLAGS 2>/dev/null`" ; then \
751
		echo 1>&2 "    * new build flags or prefix"; \
752
		echo "$$FLAGS" >$(OUTPUT)PERF-CFLAGS; \
753 754 755 756 757 758 759 760
            fi

### Testing rules

# GNU make supports exporting all variables by "export" without parameters.
# However, the environment gets quite big, and some programs have problems
# with that.

761
check: $(OUTPUT)common-cmds.h
762 763
	if sparse; \
	then \
764
		for i in *.c */*.c; \
765 766 767 768 769 770 771 772 773
		do \
			sparse $(ALL_CFLAGS) $(SPARSE_FLAGS) $$i || exit; \
		done; \
	else \
		exit 1; \
	fi

### Installation rules

774
install-bin: all
775
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
776
	$(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)'
777 778
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'
779
	$(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
780 781 782
	$(INSTALL) scripts/perl/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'
	$(INSTALL) scripts/perl/*.pl -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl'
	$(INSTALL) scripts/perl/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'
783
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'
784
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'
785
	$(INSTALL) scripts/python/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'
786 787
	$(INSTALL) scripts/python/*.py -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python'
	$(INSTALL) scripts/python/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'
788 789
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d'
	$(INSTALL) bash_completion '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf'
790 791 792 793
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'
	$(INSTALL) tests/attr.py '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'
	$(INSTALL) tests/attr/* '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'
794

795 796
install: install-bin try-install-man

797 798 799
install-python_ext:
	$(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)'

800 801
# 'make install-doc' should call 'make -C Documentation install'
$(INSTALL_DOC_TARGETS):
802
	$(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) $(@:-doc=)
803

804 805
### Cleaning rules

806
clean: $(LIBTRACEEVENT)-clean $(LIBLK)-clean
807
	$(RM) $(LIB_OBJS) $(BUILTIN_OBJS) $(LIB_FILE) $(OUTPUT)perf-archive $(OUTPUT)perf.o $(LANG_BINDINGS)
808
	$(RM) $(ALL_PROGRAMS) perf
809
	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope*
810
	$(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) clean
811
	$(RM) $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)PERF-CFLAGS
812 813
	$(RM) $(OUTPUT)util/*-bison*
	$(RM) $(OUTPUT)util/*-flex*
814
	$(python-clean)
815

816
.PHONY: all install clean strip $(LIBTRACEEVENT) $(LIBLK)
817
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
818
.PHONY: .FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS