Makefile.config 27.2 KB
Newer Older
1

2 3 4
ifeq ($(src-perf),)
src-perf := $(srctree)/tools/perf
endif
5

6 7
ifeq ($(obj-perf),)
obj-perf := $(OUTPUT)
8 9
endif

10 11 12 13
ifneq ($(obj-perf),)
obj-perf := $(abspath $(obj-perf))/
endif

14
$(shell printf "" > $(OUTPUT).config-detected)
15 16
detected     = $(shell echo "$(1)=y"       >> $(OUTPUT).config-detected)
detected_var = $(shell echo "$(1)=$($(1))" >> $(OUTPUT).config-detected)
17

18 19
CFLAGS := $(EXTRA_CFLAGS) $(EXTRA_WARNINGS)

20
include $(srctree)/tools/scripts/Makefile.arch
21

22 23
$(call detected_var,ARCH)

24 25
NO_PERF_REGS := 1

26 27 28
# Additional ARCH settings for ppc
ifeq ($(ARCH),powerpc)
  NO_PERF_REGS := 0
29
  LIBUNWIND_LIBS := -lunwind -lunwind-ppc64
30 31
endif

32 33
# Additional ARCH settings for x86
ifeq ($(ARCH),x86)
34
  $(call detected,CONFIG_X86)
35
  ifeq (${IS_64_BIT}, 1)
36
    CFLAGS += -DHAVE_ARCH_X86_64_SUPPORT -DHAVE_SYSCALL_TABLE -I$(OUTPUT)arch/x86/include/generated
37
    ARCH_INCLUDE = ../../arch/x86/lib/memcpy_64.S ../../arch/x86/lib/memset_64.S
38
    LIBUNWIND_LIBS = -lunwind -lunwind-x86_64
39
    $(call detected,CONFIG_X86_64)
40
  else
41
    LIBUNWIND_LIBS = -lunwind-x86 -llzma -lunwind
42 43
  endif
  NO_PERF_REGS := 0
44
endif
45

46 47 48 49
ifeq ($(ARCH),arm)
  NO_PERF_REGS := 0
  LIBUNWIND_LIBS = -lunwind -lunwind-arm
endif
50

51 52 53 54 55
ifeq ($(ARCH),arm64)
  NO_PERF_REGS := 0
  LIBUNWIND_LIBS = -lunwind -lunwind-aarch64
endif

56 57 58 59
ifeq ($(NO_PERF_REGS),0)
  $(call detected,CONFIG_PERF_REGS)
endif

60
# So far there's only x86 and arm libdw unwind support merged in perf.
61 62 63
# Disable it on all other architectures in case libdw unwind
# support is detected in system. Add supported architectures
# to the check.
64
ifneq ($(ARCH),$(filter $(ARCH),x86 arm))
65 66 67
  NO_LIBDW_DWARF_UNWIND := 1
endif

68 69 70
ifeq ($(LIBUNWIND_LIBS),)
  NO_LIBUNWIND := 1
endif
71 72 73 74 75
#
# For linking with debug library, run like:
#
#   make DEBUG=1 LIBUNWIND_DIR=/opt/libunwind/
#
76 77 78 79 80 81 82

libunwind_arch_set_flags = $(eval $(libunwind_arch_set_flags_code))
define libunwind_arch_set_flags_code
  FEATURE_CHECK_CFLAGS-libunwind-$(1)  = -I$(LIBUNWIND_DIR)/include
  FEATURE_CHECK_LDFLAGS-libunwind-$(1) = -L$(LIBUNWIND_DIR)/lib
endef

83 84 85
ifdef LIBUNWIND_DIR
  LIBUNWIND_CFLAGS  = -I$(LIBUNWIND_DIR)/include
  LIBUNWIND_LDFLAGS = -L$(LIBUNWIND_DIR)/lib
86 87
  LIBUNWIND_ARCHS = x86 x86_64 arm aarch64 debug-frame-arm debug-frame-aarch64
  $(foreach libunwind_arch,$(LIBUNWIND_ARCHS),$(call libunwind_arch_set_flags,$(libunwind_arch)))
88 89 90 91
endif

# Set per-feature check compilation flags
FEATURE_CHECK_CFLAGS-libunwind = $(LIBUNWIND_CFLAGS)
92
FEATURE_CHECK_LDFLAGS-libunwind = $(LIBUNWIND_LDFLAGS) $(LIBUNWIND_LIBS)
93
FEATURE_CHECK_CFLAGS-libunwind-debug-frame = $(LIBUNWIND_CFLAGS)
94
FEATURE_CHECK_LDFLAGS-libunwind-debug-frame = $(LIBUNWIND_LDFLAGS) $(LIBUNWIND_LIBS)
95

96
ifeq ($(NO_PERF_REGS),0)
97
  CFLAGS += -DHAVE_PERF_REGS_SUPPORT
98
endif
99

100 101 102 103 104
# for linking with debug library, run like:
# make DEBUG=1 LIBDW_DIR=/opt/libdw/
ifdef LIBDW_DIR
  LIBDW_CFLAGS  := -I$(LIBDW_DIR)/include
  LIBDW_LDFLAGS := -L$(LIBDW_DIR)/lib
105
endif
106 107
FEATURE_CHECK_CFLAGS-libdw-dwarf-unwind := $(LIBDW_CFLAGS)
FEATURE_CHECK_LDFLAGS-libdw-dwarf-unwind := $(LIBDW_LDFLAGS) -ldw
108

109 110 111 112 113
# for linking with debug library, run like:
# make DEBUG=1 LIBBABELTRACE_DIR=/opt/libbabeltrace/
ifdef LIBBABELTRACE_DIR
  LIBBABELTRACE_CFLAGS  := -I$(LIBBABELTRACE_DIR)/include
  LIBBABELTRACE_LDFLAGS := -L$(LIBBABELTRACE_DIR)/lib
114
endif
115 116
FEATURE_CHECK_CFLAGS-libbabeltrace := $(LIBBABELTRACE_CFLAGS)
FEATURE_CHECK_LDFLAGS-libbabeltrace := $(LIBBABELTRACE_LDFLAGS) -lbabeltrace-ctf
117

118
FEATURE_CHECK_CFLAGS-bpf = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(ARCH)/include/uapi -I$(srctree)/tools/include/uapi
119 120 121
# include ARCH specific config
-include $(src-perf)/arch/$(ARCH)/Makefile

122 123 124 125
ifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
  CFLAGS += -DHAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
endif

126
include $(srctree)/tools/scripts/utilities.mak
127 128

ifeq ($(call get-executable,$(FLEX)),)
129
  dummy := $(error Error: $(FLEX) is missing on this system, please install it)
130 131 132
endif

ifeq ($(call get-executable,$(BISON)),)
133
  dummy := $(error Error: $(BISON) is missing on this system, please install it)
134
endif
135 136 137

# Treat warnings as errors unless directed not to
ifneq ($(WERROR),0)
138
  CFLAGS += -Werror
139
  CXXFLAGS += -Werror
140 141
endif

A
Adrian Hunter 已提交
142 143 144 145
ifndef DEBUG
  DEBUG := 0
endif

146
ifeq ($(DEBUG),0)
147
  CFLAGS += -O6
148 149 150
endif

ifdef PARSER_DEBUG
151 152 153
  PARSER_DEBUG_BISON := -t
  PARSER_DEBUG_FLEX  := -d
  CFLAGS             += -DPARSER_DEBUG
154 155
  $(call detected_var,PARSER_DEBUG_BISON)
  $(call detected_var,PARSER_DEBUG_FLEX)
156 157
endif

158 159 160 161 162 163 164 165 166 167
# Try different combinations to accommodate systems that only have
# python[2][-config] in weird combinations but always preferring
# python2 and python2-config as per pep-0394. If we catch a
# python[-config] in version 3, the version check will kill it.
PYTHON2 := $(if $(call get-executable,python2),python2,python)
override PYTHON := $(call get-executable-or-default,PYTHON,$(PYTHON2))
PYTHON2_CONFIG := \
  $(if $(call get-executable,$(PYTHON)-config),$(PYTHON)-config,python-config)
override PYTHON_CONFIG := \
  $(call get-executable-or-default,PYTHON_CONFIG,$(PYTHON2_CONFIG))
168

169
PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))
170

171 172
PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) --ldflags 2>/dev/null)
PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --cflags 2>/dev/null)
173

174 175 176 177
FEATURE_CHECK_CFLAGS-libpython := $(PYTHON_EMBED_CCOPTS)
FEATURE_CHECK_LDFLAGS-libpython := $(PYTHON_EMBED_LDOPTS)
FEATURE_CHECK_CFLAGS-libpython-version := $(PYTHON_EMBED_CCOPTS)
FEATURE_CHECK_LDFLAGS-libpython-version := $(PYTHON_EMBED_LDOPTS)
178

179 180 181 182 183 184
CFLAGS += -fno-omit-frame-pointer
CFLAGS += -ggdb3
CFLAGS += -funwind-tables
CFLAGS += -Wall
CFLAGS += -Wextra
CFLAGS += -std=gnu99
185

186 187 188 189 190 191 192
CXXFLAGS += -std=gnu++11 -fno-exceptions -fno-rtti
CXXFLAGS += -Wall
CXXFLAGS += -fno-omit-frame-pointer
CXXFLAGS += -ggdb3
CXXFLAGS += -funwind-tables
CXXFLAGS += -Wno-strict-aliasing

193 194 195 196
# Enforce a non-executable stack, as we may regress (again) in the future by
# adding assembler files missing the .GNU-stack linker note.
LDFLAGS += -Wl,-z,noexecstack

197
EXTLIBS = -lpthread -lrt -lm -ldl
198

199
ifeq ($(FEATURES_DUMP),)
200
include $(srctree)/tools/build/Makefile.feature
201 202 203
else
include $(FEATURES_DUMP)
endif
204

205
ifeq ($(feature-stackprotector-all), 1)
206
  CFLAGS += -fstack-protector-all
207 208
endif

209
ifeq ($(DEBUG),0)
210
  ifeq ($(feature-fortify-source), 1)
211 212
    CFLAGS += -D_FORTIFY_SOURCE=2
  endif
213 214
endif

215 216 217 218 219 220 221
INC_FLAGS += -I$(src-perf)/util/include
INC_FLAGS += -I$(src-perf)/arch/$(ARCH)/include
INC_FLAGS += -I$(srctree)/tools/include/uapi
INC_FLAGS += -I$(srctree)/tools/include/
INC_FLAGS += -I$(srctree)/tools/arch/$(ARCH)/include/uapi
INC_FLAGS += -I$(srctree)/tools/arch/$(ARCH)/include/
INC_FLAGS += -I$(srctree)/tools/arch/$(ARCH)/
222 223 224 225

# $(obj-perf)      for generated common-cmds.h
# $(obj-perf)/util for generated bison/flex headers
ifneq ($(OUTPUT),)
226 227
INC_FLAGS += -I$(obj-perf)/util
INC_FLAGS += -I$(obj-perf)
228 229
endif

230 231 232 233 234 235
INC_FLAGS += -I$(src-perf)/util
INC_FLAGS += -I$(src-perf)
INC_FLAGS += -I$(srctree)/tools/lib/

CFLAGS   += $(INC_FLAGS)
CXXFLAGS += $(INC_FLAGS)
236

237
CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
238

239 240 241 242
ifeq ($(feature-sync-compare-and-swap), 1)
  CFLAGS += -DHAVE_SYNC_COMPARE_AND_SWAP_SUPPORT
endif

243 244 245 246
ifeq ($(feature-pthread-attr-setaffinity-np), 1)
  CFLAGS += -DHAVE_PTHREAD_ATTR_SETAFFINITY_NP
endif

247
ifndef NO_BIONIC
248
  $(call feature_check,bionic)
249 250 251 252 253
  ifeq ($(feature-bionic), 1)
    BIONIC := 1
    EXTLIBS := $(filter-out -lrt,$(EXTLIBS))
    EXTLIBS := $(filter-out -lpthread,$(EXTLIBS))
  endif
254
endif
255 256

ifdef NO_LIBELF
257 258 259
  NO_DWARF := 1
  NO_DEMANGLE := 1
  NO_LIBUNWIND := 1
260
  NO_LIBDW_DWARF_UNWIND := 1
W
Wang Nan 已提交
261
  NO_LIBBPF := 1
262
else
263
  ifeq ($(feature-libelf), 0)
264
    ifeq ($(feature-glibc), 1)
265 266 267 268 269 270
      LIBC_SUPPORT := 1
    endif
    ifeq ($(BIONIC),1)
      LIBC_SUPPORT := 1
    endif
    ifeq ($(LIBC_SUPPORT),1)
271
      msg := $(warning No libelf found, disables 'probe' tool and BPF support in 'perf record', please install libelf-dev, libelf-devel or elfutils-libelf-devel);
272 273 274 275

      NO_LIBELF := 1
      NO_DWARF := 1
      NO_DEMANGLE := 1
276 277
      NO_LIBUNWIND := 1
      NO_LIBDW_DWARF_UNWIND := 1
W
Wang Nan 已提交
278
      NO_LIBBPF := 1
279
    else
280 281 282 283 284
      ifneq ($(filter s% -static%,$(LDFLAGS),),)
        msg := $(error No static glibc found, please install glibc-static);
      else
        msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]);
      endif
285
    endif
286
  else
287 288 289 290 291 292
    ifndef NO_LIBDW_DWARF_UNWIND
      ifneq ($(feature-libdw-dwarf-unwind),1)
        NO_LIBDW_DWARF_UNWIND := 1
        msg := $(warning No libdw DWARF unwind found, Please install elfutils-devel/libdw-dev >= 0.158 and/or set LIBDW_DIR);
      endif
    endif
293
    ifneq ($(feature-dwarf), 1)
294 295
      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);
      NO_DWARF := 1
296 297 298 299 300 301
    else
      ifneq ($(feature-dwarf_getlocations), 1)
        msg := $(warning Old libdw.h, finding variables at given 'perf probe' point will not work, install elfutils-devel/libdw-dev >= 0.157);
      else
        CFLAGS += -DHAVE_DWARF_GETLOCATIONS
      endif # dwarf_getlocations
302
    endif # Dwarf support
303
  endif # libelf support
304 305
endif # NO_LIBELF

306 307 308 309
ifdef NO_DWARF
  NO_LIBDW_DWARF_UNWIND := 1
endif

310
ifndef NO_LIBELF
311
  CFLAGS += -DHAVE_LIBELF_SUPPORT
312
  EXTLIBS += -lelf
313
  $(call detected,CONFIG_LIBELF)
314

315
  ifeq ($(feature-libelf-mmap), 1)
316 317
    CFLAGS += -DHAVE_LIBELF_MMAP_SUPPORT
  endif
318

319
  ifeq ($(feature-libelf-getphdrnum), 1)
320 321 322
    CFLAGS += -DHAVE_ELF_GETPHDRNUM_SUPPORT
  endif

323 324 325 326 327 328
  ifeq ($(feature-libelf-gelf_getnote), 1)
    CFLAGS += -DHAVE_GELF_GETNOTE_SUPPORT
  else
    msg := $(warning gelf_getnote() not found on libelf, SDT support disabled);
  endif

329 330 331 332
  ifeq ($(feature-libelf-getshdrstrndx), 1)
    CFLAGS += -DHAVE_ELF_GETSHDRSTRNDX_SUPPORT
  endif

333 334 335 336 337 338 339
  ifndef NO_DWARF
    ifeq ($(origin PERF_HAVE_DWARF_REGS), undefined)
      msg := $(warning DWARF register mappings have not been defined for architecture $(ARCH), DWARF support disabled);
      NO_DWARF := 1
    else
      CFLAGS += -DHAVE_DWARF_SUPPORT $(LIBDW_CFLAGS)
      LDFLAGS += $(LIBDW_LDFLAGS)
340 341 342 343 344
      DWARFLIBS := -ldw
      ifeq ($(findstring -static,${LDFLAGS}),-static)
	DWARFLIBS += -lelf -lebl -lz -llzma -lbz2
      endif
      EXTLIBS += ${DWARFLIBS}
345
      $(call detected,CONFIG_DWARF)
346 347
    endif # PERF_HAVE_DWARF_REGS
  endif # NO_DWARF
W
Wang Nan 已提交
348 349 350 351 352 353

  ifndef NO_LIBBPF
    ifeq ($(feature-bpf), 1)
      CFLAGS += -DHAVE_LIBBPF_SUPPORT
      $(call detected,CONFIG_LIBBPF)
    endif
354 355 356 357 358 359 360 361 362 363 364 365

    ifndef NO_DWARF
      ifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
        CFLAGS += -DHAVE_BPF_PROLOGUE
        $(call detected,CONFIG_BPF_PROLOGUE)
      else
        msg := $(warning BPF prologue is not supported by architecture $(ARCH), missing regs_query_register_offset());
      endif
    else
      msg := $(warning DWARF support is off, BPF prologue is disabled);
    endif

W
Wang Nan 已提交
366
  endif # NO_LIBBPF
367
endif # NO_LIBELF
368

369 370 371 372 373 374 375 376 377 378
ifndef NO_SDT
  ifneq ($(feature-sdt), 1)
    msg := $(warning No sys/sdt.h found, no SDT events are defined, please install systemtap-sdt-devel or systemtap-sdt-dev);
    NO_SDT := 1;
  else
    CFLAGS += -DHAVE_SDT_EVENT
    $(call detected,CONFIG_SDT_EVENT)
  endif
endif

379
ifdef PERF_HAVE_JITDUMP
380
  ifndef NO_LIBELF
381 382 383 384 385
    $(call detected,CONFIG_JITDUMP)
    CFLAGS += -DHAVE_JITDUMP
  endif
endif

386 387 388 389 390 391
ifeq ($(ARCH),powerpc)
  ifndef NO_DWARF
    CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
  endif
endif

392
ifndef NO_LIBUNWIND
393
  have_libunwind :=
394 395 396 397 398

  ifeq ($(feature-libunwind-x86), 1)
    $(call detected,CONFIG_LIBUNWIND_X86)
    CFLAGS += -DHAVE_LIBUNWIND_X86_SUPPORT
    LDFLAGS += -lunwind-x86
399
    EXTLIBS_LIBUNWIND += -lunwind-x86
400 401 402
    have_libunwind = 1
  endif

403 404 405 406
  ifeq ($(feature-libunwind-aarch64), 1)
    $(call detected,CONFIG_LIBUNWIND_AARCH64)
    CFLAGS += -DHAVE_LIBUNWIND_AARCH64_SUPPORT
    LDFLAGS += -lunwind-aarch64
407
    EXTLIBS_LIBUNWIND += -lunwind-aarch64
408 409 410 411 412 413 414 415
    have_libunwind = 1
    $(call feature_check,libunwind-debug-frame-aarch64)
    ifneq ($(feature-libunwind-debug-frame-aarch64), 1)
      msg := $(warning No debug_frame support found in libunwind-aarch64);
      CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME_AARCH64
    endif
  endif

416
  ifneq ($(feature-libunwind), 1)
417
    msg := $(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR);
418 419 420 421 422 423 424
    NO_LOCAL_LIBUNWIND := 1
  else
    have_libunwind := 1
    $(call detected,CONFIG_LOCAL_LIBUNWIND)
  endif

  ifneq ($(have_libunwind), 1)
425
    NO_LIBUNWIND := 1
426
  endif
427 428
else
  NO_LOCAL_LIBUNWIND := 1
429 430
endif

W
Wang Nan 已提交
431 432 433 434 435 436 437
ifndef NO_LIBBPF
  ifneq ($(feature-bpf), 1)
    msg := $(warning BPF API too old. Please install recent kernel headers. BPF support in 'perf record' is disabled.)
    NO_LIBBPF := 1
  endif
endif

438 439 440 441 442 443 444 445
dwarf-post-unwind := 1
dwarf-post-unwind-text := BUG

# setup DWARF post unwinder
ifdef NO_LIBUNWIND
  ifdef NO_LIBDW_DWARF_UNWIND
    msg := $(warning Disabling post unwind, no support found.);
    dwarf-post-unwind := 0
446
  else
447
    dwarf-post-unwind-text := libdw
448
    $(call detected,CONFIG_LIBDW_DWARF_UNWIND)
449 450 451
  endif
else
  dwarf-post-unwind-text := libunwind
452
  $(call detected,CONFIG_LIBUNWIND)
453 454 455 456 457 458 459 460
  # Enable libunwind support by default.
  ifndef NO_LIBDW_DWARF_UNWIND
    NO_LIBDW_DWARF_UNWIND := 1
  endif
endif

ifeq ($(dwarf-post-unwind),1)
  CFLAGS += -DHAVE_DWARF_UNWIND_SUPPORT
461
  $(call detected,CONFIG_DWARF_UNWIND)
462 463 464 465
else
  NO_DWARF_UNWIND := 1
endif

466
ifndef NO_LOCAL_LIBUNWIND
467
  ifeq ($(ARCH),$(filter $(ARCH),arm arm64))
468 469 470
    $(call feature_check,libunwind-debug-frame)
    ifneq ($(feature-libunwind-debug-frame), 1)
      msg := $(warning No debug_frame support found in libunwind);
471 472
      CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
    endif
473 474 475 476 477
  else
    # non-ARM has no dwarf_find_debug_frame() function:
    CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
  endif
  EXTLIBS += $(LIBUNWIND_LIBS)
478 479 480 481 482
  LDFLAGS += $(LIBUNWIND_LIBS)
endif

ifndef NO_LIBUNWIND
  CFLAGS  += -DHAVE_LIBUNWIND_SUPPORT
483 484
  CFLAGS  += $(LIBUNWIND_CFLAGS)
  LDFLAGS += $(LIBUNWIND_LDFLAGS)
485
  EXTLIBS += $(EXTLIBS_LIBUNWIND)
486
endif
487 488

ifndef NO_LIBAUDIT
489
  ifneq ($(feature-libaudit), 1)
490 491 492
    msg := $(warning No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev);
    NO_LIBAUDIT := 1
  else
493
    CFLAGS += -DHAVE_LIBAUDIT_SUPPORT
494
    EXTLIBS += -laudit
495
    $(call detected,CONFIG_AUDIT)
496
  endif
497
endif
498

499 500 501 502 503 504 505 506 507 508 509
ifndef NO_LIBCRYPTO
  ifneq ($(feature-libcrypto), 1)
    msg := $(warning No libcrypto.h found, disables jitted code injection, please install libssl-devel or libssl-dev);
    NO_LIBCRYPTO := 1
  else
    CFLAGS += -DHAVE_LIBCRYPTO_SUPPORT
    EXTLIBS += -lcrypto
    $(call detected,CONFIG_CRYPTO)
  endif
endif

510
ifdef NO_NEWT
511
  NO_SLANG=1
512 513 514
endif

ifndef NO_SLANG
515
  ifneq ($(feature-libslang), 1)
516
    msg := $(warning slang not found, disables TUI support. Please install slang-devel, libslang-dev or libslang2-dev);
517 518 519 520
    NO_SLANG := 1
  else
    # Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
    CFLAGS += -I/usr/include/slang
521
    CFLAGS += -DHAVE_SLANG_SUPPORT
522
    EXTLIBS += -lslang
523
    $(call detected,CONFIG_SLANG)
524
  endif
525
endif
526 527

ifndef NO_GTK2
M
Mark Rutland 已提交
528
  FLAGS_GTK2=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null)
529
  ifneq ($(feature-gtk2), 1)
530 531 532
    msg := $(warning GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev);
    NO_GTK2 := 1
  else
533
    ifeq ($(feature-gtk2-infobar), 1)
534
      GTK_CFLAGS := -DHAVE_GTK_INFO_BAR_SUPPORT
535
    endif
536
    CFLAGS += -DHAVE_GTK2_SUPPORT
M
Mark Rutland 已提交
537 538
    GTK_CFLAGS += $(shell $(PKG_CONFIG) --cflags gtk+-2.0 2>/dev/null)
    GTK_LIBS := $(shell $(PKG_CONFIG) --libs gtk+-2.0 2>/dev/null)
539
    EXTLIBS += -ldl
540
  endif
541
endif
542 543 544 545 546

grep-libs  = $(filter -l%,$(1))
strip-libs = $(filter-out -l%,$(1))

ifdef NO_LIBPERL
547
  CFLAGS += -DNO_LIBPERL
548
else
549 550 551 552 553 554
  PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
  PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
  PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
  PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
  FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)

555
  ifneq ($(feature-libperl), 1)
556 557
    CFLAGS += -DNO_LIBPERL
    NO_LIBPERL := 1
558
    msg := $(warning Missing perl devel files. Disabling perl scripting support, please install perl-ExtUtils-Embed/libperl-dev);
559 560 561
  else
    LDFLAGS += $(PERL_EMBED_LDFLAGS)
    EXTLIBS += $(PERL_EMBED_LIBADD)
562
    $(call detected,CONFIG_LIBPERL)
563
  endif
564
endif
565

566 567 568 569 570 571
ifeq ($(feature-timerfd), 1)
  CFLAGS += -DHAVE_TIMERFD_SUPPORT
else
  msg := $(warning No timerfd support. Disables 'perf kvm stat live');
endif

572 573
disable-python = $(eval $(disable-python_code))
define disable-python_code
574
  CFLAGS += -DNO_LIBPYTHON
575
  $(warning $1)
576 577 578
  NO_LIBPYTHON := 1
endef

579
ifdef NO_LIBPYTHON
580
  $(call disable-python,Python support disabled by user)
581 582
else

583
  ifndef PYTHON
584
    $(call disable-python,No python interpreter was found: disables Python support - please install python-devel/python-dev)
585
  else
586
    PYTHON_WORD := $(call shell-wordify,$(PYTHON))
587 588

    ifndef PYTHON_CONFIG
589
      $(call disable-python,No 'python-config' tool was found: disables Python support - please install python-devel/python-dev)
590 591 592 593 594 595
    else

      PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))

      PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) --ldflags 2>/dev/null)
      PYTHON_EMBED_LDFLAGS := $(call strip-libs,$(PYTHON_EMBED_LDOPTS))
596
      PYTHON_EMBED_LIBADD := $(call grep-libs,$(PYTHON_EMBED_LDOPTS)) -lutil
597 598 599
      PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --cflags 2>/dev/null)
      FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)

600
      ifneq ($(feature-libpython), 1)
601
        $(call disable-python,No 'Python.h' (for Python 2.x support) was found: disables Python support - please install python-devel/python-dev)
602 603
      else

604
        ifneq ($(feature-libpython-version), 1)
605 606 607 608 609 610 611 612 613 614 615 616 617
          $(warning Python 3 is not yet supported; please set)
          $(warning PYTHON and/or PYTHON_CONFIG appropriately.)
          $(warning If you also have Python 2 installed, then)
          $(warning try something like:)
          $(warning $(and ,))
          $(warning $(and ,)  make PYTHON=python2)
          $(warning $(and ,))
          $(warning Otherwise, disable Python support entirely:)
          $(warning $(and ,))
          $(warning $(and ,)  make NO_LIBPYTHON=1)
          $(warning $(and ,))
          $(error   $(and ,))
        else
618
          LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
619
          EXTLIBS += $(PYTHON_EMBED_LIBADD)
620
          LANG_BINDINGS += $(obj-perf)python/perf.so
621
          $(call detected,CONFIG_LIBPYTHON)
622 623 624 625 626
        endif
      endif
    endif
  endif
endif
627

628
ifeq ($(feature-libbfd), 1)
629 630 631 632 633 634 635 636 637 638 639 640 641 642 643
  EXTLIBS += -lbfd

  # call all detections now so we get correct
  # status in VF output
  $(call feature_check,liberty)
  $(call feature_check,liberty-z)
  $(call feature_check,cplus-demangle)

  ifeq ($(feature-liberty), 1)
    EXTLIBS += -liberty
  else
    ifeq ($(feature-liberty-z), 1)
      EXTLIBS += -liberty -lz
    endif
  endif
644 645
endif

646
ifdef NO_DEMANGLE
647
  CFLAGS += -DNO_DEMANGLE
648
else
649
  ifdef HAVE_CPLUS_DEMANGLE_SUPPORT
650
    EXTLIBS += -liberty
651
    CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
652
  else
653
    ifneq ($(feature-libbfd), 1)
654 655 656 657
      ifneq ($(feature-liberty), 1)
        ifneq ($(feature-liberty-z), 1)
          # we dont have neither HAVE_CPLUS_DEMANGLE_SUPPORT
          # or any of 'bfd iberty z' trinity
658
          ifeq ($(feature-cplus-demangle), 1)
659
            EXTLIBS += -liberty
660
            CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
661
          else
662
            msg := $(warning No bfd.h/libbfd found, please install binutils-dev[el]/zlib-static/libiberty-dev to gain symbol demangling)
663 664 665 666 667 668
            CFLAGS += -DNO_DEMANGLE
          endif
        endif
      endif
    endif
  endif
669
endif
670

671 672 673 674
ifneq ($(filter -lbfd,$(EXTLIBS)),)
  CFLAGS += -DHAVE_LIBBFD_SUPPORT
endif

675 676 677 678
ifndef NO_ZLIB
  ifeq ($(feature-zlib), 1)
    CFLAGS += -DHAVE_ZLIB_SUPPORT
    EXTLIBS += -lz
679
    $(call detected,CONFIG_ZLIB)
680 681 682 683 684
  else
    NO_ZLIB := 1
  endif
endif

685 686 687 688 689 690 691 692 693 694 695
ifndef NO_LZMA
  ifeq ($(feature-lzma), 1)
    CFLAGS += -DHAVE_LZMA_SUPPORT
    EXTLIBS += -llzma
    $(call detected,CONFIG_LZMA)
  else
    msg := $(warning No liblzma found, disables xz kernel module decompression, please install xz-devel/liblzma-dev);
    NO_LZMA := 1
  endif
endif

696
ifndef NO_BACKTRACE
697
  ifeq ($(feature-backtrace), 1)
698
    CFLAGS += -DHAVE_BACKTRACE_SUPPORT
699
  endif
700
endif
701 702

ifndef NO_LIBNUMA
703
  ifeq ($(feature-libnuma), 0)
704
    msg := $(warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev);
705 706
    NO_LIBNUMA := 1
  else
707 708 709 710 711 712 713 714
    ifeq ($(feature-numa_num_possible_cpus), 0)
      msg := $(warning Old numa library found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev >= 2.0.8);
      NO_LIBNUMA := 1
    else
      CFLAGS += -DHAVE_LIBNUMA_SUPPORT
      EXTLIBS += -lnuma
      $(call detected,CONFIG_NUMA)
    endif
715
  endif
716
endif
717

718 719 720 721
ifdef HAVE_KVM_STAT_SUPPORT
    CFLAGS += -DHAVE_KVM_STAT_SUPPORT
endif

722 723 724
ifeq (${IS_64_BIT}, 1)
  ifndef NO_PERF_READ_VDSO32
    $(call feature_check,compile-32)
725 726 727
    ifeq ($(feature-compile-32), 1)
      CFLAGS += -DHAVE_PERF_READ_VDSO32
    else
728 729 730
      NO_PERF_READ_VDSO32 := 1
    endif
  endif
731
  ifneq ($(ARCH), x86)
732 733 734 735
    NO_PERF_READ_VDSOX32 := 1
  endif
  ifndef NO_PERF_READ_VDSOX32
    $(call feature_check,compile-x32)
736 737 738
    ifeq ($(feature-compile-x32), 1)
      CFLAGS += -DHAVE_PERF_READ_VDSOX32
    else
739 740 741 742 743 744 745 746
      NO_PERF_READ_VDSOX32 := 1
    endif
  endif
else
  NO_PERF_READ_VDSO32 := 1
  NO_PERF_READ_VDSOX32 := 1
endif

747
ifdef LIBBABELTRACE
748 749
  $(call feature_check,libbabeltrace)
  ifeq ($(feature-libbabeltrace), 1)
750 751 752
    CFLAGS += -DHAVE_LIBBABELTRACE_SUPPORT $(LIBBABELTRACE_CFLAGS)
    LDFLAGS += $(LIBBABELTRACE_LDFLAGS)
    EXTLIBS += -lbabeltrace-ctf
753
    $(call detected,CONFIG_LIBBABELTRACE)
754 755
  else
    msg := $(warning No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev);
756 757 758
  endif
endif

759
ifndef NO_AUXTRACE
760 761 762 763 764 765 766
  ifeq ($(ARCH),x86)
    ifeq ($(feature-get_cpuid), 0)
      msg := $(warning Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc);
      NO_AUXTRACE := 1
    endif
  endif
  ifndef NO_AUXTRACE
767 768 769
    $(call detected,CONFIG_AUXTRACE)
    CFLAGS += -DHAVE_AUXTRACE_SUPPORT
  endif
770 771
endif

772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796
ifndef NO_JVMTI
  ifneq (,$(wildcard /usr/sbin/update-java-alternatives))
    JDIR=$(shell /usr/sbin/update-java-alternatives -l | head -1 | awk '{print $$3}')
  else
    ifneq (,$(wildcard /usr/sbin/alternatives))
      JDIR=$(shell alternatives --display java | tail -1 | cut -d' ' -f 5 | sed 's%/jre/bin/java.%%g')
    endif
  endif
  ifndef JDIR
    $(warning No alternatives command found, you need to set JDIR= to point to the root of your Java directory)
    NO_JVMTI := 1
  endif
endif

ifndef NO_JVMTI
  FEATURE_CHECK_CFLAGS-jvmti := -I$(JDIR)/include -I$(JDIR)/include/linux
  $(call feature_check,jvmti)
  ifeq ($(feature-jvmti), 1)
    $(call detected_var,JDIR)
  else
    $(warning No openjdk development package found, please install JDK package)
    NO_JVMTI := 1
  endif
endif

797 798 799 800 801 802 803 804
USE_CXX = 0
USE_CLANGLLVM = 0
ifdef LIBCLANGLLVM
  $(call feature_check,cxx)
  ifneq ($(feature-cxx), 1)
    msg := $(warning No g++ found, disable clang and llvm support. Please install g++)
  else
    $(call feature_check,llvm)
805
    $(call feature_check,llvm-version)
806
    ifneq ($(feature-llvm), 1)
807
      msg := $(warning No suitable libLLVM found, disabling builtin clang and LLVM support. Please install llvm-dev(el) (>= 3.9.0))
808 809 810
    else
      $(call feature_check,clang)
      ifneq ($(feature-clang), 1)
811
        msg := $(warning No suitable libclang found, disabling builtin clang and LLVM support. Please install libclang-dev(el) (>= 3.9.0))
812 813 814 815 816 817 818 819
      else
        CFLAGS += -DHAVE_LIBCLANGLLVM_SUPPORT
        CXXFLAGS += -DHAVE_LIBCLANGLLVM_SUPPORT -I$(shell $(LLVM_CONFIG) --includedir)
        $(call detected,CONFIG_CXX)
        $(call detected,CONFIG_CLANGLLVM)
	USE_CXX = 1
	USE_LLVM = 1
	USE_CLANG = 1
820 821 822
        ifneq ($(feature-llvm-version),1)
          msg := $(warning This version of LLVM is not tested. May cause build errors)
        endif
823 824 825 826 827
      endif
    endif
  endif
endif

828 829 830 831 832 833 834 835 836 837 838 839 840 841
# Among the variables below, these:
#   perfexecdir
#   template_dir
#   mandir
#   infodir
#   htmldir
#   ETC_PERFCONFIG (but not sysconfdir)
# can be specified as a relative path some/where/else;
# this is interpreted as relative to $(prefix) and "perf" at
# runtime figures out where they are based on the path to the executable.
# This can help installing the suite in a relocatable way.

# Make the path relative to DESTDIR, not to prefix
ifndef DESTDIR
842
prefix ?= $(HOME)
843 844
endif
bindir_relative = bin
845
bindir = $(abspath $(prefix)/$(bindir_relative))
846 847 848 849 850
mandir = share/man
infodir = share/info
perfexecdir = libexec/perf-core
sharedir = $(prefix)/share
template_dir = share/perf-core/templates
851
STRACE_GROUPS_DIR = share/perf-core/strace/groups
852
htmldir = share/doc/perf-doc
853
tipdir = share/doc/perf-tip
854
srcdir = $(srctree)/tools/perf
855 856 857 858 859 860 861
ifeq ($(prefix),/usr)
sysconfdir = /etc
ETC_PERFCONFIG = $(sysconfdir)/perfconfig
else
sysconfdir = $(prefix)/etc
ETC_PERFCONFIG = etc/perfconfig
endif
862
ifndef lib
863
ifeq ($(ARCH)$(IS_64_BIT), x861)
864 865
lib = lib64
else
866
lib = lib
867
endif
868
endif # lib
869
libdir = $(prefix)/$(lib)
870 871 872

# Shell quote (do not use $(call) to accommodate ancient setups);
ETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
873
STRACE_GROUPS_DIR_SQ = $(subst ','\'',$(STRACE_GROUPS_DIR))
874 875 876 877 878 879 880
DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir))
mandir_SQ = $(subst ','\'',$(mandir))
infodir_SQ = $(subst ','\'',$(infodir))
perfexecdir_SQ = $(subst ','\'',$(perfexecdir))
template_dir_SQ = $(subst ','\'',$(template_dir))
htmldir_SQ = $(subst ','\'',$(htmldir))
881
tipdir_SQ = $(subst ','\'',$(tipdir))
882 883
prefix_SQ = $(subst ','\'',$(prefix))
sysconfdir_SQ = $(subst ','\'',$(sysconfdir))
884
libdir_SQ = $(subst ','\'',$(libdir))
885
srcdir_SQ = $(subst ','\'',$(srcdir))
886 887 888

ifneq ($(filter /%,$(firstword $(perfexecdir))),)
perfexec_instdir = $(perfexecdir)
889
STRACE_GROUPS_INSTDIR = $(STRACE_GROUPS_DIR)
890
tip_instdir = $(tipdir)
891 892
else
perfexec_instdir = $(prefix)/$(perfexecdir)
893
STRACE_GROUPS_INSTDIR = $(prefix)/$(STRACE_GROUPS_DIR)
894
tip_instdir = $(prefix)/$(tipdir)
895 896
endif
perfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir))
897
STRACE_GROUPS_INSTDIR_SQ = $(subst ','\'',$(STRACE_GROUPS_INSTDIR))
898
tip_instdir_SQ = $(subst ','\'',$(tip_instdir))
899 900 901 902 903 904

# If we install to $(HOME) we keep the traceevent default:
# $(HOME)/.traceevent/plugins
# Otherwise we install plugins into the global $(libdir).
ifdef DESTDIR
plugindir=$(libdir)/traceevent/plugins
905
plugindir_SQ= $(subst ','\'',$(plugindir))
906
endif
907

908 909
print_var = $(eval $(print_var_code)) $(info $(MSG))
define print_var_code
910 911 912
    MSG = $(shell printf '...%30s: %s' $(1) $($(1)))
endef

913
ifeq ($(VF),1)
914 915 916 917 918 919
  $(call print_var,prefix)
  $(call print_var,bindir)
  $(call print_var,libdir)
  $(call print_var,sysconfdir)
  $(call print_var,LIBUNWIND_DIR)
  $(call print_var,LIBDW_DIR)
920
  $(call print_var,JDIR)
921 922 923 924

  ifeq ($(dwarf-post-unwind),1)
    $(call feature_print_text,"DWARF post unwind library", $(dwarf-post-unwind-text))
  endif
925 926
  $(info )
endif
927 928 929 930 931 932

$(call detected_var,bindir_SQ)
$(call detected_var,PYTHON_WORD)
ifneq ($(OUTPUT),)
$(call detected_var,OUTPUT)
endif
933 934 935
$(call detected_var,htmldir_SQ)
$(call detected_var,infodir_SQ)
$(call detected_var,mandir_SQ)
936
$(call detected_var,ETC_PERFCONFIG_SQ)
937
$(call detected_var,STRACE_GROUPS_DIR_SQ)
938 939
$(call detected_var,prefix_SQ)
$(call detected_var,perfexecdir_SQ)
940
$(call detected_var,tipdir_SQ)
941
$(call detected_var,srcdir_SQ)
J
Jiri Olsa 已提交
942
$(call detected_var,LIBDIR)
J
Jiri Olsa 已提交
943
$(call detected_var,GTK_CFLAGS)
944 945
$(call detected_var,PERL_EMBED_CCOPTS)
$(call detected_var,PYTHON_EMBED_CCOPTS)