Makefile.config 25.8 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 140
endif

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

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

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

157 158 159 160 161 162 163 164 165 166
# 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))
167

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

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

173 174 175 176
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)
177

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

185 186 187 188
# 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

189
EXTLIBS = -lpthread -lrt -lm -ldl
190

191
ifeq ($(FEATURES_DUMP),)
192
include $(srctree)/tools/build/Makefile.feature
193 194 195
else
include $(FEATURES_DUMP)
endif
196

197
ifeq ($(feature-stackprotector-all), 1)
198
  CFLAGS += -fstack-protector-all
199 200
endif

201
ifeq ($(DEBUG),0)
202
  ifeq ($(feature-fortify-source), 1)
203 204
    CFLAGS += -D_FORTIFY_SOURCE=2
  endif
205 206
endif

207 208
CFLAGS += -I$(src-perf)/util/include
CFLAGS += -I$(src-perf)/arch/$(ARCH)/include
209
CFLAGS += -I$(srctree)/tools/include/uapi
210
CFLAGS += -I$(srctree)/tools/include/
211 212
CFLAGS += -I$(srctree)/tools/arch/$(ARCH)/include/uapi
CFLAGS += -I$(srctree)/tools/arch/$(ARCH)/include/
213
CFLAGS += -I$(srctree)/tools/arch/$(ARCH)/
214 215 216 217

# $(obj-perf)      for generated common-cmds.h
# $(obj-perf)/util for generated bison/flex headers
ifneq ($(OUTPUT),)
218 219
CFLAGS += -I$(obj-perf)/util
CFLAGS += -I$(obj-perf)
220 221
endif

222 223
CFLAGS += -I$(src-perf)/util
CFLAGS += -I$(src-perf)
224
CFLAGS += -I$(srctree)/tools/lib/
225

226
CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
227

228 229 230 231
ifeq ($(feature-sync-compare-and-swap), 1)
  CFLAGS += -DHAVE_SYNC_COMPARE_AND_SWAP_SUPPORT
endif

232 233 234 235
ifeq ($(feature-pthread-attr-setaffinity-np), 1)
  CFLAGS += -DHAVE_PTHREAD_ATTR_SETAFFINITY_NP
endif

236
ifndef NO_BIONIC
237
  $(call feature_check,bionic)
238 239 240 241 242
  ifeq ($(feature-bionic), 1)
    BIONIC := 1
    EXTLIBS := $(filter-out -lrt,$(EXTLIBS))
    EXTLIBS := $(filter-out -lpthread,$(EXTLIBS))
  endif
243
endif
244 245

ifdef NO_LIBELF
246 247 248
  NO_DWARF := 1
  NO_DEMANGLE := 1
  NO_LIBUNWIND := 1
249
  NO_LIBDW_DWARF_UNWIND := 1
W
Wang Nan 已提交
250
  NO_LIBBPF := 1
251
else
252
  ifeq ($(feature-libelf), 0)
253
    ifeq ($(feature-glibc), 1)
254 255 256 257 258 259
      LIBC_SUPPORT := 1
    endif
    ifeq ($(BIONIC),1)
      LIBC_SUPPORT := 1
    endif
    ifeq ($(LIBC_SUPPORT),1)
260
      msg := $(warning No libelf found, disables 'probe' tool and BPF support in 'perf record', please install libelf-dev, libelf-devel or elfutils-libelf-devel);
261 262 263 264

      NO_LIBELF := 1
      NO_DWARF := 1
      NO_DEMANGLE := 1
265 266
      NO_LIBUNWIND := 1
      NO_LIBDW_DWARF_UNWIND := 1
W
Wang Nan 已提交
267
      NO_LIBBPF := 1
268
    else
269 270 271 272 273
      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
274
    endif
275
  else
276 277 278 279 280 281
    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
282
    ifneq ($(feature-dwarf), 1)
283 284
      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
285 286 287 288 289 290
    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
291
    endif # Dwarf support
292
  endif # libelf support
293 294
endif # NO_LIBELF

295 296 297 298
ifdef NO_DWARF
  NO_LIBDW_DWARF_UNWIND := 1
endif

299
ifndef NO_LIBELF
300
  CFLAGS += -DHAVE_LIBELF_SUPPORT
301
  EXTLIBS += -lelf
302
  $(call detected,CONFIG_LIBELF)
303

304
  ifeq ($(feature-libelf-mmap), 1)
305 306
    CFLAGS += -DHAVE_LIBELF_MMAP_SUPPORT
  endif
307

308
  ifeq ($(feature-libelf-getphdrnum), 1)
309 310 311
    CFLAGS += -DHAVE_ELF_GETPHDRNUM_SUPPORT
  endif

312 313 314 315 316 317
  ifeq ($(feature-libelf-gelf_getnote), 1)
    CFLAGS += -DHAVE_GELF_GETNOTE_SUPPORT
  else
    msg := $(warning gelf_getnote() not found on libelf, SDT support disabled);
  endif

318 319 320 321
  ifeq ($(feature-libelf-getshdrstrndx), 1)
    CFLAGS += -DHAVE_ELF_GETSHDRSTRNDX_SUPPORT
  endif

322 323 324 325 326 327 328
  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)
329 330 331 332 333
      DWARFLIBS := -ldw
      ifeq ($(findstring -static,${LDFLAGS}),-static)
	DWARFLIBS += -lelf -lebl -lz -llzma -lbz2
      endif
      EXTLIBS += ${DWARFLIBS}
334
      $(call detected,CONFIG_DWARF)
335 336
    endif # PERF_HAVE_DWARF_REGS
  endif # NO_DWARF
W
Wang Nan 已提交
337 338 339 340 341 342

  ifndef NO_LIBBPF
    ifeq ($(feature-bpf), 1)
      CFLAGS += -DHAVE_LIBBPF_SUPPORT
      $(call detected,CONFIG_LIBBPF)
    endif
343 344 345 346 347 348 349 350 351 352 353 354

    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 已提交
355
  endif # NO_LIBBPF
356
endif # NO_LIBELF
357

358 359 360 361 362 363 364 365 366 367
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

368
ifdef PERF_HAVE_JITDUMP
369
  ifndef NO_LIBELF
370 371 372 373 374
    $(call detected,CONFIG_JITDUMP)
    CFLAGS += -DHAVE_JITDUMP
  endif
endif

375 376 377 378 379 380
ifeq ($(ARCH),powerpc)
  ifndef NO_DWARF
    CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
  endif
endif

381
ifndef NO_LIBUNWIND
382
  have_libunwind :=
383 384 385 386 387

  ifeq ($(feature-libunwind-x86), 1)
    $(call detected,CONFIG_LIBUNWIND_X86)
    CFLAGS += -DHAVE_LIBUNWIND_X86_SUPPORT
    LDFLAGS += -lunwind-x86
388
    EXTLIBS_LIBUNWIND += -lunwind-x86
389 390 391
    have_libunwind = 1
  endif

392 393 394 395
  ifeq ($(feature-libunwind-aarch64), 1)
    $(call detected,CONFIG_LIBUNWIND_AARCH64)
    CFLAGS += -DHAVE_LIBUNWIND_AARCH64_SUPPORT
    LDFLAGS += -lunwind-aarch64
396
    EXTLIBS_LIBUNWIND += -lunwind-aarch64
397 398 399 400 401 402 403 404
    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

405
  ifneq ($(feature-libunwind), 1)
406
    msg := $(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR);
407 408 409 410 411 412 413
    NO_LOCAL_LIBUNWIND := 1
  else
    have_libunwind := 1
    $(call detected,CONFIG_LOCAL_LIBUNWIND)
  endif

  ifneq ($(have_libunwind), 1)
414
    NO_LIBUNWIND := 1
415
  endif
416 417
else
  NO_LOCAL_LIBUNWIND := 1
418 419
endif

W
Wang Nan 已提交
420 421 422 423 424 425 426
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

427 428 429 430 431 432 433 434
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
435
  else
436
    dwarf-post-unwind-text := libdw
437
    $(call detected,CONFIG_LIBDW_DWARF_UNWIND)
438 439 440
  endif
else
  dwarf-post-unwind-text := libunwind
441
  $(call detected,CONFIG_LIBUNWIND)
442 443 444 445 446 447 448 449
  # 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
450
  $(call detected,CONFIG_DWARF_UNWIND)
451 452 453 454
else
  NO_DWARF_UNWIND := 1
endif

455
ifndef NO_LOCAL_LIBUNWIND
456
  ifeq ($(ARCH),$(filter $(ARCH),arm arm64))
457 458 459
    $(call feature_check,libunwind-debug-frame)
    ifneq ($(feature-libunwind-debug-frame), 1)
      msg := $(warning No debug_frame support found in libunwind);
460 461
      CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
    endif
462 463 464 465 466
  else
    # non-ARM has no dwarf_find_debug_frame() function:
    CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
  endif
  EXTLIBS += $(LIBUNWIND_LIBS)
467 468 469 470 471
  LDFLAGS += $(LIBUNWIND_LIBS)
endif

ifndef NO_LIBUNWIND
  CFLAGS  += -DHAVE_LIBUNWIND_SUPPORT
472 473
  CFLAGS  += $(LIBUNWIND_CFLAGS)
  LDFLAGS += $(LIBUNWIND_LDFLAGS)
474
  EXTLIBS += $(EXTLIBS_LIBUNWIND)
475
endif
476 477

ifndef NO_LIBAUDIT
478
  ifneq ($(feature-libaudit), 1)
479 480 481
    msg := $(warning No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev);
    NO_LIBAUDIT := 1
  else
482
    CFLAGS += -DHAVE_LIBAUDIT_SUPPORT
483
    EXTLIBS += -laudit
484
    $(call detected,CONFIG_AUDIT)
485
  endif
486
endif
487

488 489 490 491 492 493 494 495 496 497 498
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

499
ifdef NO_NEWT
500
  NO_SLANG=1
501 502 503
endif

ifndef NO_SLANG
504
  ifneq ($(feature-libslang), 1)
505
    msg := $(warning slang not found, disables TUI support. Please install slang-devel, libslang-dev or libslang2-dev);
506 507 508 509
    NO_SLANG := 1
  else
    # Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
    CFLAGS += -I/usr/include/slang
510
    CFLAGS += -DHAVE_SLANG_SUPPORT
511
    EXTLIBS += -lslang
512
    $(call detected,CONFIG_SLANG)
513
  endif
514
endif
515 516

ifndef NO_GTK2
M
Mark Rutland 已提交
517
  FLAGS_GTK2=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null)
518
  ifneq ($(feature-gtk2), 1)
519 520 521
    msg := $(warning GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev);
    NO_GTK2 := 1
  else
522
    ifeq ($(feature-gtk2-infobar), 1)
523
      GTK_CFLAGS := -DHAVE_GTK_INFO_BAR_SUPPORT
524
    endif
525
    CFLAGS += -DHAVE_GTK2_SUPPORT
M
Mark Rutland 已提交
526 527
    GTK_CFLAGS += $(shell $(PKG_CONFIG) --cflags gtk+-2.0 2>/dev/null)
    GTK_LIBS := $(shell $(PKG_CONFIG) --libs gtk+-2.0 2>/dev/null)
528
    EXTLIBS += -ldl
529
  endif
530
endif
531 532 533 534 535

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

ifdef NO_LIBPERL
536
  CFLAGS += -DNO_LIBPERL
537
else
538 539 540 541 542 543
  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)

544
  ifneq ($(feature-libperl), 1)
545 546
    CFLAGS += -DNO_LIBPERL
    NO_LIBPERL := 1
547
    msg := $(warning Missing perl devel files. Disabling perl scripting support, please install perl-ExtUtils-Embed/libperl-dev);
548 549 550
  else
    LDFLAGS += $(PERL_EMBED_LDFLAGS)
    EXTLIBS += $(PERL_EMBED_LIBADD)
551
    $(call detected,CONFIG_LIBPERL)
552
  endif
553
endif
554

555 556 557 558 559 560
ifeq ($(feature-timerfd), 1)
  CFLAGS += -DHAVE_TIMERFD_SUPPORT
else
  msg := $(warning No timerfd support. Disables 'perf kvm stat live');
endif

561 562
disable-python = $(eval $(disable-python_code))
define disable-python_code
563
  CFLAGS += -DNO_LIBPYTHON
564
  $(warning $1)
565 566 567
  NO_LIBPYTHON := 1
endef

568
ifdef NO_LIBPYTHON
569
  $(call disable-python,Python support disabled by user)
570 571
else

572
  ifndef PYTHON
573
    $(call disable-python,No python interpreter was found: disables Python support - please install python-devel/python-dev)
574
  else
575
    PYTHON_WORD := $(call shell-wordify,$(PYTHON))
576 577

    ifndef PYTHON_CONFIG
578
      $(call disable-python,No 'python-config' tool was found: disables Python support - please install python-devel/python-dev)
579 580 581 582 583 584
    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))
585
      PYTHON_EMBED_LIBADD := $(call grep-libs,$(PYTHON_EMBED_LDOPTS)) -lutil
586 587 588
      PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --cflags 2>/dev/null)
      FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)

589
      ifneq ($(feature-libpython), 1)
590
        $(call disable-python,No 'Python.h' (for Python 2.x support) was found: disables Python support - please install python-devel/python-dev)
591 592
      else

593
        ifneq ($(feature-libpython-version), 1)
594 595 596 597 598 599 600 601 602 603 604 605 606
          $(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
607
          LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
608
          EXTLIBS += $(PYTHON_EMBED_LIBADD)
609
          LANG_BINDINGS += $(obj-perf)python/perf.so
610
          $(call detected,CONFIG_LIBPYTHON)
611 612 613 614 615
        endif
      endif
    endif
  endif
endif
616

617
ifeq ($(feature-libbfd), 1)
618 619 620 621 622 623 624 625 626 627 628 629 630 631 632
  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
633 634
endif

635
ifdef NO_DEMANGLE
636
  CFLAGS += -DNO_DEMANGLE
637
else
638
  ifdef HAVE_CPLUS_DEMANGLE_SUPPORT
639
    EXTLIBS += -liberty
640
    CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
641
  else
642
    ifneq ($(feature-libbfd), 1)
643 644 645 646
      ifneq ($(feature-liberty), 1)
        ifneq ($(feature-liberty-z), 1)
          # we dont have neither HAVE_CPLUS_DEMANGLE_SUPPORT
          # or any of 'bfd iberty z' trinity
647
          ifeq ($(feature-cplus-demangle), 1)
648
            EXTLIBS += -liberty
649
            CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
650
          else
651
            msg := $(warning No bfd.h/libbfd found, please install binutils-dev[el]/zlib-static/libiberty-dev to gain symbol demangling)
652 653 654 655 656 657
            CFLAGS += -DNO_DEMANGLE
          endif
        endif
      endif
    endif
  endif
658
endif
659

660 661 662 663
ifneq ($(filter -lbfd,$(EXTLIBS)),)
  CFLAGS += -DHAVE_LIBBFD_SUPPORT
endif

664 665 666 667
ifndef NO_ZLIB
  ifeq ($(feature-zlib), 1)
    CFLAGS += -DHAVE_ZLIB_SUPPORT
    EXTLIBS += -lz
668
    $(call detected,CONFIG_ZLIB)
669 670 671 672 673
  else
    NO_ZLIB := 1
  endif
endif

674 675 676 677 678 679 680 681 682 683 684
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

685
ifndef NO_BACKTRACE
686
  ifeq ($(feature-backtrace), 1)
687
    CFLAGS += -DHAVE_BACKTRACE_SUPPORT
688
  endif
689
endif
690 691

ifndef NO_LIBNUMA
692
  ifeq ($(feature-libnuma), 0)
693
    msg := $(warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev);
694 695
    NO_LIBNUMA := 1
  else
696 697 698 699 700 701 702 703
    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
704
  endif
705
endif
706

707 708 709 710
ifdef HAVE_KVM_STAT_SUPPORT
    CFLAGS += -DHAVE_KVM_STAT_SUPPORT
endif

711 712 713
ifeq (${IS_64_BIT}, 1)
  ifndef NO_PERF_READ_VDSO32
    $(call feature_check,compile-32)
714 715 716
    ifeq ($(feature-compile-32), 1)
      CFLAGS += -DHAVE_PERF_READ_VDSO32
    else
717 718 719
      NO_PERF_READ_VDSO32 := 1
    endif
  endif
720
  ifneq ($(ARCH), x86)
721 722 723 724
    NO_PERF_READ_VDSOX32 := 1
  endif
  ifndef NO_PERF_READ_VDSOX32
    $(call feature_check,compile-x32)
725 726 727
    ifeq ($(feature-compile-x32), 1)
      CFLAGS += -DHAVE_PERF_READ_VDSOX32
    else
728 729 730 731 732 733 734 735
      NO_PERF_READ_VDSOX32 := 1
    endif
  endif
else
  NO_PERF_READ_VDSO32 := 1
  NO_PERF_READ_VDSOX32 := 1
endif

736
ifdef LIBBABELTRACE
737 738
  $(call feature_check,libbabeltrace)
  ifeq ($(feature-libbabeltrace), 1)
739 740 741
    CFLAGS += -DHAVE_LIBBABELTRACE_SUPPORT $(LIBBABELTRACE_CFLAGS)
    LDFLAGS += $(LIBBABELTRACE_LDFLAGS)
    EXTLIBS += -lbabeltrace-ctf
742
    $(call detected,CONFIG_LIBBABELTRACE)
743 744
  else
    msg := $(warning No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev);
745 746 747
  endif
endif

748
ifndef NO_AUXTRACE
749 750 751 752 753 754 755
  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
756 757 758
    $(call detected,CONFIG_AUXTRACE)
    CFLAGS += -DHAVE_AUXTRACE_SUPPORT
  endif
759 760
endif

761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785
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

786 787 788 789 790 791 792 793 794 795 796 797 798 799
# 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
800
prefix ?= $(HOME)
801 802
endif
bindir_relative = bin
803
bindir = $(abspath $(prefix)/$(bindir_relative))
804 805 806 807 808
mandir = share/man
infodir = share/info
perfexecdir = libexec/perf-core
sharedir = $(prefix)/share
template_dir = share/perf-core/templates
809
STRACE_GROUPS_DIR = share/perf-core/strace/groups
810
htmldir = share/doc/perf-doc
811
tipdir = share/doc/perf-tip
812
srcdir = $(srctree)/tools/perf
813 814 815 816 817 818 819
ifeq ($(prefix),/usr)
sysconfdir = /etc
ETC_PERFCONFIG = $(sysconfdir)/perfconfig
else
sysconfdir = $(prefix)/etc
ETC_PERFCONFIG = etc/perfconfig
endif
820
ifndef lib
821
ifeq ($(ARCH)$(IS_64_BIT), x861)
822 823
lib = lib64
else
824
lib = lib
825
endif
826
endif # lib
827
libdir = $(prefix)/$(lib)
828 829 830

# Shell quote (do not use $(call) to accommodate ancient setups);
ETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
831
STRACE_GROUPS_DIR_SQ = $(subst ','\'',$(STRACE_GROUPS_DIR))
832 833 834 835 836 837 838
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))
839
tipdir_SQ = $(subst ','\'',$(tipdir))
840 841
prefix_SQ = $(subst ','\'',$(prefix))
sysconfdir_SQ = $(subst ','\'',$(sysconfdir))
842
libdir_SQ = $(subst ','\'',$(libdir))
843
srcdir_SQ = $(subst ','\'',$(srcdir))
844 845 846

ifneq ($(filter /%,$(firstword $(perfexecdir))),)
perfexec_instdir = $(perfexecdir)
847
STRACE_GROUPS_INSTDIR = $(STRACE_GROUPS_DIR)
848
tip_instdir = $(tipdir)
849 850
else
perfexec_instdir = $(prefix)/$(perfexecdir)
851
STRACE_GROUPS_INSTDIR = $(prefix)/$(STRACE_GROUPS_DIR)
852
tip_instdir = $(prefix)/$(tipdir)
853 854
endif
perfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir))
855
STRACE_GROUPS_INSTDIR_SQ = $(subst ','\'',$(STRACE_GROUPS_INSTDIR))
856
tip_instdir_SQ = $(subst ','\'',$(tip_instdir))
857 858 859 860 861 862

# 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
863
plugindir_SQ= $(subst ','\'',$(plugindir))
864
endif
865

866 867
print_var = $(eval $(print_var_code)) $(info $(MSG))
define print_var_code
868 869 870
    MSG = $(shell printf '...%30s: %s' $(1) $($(1)))
endef

871
ifeq ($(VF),1)
872 873 874 875 876 877
  $(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)
878
  $(call print_var,JDIR)
879 880 881 882

  ifeq ($(dwarf-post-unwind),1)
    $(call feature_print_text,"DWARF post unwind library", $(dwarf-post-unwind-text))
  endif
883 884
  $(info )
endif
885 886 887 888 889 890

$(call detected_var,bindir_SQ)
$(call detected_var,PYTHON_WORD)
ifneq ($(OUTPUT),)
$(call detected_var,OUTPUT)
endif
891 892 893
$(call detected_var,htmldir_SQ)
$(call detected_var,infodir_SQ)
$(call detected_var,mandir_SQ)
894
$(call detected_var,ETC_PERFCONFIG_SQ)
895
$(call detected_var,STRACE_GROUPS_DIR_SQ)
896 897
$(call detected_var,prefix_SQ)
$(call detected_var,perfexecdir_SQ)
898
$(call detected_var,tipdir_SQ)
899
$(call detected_var,srcdir_SQ)
J
Jiri Olsa 已提交
900
$(call detected_var,LIBDIR)
J
Jiri Olsa 已提交
901
$(call detected_var,GTK_CFLAGS)
902 903
$(call detected_var,PERL_EMBED_CCOPTS)
$(call detected_var,PYTHON_EMBED_CCOPTS)