tools/perf/build: Standardize the various messages output by parallel make
[linux-drm-fsl-dcu.git] / tools / perf / config / Makefile
1 uname_M := $(shell uname -m 2>/dev/null || echo not)
2
3 ARCH ?= $(shell echo $(uname_M) | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
4                                   -e s/arm.*/arm/ -e s/sa110/arm/ \
5                                   -e s/s390x/s390/ -e s/parisc64/parisc/ \
6                                   -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
7                                   -e s/sh[234].*/sh/ -e s/aarch64.*/arm64/ )
8 NO_PERF_REGS := 1
9 CFLAGS := $(EXTRA_CFLAGS) $(EXTRA_WARNINGS)
10
11 # Additional ARCH settings for x86
12 ifeq ($(ARCH),i386)
13   override ARCH := x86
14   NO_PERF_REGS := 0
15   LIBUNWIND_LIBS = -lunwind -lunwind-x86
16 endif
17
18 ifeq ($(ARCH),x86_64)
19   override ARCH := x86
20   IS_X86_64 := 0
21   ifeq (, $(findstring m32,$(CFLAGS)))
22     IS_X86_64 := $(shell echo __x86_64__ | ${CC} -E -x c - | tail -n 1)
23   endif
24   ifeq (${IS_X86_64}, 1)
25     RAW_ARCH := x86_64
26     CFLAGS += -DHAVE_ARCH_X86_64_SUPPORT
27     ARCH_INCLUDE = ../../arch/x86/lib/memcpy_64.S ../../arch/x86/lib/memset_64.S
28   endif
29   NO_PERF_REGS := 0
30   LIBUNWIND_LIBS = -lunwind -lunwind-x86_64
31 endif
32
33 ifeq ($(NO_PERF_REGS),0)
34   CFLAGS += -DHAVE_PERF_REGS_SUPPORT
35 endif
36
37 ifeq ($(src-perf),)
38 src-perf := $(srctree)/tools/perf
39 endif
40
41 ifeq ($(obj-perf),)
42 obj-perf := $(OUTPUT)
43 endif
44
45 ifneq ($(obj-perf),)
46 obj-perf := $(abspath $(obj-perf))/
47 endif
48
49 LIB_INCLUDE := $(srctree)/tools/lib/
50
51 # include ARCH specific config
52 -include $(src-perf)/arch/$(ARCH)/Makefile
53
54 include $(src-perf)/config/feature-tests.mak
55 include $(src-perf)/config/utilities.mak
56
57 ifeq ($(call get-executable,$(FLEX)),)
58   dummy := $(error Error: $(FLEX) is missing on this system, please install it)
59 endif
60
61 ifeq ($(call get-executable,$(BISON)),)
62   dummy := $(error Error: $(BISON) is missing on this system, please install it)
63 endif
64
65 # Treat warnings as errors unless directed not to
66 ifneq ($(WERROR),0)
67   CFLAGS += -Werror
68 endif
69
70 ifeq ("$(origin DEBUG)", "command line")
71   PERF_DEBUG = $(DEBUG)
72 endif
73 ifndef PERF_DEBUG
74   CFLAGS += -O6
75 endif
76
77 ifdef PARSER_DEBUG
78   PARSER_DEBUG_BISON := -t
79   PARSER_DEBUG_FLEX  := -d
80   CFLAGS             += -DPARSER_DEBUG
81 endif
82
83 CFLAGS += -fno-omit-frame-pointer
84 CFLAGS += -ggdb3
85 CFLAGS += -funwind-tables
86 CFLAGS += -Wall
87 CFLAGS += -Wextra
88 CFLAGS += -std=gnu99
89
90 EXTLIBS = -lelf -lpthread -lrt -lm -ldl
91
92 feature_check = $(eval $(feature_check_code))
93 define feature_check_code
94   feature-$(1) := $(shell $(MAKE) -C config/feature-checks test-$1 >/dev/null 2>/dev/null && echo 1 || echo 0)
95 endef
96
97 feature_set = $(eval $(feature_set_code))
98 define feature_set_code
99   feature-$(1) := 1
100 endef
101
102 #
103 # Build the feature check binaries in parallel, ignore errors, ignore return value and suppress output:
104 #
105
106 #
107 # Note that this is not a complete list of all feature tests, just
108 # those that are typically built on a fully configured system.
109 #
110 # [ Feature tests not mentioned here have to be built explicitly in
111 #   the rule that uses them - an example for that is the 'bionic'
112 #   feature check. ]
113 #
114 CORE_FEATURE_TESTS =                    \
115         backtrace                       \
116         dwarf                           \
117         fortify-source                  \
118         glibc                           \
119         gtk2                            \
120         gtk2-infobar                    \
121         libaudit                        \
122         libbfd                          \
123         libelf                          \
124         libelf-getphdrnum               \
125         libelf-mmap                     \
126         libnuma                         \
127         libperl                         \
128         libpython                       \
129         libpython-version               \
130         libslang                        \
131         libunwind                       \
132         on-exit                         \
133         stackprotector                  \
134         stackprotector-all              \
135         volatile-register-var
136
137 #
138 # So here we detect whether test-all was rebuilt, to be able
139 # to skip the print-out of the long features list if the file
140 # existed before and after it was built:
141 #
142 ifeq ($(wildcard config/feature-checks/test-all),)
143   test-all-failed := 1
144 else
145   test-all-failed := 0
146 endif
147
148 #
149 # Special fast-path for the 'all features are available' case:
150 #
151 $(call feature_check,all,$(MSG))
152
153 #
154 # Just in case the build freshly failed, make sure we print the
155 # feature matrix:
156 #
157 ifeq ($(feature-all), 0)
158   test-all-failed := 1
159 endif
160
161 ifeq ($(test-all-failed),1)
162   $(info )
163   $(info Auto-detecting system features:)
164 endif
165
166 ifeq ($(feature-all), 1)
167   #
168   # test-all.c passed - just set all the core feature flags to 1:
169   #
170   $(foreach feat,$(CORE_FEATURE_TESTS),$(call feature_set,$(feat)))
171 else
172   $(shell $(MAKE) -i -j -C config/feature-checks $(CORE_FEATURE_TESTS) >/dev/null 2>&1)
173   $(foreach feat,$(CORE_FEATURE_TESTS),$(call feature_check,$(feat)))
174 endif
175
176 #
177 # Print the result of the feature test:
178 #
179 feature_print = $(eval $(feature_print_code))
180 define feature_print_code
181   ifeq ($(feature-$(1)), 1)
182     MSG = $(shell printf '...%30s: [ \033[32mon\033[m  ]' $(1))
183   else
184     MSG = $(shell printf '...%30s: [ \033[31mOFF\033[m ]' $(1))
185   endif
186   $(info $(MSG))
187 endef
188
189 #
190 # Only print out our features if we rebuilt the testcases or if a test failed:
191 #
192 ifeq ($(test-all-failed), 1)
193   $(foreach feat,$(CORE_FEATURE_TESTS) DUMMY,$(call feature_print,$(feat)))
194   $(info )
195 endif
196
197 ifeq ($(feature-stackprotector-all), 1)
198   CFLAGS += -fstack-protector-all
199 endif
200
201 ifeq ($(feature-stackprotector), 1)
202   CFLAGS += -Wstack-protector
203 endif
204
205 ifeq ($(feature-volatile-register-var), 1)
206   CFLAGS += -Wvolatile-register-var
207 endif
208
209 ifndef PERF_DEBUG
210   ifeq ($(feature-fortify-source), 1)
211     CFLAGS += -D_FORTIFY_SOURCE=2
212   endif
213 endif
214
215 CFLAGS += -I$(src-perf)/util/include
216 CFLAGS += -I$(src-perf)/arch/$(ARCH)/include
217 CFLAGS += -I$(srctree)/arch/$(ARCH)/include/uapi
218 CFLAGS += -I$(srctree)/arch/$(ARCH)/include
219 CFLAGS += -I$(srctree)/include/uapi
220 CFLAGS += -I$(srctree)/include
221
222 # $(obj-perf)      for generated common-cmds.h
223 # $(obj-perf)/util for generated bison/flex headers
224 ifneq ($(OUTPUT),)
225 CFLAGS += -I$(obj-perf)/util
226 CFLAGS += -I$(obj-perf)
227 endif
228
229 CFLAGS += -I$(src-perf)/util
230 CFLAGS += -I$(src-perf)
231 CFLAGS += -I$(LIB_INCLUDE)
232
233 CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
234
235 ifndef NO_BIONIC
236   $(feature_check,bionic)
237   ifeq ($(feature-bionic), 1)
238     BIONIC := 1
239     EXTLIBS := $(filter-out -lrt,$(EXTLIBS))
240     EXTLIBS := $(filter-out -lpthread,$(EXTLIBS))
241   endif
242 endif
243
244 ifdef NO_LIBELF
245   NO_DWARF := 1
246   NO_DEMANGLE := 1
247   NO_LIBUNWIND := 1
248 else
249   ifeq ($(feature-libelf), 0)
250     ifeq ($(feature-glibc), 1)
251       LIBC_SUPPORT := 1
252     endif
253     ifeq ($(BIONIC),1)
254       LIBC_SUPPORT := 1
255     endif
256     ifeq ($(LIBC_SUPPORT),1)
257       msg := $(warning No libelf found, disables 'probe' tool, please install elfutils-libelf-devel/libelf-dev);
258
259       NO_LIBELF := 1
260       NO_DWARF := 1
261       NO_DEMANGLE := 1
262     else
263       msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]/glibc-static);
264     endif
265   else
266     # for linking with debug library, run like:
267     # make DEBUG=1 LIBDW_DIR=/opt/libdw/
268     ifdef LIBDW_DIR
269       LIBDW_CFLAGS  := -I$(LIBDW_DIR)/include
270       LIBDW_LDFLAGS := -L$(LIBDW_DIR)/lib
271     endif
272
273     ifneq ($(feature-dwarf), 1)
274       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);
275       NO_DWARF := 1
276     endif # Dwarf support
277   endif # SOURCE_LIBELF
278 endif # NO_LIBELF
279
280 ifndef NO_LIBELF
281   CFLAGS += -DHAVE_LIBELF_SUPPORT
282   FLAGS_LIBELF=$(CFLAGS) $(LDFLAGS) $(EXTLIBS)
283
284   ifeq ($(feature-libelf-mmap), 1)
285     CFLAGS += -DHAVE_LIBELF_MMAP_SUPPORT
286   endif
287
288   ifeq ($(feature-libelf-getphdrnum), 1)
289     CFLAGS += -DHAVE_ELF_GETPHDRNUM_SUPPORT
290   endif
291
292   # include ARCH specific config
293   -include $(src-perf)/arch/$(ARCH)/Makefile
294
295   ifndef NO_DWARF
296     ifeq ($(origin PERF_HAVE_DWARF_REGS), undefined)
297       msg := $(warning DWARF register mappings have not been defined for architecture $(ARCH), DWARF support disabled);
298       NO_DWARF := 1
299     else
300       CFLAGS += -DHAVE_DWARF_SUPPORT $(LIBDW_CFLAGS)
301       LDFLAGS += $(LIBDW_LDFLAGS)
302       EXTLIBS += -lelf -ldw
303     endif # PERF_HAVE_DWARF_REGS
304   endif # NO_DWARF
305 endif # NO_LIBELF
306
307 ifndef NO_LIBELF
308   CFLAGS += -DHAVE_LIBELF_SUPPORT
309   ifeq ($(feature-libelf-mmap), 1)
310     CFLAGS += -DHAVE_LIBELF_MMAP_SUPPORT
311   endif
312 endif # NO_LIBELF
313
314 # There's only x86 (both 32 and 64) support for CFI unwind so far
315 ifneq ($(ARCH),x86)
316   NO_LIBUNWIND := 1
317 endif
318
319 ifndef NO_LIBUNWIND
320   #
321   # For linking with debug library, run like:
322   #
323   #   make DEBUG=1 LIBUNWIND_DIR=/opt/libunwind/
324   #
325   ifdef LIBUNWIND_DIR
326     LIBUNWIND_CFLAGS  := -I$(LIBUNWIND_DIR)/include
327     LIBUNWIND_LDFLAGS := -L$(LIBUNWIND_DIR)/lib
328   endif
329
330   ifneq ($(feature-libunwind), 1)
331     msg := $(warning No libunwind found, disabling post unwind support. Please install libunwind-dev[el] >= 0.99);
332     NO_LIBUNWIND := 1
333   endif
334 endif
335
336 ifndef NO_LIBUNWIND
337   CFLAGS += -DHAVE_LIBUNWIND_SUPPORT
338   EXTLIBS += $(LIBUNWIND_LIBS)
339   CFLAGS += $(LIBUNWIND_CFLAGS)
340   LDFLAGS += $(LIBUNWIND_LDFLAGS)
341 endif
342
343 ifndef NO_LIBAUDIT
344   ifneq ($(feature-libaudit), 1)
345     msg := $(warning No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev);
346     NO_LIBAUDIT := 1
347   else
348     CFLAGS += -DHAVE_LIBAUDIT_SUPPORT
349     EXTLIBS += -laudit
350   endif
351 endif
352
353 ifdef NO_NEWT
354   NO_SLANG=1
355 endif
356
357 ifndef NO_SLANG
358   ifneq ($(feature-libslang), 1)
359     msg := $(warning slang not found, disables TUI support. Please install slang-devel or libslang-dev);
360     NO_SLANG := 1
361   else
362     # Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
363     CFLAGS += -I/usr/include/slang
364     CFLAGS += -DHAVE_SLANG_SUPPORT
365     EXTLIBS += -lslang
366   endif
367 endif
368
369 ifndef NO_GTK2
370   FLAGS_GTK2=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) $(shell pkg-config --libs --cflags gtk+-2.0 2>/dev/null)
371   ifneq ($(feature-gtk2), 1)
372     msg := $(warning GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev);
373     NO_GTK2 := 1
374   else
375     ifeq ($(feature-gtk2-infobar), 1)
376       CFLAGS += -DHAVE_GTK_INFO_BAR_SUPPORT
377     endif
378     CFLAGS += -DHAVE_GTK2_SUPPORT
379     CFLAGS += $(shell pkg-config --cflags gtk+-2.0 2>/dev/null)
380     EXTLIBS += $(shell pkg-config --libs gtk+-2.0 2>/dev/null)
381   endif
382 endif
383
384 grep-libs  = $(filter -l%,$(1))
385 strip-libs = $(filter-out -l%,$(1))
386
387 ifdef NO_LIBPERL
388   CFLAGS += -DNO_LIBPERL
389 else
390   PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
391   PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
392   PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
393   PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
394   FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
395
396   ifneq ($(feature-libperl), 1)
397     CFLAGS += -DNO_LIBPERL
398     NO_LIBPERL := 1
399   else
400     LDFLAGS += $(PERL_EMBED_LDFLAGS)
401     EXTLIBS += $(PERL_EMBED_LIBADD)
402   endif
403 endif
404
405 disable-python = $(eval $(disable-python_code))
406 define disable-python_code
407   CFLAGS += -DNO_LIBPYTHON
408   $(if $(1),$(warning No $(1) was found))
409   $(warning Python support will not be built)
410   NO_LIBPYTHON := 1
411 endef
412
413 override PYTHON := \
414   $(call get-executable-or-default,PYTHON,python)
415
416 ifndef PYTHON
417   $(call disable-python,python interpreter)
418 else
419
420   PYTHON_WORD := $(call shell-wordify,$(PYTHON))
421
422   ifdef NO_LIBPYTHON
423     $(call disable-python)
424   else
425
426     override PYTHON_CONFIG := \
427       $(call get-executable-or-default,PYTHON_CONFIG,$(PYTHON)-config)
428
429     ifndef PYTHON_CONFIG
430       $(call disable-python,python-config tool)
431     else
432
433       PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))
434
435       PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) --ldflags 2>/dev/null)
436       PYTHON_EMBED_LDFLAGS := $(call strip-libs,$(PYTHON_EMBED_LDOPTS))
437       PYTHON_EMBED_LIBADD := $(call grep-libs,$(PYTHON_EMBED_LDOPTS))
438       PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --cflags 2>/dev/null)
439       FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)
440
441       ifneq ($(feature-libpython), 1)
442         $(call disable-python,Python.h (for Python 2.x))
443       else
444
445         ifneq ($(feature-libpython-version), 1)
446           $(warning Python 3 is not yet supported; please set)
447           $(warning PYTHON and/or PYTHON_CONFIG appropriately.)
448           $(warning If you also have Python 2 installed, then)
449           $(warning try something like:)
450           $(warning $(and ,))
451           $(warning $(and ,)  make PYTHON=python2)
452           $(warning $(and ,))
453           $(warning Otherwise, disable Python support entirely:)
454           $(warning $(and ,))
455           $(warning $(and ,)  make NO_LIBPYTHON=1)
456           $(warning $(and ,))
457           $(error   $(and ,))
458         else
459           LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
460           EXTLIBS += $(PYTHON_EMBED_LIBADD)
461           LANG_BINDINGS += $(obj-perf)python/perf.so
462         endif
463       endif
464     endif
465   endif
466 endif
467
468 ifdef NO_DEMANGLE
469   CFLAGS += -DNO_DEMANGLE
470 else
471   ifdef HAVE_CPLUS_DEMANGLE_SUPPORT
472     EXTLIBS += -liberty
473     CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
474   else
475     FLAGS_BFD=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) -DPACKAGE='perf' -lbfd
476     ifeq ($(feature-libbfd), 1)
477       EXTLIBS += -lbfd
478     else
479       FLAGS_BFD_IBERTY=$(FLAGS_BFD) -liberty
480       has_bfd_iberty := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD_IBERTY),liberty)
481       ifeq ($(has_bfd_iberty),y)
482         EXTLIBS += -lbfd -liberty
483       else
484         FLAGS_BFD_IBERTY_Z=$(FLAGS_BFD_IBERTY) -lz
485         has_bfd_iberty_z := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD_IBERTY_Z),libz)
486         ifeq ($(has_bfd_iberty_z),y)
487           EXTLIBS += -lbfd -liberty -lz
488         else
489           FLAGS_CPLUS_DEMANGLE=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) -liberty
490           has_cplus_demangle := $(call try-cc,$(SOURCE_CPLUS_DEMANGLE),$(FLAGS_CPLUS_DEMANGLE),demangle)
491           ifeq ($(has_cplus_demangle),y)
492             EXTLIBS += -liberty
493             CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
494           else
495             msg := $(warning No bfd.h/libbfd found, install binutils-dev[el]/zlib-static to gain symbol demangling)
496             CFLAGS += -DNO_DEMANGLE
497           endif
498         endif
499       endif
500     endif
501   endif
502 endif
503
504 ifndef NO_ON_EXIT
505   ifeq ($(feature-on-exit), 1)
506     CFLAGS += -DHAVE_ON_EXIT_SUPPORT
507   endif
508 endif
509
510 ifndef NO_BACKTRACE
511   ifeq ($(feature-backtrace), 1)
512     CFLAGS += -DHAVE_BACKTRACE_SUPPORT
513   endif
514 endif
515
516 ifndef NO_LIBNUMA
517   ifeq ($(feature-libnuma), 0)
518     msg := $(warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numa-libs-devel or libnuma-dev);
519     NO_LIBNUMA := 1
520   else
521     CFLAGS += -DHAVE_LIBNUMA_SUPPORT
522     EXTLIBS += -lnuma
523   endif
524 endif
525
526 # Among the variables below, these:
527 #   perfexecdir
528 #   template_dir
529 #   mandir
530 #   infodir
531 #   htmldir
532 #   ETC_PERFCONFIG (but not sysconfdir)
533 # can be specified as a relative path some/where/else;
534 # this is interpreted as relative to $(prefix) and "perf" at
535 # runtime figures out where they are based on the path to the executable.
536 # This can help installing the suite in a relocatable way.
537
538 # Make the path relative to DESTDIR, not to prefix
539 ifndef DESTDIR
540 prefix = $(HOME)
541 endif
542 bindir_relative = bin
543 bindir = $(prefix)/$(bindir_relative)
544 mandir = share/man
545 infodir = share/info
546 perfexecdir = libexec/perf-core
547 sharedir = $(prefix)/share
548 template_dir = share/perf-core/templates
549 htmldir = share/doc/perf-doc
550 ifeq ($(prefix),/usr)
551 sysconfdir = /etc
552 ETC_PERFCONFIG = $(sysconfdir)/perfconfig
553 else
554 sysconfdir = $(prefix)/etc
555 ETC_PERFCONFIG = etc/perfconfig
556 endif
557 lib = lib
558
559 # Shell quote (do not use $(call) to accommodate ancient setups);
560 ETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
561 DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
562 bindir_SQ = $(subst ','\'',$(bindir))
563 mandir_SQ = $(subst ','\'',$(mandir))
564 infodir_SQ = $(subst ','\'',$(infodir))
565 perfexecdir_SQ = $(subst ','\'',$(perfexecdir))
566 template_dir_SQ = $(subst ','\'',$(template_dir))
567 htmldir_SQ = $(subst ','\'',$(htmldir))
568 prefix_SQ = $(subst ','\'',$(prefix))
569 sysconfdir_SQ = $(subst ','\'',$(sysconfdir))
570
571 ifneq ($(filter /%,$(firstword $(perfexecdir))),)
572 perfexec_instdir = $(perfexecdir)
573 else
574 perfexec_instdir = $(prefix)/$(perfexecdir)
575 endif
576 perfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir))