Makefile 34.2 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
ifdef NO_NEWT
	NO_SLANG=1
endif

106
# Among the variables below, these:
107
#   perfexecdir
108 109 110 111
#   template_dir
#   mandir
#   infodir
#   htmldir
112
#   ETC_PERFCONFIG (but not sysconfdir)
113
# can be specified as a relative path some/where/else;
114
# this is interpreted as relative to $(prefix) and "perf" at
115 116 117
# runtime figures out where they are based on the path to the executable.
# This can help installing the suite in a relocatable way.

118 119
# Make the path relative to DESTDIR, not to prefix
ifndef DESTDIR
120
prefix = $(HOME)
121
endif
122 123 124 125
bindir_relative = bin
bindir = $(prefix)/$(bindir_relative)
mandir = share/man
infodir = share/info
126
perfexecdir = libexec/perf-core
127
sharedir = $(prefix)/share
128 129
template_dir = share/perf-core/templates
htmldir = share/doc/perf-doc
130 131
ifeq ($(prefix),/usr)
sysconfdir = /etc
132
ETC_PERFCONFIG = $(sysconfdir)/perfconfig
133 134
else
sysconfdir = $(prefix)/etc
135
ETC_PERFCONFIG = etc/perfconfig
136 137 138 139 140 141 142 143 144 145 146 147 148
endif
lib = lib

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 =
149
PYRF_OBJS =
150 151
SCRIPT_SH =

152
SCRIPT_SH += perf-archive.sh
153

154 155 156
grep-libs = $(filter -l%,$(1))
strip-libs = $(filter-out -l%,$(1))

157 158
LK_PATH=$(LK_DIR)

159 160
ifneq ($(OUTPUT),)
	TE_PATH=$(OUTPUT)
161 162 163 164 165
ifneq ($(subdir),)
	LK_PATH=$(OUTPUT)$(LK_DIR)
else
	LK_PATH=$(OUTPUT)
endif
166 167 168 169 170
else
	TE_PATH=$(TRACE_EVENT_DIR)
endif

LIBTRACEEVENT = $(TE_PATH)libtraceevent.a
171 172
export LIBTRACEEVENT

173 174 175
LIBLK = $(LK_PATH)liblk.a
export LIBLK

176 177 178 179 180 181 182 183
# 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

184
PYTHON_EXT_SRCS := $(shell grep -v ^\# util/python-ext-sources)
185
PYTHON_EXT_DEPS := util/python-ext-sources util/setup.py $(LIBTRACEEVENT)
186

187
$(OUTPUT)python/perf.so: $(PYTHON_EXT_SRCS) $(PYTHON_EXT_DEPS)
188
	$(QUIET_GEN)CFLAGS='$(BASIC_CFLAGS)' $(PYTHON_WORD) util/setup.py \
189 190 191
	  --quiet build_ext; \
	mkdir -p $(OUTPUT)python && \
	cp $(PYTHON_EXTBUILD_LIB)perf.so $(OUTPUT)python/
192 193 194 195
#
# No Perl scripts right now:
#

196
SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH))
197

198
#
199
# Single 'perf' binary right now:
200
#
201
PROGRAMS += $(OUTPUT)perf
202

203
LANG_BINDINGS =
204

205
# what 'all' will build and 'install' will install, in perfexecdir
206
ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
207

208
# what 'all' will build but not install in perfexecdir
209
OTHER_PROGRAMS = $(OUTPUT)perf
210 211 212 213 214 215 216 217 218 219 220

# 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 已提交
221
$(OUTPUT)util/parse-events-flex.c: util/parse-events.l $(OUTPUT)util/parse-events-bison.c
222
	$(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
223

224
$(OUTPUT)util/parse-events-bison.c: util/parse-events.y
225
	$(QUIET_BISON)$(BISON) -v util/parse-events.y -d $(PARSER_DEBUG_BISON) -o $(OUTPUT)util/parse-events-bison.c -p parse_events_
226

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

230
$(OUTPUT)util/pmu-bison.c: util/pmu.y
231
	$(QUIET_BISON)$(BISON) -v util/pmu.y -d -o $(OUTPUT)util/pmu-bison.c -p perf_pmu_
232

233 234
$(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
235

236
LIB_FILE=$(OUTPUT)libperf.a
237

I
Ingo Molnar 已提交
238
LIB_H += ../../include/uapi/linux/perf_event.h
239
LIB_H += ../../include/linux/rbtree.h
240
LIB_H += ../../include/linux/list.h
I
Ingo Molnar 已提交
241
LIB_H += ../../include/uapi/linux/const.h
242
LIB_H += ../../include/linux/hash.h
243
LIB_H += ../../include/linux/stringify.h
244 245 246
LIB_H += util/include/linux/bitmap.h
LIB_H += util/include/linux/bitops.h
LIB_H += util/include/linux/compiler.h
247
LIB_H += util/include/linux/const.h
248 249
LIB_H += util/include/linux/ctype.h
LIB_H += util/include/linux/kernel.h
250
LIB_H += util/include/linux/list.h
251
LIB_H += util/include/linux/export.h
252
LIB_H += util/include/linux/magic.h
253 254 255
LIB_H += util/include/linux/poison.h
LIB_H += util/include/linux/prefetch.h
LIB_H += util/include/linux/rbtree.h
256
LIB_H += util/include/linux/rbtree_augmented.h
257
LIB_H += util/include/linux/string.h
258
LIB_H += util/include/linux/types.h
259
LIB_H += util/include/linux/linkage.h
260
LIB_H += util/include/asm/asm-offsets.h
261
LIB_H += util/include/asm/bug.h
262
LIB_H += util/include/asm/byteorder.h
263
LIB_H += util/include/asm/hweight.h
264 265 266
LIB_H += util/include/asm/swab.h
LIB_H += util/include/asm/system.h
LIB_H += util/include/asm/uaccess.h
267
LIB_H += util/include/dwarf-regs.h
268 269
LIB_H += util/include/asm/dwarf2.h
LIB_H += util/include/asm/cpufeature.h
270 271
LIB_H += util/include/asm/unistd_32.h
LIB_H += util/include/asm/unistd_64.h
272
LIB_H += perf.h
273
LIB_H += util/annotate.h
274 275
LIB_H += util/cache.h
LIB_H += util/callchain.h
276
LIB_H += util/build-id.h
277
LIB_H += util/debug.h
278
LIB_H += util/sysfs.h
279
LIB_H += util/pmu.h
280
LIB_H += util/event.h
281
LIB_H += util/evsel.h
282
LIB_H += util/evlist.h
283
LIB_H += util/exec_cmd.h
284
LIB_H += util/types.h
285
LIB_H += util/levenshtein.h
286
LIB_H += util/machine.h
287
LIB_H += util/map.h
288
LIB_H += util/parse-options.h
289
LIB_H += util/parse-events.h
290 291
LIB_H += util/quote.h
LIB_H += util/util.h
292
LIB_H += util/xyarray.h
293
LIB_H += util/header.h
294
LIB_H += util/help.h
295
LIB_H += util/session.h
296
LIB_H += util/strbuf.h
297
LIB_H += util/strlist.h
298
LIB_H += util/strfilter.h
299
LIB_H += util/svghelper.h
300
LIB_H += util/tool.h
301
LIB_H += util/run-command.h
302
LIB_H += util/sigchain.h
303
LIB_H += util/dso.h
304
LIB_H += util/symbol.h
305
LIB_H += util/color.h
306
LIB_H += util/values.h
307
LIB_H += util/sort.h
308
LIB_H += util/hist.h
309
LIB_H += util/thread.h
310
LIB_H += util/thread_map.h
311
LIB_H += util/trace-event.h
312
LIB_H += util/probe-finder.h
313
LIB_H += util/dwarf-aux.h
314
LIB_H += util/probe-event.h
315
LIB_H += util/pstack.h
316
LIB_H += util/cpumap.h
317
LIB_H += util/top.h
318
LIB_H += $(ARCH_INCLUDE)
S
Stephane Eranian 已提交
319
LIB_H += util/cgroup.h
320
LIB_H += $(TRACE_EVENT_DIR)event-parse.h
321
LIB_H += util/target.h
D
David Ahern 已提交
322
LIB_H += util/rblist.h
D
David Ahern 已提交
323
LIB_H += util/intlist.h
324
LIB_H += util/perf_regs.h
325
LIB_H += util/unwind.h
326
LIB_H += util/vdso.h
327 328 329 330
LIB_H += ui/helpline.h
LIB_H += ui/progress.h
LIB_H += ui/util.h
LIB_H += ui/ui.h
331

332 333
LIB_OBJS += $(OUTPUT)util/abspath.o
LIB_OBJS += $(OUTPUT)util/alias.o
334
LIB_OBJS += $(OUTPUT)util/annotate.o
335 336 337
LIB_OBJS += $(OUTPUT)util/build-id.o
LIB_OBJS += $(OUTPUT)util/config.o
LIB_OBJS += $(OUTPUT)util/ctype.o
338
LIB_OBJS += $(OUTPUT)util/sysfs.o
339
LIB_OBJS += $(OUTPUT)util/pmu.o
340 341
LIB_OBJS += $(OUTPUT)util/environment.o
LIB_OBJS += $(OUTPUT)util/event.o
342
LIB_OBJS += $(OUTPUT)util/evlist.o
343
LIB_OBJS += $(OUTPUT)util/evsel.o
344 345 346 347 348 349 350 351 352 353 354 355 356 357
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
358
LIB_OBJS += $(OUTPUT)util/strfilter.o
359
LIB_OBJS += $(OUTPUT)util/top.o
360 361 362
LIB_OBJS += $(OUTPUT)util/usage.o
LIB_OBJS += $(OUTPUT)util/wrapper.o
LIB_OBJS += $(OUTPUT)util/sigchain.o
363
LIB_OBJS += $(OUTPUT)util/dso.o
364
LIB_OBJS += $(OUTPUT)util/symbol.o
365
LIB_OBJS += $(OUTPUT)util/symbol-elf.o
366 367 368 369 370 371
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
372
LIB_OBJS += $(OUTPUT)util/machine.o
373
LIB_OBJS += $(OUTPUT)util/map.o
374
LIB_OBJS += $(OUTPUT)util/pstack.o
375 376
LIB_OBJS += $(OUTPUT)util/session.o
LIB_OBJS += $(OUTPUT)util/thread.o
377
LIB_OBJS += $(OUTPUT)util/thread_map.o
378
LIB_OBJS += $(OUTPUT)util/trace-event-parse.o
379 380
LIB_OBJS += $(OUTPUT)util/parse-events-flex.o
LIB_OBJS += $(OUTPUT)util/parse-events-bison.o
381 382
LIB_OBJS += $(OUTPUT)util/pmu-flex.o
LIB_OBJS += $(OUTPUT)util/pmu-bison.o
383 384 385 386 387 388 389 390
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
391
LIB_OBJS += $(OUTPUT)util/xyarray.o
392
LIB_OBJS += $(OUTPUT)util/cpumap.o
S
Stephane Eranian 已提交
393
LIB_OBJS += $(OUTPUT)util/cgroup.o
394
LIB_OBJS += $(OUTPUT)util/target.o
D
David Ahern 已提交
395
LIB_OBJS += $(OUTPUT)util/rblist.o
D
David Ahern 已提交
396
LIB_OBJS += $(OUTPUT)util/intlist.o
397
LIB_OBJS += $(OUTPUT)util/vdso.o
398
LIB_OBJS += $(OUTPUT)util/stat.o
399

400
LIB_OBJS += $(OUTPUT)ui/setup.o
401
LIB_OBJS += $(OUTPUT)ui/helpline.o
402
LIB_OBJS += $(OUTPUT)ui/progress.o
403
LIB_OBJS += $(OUTPUT)ui/util.o
404
LIB_OBJS += $(OUTPUT)ui/hist.o
405
LIB_OBJS += $(OUTPUT)ui/stdio/hist.o
406

407 408
LIB_OBJS += $(OUTPUT)arch/common.o

409 410
LIB_OBJS += $(OUTPUT)tests/parse-events.o
LIB_OBJS += $(OUTPUT)tests/dso-data.o
411
LIB_OBJS += $(OUTPUT)tests/attr.o
412
LIB_OBJS += $(OUTPUT)tests/vmlinux-kallsyms.o
413
LIB_OBJS += $(OUTPUT)tests/open-syscall.o
414
LIB_OBJS += $(OUTPUT)tests/open-syscall-all-cpus.o
415
LIB_OBJS += $(OUTPUT)tests/open-syscall-tp-fields.o
416
LIB_OBJS += $(OUTPUT)tests/mmap-basic.o
417
LIB_OBJS += $(OUTPUT)tests/perf-record.o
418
LIB_OBJS += $(OUTPUT)tests/rdpmc.o
419
LIB_OBJS += $(OUTPUT)tests/evsel-roundtrip-name.o
420
LIB_OBJS += $(OUTPUT)tests/evsel-tp-sched.o
421
LIB_OBJS += $(OUTPUT)tests/pmu.o
422
LIB_OBJS += $(OUTPUT)tests/hists_link.o
423
LIB_OBJS += $(OUTPUT)tests/python-use.o
424
LIB_OBJS += $(OUTPUT)tests/bp_signal.o
425
LIB_OBJS += $(OUTPUT)tests/bp_signal_overflow.o
426
LIB_OBJS += $(OUTPUT)tests/task-exit.o
427
LIB_OBJS += $(OUTPUT)tests/sw-clock.o
428

429 430
BUILTIN_OBJS += $(OUTPUT)builtin-annotate.o
BUILTIN_OBJS += $(OUTPUT)builtin-bench.o
431
# Benchmark modules
432 433
BUILTIN_OBJS += $(OUTPUT)bench/sched-messaging.o
BUILTIN_OBJS += $(OUTPUT)bench/sched-pipe.o
434 435
ifeq ($(RAW_ARCH),x86_64)
BUILTIN_OBJS += $(OUTPUT)bench/mem-memcpy-x86-64-asm.o
436
BUILTIN_OBJS += $(OUTPUT)bench/mem-memset-x86-64-asm.o
437
endif
438
BUILTIN_OBJS += $(OUTPUT)bench/mem-memcpy.o
439
BUILTIN_OBJS += $(OUTPUT)bench/mem-memset.o
440 441

BUILTIN_OBJS += $(OUTPUT)builtin-diff.o
442
BUILTIN_OBJS += $(OUTPUT)builtin-evlist.o
443 444 445 446 447 448 449 450 451 452
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
453
BUILTIN_OBJS += $(OUTPUT)builtin-script.o
454 455 456
BUILTIN_OBJS += $(OUTPUT)builtin-probe.o
BUILTIN_OBJS += $(OUTPUT)builtin-kmem.o
BUILTIN_OBJS += $(OUTPUT)builtin-lock.o
457
BUILTIN_OBJS += $(OUTPUT)builtin-kvm.o
T
Tom Zanussi 已提交
458
BUILTIN_OBJS += $(OUTPUT)builtin-inject.o
459
BUILTIN_OBJS += $(OUTPUT)tests/builtin-test.o
460
BUILTIN_OBJS += $(OUTPUT)builtin-mem.o
461

462
PERFLIBS = $(LIB_FILE) $(LIBLK) $(LIBTRACEEVENT)
463 464 465 466

#
# Platform specific tweaks
#
467
ifneq ($(MAKECMDGOALS),clean)
468
ifneq ($(MAKECMDGOALS),tags)
469

470 471
-include config/feature-tests.mak

472 473 474 475
# 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...

476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496
-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
497
ifndef NO_DWARF
498
	LIB_OBJS += $(OUTPUT)util/probe-finder.o
499
	LIB_OBJS += $(OUTPUT)util/dwarf-aux.o
500
endif # NO_DWARF
501
endif # NO_LIBELF
502

503
ifndef NO_LIBUNWIND
504
	LIB_OBJS += $(OUTPUT)util/unwind.o
505 506
endif

507
ifndef NO_LIBAUDIT
508
	FLAGS_LIBAUDIT = $(ALL_CFLAGS) $(ALL_LDFLAGS) -laudit
509
	ifneq ($(call try-cc,$(SOURCE_LIBAUDIT),$(FLAGS_LIBAUDIT),libaudit),y)
510 511
		msg := $(warning No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev);
	else
512
		BASIC_CFLAGS += -DLIBAUDIT_SUPPORT
513 514 515 516 517
		BUILTIN_OBJS += $(OUTPUT)builtin-trace.o
		EXTLIBS += -laudit
	endif
endif

518 519 520 521
ifndef NO_SLANG
	FLAGS_SLANG=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -I/usr/include/slang -lslang
	ifneq ($(call try-cc,$(SOURCE_SLANG),$(FLAGS_SLANG),libslang),y)
		msg := $(warning slang not found, disables TUI support. Please install slang-devel or libslang-dev);
522 523 524
	else
		# Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
		BASIC_CFLAGS += -I/usr/include/slang
525 526
		BASIC_CFLAGS += -DSLANG_SUPPORT
		EXTLIBS += -lslang
527 528 529 530
		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
531
		LIB_OBJS += $(OUTPUT)ui/browsers/scripts.o
532
		LIB_OBJS += $(OUTPUT)ui/tui/setup.o
533
		LIB_OBJS += $(OUTPUT)ui/tui/util.o
534
		LIB_OBJS += $(OUTPUT)ui/tui/helpline.o
535
		LIB_OBJS += $(OUTPUT)ui/tui/progress.o
536 537 538 539
		LIB_H += ui/browser.h
		LIB_H += ui/browsers/map.h
		LIB_H += ui/keysyms.h
		LIB_H += ui/libslang.h
540
	endif
J
Jamie Iles 已提交
541
endif
542

N
Namhyung Kim 已提交
543
ifndef NO_GTK2
D
David Ahern 已提交
544
	FLAGS_GTK2=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) $(shell pkg-config --libs --cflags gtk+-2.0 2>/dev/null)
545
	ifneq ($(call try-cc,$(SOURCE_GTK2),$(FLAGS_GTK2),gtk2),y)
546 547
		msg := $(warning GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev);
	else
548
		ifeq ($(call try-cc,$(SOURCE_GTK2_INFOBAR),$(FLAGS_GTK2),-DHAVE_GTK_INFO_BAR),y)
549 550
			BASIC_CFLAGS += -DHAVE_GTK_INFO_BAR
		endif
N
Namhyung Kim 已提交
551
		BASIC_CFLAGS += -DGTK2_SUPPORT
D
David Ahern 已提交
552 553
		BASIC_CFLAGS += $(shell pkg-config --cflags gtk+-2.0 2>/dev/null)
		EXTLIBS += $(shell pkg-config --libs gtk+-2.0 2>/dev/null)
554
		LIB_OBJS += $(OUTPUT)ui/gtk/browser.o
555
		LIB_OBJS += $(OUTPUT)ui/gtk/hists.o
556
		LIB_OBJS += $(OUTPUT)ui/gtk/setup.o
557
		LIB_OBJS += $(OUTPUT)ui/gtk/util.o
558
		LIB_OBJS += $(OUTPUT)ui/gtk/helpline.o
559
		LIB_OBJS += $(OUTPUT)ui/gtk/progress.o
560
		LIB_OBJS += $(OUTPUT)ui/gtk/annotate.o
561 562 563
	endif
endif

564
ifdef NO_LIBPERL
565 566
	BASIC_CFLAGS += -DNO_LIBPERL
else
567 568 569
       PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
       PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
       PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
570
	PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
T
Tom Zanussi 已提交
571
	FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
572

573
	ifneq ($(call try-cc,$(SOURCE_PERL_EMBED),$(FLAGS_PERL_EMBED),perl),y)
574 575
		BASIC_CFLAGS += -DNO_LIBPERL
	else
576 577
               ALL_LDFLAGS += $(PERL_EMBED_LDFLAGS)
               EXTLIBS += $(PERL_EMBED_LIBADD)
578 579 580
		LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-perl.o
		LIB_OBJS += $(OUTPUT)scripts/perl/Perf-Trace-Util/Context.o
	endif
581 582
endif

583 584 585 586
disable-python = $(eval $(disable-python_code))
define disable-python_code
  BASIC_CFLAGS += -DNO_LIBPYTHON
  $(if $(1),$(warning No $(1) was found))
587
  $(warning Python support will not be built)
588 589 590 591 592 593 594
endef

override PYTHON := \
  $(call get-executable-or-default,PYTHON,python)

ifndef PYTHON
  $(call disable-python,python interpreter)
595
else
596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617

  PYTHON_WORD := $(call shell-wordify,$(PYTHON))

  ifdef NO_LIBPYTHON
    $(call disable-python)
  else

    override PYTHON_CONFIG := \
      $(call get-executable-or-default,PYTHON_CONFIG,$(PYTHON)-config)

    ifndef PYTHON_CONFIG
      $(call disable-python,python-config tool)
    else

      PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))

      PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) --ldflags 2>/dev/null)
      PYTHON_EMBED_LDFLAGS := $(call strip-libs,$(PYTHON_EMBED_LDOPTS))
      PYTHON_EMBED_LIBADD := $(call grep-libs,$(PYTHON_EMBED_LDOPTS))
      PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --cflags 2>/dev/null)
      FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)

618
      ifneq ($(call try-cc,$(SOURCE_PYTHON_EMBED),$(FLAGS_PYTHON_EMBED),python),y)
619 620 621
        $(call disable-python,Python.h (for Python 2.x))
      else

622
        ifneq ($(call try-cc,$(SOURCE_PYTHON_VERSION),$(FLAGS_PYTHON_EMBED),python version),y)
623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645
          $(warning Python 3 is not yet supported; please set)
          $(warning PYTHON and/or PYTHON_CONFIG appropriately.)
          $(warning If you also have Python 2 installed, then)
          $(warning try something like:)
          $(warning $(and ,))
          $(warning $(and ,)  make PYTHON=python2)
          $(warning $(and ,))
          $(warning Otherwise, disable Python support entirely:)
          $(warning $(and ,))
          $(warning $(and ,)  make NO_LIBPYTHON=1)
          $(warning $(and ,))
          $(error   $(and ,))
        else
          ALL_LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
          EXTLIBS += $(PYTHON_EMBED_LIBADD)
          LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-python.o
          LIB_OBJS += $(OUTPUT)scripts/python/Perf-Trace-Util/Context.o
          LANG_BINDINGS += $(OUTPUT)python/perf.so
        endif

      endif
    endif
  endif
646 647
endif

P
Peter Zijlstra 已提交
648 649 650
ifdef NO_DEMANGLE
	BASIC_CFLAGS += -DNO_DEMANGLE
else
651
	ifdef HAVE_CPLUS_DEMANGLE
652 653
		EXTLIBS += -liberty
		BASIC_CFLAGS += -DHAVE_CPLUS_DEMANGLE
654
	else
655
		FLAGS_BFD=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -DPACKAGE='perf' -lbfd
656
		has_bfd := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD),libbfd)
657 658
		ifeq ($(has_bfd),y)
			EXTLIBS += -lbfd
659
		else
660
			FLAGS_BFD_IBERTY=$(FLAGS_BFD) -liberty
661
			has_bfd_iberty := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD_IBERTY),liberty)
662 663
			ifeq ($(has_bfd_iberty),y)
				EXTLIBS += -lbfd -liberty
664
			else
665
				FLAGS_BFD_IBERTY_Z=$(FLAGS_BFD_IBERTY) -lz
666
				has_bfd_iberty_z := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD_IBERTY_Z),libz)
667 668
				ifeq ($(has_bfd_iberty_z),y)
					EXTLIBS += -lbfd -liberty -lz
669
				else
670
					FLAGS_CPLUS_DEMANGLE=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -liberty
671
					has_cplus_demangle := $(call try-cc,$(SOURCE_CPLUS_DEMANGLE),$(FLAGS_CPLUS_DEMANGLE),demangle)
