2013-10-02 13:49:08 +04:00
i n c l u d e . . / s c r i p t s / M a k e f i l e . i n c l u d e
# The default target of this Makefile is...
all :
i n c l u d e c o n f i g / u t i l i t i e s . m a k
# Define V to have a more verbose compile.
#
2014-02-19 19:52:54 +04:00
# Define VF to have a more verbose feature check output.
#
2013-10-02 13:49:08 +04:00
# 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.
#
# 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.
#
# 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.
#
# Define LDFLAGS=-static to build a static binary.
#
# Define EXTRA_CFLAGS=-m64 or EXTRA_CFLAGS=-m32 as appropriate for cross-builds.
#
# Define NO_DWARF if you do not want debug-info analysis feature at all.
#
# Define WERROR=0 to disable treating any warnings as errors.
#
# Define NO_NEWT if you do not want TUI support. (deprecated)
#
# Define NO_SLANG if you do not want TUI support.
#
# Define NO_GTK2 if you do not want GTK+ GUI support.
#
# Define NO_DEMANGLE if you do not want C++ symbol demangling.
#
# Define NO_LIBELF if you do not want libelf dependency (e.g. cross-builds)
#
# Define NO_LIBUNWIND if you do not want libunwind dependency for dwarf
# backtrace post unwind.
#
# Define NO_BACKTRACE if you do not want stack backtrace debug feature
#
# Define NO_LIBNUMA if you do not want numa perf benchmark
#
# Define NO_LIBAUDIT if you do not want libaudit support
#
# Define NO_LIBBIONIC if you do not want bionic support
2014-02-19 19:52:57 +04:00
#
# Define NO_LIBDW_DWARF_UNWIND if you do not want libdw support
# for dwarf backtrace post unwind.
2014-10-24 01:16:03 +04:00
#
# Define NO_PERF_READ_VDSO32 if you do not want to build perf-read-vdso32
# for reading the 32-bit compatibility VDSO in 64-bit mode
#
# Define NO_PERF_READ_VDSOX32 if you do not want to build perf-read-vdsox32
# for reading the x32 mode 32-bit compatibility VDSO in 64-bit mode
perf tools: Add gzip decompression support for kernel module
Now my Archlinux box shows module symbols correctly.
Before:
$ perf report --stdio
Failed to open /tmp/perf-3477.map, continuing without symbols
no symbols found in /usr/bin/date, maybe install a debug package?
No kallsyms or vmlinux with build-id 7b4ea0a49ae2111925857099aaf05c3246ff33e0 was found
[drm] with build id 7b4ea0a49ae2111925857099aaf05c3246ff33e0 not found, continuing without symbols
No kallsyms or vmlinux with build-id edd931629094b660ca9dec09a1b635c8d87aa2ee was found
[jbd2] with build id edd931629094b660ca9dec09a1b635c8d87aa2ee not found, continuing without symbols
No kallsyms or vmlinux with build-id a7b1eada671c34933e5610bb920b2ca4945a82c3 was found
[ext4] with build id a7b1eada671c34933e5610bb920b2ca4945a82c3 not found, continuing without symbols
No kallsyms or vmlinux with build-id d69511fa3e5840e770336ef45b06c83fef8d74e3 was found
[scsi_mod] with build id d69511fa3e5840e770336ef45b06c83fef8d74e3 not found, continuing without symbols
No kallsyms or vmlinux with build-id af0430af13461af058770ee9b87afc07922c2e77 was found
[libata] with build id af0430af13461af058770ee9b87afc07922c2e77 not found, continuing without symbols
No kallsyms or vmlinux with build-id aaeedff8160ce631a5f0333591c6ff291201d29f was found
[libahci] with build id aaeedff8160ce631a5f0333591c6ff291201d29f not found, continuing without symbols
No kallsyms or vmlinux with build-id c57907712becaf662dc4981824bb372c0441d605 was found
[mac80211] with build id c57907712becaf662dc4981824bb372c0441d605 not found, continuing without symbols
No kallsyms or vmlinux with build-id e0589077cc0ec8c3e4c40eb9f2d9e69d236bee8f was found
[iwldvm] with build id e0589077cc0ec8c3e4c40eb9f2d9e69d236bee8f not found, continuing without symbols
No kallsyms or vmlinux with build-id 2d86086bf136bf374a2f029cf85a48194f9b950b was found
[cfg80211] with build id 2d86086bf136bf374a2f029cf85a48194f9b950b not found, continuing without symbols
No kallsyms or vmlinux with build-id 4493c48599bdb3d91d0f8db5150e0be33fdd9221 was found
[iwlwifi] with build id 4493c48599bdb3d91d0f8db5150e0be33fdd9221 not found, continuing without symbols
...
#
# Overhead Command Shared Object Symbol
# ........ ............... ....................... ........................................................
#
0.03% swapper [ext4] [k] 0x000000000000fe2e
0.03% swapper [kernel.kallsyms] [k] account_entity_enqueue
0.03% swapper [ext4] [k] 0x000000000000fc2b
0.03% irq/50-iwlwifi [iwlwifi] [k] 0x000000000000200b
0.03% swapper [kernel.kallsyms] [k] ktime_add_safe
0.03% swapper [kernel.kallsyms] [k] elv_completed_request
0.03% swapper [libata] [k] 0x0000000000003997
0.03% swapper [libahci] [k] 0x0000000000001f25
0.03% swapper [kernel.kallsyms] [k] rb_next
0.03% swapper [kernel.kallsyms] [k] blk_finish_request
0.03% swapper [ext4] [k] 0x0000000000010248
0.00% perf [kernel.kallsyms] [k] native_write_msr_safe
After:
$ perf report --stdio
Failed to open /tmp/perf-3477.map, continuing without symbols
no symbols found in /usr/bin/tr, maybe install a debug package?
...
#
# Overhead Command Shared Object Symbol
# ........ ............... ........................... ......................................................
#
0.04% kworker/u16:3 [ext4] [k] ext4_read_block_bitmap
0.03% kworker/u16:0 [mac80211] [k] ieee80211_sta_reset_beacon_monitor
0.02% irq/50-iwlwifi [mac80211] [k] ieee80211_get_bssid
0.02% firefox [e1000e] [k] __ew32_prepare
0.02% swapper [libahci] [k] ahci_handle_port_interrupt
0.02% emacs libglib-2.0.so.0.4000.0 [.] g_mutex_unlock
0.02% swapper [e1000e] [k] e1000_clean_tx_irq
0.02% dwm [kernel.kallsyms] [k] __schedule
0.02% gnome-terminal- [vdso] [.] __vdso_clock_gettime
0.02% swapper [e1000e] [k] e1000_alloc_rx_buffers
0.02% irq/50-iwlwifi [mac80211] [k] ieee80211_rx
0.01% firefox [vdso] [.] __vdso_gettimeofday
0.01% irq/50-iwlwifi [iwlwifi] [k] iwl_pcie_rxq_restock.part.13
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Namhyung Kim <namhyung.kim@lge.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/87h9yexshi.fsf@sejong.aot.lge.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2014-10-31 10:51:38 +03:00
#
# Define NO_ZLIB if you do not want to support compressed kernel modules
2015-02-21 01:16:58 +03:00
#
2015-03-28 13:30:30 +03:00
# Define LIBBABELTRACE if you DO want libbabeltrace support
2015-02-21 01:16:58 +03:00
# for CTF data format.
2015-01-29 15:29:39 +03:00
#
# Define NO_LZMA if you do not want to support compressed (xz) kernel modules
2014-02-19 19:52:57 +04:00
2013-10-02 13:49:08 +04:00
i f e q ( $( srctree ) , )
srctree := $( patsubst %/,%,$( dir $( shell pwd ) ) )
srctree := $( patsubst %/,%,$( dir $( srctree) ) )
#$(info Determined 'srctree' to be $(srctree))
e n d i f
i f n e q ( $( objtree ) , )
#$(info Determined 'objtree' to be $(objtree))
e n d i f
i f n e q ( $( OUTPUT ) , )
#$(info Determined 'OUTPUT' to be $(OUTPUT))
2014-12-29 19:42:46 +03:00
# Adding $(OUTPUT) as a directory to look for source files,
# because use generated output files as sources dependency
# for flex/bison parsers.
VPATH += $( OUTPUT)
export VPATH
2013-10-02 13:49:08 +04:00
e n d i f
2015-01-12 01:59:55 +03:00
i f e q ( $( V ) , 1 )
Q =
e l s e
Q = @
e n d i f
2015-01-10 23:43:32 +03:00
# Do not use make's built-in rules
# (this improves performance and avoids hard-to-debug behaviour);
MAKEFLAGS += -r
2013-10-02 13:49:08 +04:00
$(OUTPUT)PERF-VERSION-FILE : ../../.git /HEAD
2015-01-12 01:59:55 +03:00
$( Q) $( SHELL_PATH) util/PERF-VERSION-GEN $( OUTPUT)
$( Q) touch $( OUTPUT) PERF-VERSION-FILE
2013-10-02 13:49:08 +04:00
CC = $( CROSS_COMPILE) gcc
2014-12-29 15:52:36 +03:00
LD = $( CROSS_COMPILE) ld
2013-10-02 13:49:08 +04:00
AR = $( CROSS_COMPILE) ar
2014-01-15 14:44:08 +04:00
PKG_CONFIG = $( CROSS_COMPILE) pkg-config
2013-10-02 13:49:08 +04:00
RM = rm -f
perf trace: Add 'trace' alias to 'perf trace'
Make 'perf trace' more accessible by aliasing it to just 'trace':
[root@zoo linux]# trace --duration 15 -a -e futex sleep 1
110.092 (16.188 ms): libvirtd/1166 futex(uaddr: 0x185b344, op: WAIT|PRIV, val: 174293 ) = 0
110.101 (15.903 ms): libvirtd/1171 futex(uaddr: 0x185b3dc, op: WAIT|PRIV, val: 139265 ) = 0
111.594 (15.776 ms): libvirtd/1165 futex(uaddr: 0x185b344, op: WAIT|PRIV, val: 174295 ) = 0
111.610 (15.969 ms): libvirtd/1169 futex(uaddr: 0x185b3dc, op: WAIT|PRIV, val: 139267 ) = 0
113.556 (16.216 ms): libvirtd/1168 futex(uaddr: 0x185b3dc, op: WAIT|PRIV, val: 139269 ) = 0
291.265 (199.508 ms): chromium-brows/15830 futex(uaddr: 0x7fff2986bcb4, op: WAIT_BITSET|PRIV|CLKRT, val: 1, utime: 0x7fff2986bab0, val3: 4294967295) = -1 ETIMEDOUT Connection timed out
360.354 (69.053 ms): chromium-brows/15830 futex(uaddr: 0x7fff2986bcb4, op: WAIT_BITSET|PRIV|CLKRT, val: 1, utime: 0x7fff2986bab0, val3: 4294967295) = -1 ETIMEDOUT Connection timed out
[root@zoo linux]#
I.e. looking for futex calls that take at least 15ms, system wide, during a one
second window. Now to get callchains into 'trace' to figure out what are those
locks :-)
Requested-by: Ingo Molnar <mingo@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-ch4smqz8b5fmgrte7c5e4fuw@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2013-09-24 18:56:36 +04:00
LN = ln -f
2013-10-02 13:49:08 +04:00
MKDIR = mkdir
FIND = find
INSTALL = install
FLEX = flex
BISON = bison
STRIP = strip
2013-12-09 20:14:23 +04:00
LIB_DIR = $( srctree) /tools/lib/api/
2013-10-02 13:49:08 +04:00
TRACE_EVENT_DIR = $( srctree) /tools/lib/traceevent/
# include config/Makefile by default and rule out
# non-config cases
config := 1
NON_CONFIG_TARGETS := clean TAGS tags cscope help
i f d e f M A K E C M D G O A L S
i f e q ( $( filter -out $ ( NON_CONFIG_TARGETS ) ,$ ( MAKECMDGOALS ) ) , )
config := 0
e n d i f
e n d i f
i f e q ( $( config ) , 1 )
i n c l u d e c o n f i g / M a k e f i l e
e n d i f
2013-12-03 17:09:21 +04:00
export prefix bindir sharedir sysconfdir DESTDIR
2013-10-02 13:49:08 +04:00
# 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
PYRF_OBJS =
SCRIPT_SH =
SCRIPT_SH += perf-archive.sh
2014-07-31 10:01:12 +04:00
SCRIPT_SH += perf-with-kcore.sh
2013-10-02 13:49:08 +04:00
grep-libs = $( filter -l%,$( 1) )
strip-libs = $( filter-out -l%,$( 1) )
i f n e q ( $( OUTPUT ) , )
TE_PATH = $( OUTPUT)
i f n e q ( $( subdir ) , )
2013-12-09 20:14:23 +04:00
LIB_PATH = $( OUTPUT) /../lib/api/
2013-10-02 13:49:08 +04:00
e l s e
2013-12-09 20:14:23 +04:00
LIB_PATH = $( OUTPUT)
2013-10-02 13:49:08 +04:00
e n d i f
e l s e
TE_PATH = $( TRACE_EVENT_DIR)
2013-12-09 20:14:23 +04:00
LIB_PATH = $( LIB_DIR)
2013-10-02 13:49:08 +04:00
e n d i f
LIBTRACEEVENT = $( TE_PATH) libtraceevent.a
export LIBTRACEEVENT
2015-01-10 22:53:13 +03:00
LIBAPI = $( LIB_PATH) libapi.a
export LIBAPI
2013-10-02 13:49:08 +04:00
# 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
2013-10-09 13:49:26 +04:00
python-clean := $( call QUIET_CLEAN, python) $( RM) -r $( PYTHON_EXTBUILD) $( OUTPUT) python/perf.so
2013-10-02 13:49:08 +04:00
PYTHON_EXT_SRCS := $( shell grep -v ^\# util/python-ext-sources)
2015-01-10 22:53:13 +03:00
PYTHON_EXT_DEPS := util/python-ext-sources util/setup.py $( LIBTRACEEVENT) $( LIBAPI)
2013-10-02 13:49:08 +04:00
$(OUTPUT)python/perf.so : $( PYTHON_EXT_SRCS ) $( PYTHON_EXT_DEPS )
$( QUIET_GEN) CFLAGS = '$(CFLAGS)' $( PYTHON_WORD) util/setup.py \
--quiet build_ext; \
mkdir -p $( OUTPUT) python && \
cp $( PYTHON_EXTBUILD_LIB) perf.so $( OUTPUT) python/
#
# No Perl scripts right now:
#
SCRIPTS = $( patsubst %.sh,%,$( SCRIPT_SH) )
PROGRAMS += $( OUTPUT) perf
2014-10-24 01:16:03 +04:00
i f n d e f N O _ P E R F _ R E A D _ V D S O 3 2
PROGRAMS += $( OUTPUT) perf-read-vdso32
e n d i f
i f n d e f N O _ P E R F _ R E A D _ V D S O X 3 2
PROGRAMS += $( OUTPUT) perf-read-vdsox32
e n d i f
2013-10-02 13:49:08 +04:00
# what 'all' will build and 'install' will install, in perfexecdir
ALL_PROGRAMS = $( PROGRAMS) $( SCRIPTS)
# what 'all' will build but not install in perfexecdir
OTHER_PROGRAMS = $( OUTPUT) perf
# Set paths to tools early so that they can be used for version tests.
i f n d e f S H E L L _ P A T H
SHELL_PATH = /bin/sh
e n d i f
i f n d e f P E R L _ P A T H
PERL_PATH = /usr/bin/perl
e n d i f
export PERL_PATH
LIB_FILE = $( OUTPUT) libperf.a
2015-01-10 22:53:13 +03:00
PERFLIBS = $( LIB_FILE) $( LIBAPI) $( LIBTRACEEVENT)
2013-10-02 13:49:08 +04:00
# 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...
- i n c l u d e a r c h / $( ARCH ) / M a k e f i l e
i f n e q ( $( OUTPUT ) , )
CFLAGS += -I$( OUTPUT)
e n d i f
i f n d e f N O _ G T K 2
2013-09-13 10:27:43 +04:00
ALL_PROGRAMS += $( OUTPUT) libperf-gtk.so
2014-12-30 02:34:23 +03:00
GTK_IN := $( OUTPUT) gtk-in.o
2013-09-13 10:27:43 +04:00
install-gtk : $( OUTPUT ) libperf -gtk .so
2013-10-09 13:49:29 +04:00
$( call QUIET_INSTALL, 'GTK UI' ) \
$( INSTALL) -d -m 755 '$(DESTDIR_SQ)$(libdir_SQ)' ; \
$( INSTALL) $( OUTPUT) libperf-gtk.so '$(DESTDIR_SQ)$(libdir_SQ)'
2013-10-02 13:49:08 +04:00
e n d i f
i f d e f A S C I I D O C 8
export ASCIIDOC8
e n d i f
LIBS = -Wl,--whole-archive $( PERFLIBS) -Wl,--no-whole-archive -Wl,--start-group $( EXTLIBS) -Wl,--end-group
export INSTALL SHELL_PATH
### Build rules
SHELL = $( SHELL_PATH)
all : shell_compatibility_test $( ALL_PROGRAMS ) $( LANG_BINDINGS ) $( OTHER_PROGRAMS )
please_set_SHELL_PATH_to_a_more_modern_shell :
2015-01-12 01:59:55 +03:00
$( Q) $$ ( :)
2013-10-02 13:49:08 +04:00
shell_compatibility_test : please_set_SHELL_PATH_to_a_more_modern_shell
strip : $( PROGRAMS ) $( OUTPUT ) perf
$( STRIP) $( STRIP_OPTS) $( PROGRAMS) $( OUTPUT) perf
2014-12-29 15:52:36 +03:00
PERF_IN := $( OUTPUT) perf-in.o
2014-12-29 19:42:46 +03:00
export srctree OUTPUT RM CC LD AR CFLAGS V BISON FLEX
2014-12-29 15:52:36 +03:00
build := -f $( srctree) /tools/build/Makefile.build dir = . obj
2014-12-30 19:09:15 +03:00
$(PERF_IN) : $( OUTPUT ) PERF -VERSION -FILE $( OUTPUT ) common -cmds .h FORCE
2015-01-12 01:59:55 +03:00
$( Q) $( MAKE) $( build) = perf
2014-12-29 15:52:36 +03:00
2014-12-30 18:51:35 +03:00
$(OUTPUT)perf : $( PERFLIBS ) $( PERF_IN )
$( QUIET_LINK) $( CC) $( CFLAGS) $( LDFLAGS) $( PERF_IN) $( LIBS) -o $@
2013-10-02 13:49:08 +04:00
2014-12-30 02:34:23 +03:00
$(GTK_IN) : FORCE
2015-01-12 01:59:55 +03:00
$( Q) $( MAKE) $( build) = gtk
2013-09-13 10:27:43 +04:00
2014-12-30 02:34:23 +03:00
$(OUTPUT)libperf-gtk.so : $( GTK_IN ) $( PERFLIBS )
2014-04-27 13:12:21 +04:00
$( QUIET_LINK) $( CC) -o $@ -shared $( LDFLAGS) $( filter %.o,$^) $( GTK_LIBS)
2013-09-13 10:27:43 +04:00
2013-10-02 13:49:08 +04:00
$(OUTPUT)common-cmds.h : util /generate -cmdlist .sh command -list .txt
$(OUTPUT)common-cmds.h : $( wildcard Documentation /perf -*.txt )
$( QUIET_GEN) . util/generate-cmdlist.sh > $@ + && mv $@ + $@
$(SCRIPTS) : % : %.sh
$( QUIET_GEN) $( INSTALL) '$@.sh' '$(OUTPUT)$@'
# These can record PERF_VERSION
2014-12-30 19:09:15 +03:00
p e r f . s p e c $( SCRIPTS ) \
2013-10-02 13:49:08 +04:00
: $( OUTPUT) PERF-VERSION-FILE
.SUFFIXES :
2013-10-04 14:14:59 +04:00
#
# If a target does not match any of the later rules then prefix it by $(OUTPUT)
# This makes targets like 'make O=/tmp/perf perf.o' work in a natural way.
#
i f n e q ( $( OUTPUT ) , )
%.o : $( OUTPUT ) %.o
@echo " # Redirected target $@ => $( OUTPUT) $@ "
util/%.o : $( OUTPUT ) util /%.o
2013-10-10 09:42:56 +04:00
@echo " # Redirected target $@ => $( OUTPUT) $@ "
2013-10-04 14:14:59 +04:00
bench/%.o : $( OUTPUT ) bench /%.o
2013-10-10 09:42:56 +04:00
@echo " # Redirected target $@ => $( OUTPUT) $@ "
2013-10-04 14:14:59 +04:00
tests/%.o : $( OUTPUT ) tests /%.o
2013-10-10 09:42:56 +04:00
@echo " # Redirected target $@ => $( OUTPUT) $@ "
2013-10-04 14:14:59 +04:00
e n d i f
2013-10-02 13:49:08 +04:00
# These two need to be here so that when O= is not used they take precedence
# over the general rule for .o
2014-12-30 20:44:38 +03:00
# get relative building directory (to $(OUTPUT))
# and '.' if it's $(OUTPUT) itself
__build-dir = $( subst $( OUTPUT) ,,$( dir $@ ) )
build-dir = $( if $( __build-dir) ,$( __build-dir) ,.)
single_dep : $( OUTPUT ) PERF -VERSION -FILE $( OUTPUT ) common -cmds .h
$(OUTPUT)%.o : %.c single_dep FORCE
2015-01-12 01:59:55 +03:00
$( Q) $( MAKE) -f $( srctree) /tools/build/Makefile.build dir = $( build-dir) $@
2014-12-30 20:44:38 +03:00
$(OUTPUT)%.i : %.c single_dep FORCE
2015-01-12 01:59:55 +03:00
$( Q) $( MAKE) -f $( srctree) /tools/build/Makefile.build dir = $( build-dir) $@
2014-12-30 20:44:38 +03:00
$(OUTPUT)%.s : %.c single_dep FORCE
2015-01-12 01:59:55 +03:00
$( Q) $( MAKE) -f $( srctree) /tools/build/Makefile.build dir = $( build-dir) $@
2014-12-30 20:44:38 +03:00
$(OUTPUT)%-bison.o : %.c single_dep FORCE
2015-01-12 01:59:55 +03:00
$( Q) $( MAKE) -f $( srctree) /tools/build/Makefile.build dir = $( build-dir) $@
2014-12-30 20:44:38 +03:00
$(OUTPUT)%-flex.o : %.c single_dep FORCE
2015-01-12 01:59:55 +03:00
$( Q) $( MAKE) -f $( srctree) /tools/build/Makefile.build dir = $( build-dir) $@
2014-12-30 20:44:38 +03:00
$(OUTPUT)%.o : %.S single_dep FORCE
2015-01-12 01:59:55 +03:00
$( Q) $( MAKE) -f $( srctree) /tools/build/Makefile.build dir = $( build-dir) $@
2014-12-30 20:44:38 +03:00
$(OUTPUT)%.i : %.S single_dep FORCE
2015-01-12 01:59:55 +03:00
$( Q) $( MAKE) -f $( srctree) /tools/build/Makefile.build dir = $( build-dir) $@
2013-10-02 13:49:08 +04:00
$(OUTPUT)perf-% : %.o $( PERFLIBS )
$( QUIET_LINK) $( CC) $( CFLAGS) -o $@ $( LDFLAGS) $( filter %.o,$^) $( LIBS)
2014-10-24 01:16:03 +04:00
i f n d e f N O _ P E R F _ R E A D _ V D S O 3 2
$(OUTPUT)perf-read-vdso32 : perf -read -vdso .c util /find -vdso -map .c
$( QUIET_CC) $( CC) -m32 $( filter -static,$( LDFLAGS) ) -Wall -Werror -o $@ perf-read-vdso.c
e n d i f
i f n d e f N O _ P E R F _ R E A D _ V D S O X 3 2
$(OUTPUT)perf-read-vdsox32 : perf -read -vdso .c util /find -vdso -map .c
$( QUIET_CC) $( CC) -mx32 $( filter -static,$( LDFLAGS) ) -Wall -Werror -o $@ perf-read-vdso.c
e n d i f
2014-12-30 18:51:35 +03:00
$(patsubst perf-%,%.o,$(PROGRAMS)) : $( wildcard */*.h )
2013-10-02 13:49:08 +04:00
2014-12-29 19:42:46 +03:00
LIBPERF_IN := $( OUTPUT) libperf-in.o
$(LIBPERF_IN) : FORCE
2015-01-12 01:59:55 +03:00
$( Q) $( MAKE) $( build) = libperf
2014-12-29 19:42:46 +03:00
2014-12-30 18:51:35 +03:00
$(LIB_FILE) : $( LIBPERF_IN )
2014-12-29 19:42:46 +03:00
$( QUIET_AR) $( RM) $@ && $( AR) rcs $@ $( LIBPERF_IN) $( LIB_OBJS)
2013-10-02 13:49:08 +04:00
2013-12-03 17:09:21 +04:00
LIBTRACEEVENT_FLAGS += plugin_dir = $( plugindir_SQ)
2015-01-07 20:39:45 +03:00
$(LIBTRACEEVENT) : FORCE
2015-01-12 01:59:55 +03:00
$( Q) $( MAKE) -C $( TRACE_EVENT_DIR) $( LIBTRACEEVENT_FLAGS) O = $( OUTPUT) $( OUTPUT) libtraceevent.a plugins
2013-10-02 13:49:08 +04:00
$(LIBTRACEEVENT)-clean :
2013-10-09 13:49:26 +04:00
$( call QUIET_CLEAN, libtraceevent)
2015-01-12 01:59:55 +03:00
$( Q) $( MAKE) -C $( TRACE_EVENT_DIR) O = $( OUTPUT) clean >/dev/null
2013-10-02 13:49:08 +04:00
2013-12-05 15:13:54 +04:00
install-traceevent-plugins : $( LIBTRACEEVENT )
2015-01-12 01:59:55 +03:00
$( Q) $( MAKE) -C $( TRACE_EVENT_DIR) $( LIBTRACEEVENT_FLAGS) O = $( OUTPUT) install_plugins
2013-12-03 17:09:21 +04:00
2015-01-10 22:53:13 +03:00
$(LIBAPI) : FORCE
2015-01-12 01:59:55 +03:00
$( Q) $( MAKE) -C $( LIB_DIR) O = $( OUTPUT) $( OUTPUT) libapi.a
2013-10-02 13:49:08 +04:00
2015-01-10 22:53:13 +03:00
$(LIBAPI)-clean :
$( call QUIET_CLEAN, libapi)
2015-01-12 01:59:55 +03:00
$( Q) $( MAKE) -C $( LIB_DIR) O = $( OUTPUT) clean >/dev/null
2013-10-02 13:49:08 +04:00
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'
2014-06-02 20:44:34 +04:00
@echo ' HINT: use "prefix" or "DESTDIR" to install to a particular'
@echo ' path like "make prefix=/usr/local install install-doc"'
2013-10-02 13:49:08 +04:00
@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'
DOC_TARGETS := doc man html info pdf
INSTALL_DOC_TARGETS := $( patsubst %,install-%,$( DOC_TARGETS) ) try-install-man
INSTALL_DOC_TARGETS += quick-install-doc quick-install-man quick-install-html
# 'make doc' should call 'make -C Documentation all'
$(DOC_TARGETS) :
$( QUIET_SUBDIR0) Documentation $( QUIET_SUBDIR1) $( @:doc= all)
2014-05-28 12:19:18 +04:00
TAG_FOLDERS = . ../lib/traceevent ../lib/api ../lib/symbol
TAG_FILES = ../../include/uapi/linux/perf_event.h
2013-10-02 13:49:08 +04:00
TAGS :
2014-06-04 16:43:58 +04:00
$( QUIET_GEN) $( RM) TAGS; \
2014-05-28 12:19:18 +04:00
$( FIND) $( TAG_FOLDERS) -name '*.[hcS]' -print | xargs etags -a $( TAG_FILES)
2013-10-02 13:49:08 +04:00
tags :
2014-06-04 16:43:58 +04:00
$( QUIET_GEN) $( RM) tags; \
2014-05-28 12:19:18 +04:00
$( FIND) $( TAG_FOLDERS) -name '*.[hcS]' -print | xargs ctags -a $( TAG_FILES)
2013-10-02 13:49:08 +04:00
cscope :
2014-06-04 16:43:58 +04:00
$( QUIET_GEN) $( RM) cscope*; \
2014-05-28 12:19:18 +04:00
$( FIND) $( TAG_FOLDERS) -name '*.[hcS]' -print | xargs cscope -b $( TAG_FILES)
2013-10-02 13:49:08 +04:00
### 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.
check : $( OUTPUT ) common -cmds .h
if sparse; \
then \
for i in *.c */*.c; \
do \
sparse $( CFLAGS) $( SPARSE_FLAGS) $$ i || exit; \
done ; \
else \
exit 1; \
fi
### Installation rules
2013-09-13 10:27:43 +04:00
install-gtk :
install-bin : all install -gtk
2013-10-09 13:49:29 +04:00
$( call QUIET_INSTALL, binaries) \
$( INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)' ; \
$( INSTALL) $( OUTPUT) perf '$(DESTDIR_SQ)$(bindir_SQ)' ; \
$( LN) '$(DESTDIR_SQ)$(bindir_SQ)/perf' '$(DESTDIR_SQ)$(bindir_SQ)/trace'
2014-10-24 01:16:03 +04:00
i f n d e f N O _ P E R F _ R E A D _ V D S O 3 2
$( call QUIET_INSTALL, perf-read-vdso32) \
$( INSTALL) $( OUTPUT) perf-read-vdso32 '$(DESTDIR_SQ)$(bindir_SQ)' ;
e n d i f
i f n d e f N O _ P E R F _ R E A D _ V D S O X 3 2
$( call QUIET_INSTALL, perf-read-vdsox32) \
$( INSTALL) $( OUTPUT) perf-read-vdsox32 '$(DESTDIR_SQ)$(bindir_SQ)' ;
e n d i f
2013-10-09 13:49:29 +04:00
$( call QUIET_INSTALL, libexec) \
$( INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
$( call QUIET_INSTALL, perf-archive) \
$( INSTALL) $( OUTPUT) perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
2014-07-31 10:01:12 +04:00
$( call QUIET_INSTALL, perf-with-kcore) \
$( INSTALL) $( OUTPUT) perf-with-kcore -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
2013-10-02 13:49:08 +04:00
i f n d e f N O _ L I B P E R L
2013-10-09 13:49:29 +04:00
$( call QUIET_INSTALL, perl-scripts) \
$( INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace' ; \
$( 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) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin' ; \
$( INSTALL) scripts/perl/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'
2013-10-02 13:49:08 +04:00
e n d i f
i f n d e f N O _ L I B P Y T H O N
2013-10-09 13:49:29 +04:00
$( call QUIET_INSTALL, python-scripts) \
$( INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace' ; \
$( INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin' ; \
$( INSTALL) scripts/python/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace' ; \
$( 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'
2013-10-02 13:49:08 +04:00
e n d i f
2013-11-17 20:13:27 +04:00
$( call QUIET_INSTALL, perf_completion-script) \
2013-10-09 13:49:29 +04:00
$( INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d' ; \
2013-11-17 20:13:27 +04:00
$( INSTALL) perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf'
2013-10-09 13:49:29 +04:00
$( call QUIET_INSTALL, tests) \
$( 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'
2013-10-02 13:49:08 +04:00
2013-12-03 17:09:21 +04:00
install : install -bin try -install -man install -traceevent -plugins
2013-10-02 13:49:08 +04:00
install-python_ext :
$( PYTHON_WORD) util/setup.py --quiet install --root= '/$(DESTDIR_SQ)'
# 'make install-doc' should call 'make -C Documentation install'
$(INSTALL_DOC_TARGETS) :
$( QUIET_SUBDIR0) Documentation $( QUIET_SUBDIR1) $( @:-doc= )
### Cleaning rules
#
# This is here, not in config/Makefile, because config/Makefile does
# not get included for the clean target:
#
config-clean :
2013-10-09 13:49:26 +04:00
$( call QUIET_CLEAN, config)
2015-03-01 23:19:44 +03:00
$( Q) $( MAKE) -C $( srctree) /tools/build/feature/ clean >/dev/null
2013-10-02 13:49:08 +04:00
2015-01-10 22:53:13 +03:00
clean : $( LIBTRACEEVENT ) -clean $( LIBAPI ) -clean config -clean
2014-12-30 18:51:35 +03:00
$( call QUIET_CLEAN, core-objs) $( RM) $( LIB_FILE) $( OUTPUT) perf-archive $( OUTPUT) perf-with-kcore $( LANG_BINDINGS)
2015-01-12 01:59:55 +03:00
$( Q) find . -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
$( Q) $( RM) .config-detected
2014-10-24 01:16:03 +04:00
$( call QUIET_CLEAN, core-progs) $( RM) $( ALL_PROGRAMS) perf perf-read-vdso32 perf-read-vdsox32
2015-03-01 22:50:47 +03:00
$( call QUIET_CLEAN, core-gen) $( RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $( OUTPUT) common-cmds.h TAGS tags cscope* $( OUTPUT) PERF-VERSION-FILE $( OUTPUT) FEATURE-DUMP $( OUTPUT) util/*-bison* $( OUTPUT) util/*-flex*
2013-12-09 20:14:23 +04:00
$( QUIET_SUBDIR0) Documentation $( QUIET_SUBDIR1) clean
2013-10-02 13:49:08 +04:00
$( python-clean)
#
# Trick: if ../../.git does not exist - we are building out of tree for example,
# then force version regeneration:
#
i f e q ( $( wildcard ../../.git /HEAD ) , )
GIT-HEAD-PHONY = ../../.git/HEAD
e l s e
GIT-HEAD-PHONY =
e n d i f
2014-12-29 15:52:36 +03:00
FORCE :
2013-09-13 10:27:43 +04:00
.PHONY : all install clean config -clean strip install -gtk
2013-10-02 13:49:08 +04:00
.PHONY : shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
2014-12-30 21:02:51 +03:00
.PHONY : $( GIT -HEAD -PHONY ) TAGS tags cscope FORCE single_dep
2013-10-02 13:49:08 +04:00