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
#
# Define NO_LIBAUDIT if you do not want libaudit support
#
# Define NO_LIBBIONIC if you do not want bionic support
58

59 60 61 62 63 64 65 66 67 68 69 70 71 72
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

73 74
$(OUTPUT)PERF-VERSION-FILE: .FORCE-PERF-VERSION-FILE
	@$(SHELL_PATH) util/PERF-VERSION-GEN $(OUTPUT)
75

76 77 78
CC = $(CROSS_COMPILE)gcc
AR = $(CROSS_COMPILE)ar

79 80 81 82 83 84
RM      = rm -f
MKDIR   = mkdir
FIND    = find
INSTALL = install
FLEX    = flex
BISON   = bison
85
STRIP   = strip
86

87 88
LK_DIR          = $(srctree)/tools/lib/lk/
TRACE_EVENT_DIR = $(srctree)/tools/lib/traceevent/
89

90 91 92 93 94 95 96 97 98 99 100 101 102 103
# 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
104 105
endif

106 107 108 109 110 111 112 113 114 115
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 =
116
PYRF_OBJS =
117 118
SCRIPT_SH =

119
SCRIPT_SH += perf-archive.sh
120

121 122 123
grep-libs = $(filter -l%,$(1))
strip-libs = $(filter-out -l%,$(1))

124
ifneq ($(OUTPUT),)
125
  TE_PATH=$(OUTPUT)
126
ifneq ($(subdir),)
127
  LK_PATH=$(OUTPUT)/../lib/lk/
128
else
129
  LK_PATH=$(OUTPUT)
130
endif
131
else
132
  TE_PATH=$(TRACE_EVENT_DIR)
133
  LK_PATH=$(LK_DIR)
134 135 136
endif

LIBTRACEEVENT = $(TE_PATH)libtraceevent.a
137 138
export LIBTRACEEVENT

139 140 141
LIBLK = $(LK_PATH)liblk.a
export LIBLK

142 143 144 145 146 147 148 149
# 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

150
PYTHON_EXT_SRCS := $(shell grep -v ^\# util/python-ext-sources)
151
PYTHON_EXT_DEPS := util/python-ext-sources util/setup.py $(LIBTRACEEVENT) $(LIBLK)
152

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

162
SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH))
163

164
#
165
# Single 'perf' binary right now:
166
#
167
PROGRAMS += $(OUTPUT)perf
168

169
# what 'all' will build and 'install' will install, in perfexecdir
170
ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
171

172
# what 'all' will build but not install in perfexecdir
173
OTHER_PROGRAMS = $(OUTPUT)perf
174 175 176

# Set paths to tools early so that they can be used for version tests.
ifndef SHELL_PATH
177
  SHELL_PATH = /bin/sh
178 179
endif
ifndef PERL_PATH
180
  PERL_PATH = /usr/bin/perl
181 182 183 184
endif

export PERL_PATH

E
Eric Sandeen 已提交
185
$(OUTPUT)util/parse-events-flex.c: util/parse-events.l $(OUTPUT)util/parse-events-bison.c
186
	$(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
187

188
$(OUTPUT)util/parse-events-bison.c: util/parse-events.y
189
	$(QUIET_BISON)$(BISON) -v util/parse-events.y -d $(PARSER_DEBUG_BISON) -o $(OUTPUT)util/parse-events-bison.c -p parse_events_
190

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

194
$(OUTPUT)util/pmu-bison.c: util/pmu.y
195
	$(QUIET_BISON)$(BISON) -v util/pmu.y -d -o $(OUTPUT)util/pmu-bison.c -p perf_pmu_
196

197 198
$(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
199

200
LIB_FILE=$(OUTPUT)libperf.a
201

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

296 297
LIB_OBJS += $(OUTPUT)util/abspath.o
LIB_OBJS += $(OUTPUT)util/alias.o
298
LIB_OBJS += $(OUTPUT)util/annotate.o
299 300 301
LIB_OBJS += $(OUTPUT)util/build-id.o
LIB_OBJS += $(OUTPUT)util/config.o
LIB_OBJS += $(OUTPUT)util/ctype.o
302
LIB_OBJS += $(OUTPUT)util/sysfs.o
303
LIB_OBJS += $(OUTPUT)util/pmu.o
304 305
LIB_OBJS += $(OUTPUT)util/environment.o
LIB_OBJS += $(OUTPUT)util/event.o
306
LIB_OBJS += $(OUTPUT)util/evlist.o
307
LIB_OBJS += $(OUTPUT)util/evsel.o
308 309 310 311 312 313 314 315 316 317 318 319 320 321
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
322
LIB_OBJS += $(OUTPUT)util/strfilter.o
323
LIB_OBJS += $(OUTPUT)util/top.o
324 325 326
LIB_OBJS += $(OUTPUT)util/usage.o
LIB_OBJS += $(OUTPUT)util/wrapper.o
LIB_OBJS += $(OUTPUT)util/sigchain.o
327
LIB_OBJS += $(OUTPUT)util/dso.o
328
LIB_OBJS += $(OUTPUT)util/symbol.o
329
LIB_OBJS += $(OUTPUT)util/symbol-elf.o
330 331 332 333 334 335
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
336
LIB_OBJS += $(OUTPUT)util/machine.o
337
LIB_OBJS += $(OUTPUT)util/map.o
338
LIB_OBJS += $(OUTPUT)util/pstack.o
339 340
LIB_OBJS += $(OUTPUT)util/session.o
LIB_OBJS += $(OUTPUT)util/thread.o
341
LIB_OBJS += $(OUTPUT)util/thread_map.o
342
LIB_OBJS += $(OUTPUT)util/trace-event-parse.o
343 344
LIB_OBJS += $(OUTPUT)util/parse-events-flex.o
LIB_OBJS += $(OUTPUT)util/parse-events-bison.o
345 346
LIB_OBJS += $(OUTPUT)util/pmu-flex.o
LIB_OBJS += $(OUTPUT)util/pmu-bison.o
347 348 349 350 351 352 353 354
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
355
LIB_OBJS += $(OUTPUT)util/xyarray.o
356
LIB_OBJS += $(OUTPUT)util/cpumap.o
S
Stephane Eranian 已提交
357
LIB_OBJS += $(OUTPUT)util/cgroup.o
358
LIB_OBJS += $(OUTPUT)util/target.o
D
David Ahern 已提交
359
LIB_OBJS += $(OUTPUT)util/rblist.o
D
David Ahern 已提交
360
LIB_OBJS += $(OUTPUT)util/intlist.o
361
LIB_OBJS += $(OUTPUT)util/vdso.o
362
LIB_OBJS += $(OUTPUT)util/stat.o
363

364
LIB_OBJS += $(OUTPUT)ui/setup.o
365
LIB_OBJS += $(OUTPUT)ui/helpline.o
366
LIB_OBJS += $(OUTPUT)ui/progress.o
367
LIB_OBJS += $(OUTPUT)ui/util.o
368
LIB_OBJS += $(OUTPUT)ui/hist.o
369
LIB_OBJS += $(OUTPUT)ui/stdio/hist.o
370

371 372
LIB_OBJS += $(OUTPUT)arch/common.o

373 374
LIB_OBJS += $(OUTPUT)tests/parse-events.o
LIB_OBJS += $(OUTPUT)tests/dso-data.o
375
LIB_OBJS += $(OUTPUT)tests/attr.o
376
LIB_OBJS += $(OUTPUT)tests/vmlinux-kallsyms.o
377
LIB_OBJS += $(OUTPUT)tests/open-syscall.o
378
LIB_OBJS += $(OUTPUT)tests/open-syscall-all-cpus.o
379
LIB_OBJS += $(OUTPUT)tests/open-syscall-tp-fields.o
380
LIB_OBJS += $(OUTPUT)tests/mmap-basic.o
381
LIB_OBJS += $(OUTPUT)tests/perf-record.o
382
LIB_OBJS += $(OUTPUT)tests/rdpmc.o
383
LIB_OBJS += $(OUTPUT)tests/evsel-roundtrip-name.o
384
LIB_OBJS += $(OUTPUT)tests/evsel-tp-sched.o
385
LIB_OBJS += $(OUTPUT)tests/pmu.o
386
LIB_OBJS += $(OUTPUT)tests/hists_link.o
387
LIB_OBJS += $(OUTPUT)tests/python-use.o
388
LIB_OBJS += $(OUTPUT)tests/bp_signal.o
389
LIB_OBJS += $(OUTPUT)tests/bp_signal_overflow.o
390
LIB_OBJS += $(OUTPUT)tests/task-exit.o
391
LIB_OBJS += $(OUTPUT)tests/sw-clock.o
392 393 394
ifeq ($(ARCH),x86)
LIB_OBJS += $(OUTPUT)tests/perf-time-to-tsc.o
endif
395

396 397
BUILTIN_OBJS += $(OUTPUT)builtin-annotate.o
BUILTIN_OBJS += $(OUTPUT)builtin-bench.o
398
# Benchmark modules
399 400
BUILTIN_OBJS += $(OUTPUT)bench/sched-messaging.o
BUILTIN_OBJS += $(OUTPUT)bench/sched-pipe.o
401 402
ifeq ($(RAW_ARCH),x86_64)
BUILTIN_OBJS += $(OUTPUT)bench/mem-memcpy-x86-64-asm.o
403
BUILTIN_OBJS += $(OUTPUT)bench/mem-memset-x86-64-asm.o
404
endif
405
BUILTIN_OBJS += $(OUTPUT)bench/mem-memcpy.o
406
BUILTIN_OBJS += $(OUTPUT)bench/mem-memset.o
407 408

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

429
PERFLIBS = $(LIB_FILE) $(LIBLK) $(LIBTRACEEVENT)
430 431 432 433 434

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

435 436 437
-include arch/$(ARCH)/Makefile

ifneq ($(OUTPUT),)
438
  CFLAGS += -I$(OUTPUT)
439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455
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
456
ifndef NO_DWARF
457 458
  LIB_OBJS += $(OUTPUT)util/probe-finder.o
  LIB_OBJS += $(OUTPUT)util/dwarf-aux.o
459
endif # NO_DWARF
460
endif # NO_LIBELF
461

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

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

470
ifndef NO_SLANG
471 472 473 474 475 476 477 478 479 480 481 482 483
  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 已提交
484
endif
485

N
Namhyung Kim 已提交
486
ifndef NO_GTK2
487 488 489 490 491 492 493
  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
494 495
endif

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

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

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

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

516
ifdef ASCIIDOC8
517
  export ASCIIDOC8
518 519
endif

520
LIBS = -Wl,--whole-archive $(PERFLIBS) -Wl,--no-whole-archive -Wl,--start-group $(EXTLIBS) -Wl,--end-group
521

522
export INSTALL SHELL_PATH
523 524 525 526 527

### Build rules

SHELL = $(SHELL_PATH)

528
all: shell_compatibility_test $(ALL_PROGRAMS) $(LANG_BINDINGS) $(OTHER_PROGRAMS)
529 530 531 532 533 534

please_set_SHELL_PATH_to_a_more_modern_shell:
	@$$(:)

shell_compatibility_test: please_set_SHELL_PATH_to_a_more_modern_shell

535 536
strip: $(PROGRAMS) $(OUTPUT)perf
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) $(OUTPUT)perf
537

538
$(OUTPUT)perf.o: perf.c $(OUTPUT)common-cmds.h $(OUTPUT)PERF-CFLAGS
539
	$(QUIET_CC)$(CC) -include $(OUTPUT)PERF-VERSION-FILE \
540
		'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
541
		$(CFLAGS) -c $(filter %.c,$^) -o $@
542

543
$(OUTPUT)perf: $(OUTPUT)perf.o $(BUILTIN_OBJS) $(PERFLIBS)
544
	$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $(OUTPUT)perf.o \
545
               $(BUILTIN_OBJS) $(LIBS) -o $@
546

547
$(OUTPUT)builtin-help.o: builtin-help.c $(OUTPUT)common-cmds.h $(OUTPUT)PERF-CFLAGS
548
	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) \
549 550
		'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
		'-DPERF_MAN_PATH="$(mandir_SQ)"' \
A
Arjan van de Ven 已提交
551 552
		'-DPERF_INFO_PATH="$(infodir_SQ)"' $<

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

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

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

564 565
$(SCRIPTS) : % : %.sh
	$(QUIET_GEN)$(INSTALL) '$@.sh' '$(OUTPUT)$@'
566

567
# These can record PERF_VERSION
568
$(OUTPUT)perf.o perf.spec \
569
	$(SCRIPTS) \
570
	: $(OUTPUT)PERF-VERSION-FILE
571

572 573 574
.SUFFIXES:
.SUFFIXES: .o .c .S .s

575 576 577 578
# 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
579
	$(QUIET_CC)$(CC) -o $@ -c -Iutil/ $(CFLAGS) -w $<
580 581

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

584
$(OUTPUT)%.o: %.c $(OUTPUT)PERF-CFLAGS
585
	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) $<
J
Jan Beulich 已提交
586
$(OUTPUT)%.i: %.c $(OUTPUT)PERF-CFLAGS
587
	$(QUIET_CC)$(CC) -o $@ -E $(CFLAGS) $<
588
$(OUTPUT)%.s: %.c $(OUTPUT)PERF-CFLAGS
589
	$(QUIET_CC)$(CC) -o $@ -S $(CFLAGS) $<
590
$(OUTPUT)%.o: %.S
591
	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) $<
J
Jan Beulich 已提交
592
$(OUTPUT)%.s: %.S
593
	$(QUIET_CC)$(CC) -o $@ -E $(CFLAGS) $<
594

595
$(OUTPUT)util/exec_cmd.o: util/exec_cmd.c $(OUTPUT)PERF-CFLAGS
596
	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) \
597
		'-DPERF_EXEC_PATH="$(perfexecdir_SQ)"' \
598 599 600
		'-DPREFIX="$(prefix_SQ)"' \
		$<

601
$(OUTPUT)tests/attr.o: tests/attr.c $(OUTPUT)PERF-CFLAGS
602
	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) \
603
		'-DBINDIR="$(bindir_SQ)"' -DPYTHON='"$(PYTHON_WORD)"' \
604 605
		$<

606
$(OUTPUT)tests/python-use.o: tests/python-use.c $(OUTPUT)PERF-CFLAGS
607
	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) \
608
		-DPYTHONPATH='"$(OUTPUT)python"' \
609 610
		-DPYTHON='"$(PYTHON_WORD)"' \
		$<
611

612
$(OUTPUT)util/config.o: util/config.c $(OUTPUT)PERF-CFLAGS
613
	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) -DETC_PERFCONFIG='"$(ETC_PERFCONFIG_SQ)"' $<
614

615
$(OUTPUT)ui/browser.o: ui/browser.c $(OUTPUT)PERF-CFLAGS
616
	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) -DENABLE_SLFUTURE_CONST $<
617

618
$(OUTPUT)ui/browsers/annotate.o: ui/browsers/annotate.c $(OUTPUT)PERF-CFLAGS
619
	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) -DENABLE_SLFUTURE_CONST $<
620

621
$(OUTPUT)ui/browsers/hists.o: ui/browsers/hists.c $(OUTPUT)PERF-CFLAGS
622
	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) -DENABLE_SLFUTURE_CONST $<
623

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

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

630
$(OUTPUT)util/rbtree.o: ../../lib/rbtree.c $(OUTPUT)PERF-CFLAGS
631
	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) -Wno-unused-parameter -DETC_PERFCONFIG='"$(ETC_PERFCONFIG_SQ)"' $<
632

633
$(OUTPUT)util/parse-events.o: util/parse-events.c $(OUTPUT)PERF-CFLAGS
634
	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) -Wno-redundant-decls $<
635

636
$(OUTPUT)util/scripting-engines/trace-event-perl.o: util/scripting-engines/trace-event-perl.c $(OUTPUT)PERF-CFLAGS
637
	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) $(PERL_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-shadow -Wno-undef -Wno-switch-default $<
638

639
$(OUTPUT)scripts/perl/Perf-Trace-Util/Context.o: scripts/perl/Perf-Trace-Util/Context.c $(OUTPUT)PERF-CFLAGS
640
	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) $(PERL_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-nested-externs -Wno-undef -Wno-switch-default $<
641

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

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

648
$(OUTPUT)perf-%: %.o $(PERFLIBS)
649
	$(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $(filter %.o,$^) $(LIBS)
650 651

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

654 655 656
# 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 已提交
657
$(DIRECTORY_DEPS): | $(sort $(dir $(DIRECTORY_DEPS)))
658 659 660 661
# In the second step, we make a rule to actually create these directories
$(sort $(dir $(DIRECTORY_DEPS))):
	$(QUIET_MKDIR)$(MKDIR) -p $@ 2>/dev/null

662 663 664
$(LIB_FILE): $(LIB_OBJS)
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)

665 666
# libtraceevent.a
$(LIBTRACEEVENT):
667
	$(QUIET_SUBDIR0)$(TRACE_EVENT_DIR) $(QUIET_SUBDIR1) O=$(OUTPUT) libtraceevent.a
S
Steven Rostedt 已提交
668

669 670 671
$(LIBTRACEEVENT)-clean:
	$(QUIET_SUBDIR0)$(TRACE_EVENT_DIR) $(QUIET_SUBDIR1) O=$(OUTPUT) clean

672 673 674 675 676 677 678 679 680 681 682 683
# 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

684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712
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'

713

714
DOC_TARGETS := doc man html info pdf
715

716 717
INSTALL_DOC_TARGETS := $(patsubst %,install-%,$(DOC_TARGETS)) try-install-man
INSTALL_DOC_TARGETS += quick-install-doc quick-install-man quick-install-html
718

719 720
# 'make doc' should call 'make -C Documentation all'
$(DOC_TARGETS):
721
	$(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) $(@:doc=all)
722

723 724 725 726 727 728 729 730 731 732 733 734 735
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
736
TRACK_CFLAGS = $(subst ','\'',$(CFLAGS)):\
737
             $(bindir_SQ):$(perfexecdir_SQ):$(template_dir_SQ):$(prefix_SQ)
738

739
$(OUTPUT)PERF-CFLAGS: .FORCE-PERF-CFLAGS
740
	@FLAGS='$(TRACK_CFLAGS)'; \
741
	    if test x"$$FLAGS" != x"`cat $(OUTPUT)PERF-CFLAGS 2>/dev/null`" ; then \
742
		echo 1>&2 "    * new build flags or prefix"; \
743
		echo "$$FLAGS" >$(OUTPUT)PERF-CFLAGS; \
744 745 746 747 748 749 750 751
            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.

752
check: $(OUTPUT)common-cmds.h
753 754
	if sparse; \
	then \
755
		for i in *.c */*.c; \
756
		do \
757
			sparse $(CFLAGS) $(SPARSE_FLAGS) $$i || exit; \
758 759 760 761 762 763 764
		done; \
	else \
		exit 1; \
	fi

### Installation rules

765
install-bin: all
766
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
767
	$(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)'
768 769
	$(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'
770
	$(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
771 772 773
	$(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'
774
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'
775
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'
776
	$(INSTALL) scripts/python/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'
777 778
	$(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'
779 780
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d'
	$(INSTALL) bash_completion '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf'
781 782 783 784
	$(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'
785

786 787
install: install-bin try-install-man

788 789 790
install-python_ext:
	$(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)'

791 792
# 'make install-doc' should call 'make -C Documentation install'
$(INSTALL_DOC_TARGETS):
793
	$(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) $(@:-doc=)
794

795 796
### Cleaning rules

797
clean: $(LIBTRACEEVENT)-clean $(LIBLK)-clean
798
	$(RM) $(LIB_OBJS) $(BUILTIN_OBJS) $(LIB_FILE) $(OUTPUT)perf-archive $(OUTPUT)perf.o $(LANG_BINDINGS)
799
	$(RM) $(ALL_PROGRAMS) perf
800
	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope*
801
	$(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) clean
802
	$(RM) $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)PERF-CFLAGS
803 804
	$(RM) $(OUTPUT)util/*-bison*
	$(RM) $(OUTPUT)util/*-flex*
805
	$(python-clean)
806

807
.PHONY: all install clean strip $(LIBTRACEEVENT) $(LIBLK)
808
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
809
.PHONY: .FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS