Messages in this thread | | | From | Wang Nan <> | Subject | [PATCH 00/14] perf clang: Support compiling BPF script use builtin clang | Date | Fri, 23 Sep 2016 12:49:47 +0000 |
| |
This patch set is the first step to implement features I announced in LinuxCon NA 2016. See page 31 of:
http://events.linuxfoundation.org/sites/events/files/slides/Performance%20Monitoring%20and%20Analysis%20Using%20perf%20and%20BPF_1.pdf
This patch set links LLVM and Clang libraries to perf, so perf is able to compile BPF script to BPF object on the fly.
To make this this patch set work, developer should first install llvm-devel and clang-devel (libLLVM*.a and libclang*.a, I compile LLVM from source to get them and I see ubuntu also ships them), then build perf with LIBCLANGLLVM=1, and provide a valid llvm-config through LLVM_CONFIG if necessary.
The first 4 patches introduce initial building environment. 3 new feature detectors are added to ensure the dependency. Patch 5 - 10 support compile C file into IR then object, each step can be tested by newly introduced 'perf test clang'. Patch 11 - 14 fixes missing features like kbuild detection and some default macros.
Signed-off-by: Wang Nan <wangnan0@huawei.com> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Alexei Starovoitov <ast@fb.com> Cc: He Kuang <hekuang@huawei.com> Cc: Jiri Olsa <jolsa@kernel.org>
Wang Nan (14): tools build: Support compiling C++ source file perf tools: Add feature detection for g++ perf tools: Add feature detection for LLVM perf tools: Add feature detection for clang perf build: Add clang and llvm compile and linking support perf clang: Add builtin clang support ant test case perf clang: Use real file system for #include perf clang: Allow passing CFLAGS to builtin clang perf clang: Update test case to use real BPF script perf clang: Support compile IR to BPF object and add testcase perf tools: Extract kernel build option detector as utils perf bpf: Compile BPF script use builtin cflags support perf clang: Pass fill path compiler perf clang: Pass correct CFLAGS to builtin clang
tools/build/Build.include | 1 + tools/build/Makefile.build | 7 + tools/build/Makefile.feature | 2 +- tools/build/feature/Makefile | 28 +++- tools/build/feature/test-clang.cpp | 21 +++ tools/build/feature/test-cxx.cpp | 15 +++ tools/build/feature/test-llvm.cpp | 8 ++ tools/perf/Makefile.config | 62 +++++++-- tools/perf/Makefile.perf | 23 +++- tools/perf/tests/Build | 1 + tools/perf/tests/builtin-test.c | 9 ++ tools/perf/tests/clang.c | 46 +++++++ tools/perf/tests/llvm-cxx.h | 13 ++ tools/perf/tests/make | 2 + tools/perf/tests/tests.h | 3 + tools/perf/util/Build | 2 + tools/perf/util/bpf-loader.c | 15 ++- tools/perf/util/c++/Build | 2 + tools/perf/util/c++/clang-c.h | 43 ++++++ tools/perf/util/c++/clang-test.cpp | 58 ++++++++ tools/perf/util/c++/clang.cpp | 268 +++++++++++++++++++++++++++++++++++++ tools/perf/util/c++/clang.h | 26 ++++ tools/perf/util/llvm-utils-cxx.h | 14 ++ tools/perf/util/llvm-utils.c | 44 +++++- tools/perf/util/llvm-utils.h | 5 +- tools/perf/util/util-cxx.h | 26 ++++ 26 files changed, 718 insertions(+), 26 deletions(-) create mode 100644 tools/build/feature/test-clang.cpp create mode 100644 tools/build/feature/test-cxx.cpp create mode 100644 tools/build/feature/test-llvm.cpp create mode 100644 tools/perf/tests/clang.c create mode 100644 tools/perf/tests/llvm-cxx.h create mode 100644 tools/perf/util/c++/Build create mode 100644 tools/perf/util/c++/clang-c.h create mode 100644 tools/perf/util/c++/clang-test.cpp create mode 100644 tools/perf/util/c++/clang.cpp create mode 100644 tools/perf/util/c++/clang.h create mode 100644 tools/perf/util/llvm-utils-cxx.h create mode 100644 tools/perf/util/util-cxx.h
-- 1.8.3.4
| |