1e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifeq ("$(origin O)", "command line")
2e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	OUTPUT := $(O)/
3e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
4e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
5e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# The default target of this Makefile is...
6e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengall:
7e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
8e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenginclude config/utilities.mak
9e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
10e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifneq ($(OUTPUT),)
11e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# check that the output directory actually exists
12e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengOUTDIR := $(shell cd $(OUTPUT) && /bin/pwd)
13e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(if $(OUTDIR),, $(error output directory "$(OUTPUT)" does not exist))
14e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
15e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
16e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Define V to have a more verbose compile.
17e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
18e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Define PYTHON to point to the python binary if the default
19e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# `python' is not correct; for example: PYTHON=python2
20e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
21e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Define PYTHON_CONFIG to point to the python-config binary if
22e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# the default `$(PYTHON)-config' is not correct.
23e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
24e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Define ASCIIDOC8 if you want to format documentation with AsciiDoc 8
25e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
26e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72.
27e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
28e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Define LDFLAGS=-static to build a static binary.
29e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
30e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Define EXTRA_CFLAGS=-m64 or EXTRA_CFLAGS=-m32 as appropriate for cross-builds.
31e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
32e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Define NO_DWARF if you do not want debug-info analysis feature at all.
33e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
34e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)PERF-VERSION-FILE: .FORCE-PERF-VERSION-FILE
35e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@$(SHELL_PATH) util/PERF-VERSION-GEN $(OUTPUT)
36e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng-include $(OUTPUT)PERF-VERSION-FILE
37e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
38e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenguname_M := $(shell uname -m 2>/dev/null || echo not)
39e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
40e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengARCH ?= $(shell echo $(uname_M) | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
41e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				  -e s/arm.*/arm/ -e s/sa110/arm/ \
42e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				  -e s/s390x/s390/ -e s/parisc64/parisc/ \
43e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				  -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
44e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				  -e s/sh[234].*/sh/ )
45e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
46e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengCC = $(CROSS_COMPILE)gcc
47e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengAR = $(CROSS_COMPILE)ar
48e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
49e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Additional ARCH settings for x86
50e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifeq ($(ARCH),i386)
51e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng        ARCH := x86
52e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
53e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifeq ($(ARCH),x86_64)
54e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	ARCH := x86
55e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	IS_X86_64 := 0
56e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	ifeq (, $(findstring m32,$(EXTRA_CFLAGS)))
57e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		IS_X86_64 := $(shell echo __x86_64__ | ${CC} -E -xc - | tail -n 1)
58e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	endif
59e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	ifeq (${IS_X86_64}, 1)
60e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		RAW_ARCH := x86_64
61e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		ARCH_CFLAGS := -DARCH_X86_64
62e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		ARCH_INCLUDE = ../../arch/x86/lib/memcpy_64.S
63e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	endif
64e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
65e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
66e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
67e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Include saner warnings here, which can catch bugs:
68e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
69e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
70e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := -Wformat
71e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wformat-security
72e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wformat-y2k
73e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wshadow
74e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Winit-self
75e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wpacked
76e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wredundant-decls
77e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wstrict-aliasing=3
78e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wswitch-default
79e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wswitch-enum
80e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wno-system-headers
81e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wundef
82e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wwrite-strings
83e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wbad-function-cast
84e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wmissing-declarations
85e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wmissing-prototypes
86e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wnested-externs
87e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wold-style-definition
88e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wstrict-prototypes
89e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wdeclaration-after-statement
90e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
91e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifeq ("$(origin DEBUG)", "command line")
92e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng  PERF_DEBUG = $(DEBUG)
93e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
94e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifndef PERF_DEBUG
95e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng  CFLAGS_OPTIMIZE = -O6
96e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
97e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
98e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengCFLAGS = -fno-omit-frame-pointer -ggdb3 -Wall -Wextra -std=gnu99 -Werror $(CFLAGS_OPTIMIZE) -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS)
99e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengEXTLIBS = -lpthread -lrt -lelf -lm
100e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengALL_CFLAGS = $(CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
101e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengALL_LDFLAGS = $(LDFLAGS)
102e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengSTRIP ?= strip
103e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
104e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Among the variables below, these:
105e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#   perfexecdir
106e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#   template_dir
107e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#   mandir
108e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#   infodir
109e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#   htmldir
110e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#   ETC_PERFCONFIG (but not sysconfdir)
111e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# can be specified as a relative path some/where/else;
112e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# this is interpreted as relative to $(prefix) and "perf" at
113e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# runtime figures out where they are based on the path to the executable.
114e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# This can help installing the suite in a relocatable way.
115e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
116e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Make the path relative to DESTDIR, not to prefix
117e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifndef DESTDIR
118e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengprefix = $(HOME)
119e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
120e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengbindir_relative = bin
121e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengbindir = $(prefix)/$(bindir_relative)
122e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengmandir = share/man
123e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenginfodir = share/info
124e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengperfexecdir = libexec/perf-core
125e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengsharedir = $(prefix)/share
126e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengtemplate_dir = share/perf-core/templates
127e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenghtmldir = share/doc/perf-doc
128e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifeq ($(prefix),/usr)
129e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengsysconfdir = /etc
130e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengETC_PERFCONFIG = $(sysconfdir)/perfconfig
131e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengelse
132e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengsysconfdir = $(prefix)/etc
133e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengETC_PERFCONFIG = etc/perfconfig
134e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
135e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenglib = lib
136e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
137e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengexport prefix bindir sharedir sysconfdir
138e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
139e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengRM = rm -f
140e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengMKDIR = mkdir
141e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengFIND = find
142e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengINSTALL = install
143e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
144e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# sparse is architecture-neutral, which means that we need to tell it
145e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# explicitly what architecture to check for. Fix this up for yours..
146e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengSPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__
147e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
148e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng-include config/feature-tests.mak
149e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
150e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifeq ($(call try-cc,$(SOURCE_HELLO),-Werror -fstack-protector-all),y)
151e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	CFLAGS := $(CFLAGS) -fstack-protector-all
152e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
153e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
154e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifeq ($(call try-cc,$(SOURCE_HELLO),-Werror -Wstack-protector),y)
155e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng       CFLAGS := $(CFLAGS) -Wstack-protector
156e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
157e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
158e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifeq ($(call try-cc,$(SOURCE_HELLO),-Werror -Wvolatile-register-var),y)
159e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng       CFLAGS := $(CFLAGS) -Wvolatile-register-var
160e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
161e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
162e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng### --- END CONFIGURATION SECTION ---
163e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
164e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Those must not be GNU-specific; they are shared with perl/ which may
165e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# be built by a different compiler. (Note that this is an artifact now
166e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# but it still might be nice to keep that distinction.)
167e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBASIC_CFLAGS = -Iutil/include -Iarch/$(ARCH)/include
168e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBASIC_LDFLAGS =
169e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
170e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Guard against environment variables
171e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS =
172e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H =
173e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS =
174e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengPYRF_OBJS =
175e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengSCRIPT_SH =
176e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
177e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengSCRIPT_SH += perf-archive.sh
178e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
179e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenggrep-libs = $(filter -l%,$(1))
180e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstrip-libs = $(filter-out -l%,$(1))
181e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
182e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)python/perf.so: $(PYRF_OBJS)
183e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_GEN)CFLAGS='$(BASIC_CFLAGS)' $(PYTHON_WORD) util/setup.py \
184e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	  --quiet build_ext \
185e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	  --build-lib='$(OUTPUT)python' \
186e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	  --build-temp='$(OUTPUT)python/temp'
187e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
188e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# No Perl scripts right now:
189e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
190e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
191e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengSCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH))
192e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
193e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
194e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Single 'perf' binary right now:
195e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
196e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengPROGRAMS += $(OUTPUT)perf
197e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
198e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLANG_BINDINGS =
199e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
200e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# what 'all' will build and 'install' will install, in perfexecdir
201e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
202e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
203e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# what 'all' will build but not install in perfexecdir
204e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengOTHER_PROGRAMS = $(OUTPUT)perf
205e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
206e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Set paths to tools early so that they can be used for version tests.
207e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifndef SHELL_PATH
208e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	SHELL_PATH = /bin/sh
209e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
210e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifndef PERL_PATH
211e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	PERL_PATH = /usr/bin/perl
212e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
213e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
214e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengexport PERL_PATH
215e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
216e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_FILE=$(OUTPUT)libperf.a
217e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
218e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += ../../include/linux/perf_event.h
219e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += ../../include/linux/rbtree.h
220e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += ../../include/linux/list.h
221e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += ../../include/linux/const.h
222e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += ../../include/linux/hash.h
223e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += ../../include/linux/stringify.h
224e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/linux/bitmap.h
225e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/linux/bitops.h
226e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/linux/compiler.h
227e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/linux/const.h
228e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/linux/ctype.h
229e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/linux/kernel.h
230e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/linux/list.h
231e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/linux/module.h
232e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/linux/poison.h
233e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/linux/prefetch.h
234e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/linux/rbtree.h
235e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/linux/string.h
236e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/linux/types.h
237e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/linux/linkage.h
238e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/asm/asm-offsets.h
239e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/asm/bug.h
240e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/asm/byteorder.h
241e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/asm/hweight.h
242e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/asm/swab.h
243e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/asm/system.h
244e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/asm/uaccess.h
245e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/dwarf-regs.h
246e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/asm/dwarf2.h
247e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/include/asm/cpufeature.h
248e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += perf.h
249e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/annotate.h
250e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/cache.h
251e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/callchain.h
252e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/build-id.h
253e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/debug.h
254e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/debugfs.h
255e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/event.h
256e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/evsel.h
257e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/evlist.h
258e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/exec_cmd.h
259e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/types.h
260e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/levenshtein.h
261e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/map.h
262e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/parse-options.h
263e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/parse-events.h
264e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/quote.h
265e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/util.h
266e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/xyarray.h
267e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/header.h
268e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/help.h
269e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/session.h
270e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/strbuf.h
271e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/strlist.h
272e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/strfilter.h
273e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/svghelper.h
274e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/run-command.h
275e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/sigchain.h
276e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/symbol.h
277e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/color.h
278e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/values.h
279e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/sort.h
280e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/hist.h
281e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/thread.h
282e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/thread_map.h
283e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/trace-event.h
284e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/probe-finder.h
285e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/probe-event.h
286e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/pstack.h
287e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/cpumap.h
288e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/top.h
289e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += $(ARCH_INCLUDE)
290e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_H += util/cgroup.h
291e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
292e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/abspath.o
293e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/alias.o
294e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/annotate.o
295e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/build-id.o
296e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/config.o
297e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/ctype.o
298e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/debugfs.o
299e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/environment.o
300e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/event.o
301e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/evlist.o
302e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/evsel.o
303e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/exec_cmd.o
304e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/help.o
305e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/levenshtein.o
306e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/parse-options.o
307e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/parse-events.o
308e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/path.o
309e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/rbtree.o
310e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/bitmap.o
311e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/hweight.o
312e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/run-command.o
313e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/quote.o
314e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/strbuf.o
315e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/string.o
316e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/strlist.o
317e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/strfilter.o
318e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/top.o
319e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/usage.o
320e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/wrapper.o
321e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/sigchain.o
322e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/symbol.o
323e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/color.o
324e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/pager.o
325e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/header.o
326e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/callchain.o
327e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/values.o
328e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/debug.o
329e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/map.o
330e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/pstack.o
331e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/session.o
332e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/thread.o
333e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/thread_map.o
334e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/trace-event-parse.o
335e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/trace-event-read.o
336e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/trace-event-info.o
337e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/trace-event-scripting.o
338e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/svghelper.o
339e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/sort.o
340e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/hist.o
341e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/probe-event.o
342e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/util.o
343e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/xyarray.o
344e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/cpumap.o
345e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIB_OBJS += $(OUTPUT)util/cgroup.o
346e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
347e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-annotate.o
348e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
349e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-bench.o
350e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
351e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Benchmark modules
352e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)bench/sched-messaging.o
353e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)bench/sched-pipe.o
354e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifeq ($(RAW_ARCH),x86_64)
355e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)bench/mem-memcpy-x86-64-asm.o
356e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
357e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)bench/mem-memcpy.o
358e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
359e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-diff.o
360e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-evlist.o
361e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-help.o
362e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-sched.o
363e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-buildid-list.o
364e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-buildid-cache.o
365e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-list.o
366e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-record.o
367e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-report.o
368e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-stat.o
369e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-timechart.o
370e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-top.o
371e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-script.o
372e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-probe.o
373e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-kmem.o
374e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-lock.o
375e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-kvm.o
376e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-test.o
377e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengBUILTIN_OBJS += $(OUTPUT)builtin-inject.o
378e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
379e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengPERFLIBS = $(LIB_FILE)
380e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
381e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Files needed for the python binding, perf.so
382e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# pyrf is just an internal name needed for all those wrappers.
383e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# This has to be in sync with what is in the 'sources' variable in
384e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# tools/perf/util/setup.py
385e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
386e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengPYRF_OBJS += $(OUTPUT)util/cpumap.o
387e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengPYRF_OBJS += $(OUTPUT)util/ctype.o
388e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengPYRF_OBJS += $(OUTPUT)util/evlist.o
389e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengPYRF_OBJS += $(OUTPUT)util/evsel.o
390e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengPYRF_OBJS += $(OUTPUT)util/python.o
391e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengPYRF_OBJS += $(OUTPUT)util/thread_map.o
392e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengPYRF_OBJS += $(OUTPUT)util/util.o
393e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengPYRF_OBJS += $(OUTPUT)util/xyarray.o
394e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
395e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
396e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Platform specific tweaks
397e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
398e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
399e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# We choose to avoid "if .. else if .. else .. endif endif"
400e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# because maintaining the nesting to match is a pain.  If
401e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# we had "elif" things would have been much nicer...
402e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
403e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng-include config.mak.autogen
404e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng-include config.mak
405e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
406e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifndef NO_DWARF
407e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengFLAGS_DWARF=$(ALL_CFLAGS) -ldw -lelf $(ALL_LDFLAGS) $(EXTLIBS)
408e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifneq ($(call try-cc,$(SOURCE_DWARF),$(FLAGS_DWARF)),y)
409e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	msg := $(warning No libdw.h found or old libdw.h found or elfutils is older than 0.138, disables dwarf support. Please install new elfutils-devel/libdw-dev);
410e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	NO_DWARF := 1
411e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif # Dwarf support
412e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif # NO_DWARF
413e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
414e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng-include arch/$(ARCH)/Makefile
415e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
416e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifneq ($(OUTPUT),)
417e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	BASIC_CFLAGS += -I$(OUTPUT)
418e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
419e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
420e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengFLAGS_LIBELF=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS)
421e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifneq ($(call try-cc,$(SOURCE_LIBELF),$(FLAGS_LIBELF)),y)
422e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	FLAGS_GLIBC=$(ALL_CFLAGS) $(ALL_LDFLAGS)
423e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	ifneq ($(call try-cc,$(SOURCE_GLIBC),$(FLAGS_GLIBC)),y)
424e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]/glibc-static);
425e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	else
426e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		msg := $(error No libelf.h/libelf found, please install libelf-dev/elfutils-libelf-devel);
427e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	endif
428e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
429e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
430e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifneq ($(call try-cc,$(SOURCE_ELF_MMAP),$(FLAGS_COMMON)),y)
431e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	BASIC_CFLAGS += -DLIBELF_NO_MMAP
432e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
433e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
434e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifndef NO_DWARF
435e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifeq ($(origin PERF_HAVE_DWARF_REGS), undefined)
436e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	msg := $(warning DWARF register mappings have not been defined for architecture $(ARCH), DWARF support disabled);
437e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengelse
438e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	BASIC_CFLAGS += -DDWARF_SUPPORT
439e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	EXTLIBS += -lelf -ldw
440e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	LIB_OBJS += $(OUTPUT)util/probe-finder.o
441e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif # PERF_HAVE_DWARF_REGS
442e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif # NO_DWARF
443e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
444e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifdef NO_NEWT
445e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	BASIC_CFLAGS += -DNO_NEWT_SUPPORT
446e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengelse
447e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	FLAGS_NEWT=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -lnewt
448e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	ifneq ($(call try-cc,$(SOURCE_NEWT),$(FLAGS_NEWT)),y)
449e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		msg := $(warning newt not found, disables TUI support. Please install newt-devel or libnewt-dev);
450e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		BASIC_CFLAGS += -DNO_NEWT_SUPPORT
451e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	else
452e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		# Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
453e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		BASIC_CFLAGS += -I/usr/include/slang
454e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		EXTLIBS += -lnewt -lslang
455e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_OBJS += $(OUTPUT)util/ui/setup.o
456e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_OBJS += $(OUTPUT)util/ui/browser.o
457e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_OBJS += $(OUTPUT)util/ui/browsers/annotate.o
458e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_OBJS += $(OUTPUT)util/ui/browsers/hists.o
459e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_OBJS += $(OUTPUT)util/ui/browsers/map.o
460e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_OBJS += $(OUTPUT)util/ui/browsers/top.o
461e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_OBJS += $(OUTPUT)util/ui/helpline.o
462e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_OBJS += $(OUTPUT)util/ui/progress.o
463e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_OBJS += $(OUTPUT)util/ui/util.o
464e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_H += util/ui/browser.h
465e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_H += util/ui/browsers/map.h
466e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_H += util/ui/helpline.h
467e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_H += util/ui/libslang.h
468e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_H += util/ui/progress.h
469e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_H += util/ui/util.h
470e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_H += util/ui/ui.h
471e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	endif
472e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
473e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
474e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifdef NO_LIBPERL
475e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	BASIC_CFLAGS += -DNO_LIBPERL
476e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengelse
477e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng       PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
478e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng       PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
479e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng       PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
480e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
481e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
482e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
483e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	ifneq ($(call try-cc,$(SOURCE_PERL_EMBED),$(FLAGS_PERL_EMBED)),y)
484e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		BASIC_CFLAGS += -DNO_LIBPERL
485e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	else
486e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng               ALL_LDFLAGS += $(PERL_EMBED_LDFLAGS)
487e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng               EXTLIBS += $(PERL_EMBED_LIBADD)
488e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-perl.o
489e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		LIB_OBJS += $(OUTPUT)scripts/perl/Perf-Trace-Util/Context.o
490e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	endif
491e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
492e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
493e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengdisable-python = $(eval $(disable-python_code))
494e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengdefine disable-python_code
495e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng  BASIC_CFLAGS += -DNO_LIBPYTHON
496e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng  $(if $(1),$(warning No $(1) was found))
497e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng  $(warning Python support won't be built)
498e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendef
499e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
500e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengoverride PYTHON := \
501e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng  $(call get-executable-or-default,PYTHON,python)
502e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
503e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifndef PYTHON
504e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng  $(call disable-python,python interpreter)
505e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng  python-clean :=
506e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengelse
507e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
508e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng  PYTHON_WORD := $(call shell-wordify,$(PYTHON))
509e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
510e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng  python-clean := $(PYTHON_WORD) util/setup.py clean \
511e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng    --build-lib='$(OUTPUT)python' \
512e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng    --build-temp='$(OUTPUT)python/temp'
513e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
514e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng  ifdef NO_LIBPYTHON
515e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng    $(call disable-python)
516e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng  else
517e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
518e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng    override PYTHON_CONFIG := \
519e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng      $(call get-executable-or-default,PYTHON_CONFIG,$(PYTHON)-config)
520e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
521e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng    ifndef PYTHON_CONFIG
522e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng      $(call disable-python,python-config tool)
523e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng    else
524e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
525e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng      PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))
526e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
527e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng      PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) --ldflags 2>/dev/null)
528e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng      PYTHON_EMBED_LDFLAGS := $(call strip-libs,$(PYTHON_EMBED_LDOPTS))
529e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng      PYTHON_EMBED_LIBADD := $(call grep-libs,$(PYTHON_EMBED_LDOPTS))
530e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng      PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --cflags 2>/dev/null)
531e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng      FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)
532e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
533e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng      ifneq ($(call try-cc,$(SOURCE_PYTHON_EMBED),$(FLAGS_PYTHON_EMBED)),y)
534e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng        $(call disable-python,Python.h (for Python 2.x))
535e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng      else
536e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
537e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng        ifneq ($(call try-cc,$(SOURCE_PYTHON_VERSION),$(FLAGS_PYTHON_EMBED)),y)
538e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          $(warning Python 3 is not yet supported; please set)
539e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          $(warning PYTHON and/or PYTHON_CONFIG appropriately.)
540e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          $(warning If you also have Python 2 installed, then)
541e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          $(warning try something like:)
542e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          $(warning $(and ,))
543e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          $(warning $(and ,)  make PYTHON=python2)
544e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          $(warning $(and ,))
545e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          $(warning Otherwise, disable Python support entirely:)
546e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          $(warning $(and ,))
547e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          $(warning $(and ,)  make NO_LIBPYTHON=1)
548e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          $(warning $(and ,))
549e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          $(error   $(and ,))
550e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng        else
551e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          ALL_LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
552e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          EXTLIBS += $(PYTHON_EMBED_LIBADD)
553e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-python.o
554e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          LIB_OBJS += $(OUTPUT)scripts/python/Perf-Trace-Util/Context.o
555e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng          LANG_BINDINGS += $(OUTPUT)python/perf.so
556e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng        endif
557e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
558e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng      endif
559e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng    endif
560e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng  endif
561e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
562e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
563e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifdef NO_DEMANGLE
564e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	BASIC_CFLAGS += -DNO_DEMANGLE
565e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengelse
566e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng        ifdef HAVE_CPLUS_DEMANGLE
567e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		EXTLIBS += -liberty
568e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		BASIC_CFLAGS += -DHAVE_CPLUS_DEMANGLE
569e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng        else
570e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		FLAGS_BFD=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -lbfd
571e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		has_bfd := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD))
572e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		ifeq ($(has_bfd),y)
573e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			EXTLIBS += -lbfd
574e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		else
575e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			FLAGS_BFD_IBERTY=$(FLAGS_BFD) -liberty
576e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			has_bfd_iberty := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD_IBERTY))
577e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			ifeq ($(has_bfd_iberty),y)
578e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				EXTLIBS += -lbfd -liberty
579e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			else
580e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				FLAGS_BFD_IBERTY_Z=$(FLAGS_BFD_IBERTY) -lz
581e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				has_bfd_iberty_z := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD_IBERTY_Z))
582e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				ifeq ($(has_bfd_iberty_z),y)
583e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng					EXTLIBS += -lbfd -liberty -lz
584e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				else
585e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng					FLAGS_CPLUS_DEMANGLE=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -liberty
586e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng					has_cplus_demangle := $(call try-cc,$(SOURCE_CPLUS_DEMANGLE),$(FLAGS_CPLUS_DEMANGLE))
587e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng					ifeq ($(has_cplus_demangle),y)
588e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng						EXTLIBS += -liberty
589e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng						BASIC_CFLAGS += -DHAVE_CPLUS_DEMANGLE
590e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng					else
591e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng						msg := $(warning No bfd.h/libbfd found, install binutils-dev[el]/zlib-static to gain symbol demangling)
592e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng						BASIC_CFLAGS += -DNO_DEMANGLE
593e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng					endif
594e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				endif
595e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			endif
596e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		endif
597e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	endif
598e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
599e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
600e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
601e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifdef NO_STRLCPY
602e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	BASIC_CFLAGS += -DNO_STRLCPY
603e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengelse
604e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	ifneq ($(call try-cc,$(SOURCE_STRLCPY),),y)
605e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		BASIC_CFLAGS += -DNO_STRLCPY
606e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	endif
607e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
608e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
609e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifneq ($(findstring $(MAKEFLAGS),s),s)
610e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifndef V
611e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	QUIET_CC       = @echo '   ' CC $@;
612e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	QUIET_AR       = @echo '   ' AR $@;
613e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	QUIET_LINK     = @echo '   ' LINK $@;
614e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	QUIET_MKDIR    = @echo '   ' MKDIR $@;
615e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	QUIET_GEN      = @echo '   ' GEN $@;
616e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
617e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
618e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
619e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifdef ASCIIDOC8
620e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	export ASCIIDOC8
621e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
622e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
623e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Shell quote (do not use $(call) to accommodate ancient setups);
624e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
625e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
626e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
627e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengDESTDIR_SQ = $(subst ','\'',$(DESTDIR))
628e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengbindir_SQ = $(subst ','\'',$(bindir))
629e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengbindir_relative_SQ = $(subst ','\'',$(bindir_relative))
630e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengmandir_SQ = $(subst ','\'',$(mandir))
631e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenginfodir_SQ = $(subst ','\'',$(infodir))
632e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengperfexecdir_SQ = $(subst ','\'',$(perfexecdir))
633e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengtemplate_dir_SQ = $(subst ','\'',$(template_dir))
634e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenghtmldir_SQ = $(subst ','\'',$(htmldir))
635e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengprefix_SQ = $(subst ','\'',$(prefix))
636e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
637e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengSHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
638e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
639e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengLIBS = -Wl,--whole-archive $(PERFLIBS) -Wl,--no-whole-archive -Wl,--start-group $(EXTLIBS) -Wl,--end-group
640e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
641e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengALL_CFLAGS += $(BASIC_CFLAGS)
642e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengALL_CFLAGS += $(ARCH_CFLAGS)
643e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengALL_LDFLAGS += $(BASIC_LDFLAGS)
644e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
645e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengexport INSTALL SHELL_PATH
646e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
647e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
648e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng### Build rules
649e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
650e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengSHELL = $(SHELL_PATH)
651e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
652e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengall: shell_compatibility_test $(ALL_PROGRAMS) $(LANG_BINDINGS) $(OTHER_PROGRAMS)
653e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
654e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengplease_set_SHELL_PATH_to_a_more_modern_shell:
655e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@$$(:)
656e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
657e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengshell_compatibility_test: please_set_SHELL_PATH_to_a_more_modern_shell
658e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
659e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstrip: $(PROGRAMS) $(OUTPUT)perf
660e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) $(OUTPUT)perf
661e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
662e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)perf.o: perf.c $(OUTPUT)common-cmds.h $(OUTPUT)PERF-CFLAGS
663e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -DPERF_VERSION='"$(PERF_VERSION)"' \
664e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
665e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		$(ALL_CFLAGS) -c $(filter %.c,$^) -o $@
666e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
667e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)perf: $(OUTPUT)perf.o $(BUILTIN_OBJS) $(PERFLIBS)
668e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(OUTPUT)perf.o \
669e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng               $(BUILTIN_OBJS) $(LIBS) -o $@
670e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
671e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)builtin-help.o: builtin-help.c $(OUTPUT)common-cmds.h $(OUTPUT)PERF-CFLAGS
672e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) \
673e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
674e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		'-DPERF_MAN_PATH="$(mandir_SQ)"' \
675e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		'-DPERF_INFO_PATH="$(infodir_SQ)"' $<
676e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
677e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)builtin-timechart.o: builtin-timechart.c $(OUTPUT)common-cmds.h $(OUTPUT)PERF-CFLAGS
678e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) \
679e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
680e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		'-DPERF_MAN_PATH="$(mandir_SQ)"' \
681e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		'-DPERF_INFO_PATH="$(infodir_SQ)"' $<
682e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
683e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)common-cmds.h: util/generate-cmdlist.sh command-list.txt
684e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
685e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)common-cmds.h: $(wildcard Documentation/perf-*.txt)
686e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_GEN). util/generate-cmdlist.sh > $@+ && mv $@+ $@
687e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
688e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(SCRIPTS) : % : %.sh
689e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_GEN)$(INSTALL) '$@.sh' '$(OUTPUT)$@'
690e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
691e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# These can record PERF_VERSION
692e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)perf.o perf.spec \
693e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(SCRIPTS) \
694e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	: $(OUTPUT)PERF-VERSION-FILE
695e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
696e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)%.o: %.c $(OUTPUT)PERF-CFLAGS
697e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $<
698e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)%.s: %.c $(OUTPUT)PERF-CFLAGS
699e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -S $(ALL_CFLAGS) $<
700e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)%.o: %.S
701e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $<
702e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
703e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)util/exec_cmd.o: util/exec_cmd.c $(OUTPUT)PERF-CFLAGS
704e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) \
705e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		'-DPERF_EXEC_PATH="$(perfexecdir_SQ)"' \
706e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		'-DBINDIR="$(bindir_relative_SQ)"' \
707e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		'-DPREFIX="$(prefix_SQ)"' \
708e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		$<
709e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
710e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)util/config.o: util/config.c $(OUTPUT)PERF-CFLAGS
711e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DETC_PERFCONFIG='"$(ETC_PERFCONFIG_SQ)"' $<
712e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
713e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)util/ui/browser.o: util/ui/browser.c $(OUTPUT)PERF-CFLAGS
714e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<
715e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
716e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)util/ui/browsers/annotate.o: util/ui/browsers/annotate.c $(OUTPUT)PERF-CFLAGS
717e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<
718e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
719e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)util/ui/browsers/top.o: util/ui/browsers/top.c $(OUTPUT)PERF-CFLAGS
720e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<
721e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
722e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)util/ui/browsers/hists.o: util/ui/browsers/hists.c $(OUTPUT)PERF-CFLAGS
723e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<
724e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
725e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)util/ui/browsers/map.o: util/ui/browsers/map.c $(OUTPUT)PERF-CFLAGS
726e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<
727e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
728e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)util/rbtree.o: ../../lib/rbtree.c $(OUTPUT)PERF-CFLAGS
729e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DETC_PERFCONFIG='"$(ETC_PERFCONFIG_SQ)"' $<
730e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
731e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)util/scripting-engines/trace-event-perl.o: util/scripting-engines/trace-event-perl.c $(OUTPUT)PERF-CFLAGS
732e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $(PERL_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-shadow $<
733e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
734e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)scripts/perl/Perf-Trace-Util/Context.o: scripts/perl/Perf-Trace-Util/Context.c $(OUTPUT)PERF-CFLAGS
735e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $(PERL_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-nested-externs $<
736e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
737e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)util/scripting-engines/trace-event-python.o: util/scripting-engines/trace-event-python.c $(OUTPUT)PERF-CFLAGS
738e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $(PYTHON_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-shadow $<
739e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
740e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)scripts/python/Perf-Trace-Util/Context.o: scripts/python/Perf-Trace-Util/Context.c $(OUTPUT)PERF-CFLAGS
741e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $(PYTHON_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-nested-externs $<
742e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
743e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)perf-%: %.o $(PERFLIBS)
744e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
745e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
746e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(LIB_OBJS) $(BUILTIN_OBJS): $(LIB_H)
747e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(patsubst perf-%,%.o,$(PROGRAMS)): $(LIB_H) $(wildcard */*.h)
748e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
749e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# we compile into subdirectories. if the target directory is not the source directory, they might not exists. So
750e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# we depend the various files onto their directories.
751e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengDIRECTORY_DEPS = $(LIB_OBJS) $(BUILTIN_OBJS) $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h
752e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(DIRECTORY_DEPS): | $(sort $(dir $(DIRECTORY_DEPS)))
753e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# In the second step, we make a rule to actually create these directories
754e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(sort $(dir $(DIRECTORY_DEPS))):
755e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_MKDIR)$(MKDIR) -p $@ 2>/dev/null
756e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
757e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(LIB_FILE): $(LIB_OBJS)
758e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)
759e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
760e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenghelp:
761e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo 'Perf make targets:'
762e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  doc		- make *all* documentation (see below)'
763e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  man		- make manpage documentation (access with man <foo>)'
764e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  html		- make html documentation'
765e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  info		- make GNU info documentation (access with info <foo>)'
766e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  pdf		- make pdf documentation'
767e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  TAGS		- use etags to make tag information for source browsing'
768e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  tags		- use ctags to make tag information for source browsing'
769e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  cscope	- use cscope to make interactive browsing database'
770e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo ''
771e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo 'Perf install targets:'
772e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  NOTE: documentation build requires asciidoc, xmlto packages to be installed'
773e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  HINT: use "make prefix=<path> <install target>" to install to a particular'
774e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '        path like make prefix=/usr/local install install-doc'
775e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  install	- install compiled binaries'
776e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  install-doc	- install *all* documentation'
777e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  install-man	- install manpage documentation'
778e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  install-html	- install html documentation'
779e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  install-info	- install GNU info documentation'
780e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  install-pdf	- install pdf documentation'
781e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo ''
782e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  quick-install-doc	- alias for quick-install-man'
783e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  quick-install-man	- install the documentation quickly'
784e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  quick-install-html	- install the html documentation quickly'
785e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo ''
786e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo 'Perf maintainer targets:'
787e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  distclean		- alias to clean'
788e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@echo '  clean			- clean all binary objects and build output'
789e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
790e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengdoc:
791e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(MAKE) -C Documentation all
792e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
793e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengman:
794e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(MAKE) -C Documentation man
795e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
796e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenghtml:
797e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(MAKE) -C Documentation html
798e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
799e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenginfo:
800e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(MAKE) -C Documentation info
801e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
802e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengpdf:
803e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(MAKE) -C Documentation pdf
804e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
805e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengTAGS:
806e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(RM) TAGS
807e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(FIND) . -name '*.[hcS]' -print | xargs etags -a
808e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
809e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengtags:
810e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(RM) tags
811e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(FIND) . -name '*.[hcS]' -print | xargs ctags -a
812e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
813e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengcscope:
814e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(RM) cscope*
815e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(FIND) . -name '*.[hcS]' -print | xargs cscope -b
816e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
817e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng### Detect prefix changes
818e6817ec1d8ab31fc7b01906e305f848542df6413Ben ChengTRACK_CFLAGS = $(subst ','\'',$(ALL_CFLAGS)):\
819e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng             $(bindir_SQ):$(perfexecdir_SQ):$(template_dir_SQ):$(prefix_SQ)
820e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
821e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng$(OUTPUT)PERF-CFLAGS: .FORCE-PERF-CFLAGS
822e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	@FLAGS='$(TRACK_CFLAGS)'; \
823e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	    if test x"$$FLAGS" != x"`cat $(OUTPUT)PERF-CFLAGS 2>/dev/null`" ; then \
824e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		echo 1>&2 "    * new build flags or prefix"; \
825e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		echo "$$FLAGS" >$(OUTPUT)PERF-CFLAGS; \
826e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng            fi
827e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
828e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng### Testing rules
829e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
830e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# GNU make supports exporting all variables by "export" without parameters.
831e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# However, the environment gets quite big, and some programs have problems
832e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# with that.
833e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
834e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengcheck: $(OUTPUT)common-cmds.h
835e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if sparse; \
836e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	then \
837e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		for i in *.c */*.c; \
838e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		do \
839e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			sparse $(ALL_CFLAGS) $(SPARSE_FLAGS) $$i || exit; \
840e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		done; \
841e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	else \
842e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		exit 1; \
843e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	fi
844e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
845e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng### Installation rules
846e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
847e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengifneq ($(filter /%,$(firstword $(perfexecdir))),)
848e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengperfexec_instdir = $(perfexecdir)
849e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengelse
850e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengperfexec_instdir = $(prefix)/$(perfexecdir)
851e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengendif
852e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengperfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir))
853e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
854e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenginstall: all
855e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
856e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)'
857e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'
858e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'
859e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
860e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(INSTALL) scripts/perl/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'
861e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(INSTALL) scripts/perl/*.pl -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl'
862e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(INSTALL) scripts/perl/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'
863e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'
864e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'
865e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(INSTALL) scripts/python/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'
866e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(INSTALL) scripts/python/*.py -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python'
867e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(INSTALL) scripts/python/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'
868e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
869e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenginstall-doc:
870e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(MAKE) -C Documentation install
871e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
872e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenginstall-man:
873e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(MAKE) -C Documentation install-man
874e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
875e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenginstall-html:
876e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(MAKE) -C Documentation install-html
877e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
878e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenginstall-info:
879e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(MAKE) -C Documentation install-info
880e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
881e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chenginstall-pdf:
882e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(MAKE) -C Documentation install-pdf
883e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
884e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengquick-install-doc:
885e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(MAKE) -C Documentation quick-install
886e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
887e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengquick-install-man:
888e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(MAKE) -C Documentation quick-install-man
889e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
890e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengquick-install-html:
891e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(MAKE) -C Documentation quick-install-html
892e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
893e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng### Cleaning rules
894e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
895e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengclean:
896e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(RM) $(OUTPUT){*.o,*/*.o,*/*/*.o,*/*/*/*.o,$(LIB_FILE),perf-archive}
897e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(RM) $(ALL_PROGRAMS) perf
898e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope*
899e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(MAKE) -C Documentation/ clean
900e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(RM) $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)PERF-CFLAGS
901e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	$(python-clean)
902e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
903e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng.PHONY: all install clean strip
904e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
905e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng.PHONY: .FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS
906