1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenguname_M := $(shell uname -m 2>/dev/null || echo not)
2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengARCH ?= $(shell echo $(uname_M) | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng                                  -e s/arm.*/arm/ -e s/sa110/arm/ \
5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng                                  -e s/s390x/s390/ -e s/parisc64/parisc/ \
6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng                                  -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng                                  -e s/sh[234].*/sh/ -e s/aarch64.*/arm64/ )
8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengNO_PERF_REGS := 1
9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS := $(EXTRA_CFLAGS) $(EXTRA_WARNINGS)
10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Additional ARCH settings for x86
12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(ARCH),i386)
13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  override ARCH := x86
14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  NO_PERF_REGS := 0
15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  LIBUNWIND_LIBS = -lunwind -lunwind-x86
16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(ARCH),x86_64)
19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  override ARCH := x86
20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  IS_X86_64 := 0
21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifeq (, $(findstring m32,$(CFLAGS)))
22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    IS_X86_64 := $(shell echo __x86_64__ | ${CC} -E -x c - | tail -n 1)
23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifeq (${IS_X86_64}, 1)
25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    RAW_ARCH := x86_64
26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    CFLAGS += -DARCH_X86_64
27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    ARCH_INCLUDE = ../../arch/x86/lib/memcpy_64.S ../../arch/x86/lib/memset_64.S
28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  NO_PERF_REGS := 0
30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  LIBUNWIND_LIBS = -lunwind -lunwind-x86_64
31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(NO_PERF_REGS),0)
34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  CFLAGS += -DHAVE_PERF_REGS
35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(src-perf),)
38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsrc-perf := $(srctree)/tools/perf
39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(obj-perf),)
42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengobj-perf := $(OUTPUT)
43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifneq ($(obj-perf),)
46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengobj-perf := $(abspath $(obj-perf))/
47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengLIB_INCLUDE := $(srctree)/tools/lib/
50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# include ARCH specific config
52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng-include $(src-perf)/arch/$(ARCH)/Makefile
53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
54e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenginclude $(src-perf)/config/feature-tests.mak
55e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenginclude $(src-perf)/config/utilities.mak
56e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
57e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(call get-executable,$(FLEX)),)
58e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  dummy := $(error Error: $(FLEX) is missing on this system, please install it)
59e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
60e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
61e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(call get-executable,$(BISON)),)
62e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  dummy := $(error Error: $(BISON) is missing on this system, please install it)
63e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
64e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
65e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Treat warnings as errors unless directed not to
66e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifneq ($(WERROR),0)
67e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  CFLAGS += -Werror
68e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
69e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
70e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ("$(origin DEBUG)", "command line")
71e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  PERF_DEBUG = $(DEBUG)
72e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
73e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef PERF_DEBUG
74e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  CFLAGS += -O6
75e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
76e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
77e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifdef PARSER_DEBUG
78e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  PARSER_DEBUG_BISON := -t
79e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  PARSER_DEBUG_FLEX  := -d
80e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  CFLAGS             += -DPARSER_DEBUG
81e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
82e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
83e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -fno-omit-frame-pointer
84e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -ggdb3
85e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -funwind-tables
86e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -Wall
87e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -Wextra
88e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -std=gnu99
89e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
90e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengEXTLIBS = -lelf -lpthread -lrt -lm -ldl
91e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
92e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(call try-cc,$(SOURCE_HELLO),$(CFLAGS) -Werror -fstack-protector-all,-fstack-protector-all),y)
93e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  CFLAGS += -fstack-protector-all
94e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
95e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
96e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(call try-cc,$(SOURCE_HELLO),$(CFLAGS) -Werror -Wstack-protector,-Wstack-protector),y)
97e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  CFLAGS += -Wstack-protector
98e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
99e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
100e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(call try-cc,$(SOURCE_HELLO),$(CFLAGS) -Werror -Wvolatile-register-var,-Wvolatile-register-var),y)
101e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  CFLAGS += -Wvolatile-register-var
102e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
103e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
104e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef PERF_DEBUG
105e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifeq ($(call try-cc,$(SOURCE_HELLO),$(CFLAGS) -D_FORTIFY_SOURCE=2,-D_FORTIFY_SOURCE=2),y)
106e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    CFLAGS += -D_FORTIFY_SOURCE=2
107e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
108e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
109e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
110e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -I$(src-perf)/util/include
111e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -I$(src-perf)/arch/$(ARCH)/include
112e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -I$(srctree)/arch/$(ARCH)/include/uapi
113e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -I$(srctree)/arch/$(ARCH)/include
114e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -I$(srctree)/include/uapi
115e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -I$(srctree)/include
116e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
117e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# $(obj-perf)      for generated common-cmds.h
118e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# $(obj-perf)/util for generated bison/flex headers
119e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifneq ($(OUTPUT),)
120e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -I$(obj-perf)/util
121e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -I$(obj-perf)
122e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
123e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
124e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -I$(src-perf)/util
125e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -I$(src-perf)
126e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -I$(LIB_INCLUDE)
127e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
128e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
129e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
130e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef NO_BIONIC
131e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(call try-cc,$(SOURCE_BIONIC),$(CFLAGS),bionic),y)
132e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  BIONIC := 1
133e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  EXTLIBS := $(filter-out -lrt,$(EXTLIBS))
134e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  EXTLIBS := $(filter-out -lpthread,$(EXTLIBS))
135e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
136e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # NO_BIONIC
137e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
138e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifdef NO_LIBELF
139e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  NO_DWARF := 1
140e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  NO_DEMANGLE := 1
141e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  NO_LIBUNWIND := 1
142e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengelse
143e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengFLAGS_LIBELF=$(CFLAGS) $(LDFLAGS) $(EXTLIBS)
144e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifneq ($(call try-cc,$(SOURCE_LIBELF),$(FLAGS_LIBELF),libelf),y)
145e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  FLAGS_GLIBC=$(CFLAGS) $(LDFLAGS)
146e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifeq ($(call try-cc,$(SOURCE_GLIBC),$(FLAGS_GLIBC),glibc),y)
147e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    LIBC_SUPPORT := 1
148e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
149e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifeq ($(BIONIC),1)
150e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    LIBC_SUPPORT := 1
151e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
152e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifeq ($(LIBC_SUPPORT),1)
153e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    msg := $(warning No libelf found, disables 'probe' tool, please install elfutils-libelf-devel/libelf-dev);
154e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
155e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    NO_LIBELF := 1
156e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    NO_DWARF := 1
157e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    NO_DEMANGLE := 1
158e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  else
159e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]/glibc-static);
160e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
161e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengelse
162e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  # for linking with debug library, run like:
163e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  # make DEBUG=1 LIBDW_DIR=/opt/libdw/
164e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifdef LIBDW_DIR
165e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    LIBDW_CFLAGS  := -I$(LIBDW_DIR)/include
166e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    LIBDW_LDFLAGS := -L$(LIBDW_DIR)/lib
167e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
168e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
169e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  FLAGS_DWARF=$(CFLAGS) $(LIBDW_CFLAGS) -ldw -lz -lelf $(LIBDW_LDFLAGS) $(LDFLAGS) $(EXTLIBS)
170e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifneq ($(call try-cc,$(SOURCE_DWARF),$(FLAGS_DWARF),libdw),y)
171e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    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);
172e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    NO_DWARF := 1
173e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif # Dwarf support
174e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # SOURCE_LIBELF
175e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # NO_LIBELF
176e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
177e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef NO_LIBELF
178e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -DLIBELF_SUPPORT
179e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengFLAGS_LIBELF=$(CFLAGS) $(LDFLAGS) $(EXTLIBS)
180e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(call try-cc,$(SOURCE_ELF_MMAP),$(FLAGS_LIBELF),-DLIBELF_MMAP),y)
181e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  CFLAGS += -DLIBELF_MMAP
182e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
183e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(call try-cc,$(SOURCE_ELF_GETPHDRNUM),$(FLAGS_LIBELF),-DHAVE_ELF_GETPHDRNUM),y)
184e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  CFLAGS += -DHAVE_ELF_GETPHDRNUM
185e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
186e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
187e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# include ARCH specific config
188e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng-include $(src-perf)/arch/$(ARCH)/Makefile
189e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
190e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef NO_DWARF
191e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(origin PERF_HAVE_DWARF_REGS), undefined)
192e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  msg := $(warning DWARF register mappings have not been defined for architecture $(ARCH), DWARF support disabled);
193e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  NO_DWARF := 1
194e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengelse
195e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  CFLAGS += -DDWARF_SUPPORT $(LIBDW_CFLAGS)
196e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  LDFLAGS += $(LIBDW_LDFLAGS)
197e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  EXTLIBS += -lelf -ldw
198e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # PERF_HAVE_DWARF_REGS
199e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # NO_DWARF
200e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
201e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # NO_LIBELF
202e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
203e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef NO_LIBELF
204e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS += -DLIBELF_SUPPORT
205e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengFLAGS_LIBELF=$(CFLAGS) $(LDFLAGS) $(EXTLIBS)
206e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(call try-cc,$(SOURCE_ELF_MMAP),$(FLAGS_LIBELF),-DLIBELF_MMAP),y)
207e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  CFLAGS += -DLIBELF_MMAP
208e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # try-cc
209e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # NO_LIBELF
210e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
211e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# There's only x86 (both 32 and 64) support for CFI unwind so far
212e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifneq ($(ARCH),x86)
213e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  NO_LIBUNWIND := 1
214e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
215e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
216e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef NO_LIBUNWIND
217e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# for linking with debug library, run like:
218e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# make DEBUG=1 LIBUNWIND_DIR=/opt/libunwind/
219e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifdef LIBUNWIND_DIR
220e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  LIBUNWIND_CFLAGS  := -I$(LIBUNWIND_DIR)/include
221e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  LIBUNWIND_LDFLAGS := -L$(LIBUNWIND_DIR)/lib
222e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
223e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
224e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengFLAGS_UNWIND=$(LIBUNWIND_CFLAGS) $(CFLAGS) $(LIBUNWIND_LDFLAGS) $(LDFLAGS) $(EXTLIBS) $(LIBUNWIND_LIBS)
225e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifneq ($(call try-cc,$(SOURCE_LIBUNWIND),$(FLAGS_UNWIND),libunwind),y)
226e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  msg := $(warning No libunwind found, disabling post unwind support. Please install libunwind-dev[el] >= 0.99);
227e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  NO_LIBUNWIND := 1
228e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # Libunwind support
229e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # NO_LIBUNWIND
230e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
231e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef NO_LIBUNWIND
232e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  CFLAGS += -DLIBUNWIND_SUPPORT
233e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  EXTLIBS += $(LIBUNWIND_LIBS)
234e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  CFLAGS += $(LIBUNWIND_CFLAGS)
235e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  LDFLAGS += $(LIBUNWIND_LDFLAGS)
236e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # NO_LIBUNWIND
237e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
238e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef NO_LIBAUDIT
239e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  FLAGS_LIBAUDIT = $(CFLAGS) $(LDFLAGS) -laudit
240e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifneq ($(call try-cc,$(SOURCE_LIBAUDIT),$(FLAGS_LIBAUDIT),libaudit),y)
241e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    msg := $(warning No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev);
242e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    NO_LIBAUDIT := 1
243e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  else
244e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    CFLAGS += -DLIBAUDIT_SUPPORT
245e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    EXTLIBS += -laudit
246e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
247e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
248e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
249e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifdef NO_NEWT
250e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  NO_SLANG=1
251e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
252e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
253e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef NO_SLANG
254e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  FLAGS_SLANG=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) -I/usr/include/slang -lslang
255e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifneq ($(call try-cc,$(SOURCE_SLANG),$(FLAGS_SLANG),libslang),y)
256e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    msg := $(warning slang not found, disables TUI support. Please install slang-devel or libslang-dev);
257e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    NO_SLANG := 1
258e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  else
259e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    # Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
260e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    CFLAGS += -I/usr/include/slang
261e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    CFLAGS += -DSLANG_SUPPORT
262e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    EXTLIBS += -lslang
263e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
264e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
265e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
266e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef NO_GTK2
267e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  FLAGS_GTK2=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) $(shell pkg-config --libs --cflags gtk+-2.0 2>/dev/null)
268e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifneq ($(call try-cc,$(SOURCE_GTK2),$(FLAGS_GTK2),gtk2),y)
269e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    msg := $(warning GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev);
270e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    NO_GTK2 := 1
271e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  else
272e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    ifeq ($(call try-cc,$(SOURCE_GTK2_INFOBAR),$(FLAGS_GTK2),-DHAVE_GTK_INFO_BAR),y)
273e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      CFLAGS += -DHAVE_GTK_INFO_BAR
274e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    endif
275e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    CFLAGS += -DGTK2_SUPPORT
276e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    CFLAGS += $(shell pkg-config --cflags gtk+-2.0 2>/dev/null)
277e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    EXTLIBS += $(shell pkg-config --libs gtk+-2.0 2>/dev/null)
278e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
279e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
280e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
281e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenggrep-libs  = $(filter -l%,$(1))
282e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstrip-libs = $(filter-out -l%,$(1))
283e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
284e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifdef NO_LIBPERL
285e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  CFLAGS += -DNO_LIBPERL
286e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengelse
287e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
288e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
289e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
290e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
291e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
292e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
293e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifneq ($(call try-cc,$(SOURCE_PERL_EMBED),$(FLAGS_PERL_EMBED),perl),y)
294e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    CFLAGS += -DNO_LIBPERL
295e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    NO_LIBPERL := 1
296e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  else
297e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    LDFLAGS += $(PERL_EMBED_LDFLAGS)
298e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    EXTLIBS += $(PERL_EMBED_LIBADD)
299e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
300e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
301e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
302e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdisable-python = $(eval $(disable-python_code))
303e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine disable-python_code
304e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  CFLAGS += -DNO_LIBPYTHON
305e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  $(if $(1),$(warning No $(1) was found))
306e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  $(warning Python support will not be built)
307e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  NO_LIBPYTHON := 1
308e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef
309e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
310e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengoverride PYTHON := \
311e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  $(call get-executable-or-default,PYTHON,python)
312e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
313e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef PYTHON
314e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  $(call disable-python,python interpreter)
315e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengelse
316e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
317e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  PYTHON_WORD := $(call shell-wordify,$(PYTHON))
318e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
319e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifdef NO_LIBPYTHON
320e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    $(call disable-python)
321e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  else
322e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
323e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    override PYTHON_CONFIG := \
324e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      $(call get-executable-or-default,PYTHON_CONFIG,$(PYTHON)-config)
325e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
326e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    ifndef PYTHON_CONFIG
327e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      $(call disable-python,python-config tool)
328e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    else
329e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
330e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))
331e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
332e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) --ldflags 2>/dev/null)
333e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      PYTHON_EMBED_LDFLAGS := $(call strip-libs,$(PYTHON_EMBED_LDOPTS))
334e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      PYTHON_EMBED_LIBADD := $(call grep-libs,$(PYTHON_EMBED_LDOPTS))
335e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --cflags 2>/dev/null)
336e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)
337e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
338e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      ifneq ($(call try-cc,$(SOURCE_PYTHON_EMBED),$(FLAGS_PYTHON_EMBED),python),y)
339e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        $(call disable-python,Python.h (for Python 2.x))
340e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      else
341e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
342e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        ifneq ($(call try-cc,$(SOURCE_PYTHON_VERSION),$(FLAGS_PYTHON_EMBED),python version),y)
343e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          $(warning Python 3 is not yet supported; please set)
344e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          $(warning PYTHON and/or PYTHON_CONFIG appropriately.)
345e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          $(warning If you also have Python 2 installed, then)
346e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          $(warning try something like:)
347e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          $(warning $(and ,))
348e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          $(warning $(and ,)  make PYTHON=python2)
349e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          $(warning $(and ,))
350e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          $(warning Otherwise, disable Python support entirely:)
351e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          $(warning $(and ,))
352e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          $(warning $(and ,)  make NO_LIBPYTHON=1)
353e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          $(warning $(and ,))
354e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          $(error   $(and ,))
355e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        else
356e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
357e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          EXTLIBS += $(PYTHON_EMBED_LIBADD)
358e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          LANG_BINDINGS += $(obj-perf)python/perf.so
359e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        endif
360e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      endif
361e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    endif
362e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
363e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
364e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
365e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifdef NO_DEMANGLE
366e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  CFLAGS += -DNO_DEMANGLE
367e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengelse
368e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifdef HAVE_CPLUS_DEMANGLE
369e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    EXTLIBS += -liberty
370e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    CFLAGS += -DHAVE_CPLUS_DEMANGLE
371e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  else
372e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    FLAGS_BFD=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) -DPACKAGE='perf' -lbfd
373e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    has_bfd := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD),libbfd)
374e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    ifeq ($(has_bfd),y)
375e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      EXTLIBS += -lbfd
376e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    else
377e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      FLAGS_BFD_IBERTY=$(FLAGS_BFD) -liberty
378e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      has_bfd_iberty := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD_IBERTY),liberty)
379e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      ifeq ($(has_bfd_iberty),y)
380e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        EXTLIBS += -lbfd -liberty
381e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      else
382e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        FLAGS_BFD_IBERTY_Z=$(FLAGS_BFD_IBERTY) -lz
383e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        has_bfd_iberty_z := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD_IBERTY_Z),libz)
384e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        ifeq ($(has_bfd_iberty_z),y)
385e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          EXTLIBS += -lbfd -liberty -lz
386e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        else
387e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          FLAGS_CPLUS_DEMANGLE=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) -liberty
388e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          has_cplus_demangle := $(call try-cc,$(SOURCE_CPLUS_DEMANGLE),$(FLAGS_CPLUS_DEMANGLE),demangle)
389e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          ifeq ($(has_cplus_demangle),y)
390e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng            EXTLIBS += -liberty
391e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng            CFLAGS += -DHAVE_CPLUS_DEMANGLE
392e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          else
393e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng            msg := $(warning No bfd.h/libbfd found, install binutils-dev[el]/zlib-static to gain symbol demangling)
394e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng            CFLAGS += -DNO_DEMANGLE
395e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng          endif
396e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        endif
397e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng      endif
398e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    endif
399e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
400e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
401e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
402e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef NO_STRLCPY
403e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifeq ($(call try-cc,$(SOURCE_STRLCPY),,-DHAVE_STRLCPY),y)
404e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    CFLAGS += -DHAVE_STRLCPY
405e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
406e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
407e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
408e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef NO_ON_EXIT
409e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifeq ($(call try-cc,$(SOURCE_ON_EXIT),,-DHAVE_ON_EXIT),y)
410e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    CFLAGS += -DHAVE_ON_EXIT
411e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
412e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
413e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
414e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef NO_BACKTRACE
415e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifeq ($(call try-cc,$(SOURCE_BACKTRACE),,-DBACKTRACE_SUPPORT),y)
416e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    CFLAGS += -DBACKTRACE_SUPPORT
417e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
418e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
419e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
420e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef NO_LIBNUMA
421e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  FLAGS_LIBNUMA = $(CFLAGS) $(LDFLAGS) -lnuma
422e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  ifneq ($(call try-cc,$(SOURCE_LIBNUMA),$(FLAGS_LIBNUMA),libnuma),y)
423e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    msg := $(warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numa-libs-devel or libnuma-dev);
424e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    NO_LIBNUMA := 1
425e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  else
426e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    CFLAGS += -DLIBNUMA_SUPPORT
427e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    EXTLIBS += -lnuma
428e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  endif
429e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
430e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
431e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Among the variables below, these:
432e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#   perfexecdir
433e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#   template_dir
434e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#   mandir
435e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#   infodir
436e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#   htmldir
437e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#   ETC_PERFCONFIG (but not sysconfdir)
438e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# can be specified as a relative path some/where/else;
439e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# this is interpreted as relative to $(prefix) and "perf" at
440e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# runtime figures out where they are based on the path to the executable.
441e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# This can help installing the suite in a relocatable way.
442e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
443e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Make the path relative to DESTDIR, not to prefix
444e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef DESTDIR
445e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengprefix = $(HOME)
446e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
447e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengbindir_relative = bin
448e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengbindir = $(prefix)/$(bindir_relative)
449e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengmandir = share/man
450e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenginfodir = share/info
451e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengperfexecdir = libexec/perf-core
452e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsharedir = $(prefix)/share
453e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengtemplate_dir = share/perf-core/templates
454e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenghtmldir = share/doc/perf-doc
455e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(prefix),/usr)
456e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsysconfdir = /etc
457e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengETC_PERFCONFIG = $(sysconfdir)/perfconfig
458e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengelse
459e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsysconfdir = $(prefix)/etc
460e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengETC_PERFCONFIG = etc/perfconfig
461e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
462e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenglib = lib
463e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
464e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Shell quote (do not use $(call) to accommodate ancient setups);
465e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
466e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengDESTDIR_SQ = $(subst ','\'',$(DESTDIR))
467e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengbindir_SQ = $(subst ','\'',$(bindir))
468e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengmandir_SQ = $(subst ','\'',$(mandir))
469e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenginfodir_SQ = $(subst ','\'',$(infodir))
470e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengperfexecdir_SQ = $(subst ','\'',$(perfexecdir))
471e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengtemplate_dir_SQ = $(subst ','\'',$(template_dir))
472e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenghtmldir_SQ = $(subst ','\'',$(htmldir))
473e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengprefix_SQ = $(subst ','\'',$(prefix))
474e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsysconfdir_SQ = $(subst ','\'',$(sysconfdir))
475e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
476e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifneq ($(filter /%,$(firstword $(perfexecdir))),)
477e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengperfexec_instdir = $(perfexecdir)
478e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengelse
479e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengperfexec_instdir = $(prefix)/$(perfexecdir)
480e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif
481e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengperfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir))
482