1*9e3b08aeSAndroid Build Coastguard Worker# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 2*9e3b08aeSAndroid Build Coastguard Worker# 3*9e3b08aeSAndroid Build Coastguard Worker# Copyright 2023 Google LLC 4*9e3b08aeSAndroid Build Coastguard Worker# 5*9e3b08aeSAndroid Build Coastguard Worker# Licensed under the Apache License v2.0 with LLVM Exceptions (the "License"); 6*9e3b08aeSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. You may 7*9e3b08aeSAndroid Build Coastguard Worker# obtain a copy of the License at 8*9e3b08aeSAndroid Build Coastguard Worker# 9*9e3b08aeSAndroid Build Coastguard Worker# https://llvm.org/LICENSE.txt 10*9e3b08aeSAndroid Build Coastguard Worker# 11*9e3b08aeSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*9e3b08aeSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 13*9e3b08aeSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 14*9e3b08aeSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under 15*9e3b08aeSAndroid Build Coastguard Worker# the License. 16*9e3b08aeSAndroid Build Coastguard Worker# 17*9e3b08aeSAndroid Build Coastguard Worker# Author: Aleksei Vetrov 18*9e3b08aeSAndroid Build Coastguard Worker 19*9e3b08aeSAndroid Build Coastguard Worker#[=======================================================================[.rst: 20*9e3b08aeSAndroid Build Coastguard WorkerFindLibElf 21*9e3b08aeSAndroid Build Coastguard Worker---------- 22*9e3b08aeSAndroid Build Coastguard Worker 23*9e3b08aeSAndroid Build Coastguard WorkerFinds the ELF processing library (libelf). 24*9e3b08aeSAndroid Build Coastguard Worker 25*9e3b08aeSAndroid Build Coastguard WorkerImported Targets 26*9e3b08aeSAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^ 27*9e3b08aeSAndroid Build Coastguard Worker 28*9e3b08aeSAndroid Build Coastguard WorkerThis module provides the following imported targets, if found: 29*9e3b08aeSAndroid Build Coastguard Worker 30*9e3b08aeSAndroid Build Coastguard Worker``LibElf::LibElf`` 31*9e3b08aeSAndroid Build Coastguard Worker The LibElf library 32*9e3b08aeSAndroid Build Coastguard Worker 33*9e3b08aeSAndroid Build Coastguard WorkerResult Variables 34*9e3b08aeSAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^ 35*9e3b08aeSAndroid Build Coastguard Worker 36*9e3b08aeSAndroid Build Coastguard WorkerThis will define the following variables: 37*9e3b08aeSAndroid Build Coastguard Worker 38*9e3b08aeSAndroid Build Coastguard Worker``LibElf_FOUND`` 39*9e3b08aeSAndroid Build Coastguard Worker True if the system has the LibElf library. 40*9e3b08aeSAndroid Build Coastguard Worker``LibElf_VERSION`` 41*9e3b08aeSAndroid Build Coastguard Worker The version of the LibElf library which was found. 42*9e3b08aeSAndroid Build Coastguard Worker``LibElf_INCLUDE_DIRS`` 43*9e3b08aeSAndroid Build Coastguard Worker Include directories needed to use LibElf. 44*9e3b08aeSAndroid Build Coastguard Worker``LibElf_LIBRARIES`` 45*9e3b08aeSAndroid Build Coastguard Worker Libraries needed to link to LibElf. 46*9e3b08aeSAndroid Build Coastguard Worker``LibElf_DEFINITIONS`` 47*9e3b08aeSAndroid Build Coastguard Worker the compiler switches required for using LibElf 48*9e3b08aeSAndroid Build Coastguard Worker 49*9e3b08aeSAndroid Build Coastguard WorkerCache Variables 50*9e3b08aeSAndroid Build Coastguard Worker^^^^^^^^^^^^^^^ 51*9e3b08aeSAndroid Build Coastguard Worker 52*9e3b08aeSAndroid Build Coastguard WorkerThe following cache variables may also be set: 53*9e3b08aeSAndroid Build Coastguard Worker 54*9e3b08aeSAndroid Build Coastguard Worker``LibElf_INCLUDE_DIR`` 55*9e3b08aeSAndroid Build Coastguard Worker The directory containing ``libelf.h``. 56*9e3b08aeSAndroid Build Coastguard Worker``LibElf_LIBRARY`` 57*9e3b08aeSAndroid Build Coastguard Worker The path to the ``libelf.so``. 58*9e3b08aeSAndroid Build Coastguard Worker 59*9e3b08aeSAndroid Build Coastguard Worker#]=======================================================================] 60*9e3b08aeSAndroid Build Coastguard Worker 61*9e3b08aeSAndroid Build Coastguard Workerfind_package(PkgConfig) 62*9e3b08aeSAndroid Build Coastguard Workerpkg_check_modules(PC_LibElf QUIET libelf) 63*9e3b08aeSAndroid Build Coastguard Worker 64*9e3b08aeSAndroid Build Coastguard Workerfind_library( 65*9e3b08aeSAndroid Build Coastguard Worker LibElf_LIBRARY 66*9e3b08aeSAndroid Build Coastguard Worker NAMES elf 67*9e3b08aeSAndroid Build Coastguard Worker HINTS ${PC_LibElf_LIBDIR} ${PC_LibElf_LIBRARY_DIRS}) 68*9e3b08aeSAndroid Build Coastguard Worker# Try the value from user if the library is not found. 69*9e3b08aeSAndroid Build Coastguard Workerif(DEFINED LibElf_LIBRARIES AND NOT DEFINED LibElf_LIBRARY) 70*9e3b08aeSAndroid Build Coastguard Worker set(LibElf_LIBRARY ${LibElf_LIBRARIES}) 71*9e3b08aeSAndroid Build Coastguard Workerendif() 72*9e3b08aeSAndroid Build Coastguard Workermark_as_advanced(LibElf_LIBRARY) 73*9e3b08aeSAndroid Build Coastguard Worker 74*9e3b08aeSAndroid Build Coastguard Workerfind_path( 75*9e3b08aeSAndroid Build Coastguard Worker LibElf_INCLUDE_DIR 76*9e3b08aeSAndroid Build Coastguard Worker NAMES libelf.h 77*9e3b08aeSAndroid Build Coastguard Worker HINTS ${PC_LibElf_INCLUDEDIR} ${PC_LibElf_INCLUDE_DIRS}) 78*9e3b08aeSAndroid Build Coastguard Worker# Try the value from user if the library is not found. 79*9e3b08aeSAndroid Build Coastguard Workerif(DEFINED LibElf_INCLUDE_DIRS AND NOT DEFINED LibElf_INCLUDE_DIR) 80*9e3b08aeSAndroid Build Coastguard Worker set(LibElf_INCLUDE_DIR ${LibElf_INCLUDE_DIRS}) 81*9e3b08aeSAndroid Build Coastguard Workerendif() 82*9e3b08aeSAndroid Build Coastguard Workermark_as_advanced(LibElf_INCLUDE_DIR) 83*9e3b08aeSAndroid Build Coastguard Worker 84*9e3b08aeSAndroid Build Coastguard Workerset(LibElf_VERSION ${PC_LibElf_VERSION}) 85*9e3b08aeSAndroid Build Coastguard Worker 86*9e3b08aeSAndroid Build Coastguard Workerinclude(FindPackageHandleStandardArgs) 87*9e3b08aeSAndroid Build Coastguard Workerfind_package_handle_standard_args( 88*9e3b08aeSAndroid Build Coastguard Worker LibElf 89*9e3b08aeSAndroid Build Coastguard Worker REQUIRED_VARS LibElf_LIBRARY LibElf_INCLUDE_DIR 90*9e3b08aeSAndroid Build Coastguard Worker VERSION_VAR LibElf_VERSION) 91*9e3b08aeSAndroid Build Coastguard Worker 92*9e3b08aeSAndroid Build Coastguard Workerif(LibElf_FOUND) 93*9e3b08aeSAndroid Build Coastguard Worker set(LibElf_LIBRARIES ${LibElf_LIBRARY}) 94*9e3b08aeSAndroid Build Coastguard Worker set(LibElf_INCLUDE_DIRS ${LibElf_INCLUDE_DIR}) 95*9e3b08aeSAndroid Build Coastguard Worker set(LibElf_DEFINITIONS ${PC_LibElf_CFLAGS_OTHER}) 96*9e3b08aeSAndroid Build Coastguard Workerendif() 97*9e3b08aeSAndroid Build Coastguard Worker 98*9e3b08aeSAndroid Build Coastguard Workerif(LibElf_FOUND AND NOT TARGET LibElf::LibElf) 99*9e3b08aeSAndroid Build Coastguard Worker add_library(LibElf::LibElf UNKNOWN IMPORTED) 100*9e3b08aeSAndroid Build Coastguard Worker set_target_properties( 101*9e3b08aeSAndroid Build Coastguard Worker LibElf::LibElf 102*9e3b08aeSAndroid Build Coastguard Worker PROPERTIES IMPORTED_LOCATION "${LibElf_LIBRARY}" 103*9e3b08aeSAndroid Build Coastguard Worker INTERFACE_COMPILE_OPTIONS "${PC_LibElf_CFLAGS_OTHER}" 104*9e3b08aeSAndroid Build Coastguard Worker INTERFACE_INCLUDE_DIRECTORIES "${LibElf_INCLUDE_DIR}") 105*9e3b08aeSAndroid Build Coastguard Workerendif() 106