diff options
author | Vicent Marti <tanoku@gmail.com> | 2016-04-20 13:24:54 +0200 |
---|---|---|
committer | Vicent Marti <tanoku@gmail.com> | 2016-04-20 13:24:54 +0200 |
commit | 0612db5fff2f2b14349fa8c9ce55e42ff1d5ea51 (patch) | |
tree | b1c19081f0bcebf8ebff085ac9f24d2589ddf269 | |
parent | ff9ff5d6eed016372c590cd2ddde8dd312ddf21d (diff) | |
download | bcc-0612db5fff2f2b14349fa8c9ce55e42ff1d5ea51.tar.gz |
cmake: Add dependency to LibELF
Add a new a `FindLibElf.cmake` package, and use it to link the main
`libbcc` library against the system's LibELF. This library will be used
to re-implement functionality that was previously dependent on
`binutils`.
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | cmake/FindLibElf.cmake | 64 | ||||
-rw-r--r-- | src/cc/CMakeLists.txt | 5 |
3 files changed, 69 insertions, 2 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 607f279c..76087019 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,6 +47,8 @@ if(NOT DEFINED BCC_KERNEL_MODULES_DIR) set(BCC_KERNEL_MODULES_DIR "/lib/modules") endif() +find_package(LibElf REQUIRED) + # Set to non-zero if system installs kernel headers with split source and build # directories in /lib/modules/`uname -r`/. This is the case for debian and # suse, to the best of my knowledge. diff --git a/cmake/FindLibElf.cmake b/cmake/FindLibElf.cmake new file mode 100644 index 00000000..8968b3e8 --- /dev/null +++ b/cmake/FindLibElf.cmake @@ -0,0 +1,64 @@ +# - Try to find libelf +# Once done this will define +# +# LIBELF_FOUND - system has libelf +# LIBELF_INCLUDE_DIRS - the libelf include directory +# LIBELF_LIBRARIES - Link these to use libelf +# LIBELF_DEFINITIONS - Compiler switches required for using libelf +# +# Copyright (c) 2008 Bernhard Walle <bernhard.walle@gmx.de> +# +# Redistribution and use is allowed according to the terms of the New +# BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# + + +if (LIBELF_LIBRARIES AND LIBELF_INCLUDE_DIRS) + set (LibElf_FIND_QUIETLY TRUE) +endif (LIBELF_LIBRARIES AND LIBELF_INCLUDE_DIRS) + +find_path (LIBELF_INCLUDE_DIRS + NAMES + libelf.h + PATHS + /usr/include + /usr/include/libelf + /usr/local/include + /usr/local/include/libelf + /opt/local/include + /opt/local/include/libelf + /sw/include + /sw/include/libelf + ENV CPATH) + +find_library (LIBELF_LIBRARIES + NAMES + elf + PATHS + /usr/lib + /usr/local/lib + /opt/local/lib + /sw/lib + ENV LIBRARY_PATH + ENV LD_LIBRARY_PATH) + +include (FindPackageHandleStandardArgs) + + +# handle the QUIETLY and REQUIRED arguments and set LIBELF_FOUND to TRUE if all listed variables are TRUE +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibElf DEFAULT_MSG + LIBELF_LIBRARIES + LIBELF_INCLUDE_DIRS) + +SET(CMAKE_REQUIRED_LIBRARIES elf) +INCLUDE(CheckCXXSourceCompiles) +CHECK_CXX_SOURCE_COMPILES("#include <libelf.h> +int main() { + Elf *e = (Elf*)0; + size_t sz; + elf_getshdrstrndx(e, &sz); + return 0; +}" ELF_GETSHDRSTRNDX) + +mark_as_advanced(LIBELF_INCLUDE_DIRS LIBELF_LIBRARIES ELF_GETSHDRSTRNDX) diff --git a/src/cc/CMakeLists.txt b/src/cc/CMakeLists.txt index 73a5b855..7be775cc 100644 --- a/src/cc/CMakeLists.txt +++ b/src/cc/CMakeLists.txt @@ -8,6 +8,7 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR}/frontends/b) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/frontends/b) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/frontends/clang) include_directories(${LLVM_INCLUDE_DIRS}) +include_directories(${LIBELF_INCLUDE_DIRS}) # todo: if check for kernel version include_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat) add_definitions(${LLVM_DEFINITIONS}) @@ -52,8 +53,8 @@ set(clang_libs ${libclangFrontend} ${libclangSerialization} ${libclangDriver} ${ ${libclangAST} ${libclangLex} ${libclangBasic}) # Link against LLVM libraries -target_link_libraries(bcc-shared b_frontend clang_frontend ${clang_libs} ${expanded_libs}) -target_link_libraries(bcc-static b_frontend clang_frontend bcc-loader-static ${clang_libs} ${expanded_libs}) +target_link_libraries(bcc-shared b_frontend clang_frontend ${clang_libs} ${expanded_libs} ${LIBELF_LIBRARIES}) +target_link_libraries(bcc-static b_frontend clang_frontend bcc-loader-static ${clang_libs} ${expanded_libs} ${LIBELF_LIBRARIES}) install(TARGETS bcc-shared LIBRARY COMPONENT libbcc DESTINATION ${CMAKE_INSTALL_LIBDIR}) |