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
  CFLAGS += -fPIC
45
endif
46

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

267 268 269 270
ifeq ($(feature-pthread-barrier), 1)
  CFLAGS += -DHAVE_PTHREAD_BARRIER
endif

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

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

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

334 335 336 337
ifdef NO_DWARF
  NO_LIBDW_DWARF_UNWIND := 1
endif

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

547
ifdef NO_NEWT
548
  NO_SLANG=1
549 550 551
endif

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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