Makefile 33.1 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
#
# Define NO_NEWT if you do not want TUI support.
#
40 41
# Define NO_GTK2 if you do not want GTK+ GUI support.
#
42
# Define NO_DEMANGLE if you do not want C++ symbol demangling.
43 44 45
#
# Define NO_LIBELF if you do not want libelf dependency (e.g. cross-builds)
#
46

47 48 49
$(OUTPUT)PERF-VERSION-FILE: .FORCE-PERF-VERSION-FILE
	@$(SHELL_PATH) util/PERF-VERSION-GEN $(OUTPUT)
-include $(OUTPUT)PERF-VERSION-FILE
50

51
uname_M := $(shell uname -m 2>/dev/null || echo not)
52

53 54 55 56 57 58
ARCH ?= $(shell echo $(uname_M) | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
				  -e s/arm.*/arm/ -e s/sa110/arm/ \
				  -e s/s390x/s390/ -e s/parisc64/parisc/ \
				  -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
				  -e s/sh[234].*/sh/ )

59 60 61
CC = $(CROSS_COMPILE)gcc
AR = $(CROSS_COMPILE)ar

62 63 64 65 66
# Additional ARCH settings for x86
ifeq ($(ARCH),i386)
        ARCH := x86
endif
ifeq ($(ARCH),x86_64)
67
	ARCH := x86
68 69 70 71
	IS_X86_64 := 0
	ifeq (, $(findstring m32,$(EXTRA_CFLAGS)))
		IS_X86_64 := $(shell echo __x86_64__ | ${CC} -E -xc - | tail -n 1)
	endif
72 73 74
	ifeq (${IS_X86_64}, 1)
		RAW_ARCH := x86_64
		ARCH_CFLAGS := -DARCH_X86_64
75
		ARCH_INCLUDE = ../../arch/x86/lib/memcpy_64.S ../../arch/x86/lib/memset_64.S
76
	endif
77 78
endif

79 80 81 82 83
# Treat warnings as errors unless directed not to
ifneq ($(WERROR),0)
	CFLAGS_WERROR := -Werror
endif

84 85 86 87
ifeq ("$(origin DEBUG)", "command line")
  PERF_DEBUG = $(DEBUG)
endif
ifndef PERF_DEBUG
88
  CFLAGS_OPTIMIZE = -O6 -D_FORTIFY_SOURCE=2
89 90
endif

91 92 93 94 95 96
ifdef PARSER_DEBUG
	PARSER_DEBUG_BISON  := -t
	PARSER_DEBUG_FLEX   := -d
	PARSER_DEBUG_CFLAGS := -DPARSER_DEBUG
endif

97
CFLAGS = -fno-omit-frame-pointer -ggdb3 -Wall -Wextra -std=gnu99 $(CFLAGS_WERROR) $(CFLAGS_OPTIMIZE) $(EXTRA_WARNINGS) $(EXTRA_CFLAGS) $(PARSER_DEBUG_CFLAGS)
98
EXTLIBS = -lpthread -lrt -lelf -lm
99
ALL_CFLAGS = $(CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
100 101 102 103
ALL_LDFLAGS = $(LDFLAGS)
STRIP ?= strip

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

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

export prefix bindir sharedir sysconfdir

RM = rm -f
139
MKDIR = mkdir
140 141 142 143 144 145 146
FIND = find
INSTALL = install

# 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__

147
-include config/feature-tests.mak
148

149 150
ifeq ($(call try-cc,$(SOURCE_HELLO),-Werror -fstack-protector-all),y)
	CFLAGS := $(CFLAGS) -fstack-protector-all
151
endif
152

153 154 155 156 157 158 159
ifeq ($(call try-cc,$(SOURCE_HELLO),-Werror -Wstack-protector),y)
       CFLAGS := $(CFLAGS) -Wstack-protector
endif

ifeq ($(call try-cc,$(SOURCE_HELLO),-Werror -Wvolatile-register-var),y)
       CFLAGS := $(CFLAGS) -Wvolatile-register-var
endif
160 161 162

### --- END CONFIGURATION SECTION ---

D
David Ahern 已提交
163
BASIC_CFLAGS = -Iutil/include -Iarch/$(ARCH)/include -I$(OUTPUT)util -I$(TRACE_EVENT_DIR) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
164 165 166 167 168 169
BASIC_LDFLAGS =

# Guard against environment variables
BUILTIN_OBJS =
LIB_H =
LIB_OBJS =
170
PYRF_OBJS =
171 172
SCRIPT_SH =

173
SCRIPT_SH += perf-archive.sh
174

175 176 177
grep-libs = $(filter -l%,$(1))
strip-libs = $(filter-out -l%,$(1))

178 179 180 181
PYTHON_EXT_SRCS := $(shell grep -v ^\# util/python-ext-sources)
PYTHON_EXT_DEPS := util/python-ext-sources util/setup.py

$(OUTPUT)python/perf.so: $(PYRF_OBJS) $(PYTHON_EXT_SRCS) $(PYTHON_EXT_DEPS)
182
	$(QUIET_GEN)CFLAGS='$(BASIC_CFLAGS)' $(PYTHON_WORD) util/setup.py \
183 184 185
	  --quiet build_ext; \
	mkdir -p $(OUTPUT)python && \
	cp $(PYTHON_EXTBUILD_LIB)perf.so $(OUTPUT)python/
186 187 188 189
#
# No Perl scripts right now:
#

190
SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH))
191

192
TRACE_EVENT_DIR = ../lib/traceevent/
193

194 195
ifneq ($(OUTPUT),)
	TE_PATH=$(OUTPUT)
196
else
197
	TE_PATH=$(TRACE_EVENT_DIR)
198 199
endif

200 201
LIBTRACEEVENT = $(TE_PATH)libtraceevent.a
TE_LIB := -L$(TE_PATH) -ltraceevent
S
Steven Rostedt 已提交
202

203
#
204
# Single 'perf' binary right now:
205
#
206
PROGRAMS += $(OUTPUT)perf
207

208
LANG_BINDINGS =
209

210
# what 'all' will build and 'install' will install, in perfexecdir
211
ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
212

213
# what 'all' will build but not install in perfexecdir
214
OTHER_PROGRAMS = $(OUTPUT)perf
215 216 217 218 219 220 221 222 223 224 225

# 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

226 227
FLEX = flex
BISON= bison
228

229
$(OUTPUT)util/parse-events-flex.c: util/parse-events.l
230
	$(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
231

232
$(OUTPUT)util/parse-events-bison.c: util/parse-events.y
233
	$(QUIET_BISON)$(BISON) -v util/parse-events.y -d $(PARSER_DEBUG_BISON) -o $(OUTPUT)util/parse-events-bison.c
234

235
$(OUTPUT)util/pmu-flex.c: util/pmu.l
236 237
	$(QUIET_FLEX)$(FLEX) --header-file=$(OUTPUT)util/pmu-flex.h -t util/pmu.l > $(OUTPUT)util/pmu-flex.c

238 239
$(OUTPUT)util/pmu-bison.c: util/pmu.y
	$(QUIET_BISON)$(BISON) -v util/pmu.y -d -o $(OUTPUT)util/pmu-bison.c
240

241 242
$(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
243

244
LIB_FILE=$(OUTPUT)libperf.a
245

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

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

BUILTIN_OBJS += $(OUTPUT)builtin-annotate.o

BUILTIN_OBJS += $(OUTPUT)builtin-bench.o
400 401

# Benchmark modules
402 403
BUILTIN_OBJS += $(OUTPUT)bench/sched-messaging.o
BUILTIN_OBJS += $(OUTPUT)bench/sched-pipe.o
404 405
ifeq ($(RAW_ARCH),x86_64)
BUILTIN_OBJS += $(OUTPUT)bench/mem-memcpy-x86-64-asm.o
406
BUILTIN_OBJS += $(OUTPUT)bench/mem-memset-x86-64-asm.o
407
endif
408
BUILTIN_OBJS += $(OUTPUT)bench/mem-memcpy.o
409
BUILTIN_OBJS += $(OUTPUT)bench/mem-memset.o
410 411

BUILTIN_OBJS += $(OUTPUT)builtin-diff.o
412
BUILTIN_OBJS += $(OUTPUT)builtin-evlist.o
413 414 415 416 417 418 419 420 421 422
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
423
BUILTIN_OBJS += $(OUTPUT)builtin-script.o
424 425 426
BUILTIN_OBJS += $(OUTPUT)builtin-probe.o
BUILTIN_OBJS += $(OUTPUT)builtin-kmem.o
BUILTIN_OBJS += $(OUTPUT)builtin-lock.o
427
BUILTIN_OBJS += $(OUTPUT)builtin-kvm.o
428
BUILTIN_OBJS += $(OUTPUT)builtin-test.o
T
Tom Zanussi 已提交
429
BUILTIN_OBJS += $(OUTPUT)builtin-inject.o
430

431
PERFLIBS = $(LIB_FILE) $(LIBTRACEEVENT)
432

433 434 435 436 437 438 439 440 441 442 443 444 445 446
# Files needed for the python binding, perf.so
# pyrf is just an internal name needed for all those wrappers.
# This has to be in sync with what is in the 'sources' variable in
# tools/perf/util/setup.py

PYRF_OBJS += $(OUTPUT)util/cpumap.o
PYRF_OBJS += $(OUTPUT)util/ctype.o
PYRF_OBJS += $(OUTPUT)util/evlist.o
PYRF_OBJS += $(OUTPUT)util/evsel.o
PYRF_OBJS += $(OUTPUT)util/python.o
PYRF_OBJS += $(OUTPUT)util/thread_map.o
PYRF_OBJS += $(OUTPUT)util/util.o
PYRF_OBJS += $(OUTPUT)util/xyarray.o

447 448 449 450 451 452 453 454 455 456 457
#
# Platform specific tweaks
#

# 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...

-include config.mak.autogen
-include config.mak

458
ifdef NO_LIBELF
459
	NO_DWARF := 1
460 461
	NO_DEMANGLE := 1
else
462 463 464 465 466 467
FLAGS_LIBELF=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS)
ifneq ($(call try-cc,$(SOURCE_LIBELF),$(FLAGS_LIBELF)),y)
	FLAGS_GLIBC=$(ALL_CFLAGS) $(ALL_LDFLAGS)
	ifneq ($(call try-cc,$(SOURCE_GLIBC),$(FLAGS_GLIBC)),y)
		msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]/glibc-static);
	else
468 469 470
		NO_LIBELF := 1
		NO_DWARF := 1
		NO_DEMANGLE := 1
471
	endif
472
endif
473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497
endif # NO_LIBELF

-include arch/$(ARCH)/Makefile

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

ifdef NO_LIBELF
BASIC_CFLAGS += -DNO_LIBELF_SUPPORT

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
498

499 500
ifneq ($(call try-cc,$(SOURCE_ELF_MMAP),$(FLAGS_COMMON)),y)
	BASIC_CFLAGS += -DLIBELF_NO_MMAP
P
Peter Zijlstra 已提交
501 502
endif

503 504 505 506 507 508
FLAGS_DWARF=$(ALL_CFLAGS) -ldw -lelf $(ALL_LDFLAGS) $(EXTLIBS)
ifneq ($(call try-cc,$(SOURCE_DWARF),$(FLAGS_DWARF)),y)
	msg := $(warning No libdw.h found or old libdw.h found or elfutils is older than 0.138, disables dwarf support. Please install new elfutils-devel/libdw-dev);
	NO_DWARF := 1
endif # Dwarf support

509
ifndef NO_DWARF
510 511 512
ifeq ($(origin PERF_HAVE_DWARF_REGS), undefined)
	msg := $(warning DWARF register mappings have not been defined for architecture $(ARCH), DWARF support disabled);
else
513
	BASIC_CFLAGS += -DDWARF_SUPPORT
514
	EXTLIBS += -lelf -ldw
515
	LIB_OBJS += $(OUTPUT)util/probe-finder.o
516
	LIB_OBJS += $(OUTPUT)util/dwarf-aux.o
517 518
endif # PERF_HAVE_DWARF_REGS
endif # NO_DWARF
519
endif # NO_LIBELF
520

521 522 523
ifdef NO_NEWT
	BASIC_CFLAGS += -DNO_NEWT_SUPPORT
else
524 525 526 527 528 529 530 531
	FLAGS_NEWT=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -lnewt
	ifneq ($(call try-cc,$(SOURCE_NEWT),$(FLAGS_NEWT)),y)
		msg := $(warning newt not found, disables TUI support. Please install newt-devel or libnewt-dev);
		BASIC_CFLAGS += -DNO_NEWT_SUPPORT
	else
		# Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
		BASIC_CFLAGS += -I/usr/include/slang
		EXTLIBS += -lnewt -lslang
532 533 534 535 536 537 538 539
		LIB_OBJS += $(OUTPUT)ui/setup.o
		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/helpline.o
		LIB_OBJS += $(OUTPUT)ui/progress.o
		LIB_OBJS += $(OUTPUT)ui/util.o
540
		LIB_OBJS += $(OUTPUT)ui/tui/setup.o
541
		LIB_OBJS += $(OUTPUT)ui/tui/util.o
542 543 544 545 546 547 548 549
		LIB_H += ui/browser.h
		LIB_H += ui/browsers/map.h
		LIB_H += ui/helpline.h
		LIB_H += ui/keysyms.h
		LIB_H += ui/libslang.h
		LIB_H += ui/progress.h
		LIB_H += ui/util.h
		LIB_H += ui/ui.h
550
	endif
J
Jamie Iles 已提交
551
endif
552

553
ifdef NO_GTK2
554
	BASIC_CFLAGS += -DNO_GTK2_SUPPORT
555 556 557 558 559 560
else
	FLAGS_GTK2=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) $(shell pkg-config --libs --cflags gtk+-2.0)
	ifneq ($(call try-cc,$(SOURCE_GTK2),$(FLAGS_GTK2)),y)
		msg := $(warning GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev);
		BASIC_CFLAGS += -DNO_GTK2_SUPPORT
	else
561 562 563
		ifeq ($(call try-cc,$(SOURCE_GTK2_INFOBAR),$(FLAGS_GTK2)),y)
			BASIC_CFLAGS += -DHAVE_GTK_INFO_BAR
		endif
564 565
		BASIC_CFLAGS += $(shell pkg-config --cflags gtk+-2.0)
		EXTLIBS += $(shell pkg-config --libs gtk+-2.0)
566
		LIB_OBJS += $(OUTPUT)ui/gtk/browser.o
567
		LIB_OBJS += $(OUTPUT)ui/gtk/setup.o
568
		LIB_OBJS += $(OUTPUT)ui/gtk/util.o
569 570 571
		# Make sure that it'd be included only once.
		ifneq ($(findstring -DNO_NEWT_SUPPORT,$(BASIC_CFLAGS)),)
			LIB_OBJS += $(OUTPUT)ui/setup.o
572
			LIB_OBJS += $(OUTPUT)ui/util.o
573
		endif
574 575 576
	endif
endif

577
ifdef NO_LIBPERL
578 579
	BASIC_CFLAGS += -DNO_LIBPERL
else
580 581 582
       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))
583
	PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
T
Tom Zanussi 已提交
584
	FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
585

586 587 588
	ifneq ($(call try-cc,$(SOURCE_PERL_EMBED),$(FLAGS_PERL_EMBED)),y)
		BASIC_CFLAGS += -DNO_LIBPERL
	else
589 590
               ALL_LDFLAGS += $(PERL_EMBED_LDFLAGS)
               EXTLIBS += $(PERL_EMBED_LIBADD)
591 592 593
		LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-perl.o
		LIB_OBJS += $(OUTPUT)scripts/perl/Perf-Trace-Util/Context.o
	endif
594 595
endif

596 597 598 599 600 601 602 603 604 605 606 607 608
disable-python = $(eval $(disable-python_code))
define disable-python_code
  BASIC_CFLAGS += -DNO_LIBPYTHON
  $(if $(1),$(warning No $(1) was found))
  $(warning Python support won't be built)
endef

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

ifndef PYTHON
  $(call disable-python,python interpreter)
  python-clean :=
609
else
610 611 612

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

613 614 615 616 617 618 619
  # 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
620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667

  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)

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

        ifneq ($(call try-cc,$(SOURCE_PYTHON_VERSION),$(FLAGS_PYTHON_EMBED)),y)
          $(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
668 669
endif

P
Peter Zijlstra 已提交
670 671 672
ifdef NO_DEMANGLE
	BASIC_CFLAGS += -DNO_DEMANGLE
else
673 674 675 676 677 678 679 680
        ifdef HAVE_CPLUS_DEMANGLE
		EXTLIBS += -liberty
		BASIC_CFLAGS += -DHAVE_CPLUS_DEMANGLE
        else
		FLAGS_BFD=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -lbfd
		has_bfd := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD))
		ifeq ($(has_bfd),y)
			EXTLIBS += -lbfd
681
		else
682 683 684 685
			FLAGS_BFD_IBERTY=$(FLAGS_BFD) -liberty
			has_bfd_iberty := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD_IBERTY))
			ifeq ($(has_bfd_iberty),y)
				EXTLIBS += -lbfd -liberty
686
			else
687 688 689 690
				FLAGS_BFD_IBERTY_Z=$(FLAGS_BFD_IBERTY) -lz
				has_bfd_iberty_z := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD_IBERTY_Z))
				ifeq ($(has_bfd_iberty_z),y)
					EXTLIBS += -lbfd -liberty -lz
691
				else
692 693 694 695 696 697 698 699 700
					FLAGS_CPLUS_DEMANGLE=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -liberty
					has_cplus_demangle := $(call try-cc,$(SOURCE_CPLUS_DEMANGLE),$(FLAGS_CPLUS_DEMANGLE))
					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
701 702 703
				endif
			endif
		endif
P
Peter Zijlstra 已提交
704 705 706
	endif
endif

707 708 709 710 711 712 713 714 715

ifdef NO_STRLCPY
	BASIC_CFLAGS += -DNO_STRLCPY
else
	ifneq ($(call try-cc,$(SOURCE_STRLCPY),),y)
		BASIC_CFLAGS += -DNO_STRLCPY
	endif
endif

716 717 718 719 720 721
ifdef ASCIIDOC8
	export ASCIIDOC8
endif

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

722
ETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
723 724 725 726 727 728

DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir))
bindir_relative_SQ = $(subst ','\'',$(bindir_relative))
mandir_SQ = $(subst ','\'',$(mandir))
infodir_SQ = $(subst ','\'',$(infodir))
729
perfexecdir_SQ = $(subst ','\'',$(perfexecdir))
730 731 732
template_dir_SQ = $(subst ','\'',$(template_dir))
htmldir_SQ = $(subst ','\'',$(htmldir))
prefix_SQ = $(subst ','\'',$(prefix))
733
sysconfdir_SQ = $(subst ','\'',$(sysconfdir))
734 735 736

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

737
LIBS = -Wl,--whole-archive $(PERFLIBS) -Wl,--no-whole-archive -Wl,--start-group $(EXTLIBS) -Wl,--end-group
738 739

ALL_CFLAGS += $(BASIC_CFLAGS)
740
ALL_CFLAGS += $(ARCH_CFLAGS)
741 742
ALL_LDFLAGS += $(BASIC_LDFLAGS)

743
export INSTALL SHELL_PATH
744 745 746 747 748 749


### Build rules

SHELL = $(SHELL_PATH)

750
all: shell_compatibility_test $(ALL_PROGRAMS) $(LANG_BINDINGS) $(OTHER_PROGRAMS)
751 752 753 754 755 756

please_set_SHELL_PATH_to_a_more_modern_shell:
	@$$(:)

shell_compatibility_test: please_set_SHELL_PATH_to_a_more_modern_shell

757 758
strip: $(PROGRAMS) $(OUTPUT)perf
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) $(OUTPUT)perf
759

760
$(OUTPUT)perf.o: perf.c $(OUTPUT)common-cmds.h $(OUTPUT)PERF-CFLAGS
761 762
	$(QUIET_CC)$(CC) -DPERF_VERSION='"$(PERF_VERSION)"' \
		'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
763
		$(ALL_CFLAGS) -c $(filter %.c,$^) -o $@
764

765
$(OUTPUT)perf: $(OUTPUT)perf.o $(BUILTIN_OBJS) $(PERFLIBS)
766 767
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(OUTPUT)perf.o \
               $(BUILTIN_OBJS) $(LIBS) -o $@
768

769 770
$(OUTPUT)builtin-help.o: builtin-help.c $(OUTPUT)common-cmds.h $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) \
771 772
		'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
		'-DPERF_MAN_PATH="$(mandir_SQ)"' \
A
Arjan van de Ven 已提交
773 774
		'-DPERF_INFO_PATH="$(infodir_SQ)"' $<

775 776
$(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 已提交
777 778
		'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
		'-DPERF_MAN_PATH="$(mandir_SQ)"' \
779
		'-DPERF_INFO_PATH="$(infodir_SQ)"' $<
780

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

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

786 787
$(SCRIPTS) : % : %.sh
	$(QUIET_GEN)$(INSTALL) '$@.sh' '$(OUTPUT)$@'
788

789
# These can record PERF_VERSION
790
$(OUTPUT)perf.o perf.spec \
791
	$(SCRIPTS) \
792
	: $(OUTPUT)PERF-VERSION-FILE
793

794 795 796
.SUFFIXES:
.SUFFIXES: .o .c .S .s

797 798 799 800
# 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
801
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -Iutil/ -w $<
802 803

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

806 807
$(OUTPUT)%.o: %.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $<
J
Jan Beulich 已提交
808 809
$(OUTPUT)%.i: %.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -E $(ALL_CFLAGS) $<
810
$(OUTPUT)%.s: %.c $(OUTPUT)PERF-CFLAGS
J
Jan Beulich 已提交
811
	$(QUIET_CC)$(CC) -o $@ -S $(ALL_CFLAGS) $<
812 813
$(OUTPUT)%.o: %.S
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $<
J
Jan Beulich 已提交
814 815
$(OUTPUT)%.s: %.S
	$(QUIET_CC)$(CC) -o $@ -E $(ALL_CFLAGS) $<
816

817 818
$(OUTPUT)util/exec_cmd.o: util/exec_cmd.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) \
819
		'-DPERF_EXEC_PATH="$(perfexecdir_SQ)"' \
820 821 822 823
		'-DBINDIR="$(bindir_relative_SQ)"' \
		'-DPREFIX="$(prefix_SQ)"' \
		$<

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

827
$(OUTPUT)ui/browser.o: ui/browser.c $(OUTPUT)PERF-CFLAGS
828 829
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<

830
$(OUTPUT)ui/browsers/annotate.o: ui/browsers/annotate.c $(OUTPUT)PERF-CFLAGS
831 832
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<

833
$(OUTPUT)ui/browsers/hists.o: ui/browsers/hists.c $(OUTPUT)PERF-CFLAGS
834 835
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<

836
$(OUTPUT)ui/browsers/map.o: ui/browsers/map.c $(OUTPUT)PERF-CFLAGS
837 838
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<

839 840
$(OUTPUT)util/rbtree.o: ../../lib/rbtree.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DETC_PERFCONFIG='"$(ETC_PERFCONFIG_SQ)"' $<
841

842 843 844
$(OUTPUT)util/parse-events.o: util/parse-events.c $(OUTPUT)PERF-CFLAGS
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -Wno-redundant-decls $<

845 846
$(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 $<
847

848 849
$(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 $<
850

851 852
$(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 $<
853

854 855
$(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 $<
856

857
$(OUTPUT)perf-%: %.o $(PERFLIBS)
858 859 860
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)

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

863 864 865
# 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 已提交
866
$(DIRECTORY_DEPS): | $(sort $(dir $(DIRECTORY_DEPS)))
867 868 869 870
# In the second step, we make a rule to actually create these directories
$(sort $(dir $(DIRECTORY_DEPS))):
	$(QUIET_MKDIR)$(MKDIR) -p $@ 2>/dev/null

871 872 873
$(LIB_FILE): $(LIB_OBJS)
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)

874 875
# libtraceevent.a
$(LIBTRACEEVENT):
876
	$(QUIET_SUBDIR0)$(TRACE_EVENT_DIR) $(QUIET_SUBDIR1) O=$(OUTPUT) libtraceevent.a
S
Steven Rostedt 已提交
877

878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906
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'

907 908 909 910 911 912 913 914 915 916 917 918 919 920 921
doc:
	$(MAKE) -C Documentation all

man:
	$(MAKE) -C Documentation man

html:
	$(MAKE) -C Documentation html

info:
	$(MAKE) -C Documentation info

pdf:
	$(MAKE) -C Documentation pdf

922 923 924 925 926 927 928 929 930 931 932 933 934 935
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)):\
936
             $(bindir_SQ):$(perfexecdir_SQ):$(template_dir_SQ):$(prefix_SQ)
937

938
$(OUTPUT)PERF-CFLAGS: .FORCE-PERF-CFLAGS
939
	@FLAGS='$(TRACK_CFLAGS)'; \
940
	    if test x"$$FLAGS" != x"`cat $(OUTPUT)PERF-CFLAGS 2>/dev/null`" ; then \
941
		echo 1>&2 "    * new build flags or prefix"; \
942
		echo "$$FLAGS" >$(OUTPUT)PERF-CFLAGS; \
943 944 945 946 947 948 949 950
            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.

951
check: $(OUTPUT)common-cmds.h
952 953
	if sparse; \
	then \
954
		for i in *.c */*.c; \
955 956 957 958 959 960 961 962 963
		do \
			sparse $(ALL_CFLAGS) $(SPARSE_FLAGS) $$i || exit; \
		done; \
	else \
		exit 1; \
	fi

### Installation rules

964 965
ifneq ($(filter /%,$(firstword $(perfexecdir))),)
perfexec_instdir = $(perfexecdir)
966
else
967
perfexec_instdir = $(prefix)/$(perfexecdir)
968
endif
969
perfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir))
970 971 972

install: all
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
973
	$(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)'
974 975
	$(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'
976
	$(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
977 978 979
	$(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'
980
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'
981
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'
982
	$(INSTALL) scripts/python/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'
983 984
	$(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'
985 986
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d'
	$(INSTALL) bash_completion '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf'
987

988 989 990
install-python_ext:
	$(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)'

991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014
install-doc:
	$(MAKE) -C Documentation install

install-man:
	$(MAKE) -C Documentation install-man

install-html:
	$(MAKE) -C Documentation install-html

install-info:
	$(MAKE) -C Documentation install-info

install-pdf:
	$(MAKE) -C Documentation install-pdf

quick-install-doc:
	$(MAKE) -C Documentation quick-install

quick-install-man:
	$(MAKE) -C Documentation quick-install-man

quick-install-html:
	$(MAKE) -C Documentation quick-install-html

1015 1016
### Cleaning rules

1017
clean:
1018
	$(RM) $(LIB_OBJS) $(BUILTIN_OBJS) $(LIB_FILE) $(OUTPUT)perf-archive $(OUTPUT)perf.o $(LANG_BINDINGS)
1019
	$(RM) $(ALL_PROGRAMS) perf
1020
	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope*
1021
	$(MAKE) -C Documentation/ clean
1022
	$(RM) $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)PERF-CFLAGS
1023 1024
	$(RM) $(OUTPUT)util/*-bison*
	$(RM) $(OUTPUT)util/*-flex*
1025
	$(python-clean)
1026

1027
.PHONY: all install clean strip $(LIBTRACEEVENT)
1028
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
1029
.PHONY: .FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS