Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1522323
| From | Wang Nan <wangnan0@huawei.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 13/34] perf build: Add clang and llvm compile and linking support |
| Date | 2016-11-15 05:20 +0100 |
| Message-ID | <sDDnY-8py-29@gated-at.bofh.it> (permalink) |
| References | <sDDeh-8kE-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
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: Zefan Li <lizefan@huawei.com> Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/1474874832-134786-6-git-send-email-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/Makefile.config | 35 +++++++++++++++++++++++++++++++++++ tools/perf/Makefile.perf | 23 ++++++++++++++++++++++- tools/perf/tests/make | 2 ++ 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config index 8a493d4..b7c9c80 100644 --- a/tools/perf/Makefile.config +++ b/tools/perf/Makefile.config @@ -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 diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf index 3cb1df4..dfb20dd 100644 --- a/tools/perf/Makefile.perf +++ b/tools/perf/Makefile.perf @@ -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 diff --git a/tools/perf/tests/make b/tools/perf/tests/make index 08ed7f1..aa49b66 100644 --- a/tools/perf/tests/make +++ b/tools/perf/tests/make @@ -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 -- 2.10.1
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 00/34] perf clang: Builtin clang and perfhook support Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:10 +0100
[PATCH 21/34] perf clang: Pass CFLAGS to builtin clang Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:10 +0100
[PATCH 33/34] perf clang builtin: Define hook helpers by default Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:10 +0100
[PATCH 28/34] perf clang jit: Access BPF map Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:10 +0100
[PATCH 16/34] perf clang: Allow passing CFLAGS to builtin clang Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:10 +0100
[PATCH 23/34] perf clang jit: Insignt BPF and JIT functions in a Module Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:10 +0100
[PATCH 02/34] perf record: Fix segfault when running with suid and kptr_restrict is 1 Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:10 +0100
[PATCH 06/34] tools lib bpf: Add private field for bpf_object Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:10 +0100
[PATCH 03/34] tools perf: Add missing struct defeinition in probe_event.h Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 01/34] perf tools: Fix kernel version error in ubuntu Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 24/34] perf clang jit: add PerfModule::doJIT to JIT perfhook functions Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 30/34] perf clang: Link BPF functions declaration into perf Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 11/34] tools build: Add feature detection for LLVM Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 32/34] perf clang: Include helpers to BPF scripts Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 05/34] tools lib bpf: Add missing bpf map functions Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
Re: [PATCH 05/34] tools lib bpf: Add missing bpf map functions "Wangnan (F)" <wangnan0@huawei.com> - 2016-11-17 04:30 +0100
[PATCH 31/34] perf clang: Declare BPF functions for BPF scripts automatically Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 29/34] perf clang jit: Allow jitted perf hook access BPF maps Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 34/34] perf clang git: Export getpid() to perf hook Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 09/34] perf tools: Pass context to perf hook functions Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 22/34] perf clang jit: Wrap llvm::Module using PerfModule Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 25/34] perf clang jit: Export functions for jitted code Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 20/34] perf clang: Pass full path to builtin clang Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 18/34] perf clang: Support compile IR to BPF object and add testcase Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 15/34] perf clang: Use real file system for #include Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 27/34] perf clang jit: Collect the lowest address in maps section as map_base Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 17/34] perf clang: Update test case to use real BPF script Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 13/34] perf build: Add clang and llvm compile and linking support Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 12/34] tools build: Add feature detection for clang Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 08/34] perf tools: Introduce perf hooks Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 07/34] tools lib bpf: Retrive bpf_map through offset of bpf_map_def Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 26/34] perf clang jit: Actually JIT and hook in bpf loader Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 14/34] perf clang: Add builtin clang support ant test case Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 10/34] perf llvm: Extract helpers in llvm-utils.c Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
[PATCH 19/34] perf clang: Compile BPF script use builtin clang support Wang Nan <wangnan0@huawei.com> - 2016-11-15 05:20 +0100
Re: [PATCH 00/34] perf clang: Builtin clang and perfhook support "Wangnan (F)" <wangnan0@huawei.com> - 2016-11-15 05:40 +0100
csiph-web