2013-03-15 23:28:49 +08:00
uname_M := $( shell uname -m 2>/dev/null || echo not)
ARCH ?= $( shell echo $( uname_M) | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-e s/sh[ 234] .*/sh/ -e s/aarch64.*/arm64/ )
NO_PERF_REGS := 1
# Additional ARCH settings for x86
i f e q ( $( ARCH ) , i 3 8 6 )
override ARCH := x86
NO_PERF_REGS := 0
LIBUNWIND_LIBS = -lunwind -lunwind-x86
e n d i f
i f e q ( $( ARCH ) , x 8 6 _ 6 4 )
override ARCH := x86
IS_X86_64 := 0
ifeq ( , $( findstring m32,$( EXTRA_CFLAGS) ) )
IS_X86_64 := $( shell echo __x86_64__ | ${ CC } -E -x c - | tail -n 1)
endif
ifeq ( ${ IS_X86_64 } , 1)
RAW_ARCH := x86_64
ARCH_CFLAGS := -DARCH_X86_64
ARCH_INCLUDE = ../../arch/x86/lib/memcpy_64.S ../../arch/x86/lib/memset_64.S
endif
NO_PERF_REGS := 0
LIBUNWIND_LIBS = -lunwind -lunwind-x86_64
e n d i f
i f e q ( $( NO_PERF_REGS ) , 0 )
BASIC_CFLAGS += -DHAVE_PERF_REGS
e n d i f
2013-03-25 07:32:01 +08:00
- i n c l u d e c o n f i g / f e a t u r e - t e s t s . m a k
i f e q ( $( call get -executable ,$ ( FLEX ) ) , )
dummy := $( error Error: $( FLEX) is missing on this system, please install it)
e n d i f
i f e q ( $( call get -executable ,$ ( BISON ) ) , )
dummy := $( error Error: $( BISON) is missing on this system, please install it)
e n d i f
2013-03-25 07:40:48 +08:00
# Treat warnings as errors unless directed not to
i f n e q ( $( WERROR ) , 0 )
CFLAGS_WERROR := -Werror
e n d i f
i f e q ( "$(origin DEBUG)" , "command line" )
PERF_DEBUG = $( DEBUG)
e n d i f
i f n d e f P E R F _ D E B U G
CFLAGS_OPTIMIZE = -O6
e n d i f
i f d e f P A R S E R _ D E B U G
PARSER_DEBUG_BISON := -t
PARSER_DEBUG_FLEX := -d
PARSER_DEBUG_CFLAGS := -DPARSER_DEBUG
e n d i f
CFLAGS = -fno-omit-frame-pointer -ggdb3 -funwind-tables -Wall -Wextra -std= gnu99 $( CFLAGS_WERROR) $( CFLAGS_OPTIMIZE) $( EXTRA_WARNINGS) $( EXTRA_CFLAGS) $( PARSER_DEBUG_CFLAGS)
EXTLIBS = -lpthread -lrt -lelf -lm
ALL_CFLAGS = $( CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS= 64 -D_GNU_SOURCE
ALL_LDFLAGS = $( LDFLAGS)
i f e q ( $( call try -cc ,$ ( SOURCE_HELLO ) ,$ ( CFLAGS ) -Werror -fstack -protector -all ,-fstack -protector -all ) , y )
CFLAGS := $( CFLAGS) -fstack-protector-all
e n d i f
i f e q ( $( call try -cc ,$ ( SOURCE_HELLO ) ,$ ( CFLAGS ) -Werror -Wstack -protector ,-Wstack -protector ) , y )
CFLAGS := $( CFLAGS) -Wstack-protector
e n d i f
i f e q ( $( call try -cc ,$ ( SOURCE_HELLO ) ,$ ( CFLAGS ) -Werror -Wvolatile -register -var ,-Wvolatile -register -var ) , y )
CFLAGS := $( CFLAGS) -Wvolatile-register-var
e n d i f
i f n d e f P E R F _ D E B U G
ifeq ( $( call try-cc,$( SOURCE_HELLO) ,$( CFLAGS) -D_FORTIFY_SOURCE= 2,-D_FORTIFY_SOURCE= 2) ,y)
CFLAGS := $( CFLAGS) -D_FORTIFY_SOURCE= 2
endif
e n d i f
BASIC_CFLAGS += \
-Iutil/include \
-Iarch/$( ARCH) /include \
$( if $( objtree) ,-I$( objtree) /arch/$( ARCH) /include/generated/uapi) \
-I$( srctree) /arch/$( ARCH) /include/uapi \
-I$( srctree) /arch/$( ARCH) /include \
$( if $( objtree) ,-I$( objtree) /include/generated/uapi) \
-I$( srctree) /include/uapi \
-I$( srctree) /include \
-I$( OUTPUT) util \
-Iutil \
-I. \
-I$( TRACE_EVENT_DIR) \
-I../lib/ \
-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS= 64 -D_GNU_SOURCE
BASIC_LDFLAGS =
i f e q ( $( call try -cc ,$ ( SOURCE_BIONIC ) ,$ ( CFLAGS ) ,bionic ) , y )
BIONIC := 1
EXTLIBS := $( filter-out -lrt,$( EXTLIBS) )
EXTLIBS := $( filter-out -lpthread,$( EXTLIBS) )
BASIC_CFLAGS += -I.
e n d i f
2013-03-25 07:45:08 +08:00
i f d e f N O _ L I B E L F
NO_DWARF := 1
NO_DEMANGLE := 1
NO_LIBUNWIND := 1
e l s e
FLAGS_LIBELF = $( ALL_CFLAGS) $( ALL_LDFLAGS) $( EXTLIBS)
i f n e q ( $( call try -cc ,$ ( SOURCE_LIBELF ) ,$ ( FLAGS_LIBELF ) ,libelf ) , y )
FLAGS_GLIBC = $( ALL_CFLAGS) $( ALL_LDFLAGS)
ifeq ( $( call try-cc,$( SOURCE_GLIBC) ,$( FLAGS_GLIBC) ,glibc) ,y)
LIBC_SUPPORT := 1
endif
ifeq ( $( BIONIC) ,1)
LIBC_SUPPORT := 1
endif
ifeq ( $( LIBC_SUPPORT) ,1)
msg := $( warning No libelf found, disables 'probe' tool, please install elfutils-libelf-devel/libelf-dev) ;
NO_LIBELF := 1
NO_DWARF := 1
NO_DEMANGLE := 1
else
msg := $( error No gnu/libc-version.h found, please install glibc-dev[ el] /glibc-static) ;
endif
e l s e
# 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
endif
FLAGS_DWARF = $( ALL_CFLAGS) $( LIBDW_CFLAGS) -ldw -lelf $( LIBDW_LDFLAGS) $( ALL_LDFLAGS) $( EXTLIBS)
ifneq ( $( call try-cc,$( SOURCE_DWARF) ,$( FLAGS_DWARF) ,libdw) ,y)
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 # Dwarf support
e n d i f # SOURCE_LIBELF
e n d i f # NO_LIBELF
i f n d e f N O _ L I B E L F
BASIC_CFLAGS += -DLIBELF_SUPPORT
FLAGS_LIBELF = $( ALL_CFLAGS) $( ALL_LDFLAGS) $( EXTLIBS)
i f e q ( $( call try -cc ,$ ( SOURCE_ELF_MMAP ) ,$ ( FLAGS_LIBELF ) ,-DLIBELF_MMAP ) , y )
BASIC_CFLAGS += -DLIBELF_MMAP
e n d i f
2013-03-25 07:48:14 +08:00
# include ARCH specific config
- i n c l u d e a r c h / $( ARCH ) / M a k e f i l e
i f n d e f N O _ D W A R F
i f e q ( $( origin PERF_HAVE_DWARF_REGS ) , u n d e f i n e d )
msg := $( warning DWARF register mappings have not been defined for architecture $( ARCH) , DWARF support disabled) ;
NO_DWARF := 1
e l s e
BASIC_CFLAGS := -DDWARF_SUPPORT $( LIBDW_CFLAGS) $( BASIC_CFLAGS)
BASIC_LDFLAGS := $( LIBDW_LDFLAGS) $( BASIC_LDFLAGS)
EXTLIBS += -lelf -ldw
e n d i f # PERF_HAVE_DWARF_REGS
e n d i f # NO_DWARF
2013-03-25 07:45:08 +08:00
e n d i f # NO_LIBELF
2013-03-25 07:53:03 +08:00
# There's only x86 (both 32 and 64) support for CFI unwind so far
i f n e q ( $( ARCH ) , x 8 6 )
NO_LIBUNWIND := 1
e n d i f
i f n d e f N O _ L I B U N W I N D
# for linking with debug library, run like:
# make DEBUG=1 LIBUNWIND_DIR=/opt/libunwind/
i f d e f L I B U N W I N D _ D I R
LIBUNWIND_CFLAGS := -I$( LIBUNWIND_DIR) /include
LIBUNWIND_LDFLAGS := -L$( LIBUNWIND_DIR) /lib
e n d i f
FLAGS_UNWIND = $( LIBUNWIND_CFLAGS) $( ALL_CFLAGS) $( LIBUNWIND_LDFLAGS) $( ALL_LDFLAGS) $( EXTLIBS) $( LIBUNWIND_LIBS)
i f n e q ( $( call try -cc ,$ ( SOURCE_LIBUNWIND ) ,$ ( FLAGS_UNWIND ) ,libunwind ) , y )
msg := $( warning No libunwind found, disabling post unwind support. Please install libunwind-dev[ el] >= 0.99) ;
NO_LIBUNWIND := 1
e n d i f # Libunwind support
e n d i f # NO_LIBUNWIND
i f n d e f N O _ L I B U N W I N D
BASIC_CFLAGS += -DLIBUNWIND_SUPPORT
EXTLIBS += $( LIBUNWIND_LIBS)
BASIC_CFLAGS := $( LIBUNWIND_CFLAGS) $( BASIC_CFLAGS)
BASIC_LDFLAGS := $( LIBUNWIND_LDFLAGS) $( BASIC_LDFLAGS)
e n d i f # NO_LIBUNWIND
2013-03-25 07:54:36 +08:00
i f n d e f N O _ L I B A U D I T
FLAGS_LIBAUDIT = $( ALL_CFLAGS) $( ALL_LDFLAGS) -laudit
ifneq ( $( call try-cc,$( SOURCE_LIBAUDIT) ,$( FLAGS_LIBAUDIT) ,libaudit) ,y)
msg := $( warning No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev) ;
NO_LIBAUDIT := 1
else
BASIC_CFLAGS += -DLIBAUDIT_SUPPORT
EXTLIBS += -laudit
endif
e n d i f
2013-03-25 07:56:08 +08:00
i f d e f N O _ N E W T
NO_SLANG = 1
e n d i f
i f n d e f N O _ S L A N G
FLAGS_SLANG = $( ALL_CFLAGS) $( ALL_LDFLAGS) $( EXTLIBS) -I/usr/include/slang -lslang
ifneq ( $( call try-cc,$( SOURCE_SLANG) ,$( FLAGS_SLANG) ,libslang) ,y)
msg := $( warning slang not found, disables TUI support. Please install slang-devel or libslang-dev) ;
NO_SLANG := 1
else
# Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
BASIC_CFLAGS += -I/usr/include/slang
BASIC_CFLAGS += -DSLANG_SUPPORT
EXTLIBS += -lslang
endif
e n d i f