summaryrefslogtreecommitdiff
path: root/cmake/Findelfutils.cmake
diff options
context:
space:
mode:
authorCristian Adam <cristian.adam@qt.io>2020-01-24 17:09:56 +0100
committerCristian Adam <cristian.adam@qt.io>2020-01-28 14:18:19 +0000
commite6e0b0ca3bf77826e2ce2ca05776f2809f99931d (patch)
tree02f8b546f0633c75a1db1dd34f364ee1d3f185ec /cmake/Findelfutils.cmake
parent4da23c74910611ed99d18f9dfc8ff12194cbfd52 (diff)
downloadqt-creator-e6e0b0ca3bf77826e2ce2ca05776f2809f99931d.tar.gz
CMake Build: add perfparser
Change-Id: Ib16548befefbb827f2752300f9e67da3cf91570c Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Diffstat (limited to 'cmake/Findelfutils.cmake')
-rw-r--r--cmake/Findelfutils.cmake70
1 files changed, 70 insertions, 0 deletions
diff --git a/cmake/Findelfutils.cmake b/cmake/Findelfutils.cmake
new file mode 100644
index 0000000000..b4d043d53e
--- /dev/null
+++ b/cmake/Findelfutils.cmake
@@ -0,0 +1,70 @@
+#.rst:
+# Findelfutils
+# -----------------
+#
+# Try to locate the elfutils binary installation
+#
+# The ``ELFUTILS_INSTALL_DIR`` (CMake or Environment) variable should be used
+# to pinpoint the elfutils binary installation
+#
+# If found, this will define the following variables:
+#
+# ``elfutils_FOUND``
+# True if the elfutils header and library files have been found
+#
+# ``elfutils::dw``
+# ``elfutils::elf``
+# Imported targets containing the includes and libraries need to build
+# against
+#
+
+if (TARGET elfutils::dw AND TARGET elfutils::elf)
+ set(elfutils_FOUND TRUE)
+ return()
+endif()
+
+find_path(ELFUTILS_INCLUDE_DIR
+ NAMES libdwfl.h elfutils/libdwfl.h
+ PATH_SUFFIXES include
+ HINTS
+ "${ELFUTILS_INSTALL_DIR}" ENV ELFUTILS_INSTALL_DIR
+)
+
+foreach(lib dw elf eu_compat)
+ find_library(ELFUTILS_LIB_${lib}
+ NAMES ${lib}
+ PATH_SUFFIXES lib
+ HINTS
+ "${ELFUTILS_INSTALL_DIR}" ENV ELFUTILS_INSTALL_DIR
+ )
+endforeach()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(elfutils
+ DEFAULT_MSG
+ ELFUTILS_INCLUDE_DIR ELFUTILS_LIB_dw ELFUTILS_LIB_elf
+)
+
+if(elfutils_FOUND)
+ foreach(lib dw elf)
+ if (NOT TARGET elfutils::${lib})
+ add_library(elfutils::${lib} UNKNOWN IMPORTED)
+ set_target_properties(elfutils::${lib}
+ PROPERTIES
+ IMPORTED_LOCATION "${ELFUTILS_LIB_${lib}}"
+ INTERFACE_INCLUDE_DIRECTORIES
+ "${ELFUTILS_INCLUDE_DIR};${ELFUTILS_INCLUDE_DIR}/elfutils"
+ )
+ if (ELFUTILS_LIB_eu_compat)
+ target_link_libraries(elfutils::${lib} INTERFACE ${ELFUTILS_LIB_eu_compat})
+ endif()
+ endif()
+ endforeach()
+endif()
+
+mark_as_advanced(ELFUTILS_INCLUDE_DIR ELFUTILS_LIB_elf ELFUTILS_LIB_dw)
+
+include(FeatureSummary)
+set_package_properties(elfutils PROPERTIES
+ URL "https://sourceware.org/elfutils/"
+ DESCRIPTION "a collection of utilities and libraries to read, create and modify ELF binary files")