aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2016-04-20 13:24:54 +0200
committerVicent Marti <tanoku@gmail.com>2016-04-20 13:24:54 +0200
commit0612db5fff2f2b14349fa8c9ce55e42ff1d5ea51 (patch)
treeb1c19081f0bcebf8ebff085ac9f24d2589ddf269
parentff9ff5d6eed016372c590cd2ddde8dd312ddf21d (diff)
downloadbcc-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.txt2
-rw-r--r--cmake/FindLibElf.cmake64
-rw-r--r--src/cc/CMakeLists.txt5
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})