Makefile.config 27.6 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
$(call detected_var,SRCARCH)
23

24 25
NO_PERF_REGS := 1

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

32
# Additional ARCH settings for x86
33
ifeq ($(SRCARCH),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-x86_64 -lunwind -llzma
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
ifeq ($(SRCARCH),arm)
47 48 49
  NO_PERF_REGS := 0
  LIBUNWIND_LIBS = -lunwind -lunwind-arm
endif
50

51
ifeq ($(SRCARCH),arm64)
52 53 54 55
  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.
P
Paolo Bonzini 已提交
64
ifneq ($(SRCARCH),$(filter $(SRCARCH),x86 arm powerpc))
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 108 109
DWARFLIBS := -ldw
ifeq ($(findstring -static,${LDFLAGS}),-static)
  DWARFLIBS += -lelf -lebl -ldl -lz -llzma -lbz2
endif
110
FEATURE_CHECK_CFLAGS-libdw-dwarf-unwind := $(LIBDW_CFLAGS)
111
FEATURE_CHECK_LDFLAGS-libdw-dwarf-unwind := $(LIBDW_LDFLAGS) $(DWARFLIBS)
112

113 114 115 116 117
# 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
118
endif
119 120
FEATURE_CHECK_CFLAGS-libbabeltrace := $(LIBBABELTRACE_CFLAGS)
FEATURE_CHECK_LDFLAGS-libbabeltrace := $(LIBBABELTRACE_LDFLAGS) -lbabeltrace-ctf
121

122
FEATURE_CHECK_CFLAGS-bpf = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi -I$(srctree)/tools/include/uapi
123
# include ARCH specific config
124
-include $(src-perf)/arch/$(SRCARCH)/Makefile
125

126 127 128 129
ifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
  CFLAGS += -DHAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
endif

130
include $(srctree)/tools/scripts/utilities.mak
131 132

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

ifeq ($(call get-executable,$(BISON)),)
137
  dummy := $(error Error: $(BISON) is missing on this system, please install it)
138
endif
139 140 141

# Treat warnings as errors unless directed not to
ifneq ($(WERROR),0)
142
  CFLAGS += -Werror
143
  CXXFLAGS += -Werror
144 145
endif

A
Adrian Hunter 已提交
146 147 148 149
ifndef DEBUG
  DEBUG := 0
endif

150
ifeq ($(DEBUG),0)
151
ifeq ($(CC_NO_CLANG), 0)
152 153
  CFLAGS += -O3
else
154
  CFLAGS += -O6
155
endif
156
endif
157 158

ifdef PARSER_DEBUG
159 160 161
  PARSER_DEBUG_BISON := -t
  PARSER_DEBUG_FLEX  := -d
  CFLAGS             += -DPARSER_DEBUG
162 163
  $(call detected_var,PARSER_DEBUG_BISON)
  $(call detected_var,PARSER_DEBUG_FLEX)
164 165
endif

166 167 168 169 170 171 172 173 174 175
# 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))
176

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

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

182 183 184 185 186
ifdef PYTHON_CONFIG
  PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) --ldflags 2>/dev/null)
  PYTHON_EMBED_LDFLAGS := $(call strip-libs,$(PYTHON_EMBED_LDOPTS))
  PYTHON_EMBED_LIBADD := $(call grep-libs,$(PYTHON_EMBED_LDOPTS)) -lutil
  PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --cflags 2>/dev/null)
187
  ifeq ($(CC_NO_CLANG), 1)
188 189 190
    PYTHON_EMBED_CCOPTS := $(filter-out -specs=%,$(PYTHON_EMBED_CCOPTS))
  endif
  FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)
191 192
endif

193 194 195 196
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)
197

198 199 200 201 202 203
CFLAGS += -fno-omit-frame-pointer
CFLAGS += -ggdb3
CFLAGS += -funwind-tables
CFLAGS += -Wall
CFLAGS += -Wextra
CFLAGS += -std=gnu99
204

205 206 207 208 209 210 211
CXXFLAGS += -std=gnu++11 -fno-exceptions -fno-rtti
CXXFLAGS += -Wall
CXXFLAGS += -fno-omit-frame-pointer
CXXFLAGS += -ggdb3
CXXFLAGS += -funwind-tables
CXXFLAGS += -Wno-strict-aliasing

212 213 214 215
# 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

216
EXTLIBS = -lpthread -lrt -lm -ldl
217

218
ifeq ($(FEATURES_DUMP),)
219
include $(srctree)/tools/build/Makefile.feature
220 221 222
else
include $(FEATURES_DUMP)
endif
223

224
ifeq ($(feature-stackprotector-all), 1)
225
  CFLAGS += -fstack-protector-all
226 227
endif

228
ifeq ($(DEBUG),0)
229
  ifeq ($(feature-fortify-source), 1)
230 231
    CFLAGS += -D_FORTIFY_SOURCE=2
  endif
232 233
endif

234
INC_FLAGS += -I$(src-perf)/util/include
235
INC_FLAGS += -I$(src-perf)/arch/$(SRCARCH)/include
236 237
INC_FLAGS += -I$(srctree)/tools/include/uapi
INC_FLAGS += -I$(srctree)/tools/include/
238 239 240
INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi
INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/
INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/
241 242 243 244

# $(obj-perf)      for generated common-cmds.h
# $(obj-perf)/util for generated bison/flex headers
ifneq ($(OUTPUT),)
245 246
INC_FLAGS += -I$(obj-perf)/util
INC_FLAGS += -I$(obj-perf)
247 248
endif

249 250 251 252 253 254
INC_FLAGS += -I$(src-perf)/util
INC_FLAGS += -I$(src-perf)
INC_FLAGS += -I$(srctree)/tools/lib/

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

256
CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
257

258 259 260 261
ifeq ($(feature-sync-compare-and-swap), 1)
  CFLAGS += -DHAVE_SYNC_COMPARE_AND_SWAP_SUPPORT
endif

262 263 264 265
ifeq ($(feature-pthread-attr-setaffinity-np), 1)
  CFLAGS += -DHAVE_PTHREAD_ATTR_SETAFFINITY_NP
endif

266
ifndef NO_BIONIC
267
  $(call feature_check,bionic)
268 269 270 271 272
  ifeq ($(feature-bionic), 1)
    BIONIC := 1
    EXTLIBS := $(filter-out -lrt,$(EXTLIBS))
    EXTLIBS := $(filter-out -lpthread,$(EXTLIBS))
  endif
273
endif
274 275

ifdef NO_LIBELF
276 277 278
  NO_DWARF := 1
  NO_DEMANGLE := 1
  NO_LIBUNWIND := 1
279
  NO_LIBDW_DWARF_UNWIND := 1
W
Wang Nan 已提交
280
  NO_LIBBPF := 1
281
  NO_JVMTI := 1
282
else
283
  ifeq ($(feature-libelf), 0)
284
    ifeq ($(feature-glibc), 1)
285 286 287 288 289 290
      LIBC_SUPPORT := 1
    endif
    ifeq ($(BIONIC),1)
      LIBC_SUPPORT := 1
    endif
    ifeq ($(LIBC_SUPPORT),1)
291
      msg := $(warning No libelf found. Disables 'probe' tool, jvmti and BPF support in 'perf record'. Please install libelf-dev, libelf-devel or elfutils-libelf-devel);
292 293 294 295

      NO_LIBELF := 1
      NO_DWARF := 1
      NO_DEMANGLE := 1
296 297
      NO_LIBUNWIND := 1
      NO_LIBDW_DWARF_UNWIND := 1
W
Wang Nan 已提交
298
      NO_LIBBPF := 1
299
      NO_JVMTI := 1
300
    else
301 302 303 304 305
      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
306
    endif
307
  else
308 309 310 311 312 313
    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
314
    ifneq ($(feature-dwarf), 1)
315 316 317 318
      ifndef NO_DWARF
        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
      endif
319 320 321 322 323 324
    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
325
    endif # Dwarf support
326
  endif # libelf support
327 328
endif # NO_LIBELF

329 330 331 332
ifdef NO_DWARF
  NO_LIBDW_DWARF_UNWIND := 1
endif

333 334 335 336
ifeq ($(feature-sched_getcpu), 1)
  CFLAGS += -DHAVE_SCHED_GETCPU_SUPPORT
endif

337 338 339 340 341
ifeq ($(feature-setns), 1)
  CFLAGS += -DHAVE_SETNS_SUPPORT
  $(call detected,CONFIG_SETNS)
endif

342
ifndef NO_LIBELF
343
  CFLAGS += -DHAVE_LIBELF_SUPPORT
344
  EXTLIBS += -lelf
345
  $(call detected,CONFIG_LIBELF)
346

347
  ifeq ($(feature-libelf-mmap), 1)
348 349
    CFLAGS += -DHAVE_LIBELF_MMAP_SUPPORT
  endif
350

351
  ifeq ($(feature-libelf-getphdrnum), 1)
352 353 354
    CFLAGS += -DHAVE_ELF_GETPHDRNUM_SUPPORT
  endif

355 356 357 358 359 360
  ifeq ($(feature-libelf-gelf_getnote), 1)
    CFLAGS += -DHAVE_GELF_GETNOTE_SUPPORT
  else
    msg := $(warning gelf_getnote() not found on libelf, SDT support disabled);
  endif

361 362 363 364
  ifeq ($(feature-libelf-getshdrstrndx), 1)
    CFLAGS += -DHAVE_ELF_GETSHDRSTRNDX_SUPPORT
  endif

365 366
  ifndef NO_DWARF
    ifeq ($(origin PERF_HAVE_DWARF_REGS), undefined)
367
      msg := $(warning DWARF register mappings have not been defined for architecture $(SRCARCH), DWARF support disabled);
368 369 370 371
      NO_DWARF := 1
    else
      CFLAGS += -DHAVE_DWARF_SUPPORT $(LIBDW_CFLAGS)
      LDFLAGS += $(LIBDW_LDFLAGS)
372
      EXTLIBS += ${DWARFLIBS}
373
      $(call detected,CONFIG_DWARF)
374 375
    endif # PERF_HAVE_DWARF_REGS
  endif # NO_DWARF
W
Wang Nan 已提交
376 377 378 379 380 381

  ifndef NO_LIBBPF
    ifeq ($(feature-bpf), 1)
      CFLAGS += -DHAVE_LIBBPF_SUPPORT
      $(call detected,CONFIG_LIBBPF)
    endif
382 383 384 385 386 387

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

W
Wang Nan 已提交
394
  endif # NO_LIBBPF
395
endif # NO_LIBELF
396

397 398 399 400 401 402 403 404 405 406
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

407
ifdef PERF_HAVE_JITDUMP
408
  ifndef NO_LIBELF
409 410 411 412 413
    $(call detected,CONFIG_JITDUMP)
    CFLAGS += -DHAVE_JITDUMP
  endif
endif

414
ifeq ($(SRCARCH),powerpc)
415 416 417 418 419
  ifndef NO_DWARF
    CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
  endif
endif

420
ifndef NO_LIBUNWIND
421
  have_libunwind :=
422 423 424 425 426

  ifeq ($(feature-libunwind-x86), 1)
    $(call detected,CONFIG_LIBUNWIND_X86)
    CFLAGS += -DHAVE_LIBUNWIND_X86_SUPPORT
    LDFLAGS += -lunwind-x86
427
    EXTLIBS_LIBUNWIND += -lunwind-x86
428 429 430
    have_libunwind = 1
  endif

431 432 433 434
  ifeq ($(feature-libunwind-aarch64), 1)
    $(call detected,CONFIG_LIBUNWIND_AARCH64)
    CFLAGS += -DHAVE_LIBUNWIND_AARCH64_SUPPORT
    LDFLAGS += -lunwind-aarch64
435
    EXTLIBS_LIBUNWIND += -lunwind-aarch64
436 437 438 439 440 441 442 443
    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

444
  ifneq ($(feature-libunwind), 1)
445
    msg := $(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR);
446 447 448 449 450 451 452
    NO_LOCAL_LIBUNWIND := 1
  else
    have_libunwind := 1
    $(call detected,CONFIG_LOCAL_LIBUNWIND)
  endif

  ifneq ($(have_libunwind), 1)
453
    NO_LIBUNWIND := 1
454
  endif
455 456
else
  NO_LOCAL_LIBUNWIND := 1
457 458
endif

W
Wang Nan 已提交
459 460 461 462 463 464 465
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

466 467 468 469 470 471 472 473
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
474
  else
475
    dwarf-post-unwind-text := libdw
476
    $(call detected,CONFIG_LIBDW_DWARF_UNWIND)
477 478 479
  endif
else
  dwarf-post-unwind-text := libunwind
480
  $(call detected,CONFIG_LIBUNWIND)
481 482 483 484 485 486 487 488
  # 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
489
  $(call detected,CONFIG_DWARF_UNWIND)
490 491 492 493
else
  NO_DWARF_UNWIND := 1
endif

494
ifndef NO_LOCAL_LIBUNWIND
495
  ifeq ($(SRCARCH),$(filter $(SRCARCH),arm arm64))
496 497 498
    $(call feature_check,libunwind-debug-frame)
    ifneq ($(feature-libunwind-debug-frame), 1)
      msg := $(warning No debug_frame support found in libunwind);
499 500
      CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
    endif
501 502 503 504 505
  else
    # non-ARM has no dwarf_find_debug_frame() function:
    CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
  endif
  EXTLIBS += $(LIBUNWIND_LIBS)
506 507
  LDFLAGS += $(LIBUNWIND_LIBS)
endif
508 509 510 511
ifeq ($(findstring -static,${LDFLAGS}),-static)
  # gcc -static links libgcc_eh which contans piece of libunwind
  LIBUNWIND_LDFLAGS += -Wl,--allow-multiple-definition
endif
512 513 514

ifndef NO_LIBUNWIND
  CFLAGS  += -DHAVE_LIBUNWIND_SUPPORT
515 516
  CFLAGS  += $(LIBUNWIND_CFLAGS)
  LDFLAGS += $(LIBUNWIND_LDFLAGS)
517
  EXTLIBS += $(EXTLIBS_LIBUNWIND)
518
endif
519 520

ifndef NO_LIBAUDIT
521
  ifneq ($(feature-libaudit), 1)
522 523 524
    msg := $(warning No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev);
    NO_LIBAUDIT := 1
  else
525
    CFLAGS += -DHAVE_LIBAUDIT_SUPPORT
526
    EXTLIBS += -laudit
527
    $(call detected,CONFIG_AUDIT)
528
  endif
529
endif
530

531 532 533 534 535 536 537 538 539 540 541
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

542
ifdef NO_NEWT
543
  NO_SLANG=1
544 545 546
endif

ifndef NO_SLANG
547
  ifneq ($(feature-libslang), 1)
548
    msg := $(warning slang not found, disables TUI support. Please install slang-devel, libslang-dev or libslang2-dev);
549 550 551 552
    NO_SLANG := 1
  else
    # Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
    CFLAGS += -I/usr/include/slang
553
    CFLAGS += -DHAVE_SLANG_SUPPORT
554
    EXTLIBS += -lslang
555
    $(call detected,CONFIG_SLANG)
556
  endif
557
endif
558 559

ifndef NO_GTK2
M
Mark Rutland 已提交
560
  FLAGS_GTK2=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null)
561
  ifneq ($(feature-gtk2), 1)
562 563 564
    msg := $(warning GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev);
    NO_GTK2 := 1
  else
565
    ifeq ($(feature-gtk2-infobar), 1)
566
      GTK_CFLAGS := -DHAVE_GTK_INFO_BAR_SUPPORT
567
    endif
568
    CFLAGS += -DHAVE_GTK2_SUPPORT
M
Mark Rutland 已提交
569 570
    GTK_CFLAGS += $(shell $(PKG_CONFIG) --cflags gtk+-2.0 2>/dev/null)
    GTK_LIBS := $(shell $(PKG_CONFIG) --libs gtk+-2.0 2>/dev/null)
571
    EXTLIBS += -ldl
572
  endif
573
endif
574 575 576


ifdef NO_LIBPERL
577
  CFLAGS += -DNO_LIBPERL
578
else
579 580 581
  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))
582
  PERL_EMBED_CCOPTS = $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
583 584
  FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)

585
  ifneq ($(feature-libperl), 1)
586 587
    CFLAGS += -DNO_LIBPERL
    NO_LIBPERL := 1
588
    msg := $(warning Missing perl devel files. Disabling perl scripting support, please install perl-ExtUtils-Embed/libperl-dev);
589 590 591
  else
    LDFLAGS += $(PERL_EMBED_LDFLAGS)
    EXTLIBS += $(PERL_EMBED_LIBADD)
592
    $(call detected,CONFIG_LIBPERL)
593
  endif
594
endif
595

596 597 598 599 600 601
ifeq ($(feature-timerfd), 1)
  CFLAGS += -DHAVE_TIMERFD_SUPPORT
else
  msg := $(warning No timerfd support. Disables 'perf kvm stat live');
endif

602 603
disable-python = $(eval $(disable-python_code))
define disable-python_code
604
  CFLAGS += -DNO_LIBPYTHON
605
  $(warning $1)
606 607 608
  NO_LIBPYTHON := 1
endef

609
ifdef NO_LIBPYTHON
610
  $(call disable-python,Python support disabled by user)
611 612
else

613
  ifndef PYTHON
614
    $(call disable-python,No python interpreter was found: disables Python support - please install python-devel/python-dev)
615
  else
616
    PYTHON_WORD := $(call shell-wordify,$(PYTHON))
617 618

    ifndef PYTHON_CONFIG
619
      $(call disable-python,No 'python-config' tool was found: disables Python support - please install python-devel/python-dev)
620 621
    else

622
      ifneq ($(feature-libpython), 1)
623
        $(call disable-python,No 'Python.h' (for Python 2.x support) was found: disables Python support - please install python-devel/python-dev)
624
      else
625
        ifneq ($(feature-libpython-version), 1)
626 627 628 629 630 631 632 633 634 635 636 637 638
          $(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
639
          LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
640
          EXTLIBS += $(PYTHON_EMBED_LIBADD)
641
          LANG_BINDINGS += $(obj-perf)python/perf.so
642
          $(call detected,CONFIG_LIBPYTHON)
643 644 645 646 647
        endif
      endif
    endif
  endif
endif
648

649
ifeq ($(feature-libbfd), 1)
650 651 652 653 654 655 656 657 658 659 660 661 662 663 664
  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
665 666
endif

667
ifdef NO_DEMANGLE
668
  CFLAGS += -DNO_DEMANGLE
669
else
670
  ifdef HAVE_CPLUS_DEMANGLE_SUPPORT
671
    EXTLIBS += -liberty
672
    CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
673
  else
674
    ifneq ($(feature-libbfd), 1)
675 676 677 678
      ifneq ($(feature-liberty), 1)
        ifneq ($(feature-liberty-z), 1)
          # we dont have neither HAVE_CPLUS_DEMANGLE_SUPPORT
          # or any of 'bfd iberty z' trinity
679
          ifeq ($(feature-cplus-demangle), 1)
680
            EXTLIBS += -liberty
681
            CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
682
          else
683
            msg := $(warning No bfd.h/libbfd found, please install binutils-dev[el]/zlib-static/libiberty-dev to gain symbol demangling)
684 685 686 687 688 689
            CFLAGS += -DNO_DEMANGLE
          endif
        endif
      endif
    endif
  endif
690
endif
691

692 693 694 695
ifneq ($(filter -lbfd,$(EXTLIBS)),)
  CFLAGS += -DHAVE_LIBBFD_SUPPORT
endif

696 697 698 699
ifndef NO_ZLIB
  ifeq ($(feature-zlib), 1)
    CFLAGS += -DHAVE_ZLIB_SUPPORT
    EXTLIBS += -lz
700
    $(call detected,CONFIG_ZLIB)
701 702 703 704 705
  else
    NO_ZLIB := 1
  endif
endif

706 707 708 709 710 711 712 713 714 715 716
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

717
ifndef NO_BACKTRACE
718
  ifeq ($(feature-backtrace), 1)
719
    CFLAGS += -DHAVE_BACKTRACE_SUPPORT
720
  endif
721
endif
722 723

ifndef NO_LIBNUMA
724
  ifeq ($(feature-libnuma), 0)
725
    msg := $(warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev);
726 727
    NO_LIBNUMA := 1
  else
728 729 730 731 732 733 734 735
    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
736
  endif
737
endif
738

739 740 741 742
ifdef HAVE_KVM_STAT_SUPPORT
    CFLAGS += -DHAVE_KVM_STAT_SUPPORT
endif

743 744 745
ifeq (${IS_64_BIT}, 1)
  ifndef NO_PERF_READ_VDSO32
    $(call feature_check,compile-32)
746 747 748
    ifeq ($(feature-compile-32), 1)
      CFLAGS += -DHAVE_PERF_READ_VDSO32
    else
749 750 751
      NO_PERF_READ_VDSO32 := 1
    endif
  endif
752
  ifneq ($(SRCARCH), x86)
753 754 755 756
    NO_PERF_READ_VDSOX32 := 1
  endif
  ifndef NO_PERF_READ_VDSOX32
    $(call feature_check,compile-x32)
757 758 759
    ifeq ($(feature-compile-x32), 1)
      CFLAGS += -DHAVE_PERF_READ_VDSOX32
    else
760 761 762 763 764 765 766 767
      NO_PERF_READ_VDSOX32 := 1
    endif
  endif
else
  NO_PERF_READ_VDSO32 := 1
  NO_PERF_READ_VDSOX32 := 1
endif

768
ifdef LIBBABELTRACE
769 770
  $(call feature_check,libbabeltrace)
  ifeq ($(feature-libbabeltrace), 1)
771 772 773
    CFLAGS += -DHAVE_LIBBABELTRACE_SUPPORT $(LIBBABELTRACE_CFLAGS)
    LDFLAGS += $(LIBBABELTRACE_LDFLAGS)
    EXTLIBS += -lbabeltrace-ctf
774
    $(call detected,CONFIG_LIBBABELTRACE)
775 776
  else
    msg := $(warning No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev);
777 778 779
  endif
endif

780
ifndef NO_AUXTRACE
781
  ifeq ($(SRCARCH),x86)
782 783 784 785 786 787
    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
788 789 790
    $(call detected,CONFIG_AUXTRACE)
    CFLAGS += -DHAVE_AUXTRACE_SUPPORT
  endif
791 792
endif

793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817
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

818 819 820 821 822 823 824 825
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)
826
    $(call feature_check,llvm-version)
827
    ifneq ($(feature-llvm), 1)
828
      msg := $(warning No suitable libLLVM found, disabling builtin clang and LLVM support. Please install llvm-dev(el) (>= 3.9.0))
829 830 831
    else
      $(call feature_check,clang)
      ifneq ($(feature-clang), 1)
832
        msg := $(warning No suitable libclang found, disabling builtin clang and LLVM support. Please install libclang-dev(el) (>= 3.9.0))
833 834 835 836 837 838 839 840
      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
841 842 843
        ifneq ($(feature-llvm-version),1)
          msg := $(warning This version of LLVM is not tested. May cause build errors)
        endif
844 845 846 847 848
      endif
    endif
  endif
endif

849 850 851 852 853 854 855 856 857 858 859 860 861 862
# 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
863
prefix ?= $(HOME)
864 865
endif
bindir_relative = bin
866
bindir = $(abspath $(prefix)/$(bindir_relative))
867 868 869 870 871
mandir = share/man
infodir = share/info
perfexecdir = libexec/perf-core
sharedir = $(prefix)/share
template_dir = share/perf-core/templates
872
STRACE_GROUPS_DIR = share/perf-core/strace/groups
873
htmldir = share/doc/perf-doc
874
tipdir = share/doc/perf-tip
875
srcdir = $(srctree)/tools/perf
876 877 878 879 880 881 882
ifeq ($(prefix),/usr)
sysconfdir = /etc
ETC_PERFCONFIG = $(sysconfdir)/perfconfig
else
sysconfdir = $(prefix)/etc
ETC_PERFCONFIG = etc/perfconfig
endif
883
ifndef lib
884
ifeq ($(SRCARCH)$(IS_64_BIT), x861)
885 886
lib = lib64
else
887
lib = lib
888
endif
889
endif # lib
890
libdir = $(prefix)/$(lib)
891 892 893

# Shell quote (do not use $(call) to accommodate ancient setups);
ETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
894
STRACE_GROUPS_DIR_SQ = $(subst ','\'',$(STRACE_GROUPS_DIR))
895 896 897 898 899 900 901
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))
902
tipdir_SQ = $(subst ','\'',$(tipdir))
903 904
prefix_SQ = $(subst ','\'',$(prefix))
sysconfdir_SQ = $(subst ','\'',$(sysconfdir))
905
libdir_SQ = $(subst ','\'',$(libdir))
906
srcdir_SQ = $(subst ','\'',$(srcdir))
907 908 909

ifneq ($(filter /%,$(firstword $(perfexecdir))),)
perfexec_instdir = $(perfexecdir)
910
STRACE_GROUPS_INSTDIR = $(STRACE_GROUPS_DIR)
911
tip_instdir = $(tipdir)
912 913
else
perfexec_instdir = $(prefix)/$(perfexecdir)
914
STRACE_GROUPS_INSTDIR = $(prefix)/$(STRACE_GROUPS_DIR)
915
tip_instdir = $(prefix)/$(tipdir)
916 917
endif
perfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir))
918
STRACE_GROUPS_INSTDIR_SQ = $(subst ','\'',$(STRACE_GROUPS_INSTDIR))
919
tip_instdir_SQ = $(subst ','\'',$(tip_instdir))
920 921 922 923 924 925

# 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
926
plugindir_SQ= $(subst ','\'',$(plugindir))
927
endif
928

929 930
print_var = $(eval $(print_var_code)) $(info $(MSG))
define print_var_code
931 932 933
    MSG = $(shell printf '...%30s: %s' $(1) $($(1)))
endef

934
ifeq ($(VF),1)
935 936 937 938 939 940
  $(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)
941
  $(call print_var,JDIR)
942 943 944 945

  ifeq ($(dwarf-post-unwind),1)
    $(call feature_print_text,"DWARF post unwind library", $(dwarf-post-unwind-text))
  endif
946 947
  $(info )
endif
948 949 950 951 952 953

$(call detected_var,bindir_SQ)
$(call detected_var,PYTHON_WORD)
ifneq ($(OUTPUT),)
$(call detected_var,OUTPUT)
endif
954 955 956
$(call detected_var,htmldir_SQ)
$(call detected_var,infodir_SQ)
$(call detected_var,mandir_SQ)
957
$(call detected_var,ETC_PERFCONFIG_SQ)
958
$(call detected_var,STRACE_GROUPS_DIR_SQ)
959 960
$(call detected_var,prefix_SQ)
$(call detected_var,perfexecdir_SQ)
961
$(call detected_var,tipdir_SQ)
962
$(call detected_var,srcdir_SQ)
J
Jiri Olsa 已提交
963
$(call detected_var,LIBDIR)
J
Jiri Olsa 已提交
964
$(call detected_var,GTK_CFLAGS)
965 966
$(call detected_var,PERL_EMBED_CCOPTS)
$(call detected_var,PYTHON_EMBED_CCOPTS)