Commit d58ac0bf authored by Wang Nan's avatar Wang Nan Committed by Arnaldo Carvalho de Melo

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: default avatarWang 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.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent c7fb4f62
...@@ -136,6 +136,7 @@ endif ...@@ -136,6 +136,7 @@ endif
# Treat warnings as errors unless directed not to # Treat warnings as errors unless directed not to
ifneq ($(WERROR),0) ifneq ($(WERROR),0)
CFLAGS += -Werror CFLAGS += -Werror
CXXFLAGS += -Werror
endif endif
ifndef DEBUG ifndef DEBUG
...@@ -182,6 +183,13 @@ CFLAGS += -Wall ...@@ -182,6 +183,13 @@ CFLAGS += -Wall
CFLAGS += -Wextra CFLAGS += -Wextra
CFLAGS += -std=gnu99 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 # Enforce a non-executable stack, as we may regress (again) in the future by
# adding assembler files missing the .GNU-stack linker note. # adding assembler files missing the .GNU-stack linker note.
LDFLAGS += -Wl,-z,noexecstack LDFLAGS += -Wl,-z,noexecstack
...@@ -783,6 +791,33 @@ ifndef NO_JVMTI ...@@ -783,6 +791,33 @@ ifndef NO_JVMTI
endif endif
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: # Among the variables below, these:
# perfexecdir # perfexecdir
# template_dir # template_dir
......
...@@ -88,6 +88,10 @@ include ../scripts/utilities.mak ...@@ -88,6 +88,10 @@ include ../scripts/utilities.mak
# and bypass the feature detection # and bypass the feature detection
# #
# Define NO_JVMTI if you do not want jvmti agent built # 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 # As per kernel Makefile, avoid funny character set dependencies
unexport LC_ALL unexport LC_ALL
...@@ -143,6 +147,7 @@ endef ...@@ -143,6 +147,7 @@ endef
$(call allow-override,CC,$(CROSS_COMPILE)gcc) $(call allow-override,CC,$(CROSS_COMPILE)gcc)
$(call allow-override,AR,$(CROSS_COMPILE)ar) $(call allow-override,AR,$(CROSS_COMPILE)ar)
$(call allow-override,LD,$(CROSS_COMPILE)ld) $(call allow-override,LD,$(CROSS_COMPILE)ld)
$(call allow-override,CXX,$(CROSS_COMPILE)g++)
LD += $(EXTRA_LDFLAGS) LD += $(EXTRA_LDFLAGS)
...@@ -151,6 +156,7 @@ HOSTLD ?= ld ...@@ -151,6 +156,7 @@ HOSTLD ?= ld
HOSTAR ?= ar HOSTAR ?= ar
PKG_CONFIG = $(CROSS_COMPILE)pkg-config PKG_CONFIG = $(CROSS_COMPILE)pkg-config
LLVM_CONFIG ?= llvm-config
RM = rm -f RM = rm -f
LN = ln -f LN = ln -f
...@@ -338,6 +344,21 @@ endif ...@@ -338,6 +344,21 @@ endif
LIBS = -Wl,--whole-archive $(PERFLIBS) -Wl,--no-whole-archive -Wl,--start-group $(EXTLIBS) -Wl,--end-group 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 export INSTALL SHELL_PATH
### Build rules ### Build rules
...@@ -356,7 +377,7 @@ strip: $(PROGRAMS) $(OUTPUT)perf ...@@ -356,7 +377,7 @@ strip: $(PROGRAMS) $(OUTPUT)perf
PERF_IN := $(OUTPUT)perf-in.o 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 export HOSTCC HOSTLD HOSTAR
include $(srctree)/tools/build/Makefile.include include $(srctree)/tools/build/Makefile.include
......
...@@ -83,6 +83,7 @@ make_no_libbpf := NO_LIBBPF=1 ...@@ -83,6 +83,7 @@ make_no_libbpf := NO_LIBBPF=1
make_no_libcrypto := NO_LIBCRYPTO=1 make_no_libcrypto := NO_LIBCRYPTO=1
make_with_babeltrace:= LIBBABELTRACE=1 make_with_babeltrace:= LIBBABELTRACE=1
make_no_sdt := NO_SDT=1 make_no_sdt := NO_SDT=1
make_with_clangllvm := LIBCLANGLLVM=1
make_tags := tags make_tags := tags
make_cscope := cscope make_cscope := cscope
make_help := help make_help := help
...@@ -139,6 +140,7 @@ run += make_no_libbionic ...@@ -139,6 +140,7 @@ run += make_no_libbionic
run += make_no_auxtrace run += make_no_auxtrace
run += make_no_libbpf run += make_no_libbpf
run += make_with_babeltrace run += make_with_babeltrace
run += make_with_clangllvm
run += make_help run += make_help
run += make_doc run += make_doc
run += make_perf_o run += make_perf_o
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment