perf build: Add clang and llvm compile and linking support
Add necessary c++ flags and link libraries to support builtin clang and LLVM. Add all llvm and clang libraries, so don't need to worry about clang changes its libraries setting. However, linking perf would take much longer than usual. Signed-off-by: Wang Nan <wangnan0@huawei.com> Cc: Alexei Starovoitov <ast@fb.com> Cc: He Kuang <hekuang@huawei.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Joe Stringer <joe@ovn.org> Cc: Zefan Li <lizefan@huawei.com> Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/20161126070354.141764-10-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
c7fb4f62e2
Коммит
d58ac0bf8d
|
@ -136,6 +136,7 @@ endif
|
|||
# Treat warnings as errors unless directed not to
|
||||
ifneq ($(WERROR),0)
|
||||
CFLAGS += -Werror
|
||||
CXXFLAGS += -Werror
|
||||
endif
|
||||
|
||||
ifndef DEBUG
|
||||
|
@ -182,6 +183,13 @@ CFLAGS += -Wall
|
|||
CFLAGS += -Wextra
|
||||
CFLAGS += -std=gnu99
|
||||
|
||||
CXXFLAGS += -std=gnu++11 -fno-exceptions -fno-rtti
|
||||
CXXFLAGS += -Wall
|
||||
CXXFLAGS += -fno-omit-frame-pointer
|
||||
CXXFLAGS += -ggdb3
|
||||
CXXFLAGS += -funwind-tables
|
||||
CXXFLAGS += -Wno-strict-aliasing
|
||||
|
||||
# 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
|
||||
|
@ -783,6 +791,33 @@ ifndef NO_JVMTI
|
|||
endif
|
||||
endif
|
||||
|
||||
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)
|
||||
ifneq ($(feature-llvm), 1)
|
||||
msg := $(warning No libLLVM found, disable clang and llvm support. Please install llvm-dev)
|
||||
else
|
||||
$(call feature_check,clang)
|
||||
ifneq ($(feature-clang), 1)
|
||||
msg := $(warning No libclang found, disable clang and llvm support. Please install libclang-dev)
|
||||
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
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# Among the variables below, these:
|
||||
# perfexecdir
|
||||
# template_dir
|
||||
|
|
|
@ -88,6 +88,10 @@ include ../scripts/utilities.mak
|
|||
# and bypass the feature detection
|
||||
#
|
||||
# Define NO_JVMTI if you do not want jvmti agent built
|
||||
#
|
||||
# Define LIBCLANGLLVM if you DO want builtin clang and llvm support.
|
||||
# When selected, pass LLVM_CONFIG=/path/to/llvm-config to `make' if
|
||||
# llvm-config is not in $PATH.
|
||||
|
||||
# As per kernel Makefile, avoid funny character set dependencies
|
||||
unexport LC_ALL
|
||||
|
@ -143,6 +147,7 @@ endef
|
|||
$(call allow-override,CC,$(CROSS_COMPILE)gcc)
|
||||
$(call allow-override,AR,$(CROSS_COMPILE)ar)
|
||||
$(call allow-override,LD,$(CROSS_COMPILE)ld)
|
||||
$(call allow-override,CXX,$(CROSS_COMPILE)g++)
|
||||
|
||||
LD += $(EXTRA_LDFLAGS)
|
||||
|
||||
|
@ -151,6 +156,7 @@ HOSTLD ?= ld
|
|||
HOSTAR ?= ar
|
||||
|
||||
PKG_CONFIG = $(CROSS_COMPILE)pkg-config
|
||||
LLVM_CONFIG ?= llvm-config
|
||||
|
||||
RM = rm -f
|
||||
LN = ln -f
|
||||
|
@ -338,6 +344,21 @@ endif
|
|||
|
||||
LIBS = -Wl,--whole-archive $(PERFLIBS) -Wl,--no-whole-archive -Wl,--start-group $(EXTLIBS) -Wl,--end-group
|
||||
|
||||
ifeq ($(USE_CLANG), 1)
|
||||
CLANGLIBS_LIST = AST Basic CodeGen Driver Frontend Lex Tooling Edit Sema Analysis Parse Serialization
|
||||
LIBCLANG = $(foreach l,$(CLANGLIBS_LIST),$(wildcard $(shell $(LLVM_CONFIG) --libdir)/libclang$(l).a))
|
||||
LIBS += -Wl,--start-group $(LIBCLANG) -Wl,--end-group
|
||||
endif
|
||||
|
||||
ifeq ($(USE_LLVM), 1)
|
||||
LIBLLVM = $(shell $(LLVM_CONFIG) --libs all) $(shell $(LLVM_CONFIG) --system-libs)
|
||||
LIBS += -L$(shell $(LLVM_CONFIG) --libdir) $(LIBLLVM)
|
||||
endif
|
||||
|
||||
ifeq ($(USE_CXX), 1)
|
||||
LIBS += -lstdc++
|
||||
endif
|
||||
|
||||
export INSTALL SHELL_PATH
|
||||
|
||||
### Build rules
|
||||
|
@ -356,7 +377,7 @@ strip: $(PROGRAMS) $(OUTPUT)perf
|
|||
|
||||
PERF_IN := $(OUTPUT)perf-in.o
|
||||
|
||||
export srctree OUTPUT RM CC LD AR CFLAGS V BISON FLEX AWK
|
||||
export srctree OUTPUT RM CC CXX LD AR CFLAGS CXXFLAGS V BISON FLEX AWK
|
||||
export HOSTCC HOSTLD HOSTAR
|
||||
include $(srctree)/tools/build/Makefile.include
|
||||
|
||||
|
|
|
@ -83,6 +83,7 @@ make_no_libbpf := NO_LIBBPF=1
|
|||
make_no_libcrypto := NO_LIBCRYPTO=1
|
||||
make_with_babeltrace:= LIBBABELTRACE=1
|
||||
make_no_sdt := NO_SDT=1
|
||||
make_with_clangllvm := LIBCLANGLLVM=1
|
||||
make_tags := tags
|
||||
make_cscope := cscope
|
||||
make_help := help
|
||||
|
@ -139,6 +140,7 @@ run += make_no_libbionic
|
|||
run += make_no_auxtrace
|
||||
run += make_no_libbpf
|
||||
run += make_with_babeltrace
|
||||
run += make_with_clangllvm
|
||||
run += make_help
|
||||
run += make_doc
|
||||
run += make_perf_o
|
||||
|
|
Загрузка…
Ссылка в новой задаче