# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception # # Copyright 2023 Google LLC # # Licensed under the Apache License v2.0 with LLVM Exceptions (the "License"); # you may not use this file except in compliance with the License. You may # obtain a copy of the License at # # https://llvm.org/LICENSE.txt # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. # # Author: Aleksei Vetrov #[=======================================================================[.rst: FindLibElf ---------- Finds the ELF processing library (libelf). Imported Targets ^^^^^^^^^^^^^^^^ This module provides the following imported targets, if found: ``LibElf::LibElf`` The LibElf library Result Variables ^^^^^^^^^^^^^^^^ This will define the following variables: ``LibElf_FOUND`` True if the system has the LibElf library. ``LibElf_VERSION`` The version of the LibElf library which was found. ``LibElf_INCLUDE_DIRS`` Include directories needed to use LibElf. ``LibElf_LIBRARIES`` Libraries needed to link to LibElf. ``LibElf_DEFINITIONS`` the compiler switches required for using LibElf Cache Variables ^^^^^^^^^^^^^^^ The following cache variables may also be set: ``LibElf_INCLUDE_DIR`` The directory containing ``libelf.h``. ``LibElf_LIBRARY`` The path to the ``libelf.so``. #]=======================================================================] find_package(PkgConfig) pkg_check_modules(PC_LibElf QUIET libelf) find_library( LibElf_LIBRARY NAMES elf HINTS ${PC_LibElf_LIBDIR} ${PC_LibElf_LIBRARY_DIRS}) # Try the value from user if the library is not found. if(DEFINED LibElf_LIBRARIES AND NOT DEFINED LibElf_LIBRARY) set(LibElf_LIBRARY ${LibElf_LIBRARIES}) endif() mark_as_advanced(LibElf_LIBRARY) find_path( LibElf_INCLUDE_DIR NAMES libelf.h HINTS ${PC_LibElf_INCLUDEDIR} ${PC_LibElf_INCLUDE_DIRS}) # Try the value from user if the library is not found. if(DEFINED LibElf_INCLUDE_DIRS AND NOT DEFINED LibElf_INCLUDE_DIR) set(LibElf_INCLUDE_DIR ${LibElf_INCLUDE_DIRS}) endif() mark_as_advanced(LibElf_INCLUDE_DIR) set(LibElf_VERSION ${PC_LibElf_VERSION}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args( LibElf REQUIRED_VARS LibElf_LIBRARY LibElf_INCLUDE_DIR VERSION_VAR LibElf_VERSION) if(LibElf_FOUND) set(LibElf_LIBRARIES ${LibElf_LIBRARY}) set(LibElf_INCLUDE_DIRS ${LibElf_INCLUDE_DIR}) set(LibElf_DEFINITIONS ${PC_LibElf_CFLAGS_OTHER}) endif() if(LibElf_FOUND AND NOT TARGET LibElf::LibElf) add_library(LibElf::LibElf UNKNOWN IMPORTED) set_target_properties( LibElf::LibElf PROPERTIES IMPORTED_LOCATION "${LibElf_LIBRARY}" INTERFACE_COMPILE_OPTIONS "${PC_LibElf_CFLAGS_OTHER}" INTERFACE_INCLUDE_DIRECTORIES "${LibElf_INCLUDE_DIR}") endif()