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

2016-12-06 Thread Arnaldo Carvalho de Melo
Em Tue, Dec 06, 2016 at 07:22:30AM +, 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=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: pi3or...@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 000..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 

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

2016-12-06 Thread Arnaldo Carvalho de Melo
Em Tue, Dec 06, 2016 at 07:22:30AM +, 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=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: pi3or...@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 000..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)
> 

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

2016-12-05 Thread Wang Nan
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 
Cc: Alexei Starovoitov 
Cc: Arnaldo Carvalho de Melo 
Cc: He Kuang 
Cc: Jiri Olsa 
Cc: Joe Stringer 
Cc: Zefan Li 
Cc: pi3or...@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 000..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



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

2016-12-05 Thread Wang Nan
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 
Cc: Alexei Starovoitov 
Cc: Arnaldo Carvalho de Melo 
Cc: He Kuang 
Cc: Jiri Olsa 
Cc: Joe Stringer 
Cc: Zefan Li 
Cc: pi3or...@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 000..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