lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20161206140256.GF28260@kernel.org>
Date:   Tue, 6 Dec 2016 11:02:56 -0300
From:   Arnaldo Carvalho de Melo <acme@...nel.org>
To:     Wang Nan <wangnan0@...wei.com>
Cc:     linux-kernel@...r.kernel.org, Alexei Starovoitov <ast@...com>,
        Arnaldo Carvalho de Melo <acme@...hat.com>,
        He Kuang <hekuang@...wei.com>, Jiri Olsa <jolsa@...nel.org>,
        Joe Stringer <joe@....org>, Zefan Li <lizefan@...wei.com>,
        pi3orama@....com
Subject: Re: [PATCH v4 01/18 -cleanup] perf build: Check LLVM version in
 feature check

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 <wangnan0@...wei.com>
> Cc: Alexei Starovoitov <ast@...com>
> Cc: Arnaldo Carvalho de Melo <acme@...hat.com>
> Cc: He Kuang <hekuang@...wei.com>
> Cc: Jiri Olsa <jolsa@...nel.org>
> Cc: Joe Stringer <joe@....org>
> Cc: Zefan Li <lizefan@...wei.com>
> Cc: pi3orama@....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 <cstdio>
> +#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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