xref: /aosp_15_r20/external/stg/cmake/FindLibDw.cmake (revision 9e3b08ae94a55201065475453d799e8b1378bea6)
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 WorkerFindLibDw
21*9e3b08aeSAndroid Build Coastguard Worker---------
22*9e3b08aeSAndroid Build Coastguard Worker
23*9e3b08aeSAndroid Build Coastguard WorkerFinds the DWARF processing library (libdw).
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``LibDw::LibDw``
31*9e3b08aeSAndroid Build Coastguard Worker  The LibDw 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``LibDw_FOUND``
39*9e3b08aeSAndroid Build Coastguard Worker  True if the system has the LibDw library.
40*9e3b08aeSAndroid Build Coastguard Worker``LibDw_VERSION``
41*9e3b08aeSAndroid Build Coastguard Worker  The version of the LibDw library which was found.
42*9e3b08aeSAndroid Build Coastguard Worker``LibDw_INCLUDE_DIRS``
43*9e3b08aeSAndroid Build Coastguard Worker  Include directories needed to use LibDw.
44*9e3b08aeSAndroid Build Coastguard Worker``LibDw_LIBRARIES``
45*9e3b08aeSAndroid Build Coastguard Worker  Libraries needed to link to LibDw.
46*9e3b08aeSAndroid Build Coastguard Worker``LibDw_DEFINITIONS``
47*9e3b08aeSAndroid Build Coastguard Worker  the compiler switches required for using LibDw
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``LibDw_INCLUDE_DIR``
55*9e3b08aeSAndroid Build Coastguard Worker  The directory containing ``dwarf.h``.
56*9e3b08aeSAndroid Build Coastguard Worker``LibDw_LIBRARY``
57*9e3b08aeSAndroid Build Coastguard Worker  The path to the ``libdw.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_LibDw QUIET libdw)
63*9e3b08aeSAndroid Build Coastguard Worker
64*9e3b08aeSAndroid Build Coastguard Workerfind_library(
65*9e3b08aeSAndroid Build Coastguard Worker  LibDw_LIBRARY
66*9e3b08aeSAndroid Build Coastguard Worker  NAMES dw
67*9e3b08aeSAndroid Build Coastguard Worker  HINTS ${PC_LibDw_LIBDIR} ${PC_LibDw_LIBRARY_DIRS})
68*9e3b08aeSAndroid Build Coastguard Worker# Try the value from user if the library is not found.
69*9e3b08aeSAndroid Build Coastguard Workerif(DEFINED LibDw_LIBRARIES AND NOT DEFINED LibDw_LIBRARY)
70*9e3b08aeSAndroid Build Coastguard Worker  set(LibDw_LIBRARY ${LibDw_LIBRARIES})
71*9e3b08aeSAndroid Build Coastguard Workerendif()
72*9e3b08aeSAndroid Build Coastguard Workermark_as_advanced(LibDw_LIBRARY)
73*9e3b08aeSAndroid Build Coastguard Worker
74*9e3b08aeSAndroid Build Coastguard Workerfind_path(
75*9e3b08aeSAndroid Build Coastguard Worker  LibDw_INCLUDE_DIR
76*9e3b08aeSAndroid Build Coastguard Worker  NAMES dwarf.h
77*9e3b08aeSAndroid Build Coastguard Worker  HINTS ${PC_LibDw_INCLUDEDIR} ${PC_LibDw_INCLUDE_DIRS})
78*9e3b08aeSAndroid Build Coastguard Worker# Try the value from user if the library is not found.
79*9e3b08aeSAndroid Build Coastguard Workerif(DEFINED LibDw_INCLUDE_DIRS AND NOT DEFINED LibDw_INCLUDE_DIR)
80*9e3b08aeSAndroid Build Coastguard Worker  set(LibDw_INCLUDE_DIR ${LibDw_INCLUDE_DIRS})
81*9e3b08aeSAndroid Build Coastguard Workerendif()
82*9e3b08aeSAndroid Build Coastguard Workermark_as_advanced(LibDw_INCLUDE_DIR)
83*9e3b08aeSAndroid Build Coastguard Worker
84*9e3b08aeSAndroid Build Coastguard Workerset(LibDw_VERSION ${PC_LibDw_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  LibDw
89*9e3b08aeSAndroid Build Coastguard Worker  REQUIRED_VARS LibDw_LIBRARY LibDw_INCLUDE_DIR
90*9e3b08aeSAndroid Build Coastguard Worker  VERSION_VAR LibDw_VERSION)
91*9e3b08aeSAndroid Build Coastguard Worker
92*9e3b08aeSAndroid Build Coastguard Workerif(LibDw_FOUND)
93*9e3b08aeSAndroid Build Coastguard Worker  set(LibDw_LIBRARIES ${LibDw_LIBRARY})
94*9e3b08aeSAndroid Build Coastguard Worker  set(LibDw_INCLUDE_DIRS ${LibDw_INCLUDE_DIR})
95*9e3b08aeSAndroid Build Coastguard Worker  set(LibDw_DEFINITIONS ${PC_LibDw_CFLAGS_OTHER})
96*9e3b08aeSAndroid Build Coastguard Workerendif()
97*9e3b08aeSAndroid Build Coastguard Worker
98*9e3b08aeSAndroid Build Coastguard Workerif(LibDw_FOUND AND NOT TARGET LibDw::LibDw)
99*9e3b08aeSAndroid Build Coastguard Worker  add_library(LibDw::LibDw UNKNOWN IMPORTED)
100*9e3b08aeSAndroid Build Coastguard Worker  set_target_properties(
101*9e3b08aeSAndroid Build Coastguard Worker    LibDw::LibDw
102*9e3b08aeSAndroid Build Coastguard Worker    PROPERTIES IMPORTED_LOCATION "${LibDw_LIBRARY}"
103*9e3b08aeSAndroid Build Coastguard Worker               INTERFACE_COMPILE_OPTIONS "${PC_LibDw_CFLAGS_OTHER}"
104*9e3b08aeSAndroid Build Coastguard Worker               INTERFACE_INCLUDE_DIRECTORIES "${LibDw_INCLUDE_DIR}")
105*9e3b08aeSAndroid Build Coastguard Workerendif()
106