All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Wang Nan <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
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
Subject: [tip:perf/core] perf build: Check LLVM version in feature check
Date: Wed, 7 Dec 2016 10:22:06 -0800	[thread overview]
Message-ID: <tip-a940cad331e79cc03d9ae74f56a2c7cb810bdce9@git.kernel.org> (raw)
In-Reply-To: <20161206072230.7651-1-wangnan0@huawei.com>

Commit-ID:  a940cad331e79cc03d9ae74f56a2c7cb810bdce9
Gitweb:     http://git.kernel.org/tip/a940cad331e79cc03d9ae74f56a2c7cb810bdce9
Author:     Wang Nan <wangnan0@huawei.com>
AuthorDate: Tue, 6 Dec 2016 07:22:30 +0000
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
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<char const*, 16u>, 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<char const*, 16u> const&)'
  /tmp/build/perf/libperf.a(libperf-in.o): In function `perf::getModuleFromSource(llvm::SmallVector<char const*, 16u>, llvm::StringRef, llvm::IntrusiveRefCntPtr<clang::vfs::FileSystem>)':
  /home/acme/git/linux/tools/perf/util/c++/clang.cpp:68: undefined reference to `clang::CompilerInstance::CompilerInstance(std::shared_ptr<clang::PCHContainerOperations>, bool)'
  /home/acme/git/linux/tools/perf/util/c++/clang.cpp:69: undefined reference to `clang::CompilerInstance::createDiagnostics(clang::DiagnosticConsumer*, bool)'
  <SNIP>

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 <wangnan0@huawei.com>
Reported-and-Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexei Starovoitov <ast@fb.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
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 <acme@redhat.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(-)

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

  parent reply	other threads:[~2016-12-07 18:22 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-06  7:13 [PATCH v4 00/18] perf clang: Builtin clang and perfhook support Wang Nan
2016-12-06  7:13 ` [PATCH v4 01/18] perf build: Check LLVM version in feature check Wang Nan
2016-12-06  7:20   ` Wangnan (F)
2016-12-06  7:22   ` [PATCH v4 01/18 -cleanup] " Wang Nan
2016-12-06 14:02     ` Arnaldo Carvalho de Melo
2016-12-07 18:22     ` tip-bot for Wang Nan [this message]
2016-12-06  7:13 ` [PATCH v4 02/18] perf build: Support dynamic linking clang libraries Wang Nan
2016-12-06  7:13 ` [PATCH v4 03/18] perf clang: Cleanup clang options Wang Nan
2016-12-06  7:13 ` [PATCH v4 04/18] perf clang: Pass full path to builtin clang Wang Nan
2016-12-06  7:13 ` [PATCH v4 05/18] perf clang: Pass CFLAGS " Wang Nan
2016-12-06  7:13 ` [PATCH v4 06/18] perf clang jit: Wrap llvm::Module using PerfModule Wang Nan
2016-12-06  7:13 ` [PATCH v4 07/18] perf clang jit: Insignt BPF and JIT functions in a Module Wang Nan
2016-12-06  7:13 ` [PATCH v4 08/18] perf clang jit: add PerfModule::doJIT to JIT perfhook functions Wang Nan
2016-12-06  7:13 ` [PATCH v4 09/18] perf clang jit: Export functions for jitted code Wang Nan
2016-12-06  7:13 ` [PATCH v4 10/18] perf clang jit: Actually JIT and hook in bpf loader Wang Nan
2016-12-06  7:13 ` [PATCH v4 11/18] perf clang jit: Collect the lowest address in maps section as map_base Wang Nan
2016-12-06  7:13 ` [PATCH v4 12/18] perf clang jit: Retrive fd of BPF map from its offset Wang Nan
2016-12-06  7:13 ` [PATCH v4 13/18] perf clang jit: Allow jitted perf hook access BPF maps Wang Nan
2016-12-06  7:13 ` [PATCH v4 14/18] perf clang: Link BPF functions declaration into perf Wang Nan
2016-12-06  7:13 ` [PATCH v4 15/18] perf clang: Declare BPF functions for BPF scripts automatically Wang Nan
2016-12-06  7:13 ` [PATCH v4 16/18] perf clang: Include helpers to BPF scripts Wang Nan
2016-12-06  7:13 ` [PATCH v4 17/18] perf clang builtin: Define hook helpers by default Wang Nan
2016-12-06  7:13 ` [PATCH v4 18/18] perf clang jit: Export getpid() to perf hook Wang Nan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=tip-a940cad331e79cc03d9ae74f56a2c7cb810bdce9@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=acme@redhat.com \
    --cc=ast@fb.com \
    --cc=hekuang@huawei.com \
    --cc=hpa@zytor.com \
    --cc=joe@ovn.org \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=lizefan@huawei.com \
    --cc=mingo@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=wangnan0@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.