Makefile 26.5 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 125
LK_PATH=$(LK_DIR)

126
ifneq ($(OUTPUT),)
127
  TE_PATH=$(OUTPUT)
128
ifneq ($(subdir),)
129
  LK_PATH=$(OUTPUT)$(LK_DIR)
130
else
131
  LK_PATH=$(OUTPUT)
132
endif
133
else
134
  TE_PATH=$(TRACE_EVENT_DIR)
135 136 137
endif

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

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

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

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

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

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

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

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

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

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

export PERL_PATH

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

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

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

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

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

201
LIB_FILE=$(OUTPUT)libperf.a
202

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

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

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

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

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

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

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

427
PERFLIBS = $(LIB_FILE) $(LIBLK) $(LIBTRACEEVENT)
428 429 430 431 432

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

433 434 435
-include arch/$(ARCH)/Makefile

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

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

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

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

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

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

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

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

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

514
ifdef ASCIIDOC8
515
  export ASCIIDOC8
516 517
endif

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

520
export INSTALL SHELL_PATH
521 522 523 524 525

### Build rules

SHELL = $(SHELL_PATH)

526
all: shell_compatibility_test $(ALL_PROGRAMS) $(LANG_BINDINGS) $(OTHER_PROGRAMS)
527 528 529 530 531 532

please_set_SHELL_PATH_to_a_more_modern_shell:
	@$$(:)

shell_compatibility_test: please_set_SHELL_PATH_to_a_more_modern_shell

533 534
strip: $(PROGRAMS) $(OUTPUT)perf
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) $(OUTPUT)perf
535

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

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

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

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

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

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

562 563
$(SCRIPTS) : % : %.sh
	$(QUIET_GEN)$(INSTALL) '$@.sh' '$(OUTPUT)$@'
564

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

570 571 572
.SUFFIXES:
.SUFFIXES: .o .c .S .s

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

660 661 662
$(LIB_FILE): $(LIB_OBJS)
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)

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

667 668 669
$(LIBTRACEEVENT)-clean:
	$(QUIET_SUBDIR0)$(TRACE_EVENT_DIR) $(QUIET_SUBDIR1) O=$(OUTPUT) clean

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

682 683 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
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'

711

712
DOC_TARGETS := doc man html info pdf
713

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

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

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

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

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

### Installation rules

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

784 785
install: install-bin try-install-man

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

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

793 794
### Cleaning rules

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

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