[v4,01/18,-cleanup] perf build: Check LLVM version in feature check

Message ID 20161206072230.7651-1-wangnan0@huawei.com
State New
Headers show

Commit Message

Wang Nan Dec. 6, 2016, 7:22 a.m.
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.

Signed-off-by: Wang Nan <wangnan0@huawei.com>

Cc: Alexei Starovoitov <ast@fb.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: He Kuang <hekuang@huawei.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Joe Stringer <joe@ovn.org>
Cc: Zefan Li <lizefan@huawei.com>
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

-- 
2.10.1

Comments

Arnaldo Carvalho de Melo Dec. 6, 2016, 2:02 p.m. | #1
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@huawei.com>

> Cc: Alexei Starovoitov <ast@fb.com>

> Cc: Arnaldo Carvalho de Melo <acme@redhat.com>

> Cc: He Kuang <hekuang@huawei.com>

> Cc: Jiri Olsa <jolsa@kernel.org>

> Cc: Joe Stringer <joe@ovn.org>

> Cc: Zefan Li <lizefan@huawei.com>

> 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 <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

Patch

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