Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753368AbcLFODF (ORCPT ); Tue, 6 Dec 2016 09:03:05 -0500 Received: from mail.kernel.org ([198.145.29.136]:46296 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753239AbcLFODC (ORCPT ); Tue, 6 Dec 2016 09:03:02 -0500 Date: Tue, 6 Dec 2016 11:02:56 -0300 From: Arnaldo Carvalho de Melo To: Wang Nan Cc: linux-kernel@vger.kernel.org, Alexei Starovoitov , Arnaldo Carvalho de Melo , He Kuang , Jiri Olsa , Joe Stringer , Zefan Li , pi3orama@163.com Subject: Re: [PATCH v4 01/18 -cleanup] perf build: Check LLVM version in feature check Message-ID: <20161206140256.GF28260@kernel.org> References: <20161206071356.5312-2-wangnan0@huawei.com> <20161206072230.7651-1-wangnan0@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20161206072230.7651-1-wangnan0@huawei.com> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.7.1 (2016-10-04) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4930 Lines: 126 Em Tue, Dec 06, 2016 at 07:22:30AM +0000, Wang Nan escreveu: > 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. Ok, did a few clarifications in the warning message and tested it with a f25 kit, i.e. clang/LLVM 3.8, all seems ok now, please see: https://git.kernel.org/cgit/linux/kernel/git/acme/linux.git/commit/?h=perf/core&id=464cf82b6c9304e981f3af831ca8ab608e862687 For my case, I end up getting this message: Makefile.config:807: No suitable libLLVM found, disabling builtin clang and LLVM support. Please install llvm-dev(el) (>= 3.9.0) Please holler if it is in any way misleading or erroneous. - Arnaldo > Signed-off-by: Wang Nan > Cc: Alexei Starovoitov > Cc: Arnaldo Carvalho de Melo > Cc: He Kuang > Cc: Jiri Olsa > Cc: Joe Stringer > Cc: Zefan Li > Cc: pi3orama@163.com > --- > 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(-) > create mode 100644 tools/build/feature/test-llvm-version.cpp > > 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..2f4d5b0 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 libLLVM found, disable clang and llvm support. Please install llvm-dev (>= 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 libclang found, disable clang and llvm support. Please install libclang-dev (>= 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 building error) > + endif > endif > endif > endif > -- > 2.10.1