]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blame - tools/perf/Makefile.perf
perf build: Remove directory dependency rules
[mirror_ubuntu-hirsute-kernel.git] / tools / perf / Makefile.perf
CommitLineData
bd69cc28
IM
1include ../scripts/Makefile.include
2
3# The default target of this Makefile is...
4all:
5
6include config/utilities.mak
7
8# Define V to have a more verbose compile.
9#
0695e57b
JO
10# Define VF to have a more verbose feature check output.
11#
bd69cc28
IM
12# Define O to save output files in a separate directory.
13#
14# Define ARCH as name of target architecture if you want cross-builds.
15#
16# Define CROSS_COMPILE as prefix name of compiler if you want cross-builds.
17#
18# Define NO_LIBPERL to disable perl script extension.
19#
20# Define NO_LIBPYTHON to disable python script extension.
21#
22# Define PYTHON to point to the python binary if the default
23# `python' is not correct; for example: PYTHON=python2
24#
25# Define PYTHON_CONFIG to point to the python-config binary if
26# the default `$(PYTHON)-config' is not correct.
27#
28# Define ASCIIDOC8 if you want to format documentation with AsciiDoc 8
29#
30# Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72.
31#
32# Define LDFLAGS=-static to build a static binary.
33#
34# Define EXTRA_CFLAGS=-m64 or EXTRA_CFLAGS=-m32 as appropriate for cross-builds.
35#
36# Define NO_DWARF if you do not want debug-info analysis feature at all.
37#
38# Define WERROR=0 to disable treating any warnings as errors.
39#
40# Define NO_NEWT if you do not want TUI support. (deprecated)
41#
42# Define NO_SLANG if you do not want TUI support.
43#
44# Define NO_GTK2 if you do not want GTK+ GUI support.
45#
46# Define NO_DEMANGLE if you do not want C++ symbol demangling.
47#
48# Define NO_LIBELF if you do not want libelf dependency (e.g. cross-builds)
49#
50# Define NO_LIBUNWIND if you do not want libunwind dependency for dwarf
51# backtrace post unwind.
52#
53# Define NO_BACKTRACE if you do not want stack backtrace debug feature
54#
55# Define NO_LIBNUMA if you do not want numa perf benchmark
56#
57# Define NO_LIBAUDIT if you do not want libaudit support
58#
59# Define NO_LIBBIONIC if you do not want bionic support
5ea84154
JO
60#
61# Define NO_LIBDW_DWARF_UNWIND if you do not want libdw support
62# for dwarf backtrace post unwind.
e477f3f0
AH
63#
64# Define NO_PERF_READ_VDSO32 if you do not want to build perf-read-vdso32
65# for reading the 32-bit compatibility VDSO in 64-bit mode
66#
67# Define NO_PERF_READ_VDSOX32 if you do not want to build perf-read-vdsox32
68# for reading the x32 mode 32-bit compatibility VDSO in 64-bit mode
e92ce12e
NK
69#
70# Define NO_ZLIB if you do not want to support compressed kernel modules
71
5ea84154 72
bd69cc28
IM
73ifeq ($(srctree),)
74srctree := $(patsubst %/,%,$(dir $(shell pwd)))
75srctree := $(patsubst %/,%,$(dir $(srctree)))
76#$(info Determined 'srctree' to be $(srctree))
77endif
78
79ifneq ($(objtree),)
80#$(info Determined 'objtree' to be $(objtree))
81endif
82
83ifneq ($(OUTPUT),)
84#$(info Determined 'OUTPUT' to be $(OUTPUT))
9352aaba
JO
85# Adding $(OUTPUT) as a directory to look for source files,
86# because use generated output files as sources dependency
87# for flex/bison parsers.
88VPATH += $(OUTPUT)
89export VPATH
bd69cc28
IM
90endif
91
6dd280cd
JO
92# Do not use make's built-in rules
93# (this improves performance and avoids hard-to-debug behaviour);
94MAKEFLAGS += -r
95
bd69cc28
IM
96$(OUTPUT)PERF-VERSION-FILE: ../../.git/HEAD
97 @$(SHELL_PATH) util/PERF-VERSION-GEN $(OUTPUT)
98 @touch $(OUTPUT)PERF-VERSION-FILE
99
100CC = $(CROSS_COMPILE)gcc
72965b87 101LD = $(CROSS_COMPILE)ld
bd69cc28 102AR = $(CROSS_COMPILE)ar
a8a5cd8b 103PKG_CONFIG = $(CROSS_COMPILE)pkg-config
bd69cc28
IM
104
105RM = rm -f
b52bc234 106LN = ln -f
bd69cc28
IM
107MKDIR = mkdir
108FIND = find
109INSTALL = install
110FLEX = flex
111BISON = bison
112STRIP = strip
113
553873e1 114LIB_DIR = $(srctree)/tools/lib/api/
bd69cc28
IM
115TRACE_EVENT_DIR = $(srctree)/tools/lib/traceevent/
116
117# include config/Makefile by default and rule out
118# non-config cases
119config := 1
120
121NON_CONFIG_TARGETS := clean TAGS tags cscope help
122
123ifdef MAKECMDGOALS
124ifeq ($(filter-out $(NON_CONFIG_TARGETS),$(MAKECMDGOALS)),)
125 config := 0
126endif
127endif
128
129ifeq ($(config),1)
130include config/Makefile
131endif
132
3d7c0144 133export prefix bindir sharedir sysconfdir DESTDIR
bd69cc28
IM
134
135# sparse is architecture-neutral, which means that we need to tell it
136# explicitly what architecture to check for. Fix this up for yours..
137SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__
138
139# Guard against environment variables
140BUILTIN_OBJS =
141LIB_H =
142LIB_OBJS =
fc67297b 143GTK_OBJS =
bd69cc28
IM
144PYRF_OBJS =
145SCRIPT_SH =
146
147SCRIPT_SH += perf-archive.sh
c501e90b 148SCRIPT_SH += perf-with-kcore.sh
bd69cc28
IM
149
150grep-libs = $(filter -l%,$(1))
151strip-libs = $(filter-out -l%,$(1))
152
153ifneq ($(OUTPUT),)
154 TE_PATH=$(OUTPUT)
155ifneq ($(subdir),)
553873e1 156 LIB_PATH=$(OUTPUT)/../lib/api/
bd69cc28 157else
553873e1 158 LIB_PATH=$(OUTPUT)
bd69cc28
IM
159endif
160else
161 TE_PATH=$(TRACE_EVENT_DIR)
553873e1 162 LIB_PATH=$(LIB_DIR)
bd69cc28
IM
163endif
164
165LIBTRACEEVENT = $(TE_PATH)libtraceevent.a
166export LIBTRACEEVENT
167
553873e1
BP
168LIBAPIKFS = $(LIB_PATH)libapikfs.a
169export LIBAPIKFS
bd69cc28
IM
170
171# python extension build directories
172PYTHON_EXTBUILD := $(OUTPUT)python_ext_build/
173PYTHON_EXTBUILD_LIB := $(PYTHON_EXTBUILD)lib/
174PYTHON_EXTBUILD_TMP := $(PYTHON_EXTBUILD)tmp/
175export PYTHON_EXTBUILD_LIB PYTHON_EXTBUILD_TMP
176
8ec19c0e 177python-clean := $(call QUIET_CLEAN, python) $(RM) -r $(PYTHON_EXTBUILD) $(OUTPUT)python/perf.so
bd69cc28
IM
178
179PYTHON_EXT_SRCS := $(shell grep -v ^\# util/python-ext-sources)
553873e1 180PYTHON_EXT_DEPS := util/python-ext-sources util/setup.py $(LIBTRACEEVENT) $(LIBAPIKFS)
bd69cc28
IM
181
182$(OUTPUT)python/perf.so: $(PYTHON_EXT_SRCS) $(PYTHON_EXT_DEPS)
183 $(QUIET_GEN)CFLAGS='$(CFLAGS)' $(PYTHON_WORD) util/setup.py \
184 --quiet build_ext; \
185 mkdir -p $(OUTPUT)python && \
186 cp $(PYTHON_EXTBUILD_LIB)perf.so $(OUTPUT)python/
187#
188# No Perl scripts right now:
189#
190
191SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH))
192
bd69cc28
IM
193PROGRAMS += $(OUTPUT)perf
194
e477f3f0
AH
195ifndef NO_PERF_READ_VDSO32
196PROGRAMS += $(OUTPUT)perf-read-vdso32
197endif
198
199ifndef NO_PERF_READ_VDSOX32
200PROGRAMS += $(OUTPUT)perf-read-vdsox32
201endif
202
bd69cc28
IM
203# what 'all' will build and 'install' will install, in perfexecdir
204ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
205
206# what 'all' will build but not install in perfexecdir
207OTHER_PROGRAMS = $(OUTPUT)perf
208
209# Set paths to tools early so that they can be used for version tests.
210ifndef SHELL_PATH
211 SHELL_PATH = /bin/sh
212endif
213ifndef PERL_PATH
214 PERL_PATH = /usr/bin/perl
215endif
216
217export PERL_PATH
218
bd69cc28
IM
219LIB_FILE=$(OUTPUT)libperf.a
220
c506c96b 221LIB_H += ../lib/symbol/kallsyms.h
bd69cc28
IM
222LIB_H += ../../include/uapi/linux/perf_event.h
223LIB_H += ../../include/linux/rbtree.h
224LIB_H += ../../include/linux/list.h
225LIB_H += ../../include/uapi/linux/const.h
0e55fa11 226LIB_H += ../include/linux/hash.h
bd69cc28
IM
227LIB_H += ../../include/linux/stringify.h
228LIB_H += util/include/linux/bitmap.h
39672784 229LIB_H += ../include/linux/bitops.h
25cd480e 230LIB_H += ../include/asm-generic/bitops/arch_hweight.h
cae68d4f 231LIB_H += ../include/asm-generic/bitops/atomic.h
25cd480e 232LIB_H += ../include/asm-generic/bitops/const_hweight.h
23e1a358 233LIB_H += ../include/asm-generic/bitops/find.h
afcd4f62
ACM
234LIB_H += ../include/asm-generic/bitops/fls64.h
235LIB_H += ../include/asm-generic/bitops/fls.h
2dc0b972 236LIB_H += ../include/asm-generic/bitops/__ffs.h
afcd4f62 237LIB_H += ../include/asm-generic/bitops/__fls.h
25cd480e 238LIB_H += ../include/asm-generic/bitops/hweight.h
88bcea43 239LIB_H += ../include/asm-generic/bitops.h
8a625c1f 240LIB_H += ../include/linux/compiler.h
0389cd1f 241LIB_H += ../include/linux/log2.h
bd69cc28
IM
242LIB_H += util/include/linux/const.h
243LIB_H += util/include/linux/ctype.h
244LIB_H += util/include/linux/kernel.h
245LIB_H += util/include/linux/list.h
5ac3e4b6 246LIB_H += ../include/linux/export.h
bd69cc28 247LIB_H += util/include/linux/poison.h
bd69cc28
IM
248LIB_H += util/include/linux/rbtree.h
249LIB_H += util/include/linux/rbtree_augmented.h
250LIB_H += util/include/linux/string.h
d944c4ee 251LIB_H += ../include/linux/types.h
bd69cc28
IM
252LIB_H += util/include/linux/linkage.h
253LIB_H += util/include/asm/asm-offsets.h
02dfc8d7 254LIB_H += ../include/asm/bug.h
bd69cc28 255LIB_H += util/include/asm/byteorder.h
bd69cc28
IM
256LIB_H += util/include/asm/swab.h
257LIB_H += util/include/asm/system.h
258LIB_H += util/include/asm/uaccess.h
259LIB_H += util/include/dwarf-regs.h
260LIB_H += util/include/asm/dwarf2.h
261LIB_H += util/include/asm/cpufeature.h
262LIB_H += util/include/asm/unistd_32.h
263LIB_H += util/include/asm/unistd_64.h
264LIB_H += perf.h
265LIB_H += util/annotate.h
266LIB_H += util/cache.h
267LIB_H += util/callchain.h
268LIB_H += util/build-id.h
0db15b1e 269LIB_H += util/db-export.h
bd69cc28 270LIB_H += util/debug.h
bd69cc28
IM
271LIB_H += util/pmu.h
272LIB_H += util/event.h
273LIB_H += util/evsel.h
274LIB_H += util/evlist.h
275LIB_H += util/exec_cmd.h
e477f3f0 276LIB_H += util/find-vdso-map.c
bd69cc28
IM
277LIB_H += util/levenshtein.h
278LIB_H += util/machine.h
279LIB_H += util/map.h
280LIB_H += util/parse-options.h
281LIB_H += util/parse-events.h
282LIB_H += util/quote.h
283LIB_H += util/util.h
284LIB_H += util/xyarray.h
285LIB_H += util/header.h
286LIB_H += util/help.h
287LIB_H += util/session.h
5f86b80b 288LIB_H += util/ordered-events.h
bd69cc28
IM
289LIB_H += util/strbuf.h
290LIB_H += util/strlist.h
291LIB_H += util/strfilter.h
292LIB_H += util/svghelper.h
293LIB_H += util/tool.h
294LIB_H += util/run-command.h
295LIB_H += util/sigchain.h
296LIB_H += util/dso.h
297LIB_H += util/symbol.h
298LIB_H += util/color.h
299LIB_H += util/values.h
300LIB_H += util/sort.h
301LIB_H += util/hist.h
1902efe7 302LIB_H += util/comm.h
bd69cc28
IM
303LIB_H += util/thread.h
304LIB_H += util/thread_map.h
305LIB_H += util/trace-event.h
306LIB_H += util/probe-finder.h
307LIB_H += util/dwarf-aux.h
308LIB_H += util/probe-event.h
309LIB_H += util/pstack.h
310LIB_H += util/cpumap.h
311LIB_H += util/top.h
312LIB_H += $(ARCH_INCLUDE)
313LIB_H += util/cgroup.h
314LIB_H += $(LIB_INCLUDE)traceevent/event-parse.h
315LIB_H += util/target.h
316LIB_H += util/rblist.h
317LIB_H += util/intlist.h
318LIB_H += util/perf_regs.h
319LIB_H += util/unwind.h
320LIB_H += util/vdso.h
0b437860 321LIB_H += util/tsc.h
bd69cc28
IM
322LIB_H += ui/helpline.h
323LIB_H += ui/progress.h
324LIB_H += ui/util.h
325LIB_H += ui/ui.h
6e6dc401 326LIB_H += util/data.h
9daa8123 327LIB_H += util/kvm-stat.h
00447ccd 328LIB_H += util/thread-stack.h
bd69cc28 329
553873e1 330PERFLIBS = $(LIB_FILE) $(LIBAPIKFS) $(LIBTRACEEVENT)
bd69cc28
IM
331
332# We choose to avoid "if .. else if .. else .. endif endif"
333# because maintaining the nesting to match is a pain. If
334# we had "elif" things would have been much nicer...
335
336-include arch/$(ARCH)/Makefile
337
338ifneq ($(OUTPUT),)
339 CFLAGS += -I$(OUTPUT)
340endif
341
bd69cc28 342ifndef NO_GTK2
fc67297b 343 ALL_PROGRAMS += $(OUTPUT)libperf-gtk.so
88aeea06 344 GTK_IN := $(OUTPUT)gtk-in.o
fc67297b
NK
345
346install-gtk: $(OUTPUT)libperf-gtk.so
8a5411e9
IM
347 $(call QUIET_INSTALL, 'GTK UI') \
348 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(libdir_SQ)'; \
349 $(INSTALL) $(OUTPUT)libperf-gtk.so '$(DESTDIR_SQ)$(libdir_SQ)'
bd69cc28
IM
350endif
351
bd69cc28
IM
352ifdef ASCIIDOC8
353 export ASCIIDOC8
354endif
355
356LIBS = -Wl,--whole-archive $(PERFLIBS) -Wl,--no-whole-archive -Wl,--start-group $(EXTLIBS) -Wl,--end-group
357
358export INSTALL SHELL_PATH
359
360### Build rules
361
362SHELL = $(SHELL_PATH)
363
364all: shell_compatibility_test $(ALL_PROGRAMS) $(LANG_BINDINGS) $(OTHER_PROGRAMS)
365
366please_set_SHELL_PATH_to_a_more_modern_shell:
367 @$$(:)
368
369shell_compatibility_test: please_set_SHELL_PATH_to_a_more_modern_shell
370
371strip: $(PROGRAMS) $(OUTPUT)perf
372 $(STRIP) $(STRIP_OPTS) $(PROGRAMS) $(OUTPUT)perf
373
72965b87
JO
374PERF_IN := $(OUTPUT)perf-in.o
375
9352aaba 376export srctree OUTPUT RM CC LD AR CFLAGS V BISON FLEX
72965b87
JO
377build := -f $(srctree)/tools/build/Makefile.build dir=. obj
378
cb4e67fd 379$(PERF_IN): $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h FORCE
72965b87
JO
380 @$(MAKE) $(build)=perf
381
cb4e67fd
JO
382$(OUTPUT)perf: $(BUILTIN_OBJS) $(PERFLIBS) $(PERF_IN)
383 $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) \
72965b87 384 $(BUILTIN_OBJS) $(PERF_IN) $(LIBS) -o $@
bd69cc28 385
88aeea06
JO
386$(GTK_IN): FORCE
387 @$(MAKE) $(build)=gtk
fc67297b 388
88aeea06 389$(OUTPUT)libperf-gtk.so: $(GTK_IN) $(PERFLIBS)
e27a08f5 390 $(QUIET_LINK)$(CC) -o $@ -shared $(LDFLAGS) $(filter %.o,$^) $(GTK_LIBS)
fc67297b 391
bd69cc28
IM
392$(OUTPUT)common-cmds.h: util/generate-cmdlist.sh command-list.txt
393
394$(OUTPUT)common-cmds.h: $(wildcard Documentation/perf-*.txt)
395 $(QUIET_GEN). util/generate-cmdlist.sh > $@+ && mv $@+ $@
396
397$(SCRIPTS) : % : %.sh
398 $(QUIET_GEN)$(INSTALL) '$@.sh' '$(OUTPUT)$@'
399
400# These can record PERF_VERSION
cb4e67fd 401perf.spec $(SCRIPTS) \
bd69cc28
IM
402 : $(OUTPUT)PERF-VERSION-FILE
403
404.SUFFIXES:
1f7c645a
IM
405
406#
407# If a target does not match any of the later rules then prefix it by $(OUTPUT)
408# This makes targets like 'make O=/tmp/perf perf.o' work in a natural way.
409#
410ifneq ($(OUTPUT),)
411%.o: $(OUTPUT)%.o
412 @echo " # Redirected target $@ => $(OUTPUT)$@"
413util/%.o: $(OUTPUT)util/%.o
cee972c0 414 @echo " # Redirected target $@ => $(OUTPUT)$@"
1f7c645a 415bench/%.o: $(OUTPUT)bench/%.o
cee972c0 416 @echo " # Redirected target $@ => $(OUTPUT)$@"
1f7c645a 417tests/%.o: $(OUTPUT)tests/%.o
cee972c0 418 @echo " # Redirected target $@ => $(OUTPUT)$@"
1f7c645a 419endif
bd69cc28
IM
420
421# These two need to be here so that when O= is not used they take precedence
422# over the general rule for .o
423
1999307b
JO
424# get relative building directory (to $(OUTPUT))
425# and '.' if it's $(OUTPUT) itself
426__build-dir = $(subst $(OUTPUT),,$(dir $@))
427build-dir = $(if $(__build-dir),$(__build-dir),.)
428
429single_dep: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h
430
431$(OUTPUT)%.o: %.c single_dep FORCE
432 @$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(build-dir) $@
433
434$(OUTPUT)%.i: %.c single_dep FORCE
435 @$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(build-dir) $@
436
437$(OUTPUT)%.s: %.c single_dep FORCE
438 @$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(build-dir) $@
439
440$(OUTPUT)%-bison.o: %.c single_dep FORCE
441 @$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(build-dir) $@
442
443$(OUTPUT)%-flex.o: %.c single_dep FORCE
444 @$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(build-dir) $@
445
446$(OUTPUT)%.o: %.S single_dep FORCE
447 @$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(build-dir) $@
448
449$(OUTPUT)%.i: %.S single_dep FORCE
450 @$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(build-dir) $@
bd69cc28 451
bd69cc28
IM
452$(OUTPUT)perf-%: %.o $(PERFLIBS)
453 $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $(filter %.o,$^) $(LIBS)
454
e477f3f0
AH
455ifndef NO_PERF_READ_VDSO32
456$(OUTPUT)perf-read-vdso32: perf-read-vdso.c util/find-vdso-map.c
457 $(QUIET_CC)$(CC) -m32 $(filter -static,$(LDFLAGS)) -Wall -Werror -o $@ perf-read-vdso.c
458endif
459
460ifndef NO_PERF_READ_VDSOX32
461$(OUTPUT)perf-read-vdsox32: perf-read-vdso.c util/find-vdso-map.c
462 $(QUIET_CC)$(CC) -mx32 $(filter -static,$(LDFLAGS)) -Wall -Werror -o $@ perf-read-vdso.c
463endif
464
bd69cc28
IM
465$(LIB_OBJS) $(BUILTIN_OBJS): $(LIB_H)
466$(patsubst perf-%,%.o,$(PROGRAMS)): $(LIB_H) $(wildcard */*.h)
467
9352aaba
JO
468LIBPERF_IN := $(OUTPUT)libperf-in.o
469
470$(LIBPERF_IN): FORCE
471 @$(MAKE) $(build)=libperf
472
473$(LIB_FILE): $(LIB_OBJS) $(LIBPERF_IN)
474 $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIBPERF_IN) $(LIB_OBJS)
bd69cc28
IM
475
476# libtraceevent.a
477TE_SOURCES = $(wildcard $(TRACE_EVENT_DIR)*.[ch])
478
3d7c0144
JO
479LIBTRACEEVENT_FLAGS = $(QUIET_SUBDIR1) O=$(OUTPUT)
480LIBTRACEEVENT_FLAGS += CFLAGS="-g -Wall $(EXTRA_CFLAGS)"
481LIBTRACEEVENT_FLAGS += plugin_dir=$(plugindir_SQ)
482
483$(LIBTRACEEVENT): $(TE_SOURCES) $(OUTPUT)PERF-CFLAGS
484 $(QUIET_SUBDIR0)$(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) libtraceevent.a plugins
bd69cc28
IM
485
486$(LIBTRACEEVENT)-clean:
8ec19c0e
IM
487 $(call QUIET_CLEAN, libtraceevent)
488 @$(MAKE) -C $(TRACE_EVENT_DIR) O=$(OUTPUT) clean >/dev/null
bd69cc28 489
78979079 490install-traceevent-plugins: $(LIBTRACEEVENT)
3d7c0144
JO
491 $(QUIET_SUBDIR0)$(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) install_plugins
492
1b85337d 493LIBAPIKFS_SOURCES = $(wildcard $(LIB_PATH)fs/*.[ch] $(LIB_PATH)fd/*.[ch])
bd69cc28
IM
494
495# if subdir is set, we've been called from above so target has been built
496# already
553873e1 497$(LIBAPIKFS): $(LIBAPIKFS_SOURCES)
bd69cc28 498ifeq ($(subdir),)
553873e1 499 $(QUIET_SUBDIR0)$(LIB_DIR) $(QUIET_SUBDIR1) O=$(OUTPUT) libapikfs.a
bd69cc28
IM
500endif
501
553873e1 502$(LIBAPIKFS)-clean:
bd69cc28 503ifeq ($(subdir),)
553873e1
BP
504 $(call QUIET_CLEAN, libapikfs)
505 @$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) clean >/dev/null
bd69cc28
IM
506endif
507
508help:
509 @echo 'Perf make targets:'
510 @echo ' doc - make *all* documentation (see below)'
511 @echo ' man - make manpage documentation (access with man <foo>)'
512 @echo ' html - make html documentation'
513 @echo ' info - make GNU info documentation (access with info <foo>)'
514 @echo ' pdf - make pdf documentation'
515 @echo ' TAGS - use etags to make tag information for source browsing'
516 @echo ' tags - use ctags to make tag information for source browsing'
517 @echo ' cscope - use cscope to make interactive browsing database'
518 @echo ''
519 @echo 'Perf install targets:'
520 @echo ' NOTE: documentation build requires asciidoc, xmlto packages to be installed'
fc9cabea
JZ
521 @echo ' HINT: use "prefix" or "DESTDIR" to install to a particular'
522 @echo ' path like "make prefix=/usr/local install install-doc"'
bd69cc28
IM
523 @echo ' install - install compiled binaries'
524 @echo ' install-doc - install *all* documentation'
525 @echo ' install-man - install manpage documentation'
526 @echo ' install-html - install html documentation'
527 @echo ' install-info - install GNU info documentation'
528 @echo ' install-pdf - install pdf documentation'
529 @echo ''
530 @echo ' quick-install-doc - alias for quick-install-man'
531 @echo ' quick-install-man - install the documentation quickly'
532 @echo ' quick-install-html - install the html documentation quickly'
533 @echo ''
534 @echo 'Perf maintainer targets:'
535 @echo ' clean - clean all binary objects and build output'
536
537
538DOC_TARGETS := doc man html info pdf
539
540INSTALL_DOC_TARGETS := $(patsubst %,install-%,$(DOC_TARGETS)) try-install-man
541INSTALL_DOC_TARGETS += quick-install-doc quick-install-man quick-install-html
542
543# 'make doc' should call 'make -C Documentation all'
544$(DOC_TARGETS):
545 $(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) $(@:doc=all)
546
16a64336
SAS
547TAG_FOLDERS= . ../lib/traceevent ../lib/api ../lib/symbol
548TAG_FILES= ../../include/uapi/linux/perf_event.h
549
bd69cc28 550TAGS:
b0815d07 551 $(QUIET_GEN)$(RM) TAGS; \
16a64336 552 $(FIND) $(TAG_FOLDERS) -name '*.[hcS]' -print | xargs etags -a $(TAG_FILES)
bd69cc28
IM
553
554tags:
b0815d07 555 $(QUIET_GEN)$(RM) tags; \
16a64336 556 $(FIND) $(TAG_FOLDERS) -name '*.[hcS]' -print | xargs ctags -a $(TAG_FILES)
bd69cc28
IM
557
558cscope:
b0815d07 559 $(QUIET_GEN)$(RM) cscope*; \
16a64336 560 $(FIND) $(TAG_FOLDERS) -name '*.[hcS]' -print | xargs cscope -b $(TAG_FILES)
bd69cc28
IM
561
562### Detect prefix changes
563TRACK_CFLAGS = $(subst ','\'',$(CFLAGS)):\
3d7c0144 564 $(bindir_SQ):$(perfexecdir_SQ):$(template_dir_SQ):$(prefix_SQ):$(plugindir_SQ)
bd69cc28
IM
565
566$(OUTPUT)PERF-CFLAGS: .FORCE-PERF-CFLAGS
567 @FLAGS='$(TRACK_CFLAGS)'; \
568 if test x"$$FLAGS" != x"`cat $(OUTPUT)PERF-CFLAGS 2>/dev/null`" ; then \
65fb0992 569 echo 1>&2 " FLAGS: * new build flags or prefix"; \
bd69cc28
IM
570 echo "$$FLAGS" >$(OUTPUT)PERF-CFLAGS; \
571 fi
572
573### Testing rules
574
575# GNU make supports exporting all variables by "export" without parameters.
576# However, the environment gets quite big, and some programs have problems
577# with that.
578
579check: $(OUTPUT)common-cmds.h
580 if sparse; \
581 then \
582 for i in *.c */*.c; \
583 do \
584 sparse $(CFLAGS) $(SPARSE_FLAGS) $$i || exit; \
585 done; \
586 else \
587 exit 1; \
588 fi
589
590### Installation rules
591
fc67297b
NK
592install-gtk:
593
594install-bin: all install-gtk
8a5411e9
IM
595 $(call QUIET_INSTALL, binaries) \
596 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'; \
597 $(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)'; \
598 $(LN) '$(DESTDIR_SQ)$(bindir_SQ)/perf' '$(DESTDIR_SQ)$(bindir_SQ)/trace'
e477f3f0
AH
599ifndef NO_PERF_READ_VDSO32
600 $(call QUIET_INSTALL, perf-read-vdso32) \
601 $(INSTALL) $(OUTPUT)perf-read-vdso32 '$(DESTDIR_SQ)$(bindir_SQ)';
602endif
603ifndef NO_PERF_READ_VDSOX32
604 $(call QUIET_INSTALL, perf-read-vdsox32) \
605 $(INSTALL) $(OUTPUT)perf-read-vdsox32 '$(DESTDIR_SQ)$(bindir_SQ)';
606endif
8a5411e9
IM
607 $(call QUIET_INSTALL, libexec) \
608 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
609 $(call QUIET_INSTALL, perf-archive) \
610 $(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
c501e90b
AH
611 $(call QUIET_INSTALL, perf-with-kcore) \
612 $(INSTALL) $(OUTPUT)perf-with-kcore -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
bd69cc28 613ifndef NO_LIBPERL
8a5411e9
IM
614 $(call QUIET_INSTALL, perl-scripts) \
615 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
616 $(INSTALL) scripts/perl/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
617 $(INSTALL) scripts/perl/*.pl -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl'; \
618 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'; \
619 $(INSTALL) scripts/perl/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'
bd69cc28
IM
620endif
621ifndef NO_LIBPYTHON
8a5411e9
IM
622 $(call QUIET_INSTALL, python-scripts) \
623 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'; \
624 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'; \
625 $(INSTALL) scripts/python/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'; \
626 $(INSTALL) scripts/python/*.py -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python'; \
627 $(INSTALL) scripts/python/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'
bd69cc28 628endif
a8b4c701 629 $(call QUIET_INSTALL, perf_completion-script) \
8a5411e9 630 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d'; \
a8b4c701 631 $(INSTALL) perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf'
8a5411e9
IM
632 $(call QUIET_INSTALL, tests) \
633 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'; \
634 $(INSTALL) tests/attr.py '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'; \
635 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'; \
636 $(INSTALL) tests/attr/* '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'
bd69cc28 637
3d7c0144 638install: install-bin try-install-man install-traceevent-plugins
bd69cc28
IM
639
640install-python_ext:
641 $(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)'
642
643# 'make install-doc' should call 'make -C Documentation install'
644$(INSTALL_DOC_TARGETS):
645 $(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) $(@:-doc=)
646
647### Cleaning rules
648
649#
650# This is here, not in config/Makefile, because config/Makefile does
651# not get included for the clean target:
652#
653config-clean:
8ec19c0e
IM
654 $(call QUIET_CLEAN, config)
655 @$(MAKE) -C config/feature-checks clean >/dev/null
bd69cc28 656
553873e1 657clean: $(LIBTRACEEVENT)-clean $(LIBAPIKFS)-clean config-clean
cb4e67fd 658 $(call QUIET_CLEAN, core-objs) $(RM) $(LIB_OBJS) $(BUILTIN_OBJS) $(LIB_FILE) $(OUTPUT)perf-archive $(OUTPUT)perf-with-kcore $(LANG_BINDINGS)
72965b87
JO
659 @find . -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
660 @$(RM) .config-detected
e477f3f0 661 $(call QUIET_CLEAN, core-progs) $(RM) $(ALL_PROGRAMS) perf perf-read-vdso32 perf-read-vdsox32
0695e57b 662 $(call QUIET_CLEAN, core-gen) $(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope* $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)PERF-CFLAGS $(OUTPUT)PERF-FEATURES $(OUTPUT)util/*-bison* $(OUTPUT)util/*-flex*
553873e1 663 $(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) clean
bd69cc28
IM
664 $(python-clean)
665
666#
667# Trick: if ../../.git does not exist - we are building out of tree for example,
668# then force version regeneration:
669#
670ifeq ($(wildcard ../../.git/HEAD),)
671 GIT-HEAD-PHONY = ../../.git/HEAD
672else
673 GIT-HEAD-PHONY =
674endif
675
72965b87
JO
676FORCE:
677
fc67297b 678.PHONY: all install clean config-clean strip install-gtk
bd69cc28 679.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
1999307b 680.PHONY: $(GIT-HEAD-PHONY) TAGS tags cscope .FORCE-PERF-CFLAGS FORCE single_dep
bd69cc28 681