Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753481AbcLGSWl (ORCPT ); Wed, 7 Dec 2016 13:22:41 -0500 Received: from terminus.zytor.com ([198.137.202.10]:53428 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753132AbcLGSWj (ORCPT ); Wed, 7 Dec 2016 13:22:39 -0500 Date: Wed, 7 Dec 2016 10:22:06 -0800 From: tip-bot for Wang Nan Message-ID: Cc: hekuang@huawei.com, ast@fb.com, wangnan0@huawei.com, lizefan@huawei.com, linux-kernel@vger.kernel.org, jolsa@kernel.org, acme@redhat.com, hpa@zytor.com, tglx@linutronix.de, joe@ovn.org, mingo@kernel.org Reply-To: acme@redhat.com, mingo@kernel.org, tglx@linutronix.de, joe@ovn.org, hpa@zytor.com, lizefan@huawei.com, wangnan0@huawei.com, ast@fb.com, hekuang@huawei.com, jolsa@kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <20161206072230.7651-1-wangnan0@huawei.com> References: <20161206072230.7651-1-wangnan0@huawei.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/core] perf build: Check LLVM version in feature check Git-Commit-ID: a940cad331e79cc03d9ae74f56a2c7cb810bdce9 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 6539 Lines: 158 Commit-ID: a940cad331e79cc03d9ae74f56a2c7cb810bdce9 Gitweb: http://git.kernel.org/tip/a940cad331e79cc03d9ae74f56a2c7cb810bdce9 Author: Wang Nan AuthorDate: Tue, 6 Dec 2016 07:22:30 +0000 Committer: Arnaldo Carvalho de Melo CommitDate: Tue, 6 Dec 2016 13:21:55 -0300 perf build: Check LLVM version in feature check Cancel builtin llvm and clang support when LLVM version is less than 3.9.0: following commits uses newer API. Since Clang/LLVM's API is not guaranteed to be stable, add a test-llvm-version.cpp feature checker, issue warning if LLVM found in compiling environment is not tested yet. Committer Notes: Testing it: Environment: $ cat /etc/fedora-release Fedora release 25 (Twenty Five) $ rpm -q llvm-devel clang-devel llvm-devel-3.8.0-1.fc25.x86_64 clang-devel-3.8.0-2.fc25.x86_64 $ Before: $ make -k LIBCLANGLLVM=1 O=/tmp/build/perf -C tools/perf install-bin make: Entering directory '/home/acme/git/linux/tools/perf' BUILD: Doing 'make -j4' parallel build Warning: tools/include/uapi/linux/bpf.h differs from kernel Warning: tools/arch/arm/include/uapi/asm/kvm.h differs from kernel INSTALL GTK UI LINK /tmp/build/perf/perf /tmp/build/perf/libperf.a(libperf-in.o): In function `perf::createCompilerInvocation(llvm::SmallVector, llvm::StringRef&, clang::DiagnosticsEngine&)': /home/acme/git/linux/tools/perf/util/c++/clang.cpp:56: undefined reference to `clang::tooling::newInvocation(clang::DiagnosticsEngine*, llvm::SmallVector const&)' /tmp/build/perf/libperf.a(libperf-in.o): In function `perf::getModuleFromSource(llvm::SmallVector, llvm::StringRef, llvm::IntrusiveRefCntPtr)': /home/acme/git/linux/tools/perf/util/c++/clang.cpp:68: undefined reference to `clang::CompilerInstance::CompilerInstance(std::shared_ptr, bool)' /home/acme/git/linux/tools/perf/util/c++/clang.cpp:69: undefined reference to `clang::CompilerInstance::createDiagnostics(clang::DiagnosticConsumer*, bool)' After: Makefile.config:807: No suitable libLLVM found, disabling builtin clang and llvm support. Please install llvm-dev(el) (>= 3.9.0) Updating the environment to a locally built LLVM 4.0 + clang 3.9 (forgot to git pull, duh) combo, all works as expected, it is properly detected and built into the resulting perf binary. Signed-off-by: Wang Nan Reported-and-Tested-by: Arnaldo Carvalho de Melo Cc: Alexei Starovoitov Cc: He Kuang Cc: Jiri Olsa Cc: Joe Stringer Cc: Zefan Li Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/20161206072230.7651-1-wangnan0@huawei.com [ Change the warning message a bit (add 'suitable' and 'builtin'), clarifying it, see committer notes above ] Signed-off-by: Arnaldo Carvalho de Melo --- tools/build/feature/Makefile | 8 ++++++-- tools/build/feature/test-llvm-version.cpp | 11 +++++++++++ tools/build/feature/test-llvm.cpp | 5 +++++ tools/perf/Makefile.config | 8 ++++++-- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile index 303196c..b564a2e 100644 --- a/tools/build/feature/Makefile +++ b/tools/build/feature/Makefile @@ -231,14 +231,18 @@ $(OUTPUT)test-jvmti.bin: $(BUILD) $(OUTPUT)test-llvm.bin: - $(BUILDXX) -std=gnu++11 \ + $(BUILDXX) -std=gnu++11 \ -I$(shell $(LLVM_CONFIG) --includedir) \ -L$(shell $(LLVM_CONFIG) --libdir) \ $(shell $(LLVM_CONFIG) --libs Core BPF) \ $(shell $(LLVM_CONFIG) --system-libs) +$(OUTPUT)test-llvm-version.bin: + $(BUILDXX) -std=gnu++11 \ + -I$(shell $(LLVM_CONFIG) --includedir) + $(OUTPUT)test-clang.bin: - $(BUILDXX) -std=gnu++11 \ + $(BUILDXX) -std=gnu++11 \ -I$(shell $(LLVM_CONFIG) --includedir) \ -L$(shell $(LLVM_CONFIG) --libdir) \ -Wl,--start-group -lclangBasic -lclangDriver \ diff --git a/tools/build/feature/test-llvm-version.cpp b/tools/build/feature/test-llvm-version.cpp new file mode 100644 index 0000000..896d317 --- /dev/null +++ b/tools/build/feature/test-llvm-version.cpp @@ -0,0 +1,11 @@ +#include +#include "llvm/Config/llvm-config.h" + +#define NUM_VERSION (((LLVM_VERSION_MAJOR) << 16) + (LLVM_VERSION_MINOR << 8) + LLVM_VERSION_PATCH) +#define pass int main() {printf("%x\n", NUM_VERSION); return 0;} + +#if NUM_VERSION >= 0x030900 +pass +#else +# error This LLVM is not tested yet. +#endif diff --git a/tools/build/feature/test-llvm.cpp b/tools/build/feature/test-llvm.cpp index d8d2cee..455a332 100644 --- a/tools/build/feature/test-llvm.cpp +++ b/tools/build/feature/test-llvm.cpp @@ -1,5 +1,10 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/raw_ostream.h" +#define NUM_VERSION (((LLVM_VERSION_MAJOR) << 16) + (LLVM_VERSION_MINOR << 8) + LLVM_VERSION_PATCH) + +#if NUM_VERSION < 0x030900 +# error "LLVM version too low" +#endif int main() { llvm::errs() << "Hello World!\n"; diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config index 09c2a98..76c84f0 100644 --- a/tools/perf/Makefile.config +++ b/tools/perf/Makefile.config @@ -802,12 +802,13 @@ ifdef LIBCLANGLLVM msg := $(warning No g++ found, disable clang and llvm support. Please install g++) else $(call feature_check,llvm) + $(call feature_check,llvm-version) ifneq ($(feature-llvm), 1) - msg := $(warning No libLLVM found, disable clang and llvm support. Please install llvm-dev) + msg := $(warning No suitable libLLVM found, disabling builtin clang and LLVM support. Please install llvm-dev(el) (>= 3.9.0)) else $(call feature_check,clang) ifneq ($(feature-clang), 1) - msg := $(warning No libclang found, disable clang and llvm support. Please install libclang-dev) + msg := $(warning No suitable libclang found, disabling builtin clang and LLVM support. Please install libclang-dev(el) (>= 3.9.0)) else CFLAGS += -DHAVE_LIBCLANGLLVM_SUPPORT CXXFLAGS += -DHAVE_LIBCLANGLLVM_SUPPORT -I$(shell $(LLVM_CONFIG) --includedir) @@ -816,6 +817,9 @@ ifdef LIBCLANGLLVM USE_CXX = 1 USE_LLVM = 1 USE_CLANG = 1 + ifneq ($(feature-llvm-version),1) + msg := $(warning This version of LLVM is not tested. May cause build errors) + endif endif endif endif