Skip to content
  • Wang Nan's avatar
    perf build: Check LLVM version in feature check · a940cad3
    Wang Nan authored
    
    
    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: default avatarWang Nan <wangnan0@huawei.com>
    Reported-and-Tested-by: default avatarArnaldo 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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    a940cad3