Makefile.config 27.7 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 ($(ARCH),s390)
  NO_PERF_REGS := 0
endif

60 61 62 63
ifeq ($(NO_PERF_REGS),0)
  $(call detected,CONFIG_PERF_REGS)
endif

64
# So far there's only x86 and arm libdw unwind support merged in perf.
65 66 67
# Disable it on all other architectures in case libdw unwind
# support is detected in system. Add supported architectures
# to the check.
68
ifneq ($(SRCARCH),$(filter $(SRCARCH),x86 arm powerpc s390))
69 70 71
  NO_LIBDW_DWARF_UNWIND := 1
endif

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

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

87 88 89
ifdef LIBUNWIND_DIR
  LIBUNWIND_CFLAGS  = -I$(LIBUNWIND_DIR)/include
  LIBUNWIND_LDFLAGS = -L$(LIBUNWIND_DIR)/lib
90 91
  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)))
92 93 94 95
endif

# Set per-feature check compilation flags
FEATURE_CHECK_CFLAGS-libunwind = $(LIBUNWIND_CFLAGS)
96
FEATURE_CHECK_LDFLAGS-libunwind = $(LIBUNWIND_LDFLAGS) $(LIBUNWIND_LIBS)
97
FEATURE_CHECK_CFLAGS-libunwind-debug-frame = $(LIBUNWIND_CFLAGS)
98
FEATURE_CHECK_LDFLAGS-libunwind-debug-frame = $(LIBUNWIND_LDFLAGS) $(LIBUNWIND_LIBS)
99

100
ifeq ($(NO_PERF_REGS),0)
101
  CFLAGS += -DHAVE_PERF_REGS_SUPPORT
102
endif
103

104 105 106 107 108
# 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
109
endif
110 111 112 113
DWARFLIBS := -ldw
ifeq ($(findstring -static,${LDFLAGS}),-static)
  DWARFLIBS += -lelf -lebl -ldl -lz -llzma -lbz2
endif
114
FEATURE_CHECK_CFLAGS-libdw-dwarf-unwind := $(LIBDW_CFLAGS)
115
FEATURE_CHECK_LDFLAGS-libdw-dwarf-unwind := $(LIBDW_LDFLAGS) $(DWARFLIBS)
116

117 118 119 120 121
# 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
122
endif
123 124
FEATURE_CHECK_CFLAGS-libbabeltrace := $(LIBBABELTRACE_CFLAGS)
FEATURE_CHECK_LDFLAGS-libbabeltrace := $(LIBBABELTRACE_LDFLAGS) -lbabeltrace-ctf
125

126
FEATURE_CHECK_CFLAGS-bpf = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi -I$(srctree)/tools/include/uapi
127
# include ARCH specific config
128
-include $(src-perf)/arch/$(SRCARCH)/Makefile
129

130 131 132 133
ifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
  CFLAGS += -DHAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
endif

134
include $(srctree)/tools/scripts/utilities.mak
135 136

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

ifeq ($(call get-executable,$(BISON)),)
141
  dummy := $(error Error: $(BISON) is missing on this system, please install it)
142
endif
143 144 145

# Treat warnings as errors unless directed not to
ifneq ($(WERROR),0)
146
  CFLAGS += -Werror
147
  CXXFLAGS += -Werror
148 149
endif

A
Adrian Hunter 已提交
150 151 152 153
ifndef DEBUG
  DEBUG := 0
endif

154
ifeq ($(DEBUG),0)
155
ifeq ($(CC_NO_CLANG), 0)
156 157
  CFLAGS += -O3
else
158
  CFLAGS += -O6
159
endif
160
endif
161 162

ifdef PARSER_DEBUG
163 164 165
  PARSER_DEBUG_BISON := -t
  PARSER_DEBUG_FLEX  := -d
  CFLAGS             += -DPARSER_DEBUG
166 167
  $(call detected_var,PARSER_DEBUG_BISON)
  $(call detected_var,PARSER_DEBUG_FLEX)
168 169
endif

170 171 172 173 174 175 176 177 178 179
# 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))
180

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

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

186 187 188 189 190
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)
191
  ifeq ($(CC_NO_CLANG), 1)
192 193 194
    PYTHON_EMBED_CCOPTS := $(filter-out -specs=%,$(PYTHON_EMBED_CCOPTS))
  endif
  FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)
195 196
endif

197 198 199 200
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)
201

202 203 204 205 206 207
CFLAGS += -fno-omit-frame-pointer
CFLAGS += -ggdb3
CFLAGS += -funwind-tables
CFLAGS += -Wall
CFLAGS += -Wextra
CFLAGS += -std=gnu99
208

209 210 211 212 213 214 215
CXXFLAGS += -std=gnu++11 -fno-exceptions -fno-rtti
CXXFLAGS += -Wall
CXXFLAGS += -fno-omit-frame-pointer
CXXFLAGS += -ggdb3
CXXFLAGS += -funwind-tables
CXXFLAGS += -Wno-strict-aliasing

216 217 218 219
# 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

220
EXTLIBS = -lpthread -lrt -lm -ldl
221

222
ifeq ($(FEATURES_DUMP),)
223
include $(srctree)/tools/build/Makefile.feature
224 225 226
else
include $(FEATURES_DUMP)
endif
227

228
ifeq ($(feature-stackprotector-all), 1)
229
  CFLAGS += -fstack-protector-all
230 231
endif

232
ifeq ($(DEBUG),0)
233
  ifeq ($(feature-fortify-source), 1)
234 235
    CFLAGS += -D_FORTIFY_SOURCE=2
  endif
236 237
endif

238
INC_FLAGS += -I$(src-perf)/util/include
239
INC_FLAGS += -I$(src-perf)/arch/$(SRCARCH)/include
240 241
INC_FLAGS += -I$(srctree)/tools/include/uapi
INC_FLAGS += -I$(srctree)/tools/include/
242 243 244
INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi
INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/
INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/
245 246 247 248

# $(obj-perf)      for generated common-cmds.h
# $(obj-perf)/util for generated bison/flex headers
ifneq ($(OUTPUT),)
249 250
INC_FLAGS += -I$(obj-perf)/util
INC_FLAGS += -I$(obj-perf)
251 252
endif

253 254 255 256 257 258
INC_FLAGS += -I$(src-perf)/util
INC_FLAGS += -I$(src-perf)
INC_FLAGS += -I$(srctree)/tools/lib/

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

260
CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
261

262 263 264 265
ifeq ($(feature-sync-compare-and-swap), 1)
  CFLAGS += -DHAVE_SYNC_COMPARE_AND_SWAP_SUPPORT
endif

266 267 268 269
ifeq ($(feature-pthread-attr-setaffinity-np), 1)
  CFLAGS += -DHAVE_PTHREAD_ATTR_SETAFFINITY_NP
endif

270
ifndef NO_BIONIC
271
  $(call feature_check,bionic)
272 273 274 275 276
  ifeq ($(feature-bionic), 1)
    BIONIC := 1
    EXTLIBS := $(filter-out -lrt,$(EXTLIBS))
    EXTLIBS := $(filter-out -lpthread,$(EXTLIBS))
  endif
277
endif
278 279

ifdef NO_LIBELF
280 281 282
  NO_DWARF := 1
  NO_DEMANGLE := 1
  NO_LIBUNWIND := 1
283
  NO_LIBDW_DWARF_UNWIND := 1
W
Wang Nan 已提交
284
  NO_LIBBPF := 1
285
  NO_JVMTI := 1
286
else
287
  ifeq ($(feature-libelf), 0)
288
    ifeq ($(feature-glibc), 1)
289 290 291 292 293 294
      LIBC_SUPPORT := 1
    endif
    ifeq ($(BIONIC),1)
      LIBC_SUPPORT := 1
    endif
    ifeq ($(LIBC_SUPPORT),1)
295
      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);
296 297 298 299

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

333 334 335 336
ifdef NO_DWARF
  NO_LIBDW_DWARF_UNWIND := 1
endif

337 338 339 340
ifeq ($(feature-sched_getcpu), 1)
  CFLAGS += -DHAVE_SCHED_GETCPU_SUPPORT
endif

341 342 343 344 345
ifeq ($(feature-setns), 1)
  CFLAGS += -DHAVE_SETNS_SUPPORT
  $(call detected,CONFIG_SETNS)
endif

346
ifndef NO_LIBELF
347
  CFLAGS += -DHAVE_LIBELF_SUPPORT
348
  EXTLIBS += -lelf
349
  $(call detected,CONFIG_LIBELF)
350

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

355
  ifeq ($(feature-libelf-getphdrnum), 1)
356 357 358
    CFLAGS += -DHAVE_ELF_GETPHDRNUM_SUPPORT
  endif

359 360 361 362 363 364
  ifeq ($(feature-libelf-gelf_getnote), 1)
    CFLAGS += -DHAVE_GELF_GETNOTE_SUPPORT
  else
    msg := $(warning gelf_getnote() not found on libelf, SDT support disabled);
  endif

365 366 367 368
  ifeq ($(feature-libelf-getshdrstrndx), 1)
    CFLAGS += -DHAVE_ELF_GETSHDRSTRNDX_SUPPORT
  endif

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

  ifndef NO_LIBBPF
    ifeq ($(feature-bpf), 1)
      CFLAGS += -DHAVE_LIBBPF_SUPPORT
      $(call detected,CONFIG_LIBBPF)
    endif
386 387 388 389 390 391

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

W
Wang Nan 已提交
398
  endif # NO_LIBBPF
399
endif # NO_LIBELF
400

401 402 403 404 405 406 407 408 409 410
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

411
ifdef PERF_HAVE_JITDUMP
412
  ifndef NO_LIBELF
413 414 415 416 417
    $(call detected,CONFIG_JITDUMP)
    CFLAGS += -DHAVE_JITDUMP
  endif
endif

418
ifeq ($(SRCARCH),powerpc)
419 420 421 422 423
  ifndef NO_DWARF
    CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
  endif
endif

424
ifndef NO_LIBUNWIND
425
  have_libunwind :=
426 427 428 429 430

  ifeq ($(feature-libunwind-x86), 1)
    $(call detected,CONFIG_LIBUNWIND_X86)
    CFLAGS += -DHAVE_LIBUNWIND_X86_SUPPORT
    LDFLAGS += -lunwind-x86
431
    EXTLIBS_LIBUNWIND += -lunwind-x86
432 433 434
    have_libunwind = 1
  endif

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

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

  ifneq ($(have_libunwind), 1)
457
    NO_LIBUNWIND := 1
458
  endif
459 460
else
  NO_LOCAL_LIBUNWIND := 1
461 462
endif

W
Wang Nan 已提交
463 464 465 466 467 468 469
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

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

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

ifndef NO_LIBUNWIND
  CFLAGS  += -DHAVE_LIBUNWIND_SUPPORT
519 520
  CFLAGS  += $(LIBUNWIND_CFLAGS)
  LDFLAGS += $(LIBUNWIND_LDFLAGS)
521
  EXTLIBS += $(EXTLIBS_LIBUNWIND)
522
endif
523 524

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

535 536 537 538 539 540 541 542 543 544 545
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

546
ifdef NO_NEWT
547
  NO_SLANG=1
548 549 550
endif

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

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


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

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

600 601 602 603 604 605
ifeq ($(feature-timerfd), 1)
  CFLAGS += -DHAVE_TIMERFD_SUPPORT
else
  msg := $(warning No timerfd support. Disables 'perf kvm stat live');
endif

606 607
disable-python = $(eval $(disable-python_code))
define disable-python_code
608
  CFLAGS += -DNO_LIBPYTHON
609
  $(warning $1)
610 611 612
  NO_LIBPYTHON := 1
endef

613
ifdef NO_LIBPYTHON
614
  $(call disable-python,Python support disabled by user)
615 616
else

617
  ifndef PYTHON
618
    $(call disable-python,No python interpreter was found: disables Python support - please install python-devel/python-dev)
619
  else
620
    PYTHON_WORD := $(call shell-wordify,$(PYTHON))
621 622

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

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

653
ifeq ($(feature-libbfd), 1)
654 655 656 657 658 659 660 661 662 663 664 665 666 667 668
  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
669 670
endif

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

696 697 698 699
ifneq ($(filter -lbfd,$(EXTLIBS)),)
  CFLAGS += -DHAVE_LIBBFD_SUPPORT
endif

700 701 702 703
ifndef NO_ZLIB
  ifeq ($(feature-zlib), 1)
    CFLAGS += -DHAVE_ZLIB_SUPPORT
    EXTLIBS += -lz
704
    $(call detected,CONFIG_ZLIB)
705 706 707 708 709
  else
    NO_ZLIB := 1
  endif
endif

710 711 712 713 714 715 716 717 718 719 720
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

721
ifndef NO_BACKTRACE
722
  ifeq ($(feature-backtrace), 1)
723
    CFLAGS += -DHAVE_BACKTRACE_SUPPORT
724
  endif
725
endif
726 727

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

743 744 745 746
ifdef HAVE_KVM_STAT_SUPPORT
    CFLAGS += -DHAVE_KVM_STAT_SUPPORT
endif

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

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

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

797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821
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

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

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

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

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

# 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
930
plugindir_SQ= $(subst ','\'',$(plugindir))
931
endif
932

933 934
print_var = $(eval $(print_var_code)) $(info $(MSG))
define print_var_code
935 936 937
    MSG = $(shell printf '...%30s: %s' $(1) $($(1)))
endef

938
ifeq ($(VF),1)
939 940 941 942 943 944
  $(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)
945
  $(call print_var,JDIR)
946 947 948 949

  ifeq ($(dwarf-post-unwind),1)
    $(call feature_print_text,"DWARF post unwind library", $(dwarf-post-unwind-text))
  endif
950 951
  $(info )
endif
952 953 954 955 956 957

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