672 673 674 675 676 677 678
					ifeq ($(has_cplus_demangle),y)
						EXTLIBS += -liberty
						BASIC_CFLAGS += -DHAVE_CPLUS_DEMANGLE
					else
						msg := $(warning No bfd.h/libbfd found, install binutils-dev[el]/zlib-static to gain symbol demangling)
						BASIC_CFLAGS += -DNO_DEMANGLE
					endif
679 680 681
				endif
			endif
		endif
P
Peter Zijlstra 已提交
682 683 684
	endif
endif

685 686 687 688 689
ifeq ($(NO_PERF_REGS),0)
	ifeq ($(ARCH),x86)
		LIB_H += arch/x86/include/perf_regs.h
	endif
endif
690

N
Namhyung Kim 已提交
691
ifndef NO_STRLCPY
692
	ifeq ($(call try-cc,$(SOURCE_STRLCPY),,-DHAVE_STRLCPY),y)
N
Namhyung Kim 已提交
693
		BASIC_CFLAGS += -DHAVE_STRLCPY
694 695 696
	endif
endif

697
ifndef NO_ON_EXIT
698
	ifeq ($(call try-cc,$(SOURCE_ON_EXIT),,-DHAVE_ON_EXIT),y)
699 700 701 702
		BASIC_CFLAGS += -DHAVE_ON_EXIT
	endif
endif

703
ifndef NO_BACKTRACE
704
       ifeq ($(call try-cc,$(SOURCE_BACKTRACE),,-DBACKTRACE_SUPPORT),y)
705
               BASIC_CFLAGS += -DBACKTRACE_SUPPORT
706 707 708
       endif
endif

709 710 711 712 713 714 715 716 717 718 719
ifndef NO_LIBNUMA
	FLAGS_LIBNUMA = $(ALL_CFLAGS) $(ALL_LDFLAGS) -lnuma
	ifneq ($(call try-cc,$(SOURCE_LIBNUMA),$(FLAGS_LIBNUMA),libnuma),y)
		msg := $(warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numa-libs-devel or libnuma-dev);
	else
		BASIC_CFLAGS += -DLIBNUMA_SUPPORT
		BUILTIN_OBJS += $(OUTPUT)bench/numa.o
		EXTLIBS += -lnuma
	endif
endif

720 721 722 723
ifdef ASCIIDOC8
	export ASCIIDOC8
endif

724
endif # MAKECMDGOALS != tags
725 726
endif # MAKECMDGOALS != clean

727 728
# Shell quote (do not use $(call) to accommodate ancient setups);

729
ETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
730 731 732 733 734 735

DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir))
bindir_relative_SQ = $(subst ','\'',$(bindir_relative))
mandir_SQ = $(subst ','\'',$(mandir))
infodir_SQ = $(subst ','\'',$(infodir))
736
perfexecdir_SQ = $(subst ','\'',$(perfexecdir))
737 738 739
template_dir_SQ = $(subst ','\'',$(template_dir))
htmldir_SQ = $(subst ','\'',$(htmldir))
prefix_SQ = $(subst ','\'',$(prefix))
740
sysconfdir_SQ = $(subst ','\'',$(sysconfdir))
741 742 743

SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))

744
LIBS = -Wl,--whole-archive $(PERFLIBS) -Wl,--no-whole-archive -Wl,--start-group $(EXTLIBS) -Wl,--end-group
745 746

ALL_CFLAGS += $(BASIC_CFLAGS)
747
ALL_CFLAGS += $(ARCH_CFLAGS)
748 749
ALL_LDFLAGS += $(BASIC_LDFLAGS)

750
export INSTALL SHELL_PATH
751 752 753 754 755 756


### Build rules

SHELL = $(SHELL_PATH)

757
all: shell_compatibility_test $(ALL_PROGRAMS) $(LANG_BINDINGS) $(OTHER_PROGRAMS)
758 759 760 761 762 763

please_set_SHELL_PATH_to_a_more_modern_shell:
	@$$(:)

shell_compatibility_test: please_set_SHELL_PATH_to_a_more_modern_shell

764 765
strip: $(PROGRAMS) $(OUTPUT)perf
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) $(OUTPUT)perf
766

767
$(OUTPUT)perf.o: perf.c $(OUTPUT)common-cmds.h $(OUTPUT)PERF-CFLAGS
768
	$(QUIET_CC)$(CC) -include $(OUTPUT)PERF-VERSION-FILE \
769
		'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
770
		$(ALL_CFLAGS) -c $(filter %.c,$^) -o $@
771

772
$(OUTPUT)perf: $(OUTPUT)perf.o $(BUILTIN_OBJS) $(PERFLIBS)
773 774
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(OUTPUT)perf.o \
               $(BUILTIN_OBJS) $(LIBS) -o $@
775

776 777
$(OUTPUT)builtin-help.o: builtin-help.c $(OUTPUT)common-cmds.h $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) \
778 779
		'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
		'-DPERF_MAN_PATH="$(mandir_SQ)"' \
A
Arjan van de Ven 已提交
780 781
		'-DPERF_INFO_PATH="$(infodir_SQ)"' $<

782 783
$(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 已提交
784 785
		'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
		'-DPERF_MAN_PATH="$(mandir_SQ)"' \
786
		'-DPERF_INFO_PATH="$(infodir_SQ)"' $<
787

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

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

793 794
$(SCRIPTS) : % : %.sh
	$(QUIET_GEN)$(INSTALL) '$@.sh' '$(OUTPUT)$@'
795

796
# These can record PERF_VERSION
797
$(OUTPUT)perf.o perf.spec \
798
	$(SCRIPTS) \
799
	: $(OUTPUT)PERF-VERSION-FILE
800

801 802 803
.SUFFIXES:
.SUFFIXES: .o .c .S .s

804 805 806 807
# 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
808
	$(QUIET_CC)$(CC) -o $@ -c -Iutil/ $(ALL_CFLAGS) -w $<
809 810

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

813 814
$(OUTPUT)%.o: %.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $<
J
Jan Beulich 已提交
815 816
$(OUTPUT)%.i: %.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -E $(ALL_CFLAGS) $<
817
$(OUTPUT)%.s: %.c $(OUTPUT)PERF-CFLAGS
J
Jan Beulich 已提交
818
	$(QUIET_CC)$(CC) -o $@ -S $(ALL_CFLAGS) $<
819 820
$(OUTPUT)%.o: %.S
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $<
J
Jan Beulich 已提交
821 822
$(OUTPUT)%.s: %.S
	$(QUIET_CC)$(CC) -o $@ -E $(ALL_CFLAGS) $<
823

824 825
$(OUTPUT)util/exec_cmd.o: util/exec_cmd.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) \
826
		'-DPERF_EXEC_PATH="$(perfexecdir_SQ)"' \
827 828 829
		'-DPREFIX="$(prefix_SQ)"' \
		$<

830 831
$(OUTPUT)tests/attr.o: tests/attr.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) \
832
		'-DBINDIR="$(bindir_SQ)"' -DPYTHON='"$(PYTHON_WORD)"' \
833 834
		$<

835
$(OUTPUT)tests/python-use.o: tests/python-use.c $(OUTPUT)PERF-CFLAGS
836
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) \
837
		-DPYTHONPATH='"$(OUTPUT)python"' \
838 839
		-DPYTHON='"$(PYTHON_WORD)"' \
		$<
840

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

844
$(OUTPUT)ui/browser.o: ui/browser.c $(OUTPUT)PERF-CFLAGS
845 846
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<

847
$(OUTPUT)ui/browsers/annotate.o: ui/browsers/annotate.c $(OUTPUT)PERF-CFLAGS
848 849
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<

850
$(OUTPUT)ui/browsers/hists.o: ui/browsers/hists.c $(OUTPUT)PERF-CFLAGS
851 852
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<

853
$(OUTPUT)ui/browsers/map.o: ui/browsers/map.c $(OUTPUT)PERF-CFLAGS
854 855
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<

856 857 858
$(OUTPUT)ui/browsers/scripts.o: ui/browsers/scripts.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<

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

862 863 864
$(OUTPUT)util/parse-events.o: util/parse-events.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -Wno-redundant-decls $<

865 866
$(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 $<
867

868 869
$(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 $<
870

871 872
$(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 $<
873

874 875
$(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 $<
876

877
$(OUTPUT)perf-%: %.o $(PERFLIBS)
878 879 880
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)

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

883 884 885
# 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 已提交
886
$(DIRECTORY_DEPS): | $(sort $(dir $(DIRECTORY_DEPS)))
887 888 889 890
# In the second step, we make a rule to actually create these directories
$(sort $(dir $(DIRECTORY_DEPS))):
	$(QUIET_MKDIR)$(MKDIR) -p $@ 2>/dev/null

891 892 893
$(LIB_FILE): $(LIB_OBJS)
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)

894 895
# libtraceevent.a
$(LIBTRACEEVENT):
896
	$(QUIET_SUBDIR0)$(TRACE_EVENT_DIR) $(QUIET_SUBDIR1) O=$(OUTPUT) libtraceevent.a
S
Steven Rostedt 已提交
897

898 899 900
$(LIBTRACEEVENT)-clean:
	$(QUIET_SUBDIR0)$(TRACE_EVENT_DIR) $(QUIET_SUBDIR1) O=$(OUTPUT) clean

901 902 903 904 905 906 907 908 909 910 911 912
# 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

913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941
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'

942

943
DOC_TARGETS := doc man html info pdf
944

945 946
INSTALL_DOC_TARGETS := $(patsubst %,install-%,$(DOC_TARGETS)) try-install-man
INSTALL_DOC_TARGETS += quick-install-doc quick-install-man quick-install-html
947

948 949
# 'make doc' should call 'make -C Documentation all'
$(DOC_TARGETS):
950
	$(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) $(@:doc=all)
951

952 953 954 955 956 957 958 959 960 961 962 963 964 965
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)):\
966
             $(bindir_SQ):$(perfexecdir_SQ):$(template_dir_SQ):$(prefix_SQ)
967

968
$(OUTPUT)PERF-CFLAGS: .FORCE-PERF-CFLAGS
969
	@FLAGS='$(TRACK_CFLAGS)'; \
970
	    if test x"$$FLAGS" != x"`cat $(OUTPUT)PERF-CFLAGS 2>/dev/null`" ; then \
971
		echo 1>&2 "    * new build flags or prefix"; \
972
		echo "$$FLAGS" >$(OUTPUT)PERF-CFLAGS; \
973 974 975 976 977 978 979 980
            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.

981
check: $(OUTPUT)common-cmds.h
982 983
	if sparse; \
	then \
984
		for i in *.c */*.c; \
985 986 987 988 989 990 991 992 993
		do \
			sparse $(ALL_CFLAGS) $(SPARSE_FLAGS) $$i || exit; \
		done; \
	else \
		exit 1; \
	fi

### Installation rules

994 995
ifneq ($(filter /%,$(firstword $(perfexecdir))),)
perfexec_instdir = $(perfexecdir)
996
else
997
perfexec_instdir = $(prefix)/$(perfexecdir)
998
endif
999
perfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir))
1000

1001
install-bin: all
1002
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
1003
	$(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)'
1004 1005
	$(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'
1006
	$(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
1007 1008 1009
	$(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'
1010
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'
1011
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'
1012
	$(INSTALL) scripts/python/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'
1013 1014
	$(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'
1015 1016
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d'
	$(INSTALL) bash_completion '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf'
1017 1018 1019 1020
	$(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'
1021

1022 1023
install: install-bin try-install-man

1024 1025 1026
install-python_ext:
	$(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)'

1027 1028
# 'make install-doc' should call 'make -C Documentation install'
$(INSTALL_DOC_TARGETS):
1029
	$(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) $(@:-doc=)
1030

1031 1032
### Cleaning rules

1033
clean: $(LIBTRACEEVENT)-clean $(LIBLK)-clean
1034
	$(RM) $(LIB_OBJS) $(BUILTIN_OBJS) $(LIB_FILE) $(OUTPUT)perf-archive $(OUTPUT)perf.o $(LANG_BINDINGS)
1035
	$(RM) $(ALL_PROGRAMS) perf
1036
	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope*
1037
	$(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) clean
1038
	$(RM) $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)PERF-CFLAGS
1039 1040
	$(RM) $(OUTPUT)util/*-bison*
	$(RM) $(OUTPUT)util/*-flex*
1041
	$(python-clean)
1042

1043
.PHONY: all install clean strip $(LIBTRACEEVENT) $(LIBLK)
1044
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
1045
.PHONY: .FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS