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.
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))
e n d i f
$(OUTPUT)PERF-VERSION-FILE : ../../.git /HEAD
@$( SHELL_PATH) util/PERF-VERSION-GEN $( OUTPUT)
@touch $( OUTPUT) PERF-VERSION-FILE
CC = $( CROSS_COMPILE) gcc
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
BUILTIN_OBJS =
LIB_H =
LIB_OBJS =
2013-09-13 10:27:43 +04:00
GTK_OBJS =
2013-10-02 13:49:08 +04:00
PYRF_OBJS =
SCRIPT_SH =
SCRIPT_SH += perf-archive.sh
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
2013-12-09 20:14:23 +04:00
LIBAPIKFS = $( LIB_PATH) libapikfs.a
export LIBAPIKFS
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)
2013-12-09 20:14:23 +04:00
PYTHON_EXT_DEPS := util/python-ext-sources util/setup.py $( LIBTRACEEVENT) $( LIBAPIKFS)
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) )
#
# Single 'perf' binary right now:
#
PROGRAMS += $( OUTPUT) perf
# 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
$(OUTPUT)util/parse-events-flex.c : util /parse -events .l $( OUTPUT ) util /parse -events -bison .c
$( 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
$(OUTPUT)util/parse-events-bison.c : util /parse -events .y
$( QUIET_BISON) $( BISON) -v util/parse-events.y -d $( PARSER_DEBUG_BISON) -o $( OUTPUT) util/parse-events-bison.c -p parse_events_
$(OUTPUT)util/pmu-flex.c : util /pmu .l $( OUTPUT ) util /pmu -bison .c
$( QUIET_FLEX) $( FLEX) --header-file= $( OUTPUT) util/pmu-flex.h -t util/pmu.l > $( OUTPUT) util/pmu-flex.c
$(OUTPUT)util/pmu-bison.c : util /pmu .y
$( QUIET_BISON) $( BISON) -v util/pmu.y -d -o $( OUTPUT) util/pmu-bison.c -p perf_pmu_
$(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
LIB_FILE = $( OUTPUT) libperf.a
2013-12-11 16:15:00 +04:00
LIB_H += ../lib/symbol/kallsyms.h
2013-10-02 13:49:08 +04:00
LIB_H += ../../include/uapi/linux/perf_event.h
LIB_H += ../../include/linux/rbtree.h
LIB_H += ../../include/linux/list.h
LIB_H += ../../include/uapi/linux/const.h
2014-02-05 18:51:53 +04:00
LIB_H += ../include/linux/hash.h
2013-10-02 13:49:08 +04:00
LIB_H += ../../include/linux/stringify.h
LIB_H += util/include/linux/bitmap.h
LIB_H += util/include/linux/bitops.h
2014-01-09 18:00:52 +04:00
LIB_H += ../include/linux/compiler.h
2013-10-02 13:49:08 +04:00
LIB_H += util/include/linux/const.h
LIB_H += util/include/linux/ctype.h
LIB_H += util/include/linux/kernel.h
LIB_H += util/include/linux/list.h
LIB_H += util/include/linux/export.h
LIB_H += util/include/linux/poison.h
LIB_H += util/include/linux/rbtree.h
LIB_H += util/include/linux/rbtree_augmented.h
LIB_H += util/include/linux/string.h
LIB_H += util/include/linux/types.h
LIB_H += util/include/linux/linkage.h
LIB_H += util/include/asm/asm-offsets.h
2014-01-09 18:00:54 +04:00
LIB_H += ../include/asm/bug.h
2013-10-02 13:49:08 +04:00
LIB_H += util/include/asm/byteorder.h
LIB_H += util/include/asm/hweight.h
LIB_H += util/include/asm/swab.h
LIB_H += util/include/asm/system.h
LIB_H += util/include/asm/uaccess.h
LIB_H += util/include/dwarf-regs.h
LIB_H += util/include/asm/dwarf2.h
LIB_H += util/include/asm/cpufeature.h
LIB_H += util/include/asm/unistd_32.h
LIB_H += util/include/asm/unistd_64.h
LIB_H += perf.h
LIB_H += util/annotate.h
LIB_H += util/cache.h
LIB_H += util/callchain.h
LIB_H += util/build-id.h
LIB_H += util/debug.h
LIB_H += util/pmu.h
LIB_H += util/event.h
LIB_H += util/evsel.h
LIB_H += util/evlist.h
LIB_H += util/exec_cmd.h
LIB_H += util/types.h
LIB_H += util/levenshtein.h
LIB_H += util/machine.h
LIB_H += util/map.h
LIB_H += util/parse-options.h
LIB_H += util/parse-events.h
LIB_H += util/quote.h
LIB_H += util/util.h
LIB_H += util/xyarray.h
LIB_H += util/header.h
LIB_H += util/help.h
LIB_H += util/session.h
LIB_H += util/strbuf.h
LIB_H += util/strlist.h
LIB_H += util/strfilter.h
LIB_H += util/svghelper.h
LIB_H += util/tool.h
LIB_H += util/run-command.h
LIB_H += util/sigchain.h
LIB_H += util/dso.h
LIB_H += util/symbol.h
LIB_H += util/color.h
LIB_H += util/values.h
LIB_H += util/sort.h
LIB_H += util/hist.h
2013-09-11 18:56:44 +04:00
LIB_H += util/comm.h
2013-10-02 13:49:08 +04:00
LIB_H += util/thread.h
LIB_H += util/thread_map.h
LIB_H += util/trace-event.h
LIB_H += util/probe-finder.h
LIB_H += util/dwarf-aux.h
LIB_H += util/probe-event.h
LIB_H += util/pstack.h
LIB_H += util/cpumap.h
LIB_H += util/top.h
LIB_H += $( ARCH_INCLUDE)
LIB_H += util/cgroup.h
LIB_H += $( LIB_INCLUDE) traceevent/event-parse.h
LIB_H += util/target.h
LIB_H += util/rblist.h
LIB_H += util/intlist.h
LIB_H += util/perf_regs.h
LIB_H += util/unwind.h
LIB_H += util/vdso.h
LIB_H += ui/helpline.h
LIB_H += ui/progress.h
LIB_H += ui/util.h
LIB_H += ui/ui.h
2013-10-26 22:53:14 +04:00
LIB_H += util/data.h
2013-10-02 13:49:08 +04:00
LIB_OBJS += $( OUTPUT) util/abspath.o
LIB_OBJS += $( OUTPUT) util/alias.o
LIB_OBJS += $( OUTPUT) util/annotate.o
LIB_OBJS += $( OUTPUT) util/build-id.o
LIB_OBJS += $( OUTPUT) util/config.o
LIB_OBJS += $( OUTPUT) util/ctype.o
LIB_OBJS += $( OUTPUT) util/pmu.o
LIB_OBJS += $( OUTPUT) util/environment.o
LIB_OBJS += $( OUTPUT) util/event.o
LIB_OBJS += $( OUTPUT) util/evlist.o
LIB_OBJS += $( OUTPUT) util/evsel.o
LIB_OBJS += $( OUTPUT) util/exec_cmd.o
LIB_OBJS += $( OUTPUT) util/help.o
2013-12-11 16:15:00 +04:00
LIB_OBJS += $( OUTPUT) util/kallsyms.o
2013-10-02 13:49:08 +04:00
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
LIB_OBJS += $( OUTPUT) util/strfilter.o
LIB_OBJS += $( OUTPUT) util/top.o
LIB_OBJS += $( OUTPUT) util/usage.o
LIB_OBJS += $( OUTPUT) util/wrapper.o
LIB_OBJS += $( OUTPUT) util/sigchain.o
LIB_OBJS += $( OUTPUT) util/dso.o
LIB_OBJS += $( OUTPUT) util/symbol.o
LIB_OBJS += $( OUTPUT) util/symbol-elf.o
LIB_OBJS += $( OUTPUT) util/color.o
LIB_OBJS += $( OUTPUT) util/pager.o
LIB_OBJS += $( OUTPUT) util/header.o
LIB_OBJS += $( OUTPUT) util/callchain.o
LIB_OBJS += $( OUTPUT) util/values.o
LIB_OBJS += $( OUTPUT) util/debug.o
LIB_OBJS += $( OUTPUT) util/machine.o
LIB_OBJS += $( OUTPUT) util/map.o
LIB_OBJS += $( OUTPUT) util/pstack.o
LIB_OBJS += $( OUTPUT) util/session.o
2013-09-11 18:56:44 +04:00
LIB_OBJS += $( OUTPUT) util/comm.o
2013-10-02 13:49:08 +04:00
LIB_OBJS += $( OUTPUT) util/thread.o
LIB_OBJS += $( OUTPUT) util/thread_map.o
LIB_OBJS += $( OUTPUT) util/trace-event-parse.o
LIB_OBJS += $( OUTPUT) util/parse-events-flex.o
LIB_OBJS += $( OUTPUT) util/parse-events-bison.o
LIB_OBJS += $( OUTPUT) util/pmu-flex.o
LIB_OBJS += $( OUTPUT) util/pmu-bison.o
LIB_OBJS += $( OUTPUT) util/trace-event-read.o
LIB_OBJS += $( OUTPUT) util/trace-event-info.o
LIB_OBJS += $( OUTPUT) util/trace-event-scripting.o
2013-12-03 17:09:23 +04:00
LIB_OBJS += $( OUTPUT) util/trace-event.o
2013-10-02 13:49:08 +04:00
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
LIB_OBJS += $( OUTPUT) util/xyarray.o
LIB_OBJS += $( OUTPUT) util/cpumap.o
LIB_OBJS += $( OUTPUT) util/cgroup.o
LIB_OBJS += $( OUTPUT) util/target.o
LIB_OBJS += $( OUTPUT) util/rblist.o
LIB_OBJS += $( OUTPUT) util/intlist.o
LIB_OBJS += $( OUTPUT) util/vdso.o
LIB_OBJS += $( OUTPUT) util/stat.o
LIB_OBJS += $( OUTPUT) util/record.o
2013-09-11 09:09:28 +04:00
LIB_OBJS += $( OUTPUT) util/srcline.o
2013-10-15 18:27:33 +04:00
LIB_OBJS += $( OUTPUT) util/data.o
2013-10-02 13:49:08 +04:00
LIB_OBJS += $( OUTPUT) ui/setup.o
LIB_OBJS += $( OUTPUT) ui/helpline.o
LIB_OBJS += $( OUTPUT) ui/progress.o
LIB_OBJS += $( OUTPUT) ui/util.o
LIB_OBJS += $( OUTPUT) ui/hist.o
LIB_OBJS += $( OUTPUT) ui/stdio/hist.o
LIB_OBJS += $( OUTPUT) arch/common.o
LIB_OBJS += $( OUTPUT) tests/parse-events.o
LIB_OBJS += $( OUTPUT) tests/dso-data.o
LIB_OBJS += $( OUTPUT) tests/attr.o
LIB_OBJS += $( OUTPUT) tests/vmlinux-kallsyms.o
LIB_OBJS += $( OUTPUT) tests/open-syscall.o
LIB_OBJS += $( OUTPUT) tests/open-syscall-all-cpus.o
LIB_OBJS += $( OUTPUT) tests/open-syscall-tp-fields.o
LIB_OBJS += $( OUTPUT) tests/mmap-basic.o
LIB_OBJS += $( OUTPUT) tests/perf-record.o
LIB_OBJS += $( OUTPUT) tests/rdpmc.o
LIB_OBJS += $( OUTPUT) tests/evsel-roundtrip-name.o
LIB_OBJS += $( OUTPUT) tests/evsel-tp-sched.o
LIB_OBJS += $( OUTPUT) tests/pmu.o
LIB_OBJS += $( OUTPUT) tests/hists_link.o
LIB_OBJS += $( OUTPUT) tests/python-use.o
LIB_OBJS += $( OUTPUT) tests/bp_signal.o
LIB_OBJS += $( OUTPUT) tests/bp_signal_overflow.o
LIB_OBJS += $( OUTPUT) tests/task-exit.o
LIB_OBJS += $( OUTPUT) tests/sw-clock.o
i f e q ( $( ARCH ) , x 8 6 )
LIB_OBJS += $( OUTPUT) tests/perf-time-to-tsc.o
e n d i f
LIB_OBJS += $( OUTPUT) tests/code-reading.o
LIB_OBJS += $( OUTPUT) tests/sample-parsing.o
LIB_OBJS += $( OUTPUT) tests/parse-no-sample-id-all.o
2014-02-19 19:52:58 +04:00
i f n d e f N O _ D W A R F _ U N W I N D
2014-01-07 16:47:22 +04:00
i f e q ( $( ARCH ) , x 8 6 )
LIB_OBJS += $( OUTPUT) tests/dwarf-unwind.o
e n d i f
e n d i f
2013-10-02 13:49:08 +04:00
BUILTIN_OBJS += $( OUTPUT) builtin-annotate.o
BUILTIN_OBJS += $( OUTPUT) builtin-bench.o
# Benchmark modules
BUILTIN_OBJS += $( OUTPUT) bench/sched-messaging.o
BUILTIN_OBJS += $( OUTPUT) bench/sched-pipe.o
i f e q ( $( RAW_ARCH ) , x 8 6 _ 6 4 )
BUILTIN_OBJS += $( OUTPUT) bench/mem-memcpy-x86-64-asm.o
BUILTIN_OBJS += $( OUTPUT) bench/mem-memset-x86-64-asm.o
e n d i f
BUILTIN_OBJS += $( OUTPUT) bench/mem-memcpy.o
BUILTIN_OBJS += $( OUTPUT) bench/mem-memset.o
BUILTIN_OBJS += $( OUTPUT) builtin-diff.o
BUILTIN_OBJS += $( OUTPUT) builtin-evlist.o
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
BUILTIN_OBJS += $( OUTPUT) builtin-script.o
BUILTIN_OBJS += $( OUTPUT) builtin-probe.o
BUILTIN_OBJS += $( OUTPUT) builtin-kmem.o
BUILTIN_OBJS += $( OUTPUT) builtin-lock.o
BUILTIN_OBJS += $( OUTPUT) builtin-kvm.o
BUILTIN_OBJS += $( OUTPUT) builtin-inject.o
BUILTIN_OBJS += $( OUTPUT) tests/builtin-test.o
BUILTIN_OBJS += $( OUTPUT) builtin-mem.o
2013-12-09 20:14:23 +04:00
PERFLIBS = $( LIB_FILE) $( LIBAPIKFS) $( 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 d e f N O _ L I B E L F
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
e l s e # NO_LIBELF
i f n d e f N O _ D W A R F
LIB_OBJS += $( OUTPUT) util/probe-finder.o
LIB_OBJS += $( OUTPUT) util/dwarf-aux.o
e n d i f # NO_DWARF
e n d i f # NO_LIBELF
2014-02-19 19:52:57 +04:00
i f n d e f N O _ L I B D W _ D W A R F _ U N W I N D
LIB_OBJS += $( OUTPUT) util/unwind-libdw.o
LIB_H += util/unwind-libdw.h
e n d i f
2013-10-02 13:49:08 +04:00
i f n d e f N O _ L I B U N W I N D
2014-01-07 16:47:26 +04:00
LIB_OBJS += $( OUTPUT) util/unwind-libunwind.o
2013-10-02 13:49:08 +04:00
e n d i f
LIB_OBJS += $( OUTPUT) tests/keep-tracking.o
i f n d e f N O _ L I B A U D I T
BUILTIN_OBJS += $( OUTPUT) builtin-trace.o
e n d i f
i f n d e f N O _ S L A N G
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
2013-12-26 09:37:59 +04:00
LIB_OBJS += $( OUTPUT) ui/browsers/header.o
2013-10-02 13:49:08 +04:00
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
2013-10-23 21:08:48 +04:00
LIB_H += ui/tui/tui.h
2013-10-02 13:49:08 +04:00
LIB_H += ui/browser.h
LIB_H += ui/browsers/map.h
LIB_H += ui/keysyms.h
LIB_H += ui/libslang.h
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
GTK_OBJS += $( OUTPUT) ui/gtk/browser.o
GTK_OBJS += $( OUTPUT) ui/gtk/hists.o
GTK_OBJS += $( OUTPUT) ui/gtk/setup.o
GTK_OBJS += $( OUTPUT) ui/gtk/util.o
GTK_OBJS += $( OUTPUT) ui/gtk/helpline.o
GTK_OBJS += $( OUTPUT) ui/gtk/progress.o
GTK_OBJS += $( OUTPUT) ui/gtk/annotate.o
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 n d e f N O _ L I B P E R L
LIB_OBJS += $( OUTPUT) util/scripting-engines/trace-event-perl.o
LIB_OBJS += $( OUTPUT) scripts/perl/Perf-Trace-Util/Context.o
e n d i f
i f n d e f N O _ L I B P Y T H O N
LIB_OBJS += $( OUTPUT) util/scripting-engines/trace-event-python.o
LIB_OBJS += $( OUTPUT) scripts/python/Perf-Trace-Util/Context.o
e n d i f
i f e q ( $( NO_PERF_REGS ) , 0 )
ifeq ( $( ARCH) ,x86)
LIB_H += arch/x86/include/perf_regs.h
endif
2014-01-07 16:47:29 +04:00
LIB_OBJS += $( OUTPUT) util/perf_regs.o
2013-10-02 13:49:08 +04:00
e n d i f
i f n d e f N O _ L I B N U M A
BUILTIN_OBJS += $( OUTPUT) bench/numa.o
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 :
@$$ ( :)
shell_compatibility_test : please_set_SHELL_PATH_to_a_more_modern_shell
strip : $( PROGRAMS ) $( OUTPUT ) perf
$( STRIP) $( STRIP_OPTS) $( PROGRAMS) $( OUTPUT) perf
$(OUTPUT)perf.o : perf .c $( OUTPUT ) common -cmds .h $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -include $( OUTPUT) PERF-VERSION-FILE \
'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
$( CFLAGS) -c $( filter %.c,$^) -o $@
$(OUTPUT)perf : $( OUTPUT ) perf .o $( BUILTIN_OBJS ) $( PERFLIBS )
$( QUIET_LINK) $( CC) $( CFLAGS) $( LDFLAGS) $( OUTPUT) perf.o \
$( BUILTIN_OBJS) $( LIBS) -o $@
2013-09-13 10:27:43 +04:00
$(GTK_OBJS) : $( OUTPUT ) %.o : %.c $( LIB_H )
$( QUIET_CC) $( CC) -o $@ -c -fPIC $( CFLAGS) $( GTK_CFLAGS) $<
$(OUTPUT)libperf-gtk.so : $( GTK_OBJS ) $( PERFLIBS )
$( QUIET_LINK) $( CC) -o $@ -shared $( ALL_LDFLAGS) $( filter %.o,$^) $( GTK_LIBS)
2013-10-02 13:49:08 +04:00
$(OUTPUT)builtin-help.o : builtin -help .c $( OUTPUT ) common -cmds .h $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) \
'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
'-DPERF_MAN_PATH="$(mandir_SQ)"' \
'-DPERF_INFO_PATH="$(infodir_SQ)"' $<
$(OUTPUT)builtin-timechart.o : builtin -timechart .c $( OUTPUT ) common -cmds .h $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) \
'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
'-DPERF_MAN_PATH="$(mandir_SQ)"' \
'-DPERF_INFO_PATH="$(infodir_SQ)"' $<
$(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
$( OUTPUT ) p e r f . o p e r f . s p e c \
$( SCRIPTS) \
: $( 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
$(OUTPUT)util/%-flex.o : $( OUTPUT ) util /%-flex .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c -Iutil/ $( CFLAGS) -w $<
$(OUTPUT)util/%-bison.o : $( OUTPUT ) util /%-bison .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c -Iutil/ $( CFLAGS) -DYYENABLE_NLS= 0 -DYYLTYPE_IS_TRIVIAL= 0 -w $<
$(OUTPUT)%.o : %.c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) $<
$(OUTPUT)%.i : %.c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -E $( CFLAGS) $<
$(OUTPUT)%.s : %.c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -S $( CFLAGS) $<
$(OUTPUT)%.o : %.S
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) $<
$(OUTPUT)%.s : %.S
$( QUIET_CC) $( CC) -o $@ -E $( CFLAGS) $<
$(OUTPUT)util/exec_cmd.o : util /exec_cmd .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) \
'-DPERF_EXEC_PATH="$(perfexecdir_SQ)"' \
'-DPREFIX="$(prefix_SQ)"' \
$<
$(OUTPUT)tests/attr.o : tests /attr .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) \
'-DBINDIR="$(bindir_SQ)"' -DPYTHON= '"$(PYTHON_WORD)"' \
$<
$(OUTPUT)tests/python-use.o : tests /python -use .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) \
-DPYTHONPATH= '"$(OUTPUT)python"' \
-DPYTHON= '"$(PYTHON_WORD)"' \
$<
2014-01-07 16:47:22 +04:00
$(OUTPUT)tests/dwarf-unwind.o : tests /dwarf -unwind .c
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) -fno-optimize-sibling-calls $<
2013-10-02 13:49:08 +04:00
$(OUTPUT)util/config.o : util /config .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) -DETC_PERFCONFIG= '"$(ETC_PERFCONFIG_SQ)"' $<
2013-09-13 10:27:43 +04:00
$(OUTPUT)ui/setup.o : ui /setup .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) -DLIBDIR= '"$(libdir_SQ)"' $<
2013-10-02 13:49:08 +04:00
$(OUTPUT)ui/browser.o : ui /browser .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) -DENABLE_SLFUTURE_CONST $<
$(OUTPUT)ui/browsers/annotate.o : ui /browsers /annotate .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) -DENABLE_SLFUTURE_CONST $<
$(OUTPUT)ui/browsers/hists.o : ui /browsers /hists .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) -DENABLE_SLFUTURE_CONST $<
$(OUTPUT)ui/browsers/map.o : ui /browsers /map .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) -DENABLE_SLFUTURE_CONST $<
$(OUTPUT)ui/browsers/scripts.o : ui /browsers /scripts .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) -DENABLE_SLFUTURE_CONST $<
2013-12-11 16:15:00 +04:00
$(OUTPUT)util/kallsyms.o : ../lib /symbol /kallsyms .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) $<
2013-10-02 13:49:08 +04:00
$(OUTPUT)util/rbtree.o : ../../lib /rbtree .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) -Wno-unused-parameter -DETC_PERFCONFIG= '"$(ETC_PERFCONFIG_SQ)"' $<
$(OUTPUT)util/parse-events.o : util /parse -events .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) -Wno-redundant-decls $<
$(OUTPUT)util/scripting-engines/trace-event-perl.o : util /scripting -engines /trace -event -perl .c $( OUTPUT ) PERF -CFLAGS
$( 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 $<
$(OUTPUT)scripts/perl/Perf-Trace-Util/Context.o : scripts /perl /Perf -Trace -Util /Context .c $( OUTPUT ) PERF -CFLAGS
$( 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 $<
$(OUTPUT)util/scripting-engines/trace-event-python.o : util /scripting -engines /trace -event -python .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) $( PYTHON_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-shadow $<
$(OUTPUT)scripts/python/Perf-Trace-Util/Context.o : scripts /python /Perf -Trace -Util /Context .c $( OUTPUT ) PERF -CFLAGS
$( QUIET_CC) $( CC) -o $@ -c $( CFLAGS) $( PYTHON_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-nested-externs $<
$(OUTPUT)perf-% : %.o $( PERFLIBS )
$( QUIET_LINK) $( CC) $( CFLAGS) -o $@ $( LDFLAGS) $( filter %.o,$^) $( LIBS)
$(LIB_OBJS) $(BUILTIN_OBJS) : $( LIB_H )
$(patsubst perf-%,%.o,$(PROGRAMS)) : $( LIB_H ) $( wildcard */*.h )
# 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.
2013-09-13 10:27:43 +04:00
DIRECTORY_DEPS = $( LIB_OBJS) $( BUILTIN_OBJS) $( GTK_OBJS)
DIRECTORY_DEPS += $( OUTPUT) PERF-VERSION-FILE $( OUTPUT) common-cmds.h
2014-02-19 14:21:40 +04:00
# no need to add flex objects, because they depend on bison ones
DIRECTORY_DEPS += $( OUTPUT) util/parse-events-bison.c
DIRECTORY_DEPS += $( OUTPUT) util/pmu-bison.c
OUTPUT_DIRECTORIES := $( sort $( dir $( DIRECTORY_DEPS) ) )
$(DIRECTORY_DEPS) : | $( OUTPUT_DIRECTORIES )
2013-10-02 13:49:08 +04:00
# In the second step, we make a rule to actually create these directories
2014-02-19 14:21:40 +04:00
$(OUTPUT_DIRECTORIES) :
2013-10-02 13:49:08 +04:00
$( QUIET_MKDIR) $( MKDIR) -p $@ 2>/dev/null
$(LIB_FILE) : $( LIB_OBJS )
$( QUIET_AR) $( RM) $@ && $( AR) rcs $@ $( LIB_OBJS)
# libtraceevent.a
TE_SOURCES = $( wildcard $( TRACE_EVENT_DIR) *.[ ch] )
2013-12-03 17:09:21 +04:00
LIBTRACEEVENT_FLAGS = $( QUIET_SUBDIR1) O = $( OUTPUT)
LIBTRACEEVENT_FLAGS += CFLAGS = " -g -Wall $( EXTRA_CFLAGS) "
LIBTRACEEVENT_FLAGS += plugin_dir = $( plugindir_SQ)
$(LIBTRACEEVENT) : $( TE_SOURCES ) $( OUTPUT ) PERF -CFLAGS
$( QUIET_SUBDIR0) $( TRACE_EVENT_DIR) $( LIBTRACEEVENT_FLAGS) 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)
@$( 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 )
2013-12-03 17:09:21 +04:00
$( QUIET_SUBDIR0) $( TRACE_EVENT_DIR) $( LIBTRACEEVENT_FLAGS) install_plugins
2013-12-09 20:14:23 +04:00
LIBAPIKFS_SOURCES = $( wildcard $( LIB_PATH) fs/*.[ ch] )
2013-10-02 13:49:08 +04:00
# if subdir is set, we've been called from above so target has been built
# already
2013-12-09 20:14:23 +04:00
$(LIBAPIKFS) : $( LIBAPIKFS_SOURCES )
2013-10-02 13:49:08 +04:00
i f e q ( $( subdir ) , )
2013-12-09 20:14:23 +04:00
$( QUIET_SUBDIR0) $( LIB_DIR) $( QUIET_SUBDIR1) O = $( OUTPUT) libapikfs.a
2013-10-02 13:49:08 +04:00
e n d i f
2013-12-09 20:14:23 +04:00
$(LIBAPIKFS)-clean :
2013-10-02 13:49:08 +04:00
i f e q ( $( subdir ) , )
2013-12-09 20:14:23 +04:00
$( call QUIET_CLEAN, libapikfs)
@$( MAKE) -C $( LIB_DIR) O = $( OUTPUT) clean >/dev/null
2013-10-02 13:49:08 +04:00
e n d i f
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'
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)
TAGS :
$( RM) TAGS
$( FIND) . -name '*.[hcS]' -print | xargs etags -a
tags :
$( RM) tags
$( FIND) . -name '*.[hcS]' -print | xargs ctags -a
cscope :
$( RM) cscope*
$( FIND) . -name '*.[hcS]' -print | xargs cscope -b
### Detect prefix changes
TRACK_CFLAGS = $( subst ',' \' ' ,$( CFLAGS) ) :\
2013-12-03 17:09:21 +04:00
$( bindir_SQ) :$( perfexecdir_SQ) :$( template_dir_SQ) :$( prefix_SQ) :$( plugindir_SQ)
2013-10-02 13:49:08 +04:00
$(OUTPUT)PERF-CFLAGS : .FORCE -PERF -CFLAGS
@FLAGS= '$(TRACK_CFLAGS)' ; \
if test x" $$ FLAGS " != x" `cat $( OUTPUT) PERF-CFLAGS 2>/dev/null` " ; then \
2013-10-09 13:49:27 +04:00
echo 1>& 2 " FLAGS: * new build flags or prefix" ; \
2013-10-02 13:49:08 +04:00
echo " $$ FLAGS " >$( OUTPUT) PERF-CFLAGS; \
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.
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'
$( 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)'
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)
@$( MAKE) -C config/feature-checks clean >/dev/null
2013-10-02 13:49:08 +04:00
2013-12-09 20:14:23 +04:00
clean : $( LIBTRACEEVENT ) -clean $( LIBAPIKFS ) -clean config -clean
2013-10-09 13:49:26 +04:00
$( call QUIET_CLEAN, core-objs) $( RM) $( LIB_OBJS) $( BUILTIN_OBJS) $( LIB_FILE) $( OUTPUT) perf-archive $( OUTPUT) perf.o $( LANG_BINDINGS) $( GTK_OBJS)
$( call QUIET_CLEAN, core-progs) $( RM) $( ALL_PROGRAMS) perf
2014-02-19 19:52:54 +04:00
$( 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*
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
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
.PHONY : $( GIT -HEAD -PHONY ) TAGS tags cscope .FORCE -PERF -CFLAGS