-
Notifications
You must be signed in to change notification settings - Fork 393
/
FindLibDwarf.cmake
174 lines (143 loc) · 4.91 KB
/
FindLibDwarf.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
###############################################################################
# Copyright (c) 2017, 2021 IBM Corp. and others
#
# This program and the accompanying materials are made available under
# the terms of the Eclipse Public License 2.0 which accompanies this
# distribution and is available at http://eclipse.org/legal/epl-2.0
# or the Apache License, Version 2.0 which accompanies this distribution
# and is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# This Source Code may also be made available under the following Secondary
# Licenses when the conditions for such availability set forth in the
# Eclipse Public License, v. 2.0 are satisfied: GNU General Public License,
# version 2 with the GNU Classpath Exception [1] and GNU General Public
# License, version 2 with the OpenJDK Assembly Exception [2].
#
# [1] https://www.gnu.org/software/classpath/license.html
# [2] http://openjdk.java.net/legal/assembly-exception.html
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception
#############################################################################
# Find libdwarf.
# Optional dependencies:
# LibElf
# LibZ
# Will set:
# LIBDWARF_FOUND
# LIBDWARF_INCLUDE_DIRS
# LIBDWARF_LIBRARIES
# LIBDWARF_DEFINITIONS
find_package(LibElf)
if(NOT OMR_OS_ZOS)
# On z/OS we don't want libz.
find_package(LibZ)
else()
# For technical reasons this is hard to autodetect on zos.
# Note: the value can still be overridden on the command line.
if(OMR_ENV_DATA64)
set(LIBDWARF_LIBRARY "/usr/lpp/cbclib/lib/libelfdwarf64.x" CACHE FILEPATH "")
else()
set(LIBDWARF_LIBRARY "/usr/lpp/cbclib/lib/libelfdwarf32.x" CACHE FILEPATH "")
endif()
endif()
# Find dwarf.h
# Will set:
# DWARF_H_DEFINITIONS
# DWARF_H_FOUND
# DWARF_H_INCLUDE_DIRS
set(DWARF_H_DEFINITIONS)
set(DWARF_H_FOUND false)
set(DWARF_H_INCLUDE_DIRS)
find_path(DWARF_H_INCLUDE_DIR "dwarf.h")
if(DWARF_H_INCLUDE_DIR)
list(APPEND DWARF_H_INCLUDE_DIRS "${DWARF_H_INCLUDE_DIR}")
list(APPEND DWARF_H_DEFINITIONS HAVE_DWARF_H)
set(DWARF_H_FOUND true)
endif()
find_path(LIBDWARF_DWARF_H_INCLUDE_DIR "libdwarf/dwarf.h")
if(LIBDWARF_DWARF_H_INCLUDE_DIR)
list(APPEND DWARF_H_INCLUDE_DIRS "${LIBDWARF_DWARF_H_INCLUDE_DIR}")
list(APPEND DWARF_H_DEFINITIONS HAVE_LIBDWARF_DWARF_H)
set(DWARF_H_FOUND true)
endif()
if(NOT DWARF_H_FOUND)
set(DWARF_H_FOUND false)
set(DWARF_H_INCLUDE_DIRS NOTFOUND)
set(DWARF_H_DEFINITIONS false)
endif()
# Find libdwarf.h
# Will set:
# LIBDWARF_H_DEFINITIONS
# LIBDWARF_H_FOUND
# LIBDWARF_H_INCLUDE_DIRS
set(LIBDWARF_H_DEFINITIONS)
set(LIBDWARF_H_FOUND false)
set(LIBDWARF_H_INCLUDE_DIRS)
find_path(LIBDWARF_H_INCLUDE_DIR "libdwarf.h")
if(LIBDWARF_H_INCLUDE_DIR)
list(APPEND LIBDWARF_H_INCLUDE_DIRS "${LIBDWARF_H_INCLUDE_DIR}")
list(APPEND LIBDWARF_H_DEFINITIONS HAVE_LIBDWARF_H)
set(LIBDWARF_H_FOUND true)
endif()
find_path(LIBDWARF_LIBDWARF_H_INCLUDE_DIR "libdwarf/libdwarf.h")
if(LIBDWARF_LIBDWARF_H_INCLUDE_DIR)
list(APPEND LIBDWARF_H_INCLUDE_DIRS "${LIBDWARF_LIBDWARF_H_INCLUDE_DIR}")
list(APPEND LIBDWARF_H_DEFINITIONS HAVE_LIBDWARF_LIBDWARF_H)
set(LIBDWARF_H_FOUND true)
endif()
if(NOT LIBDWARF_H_FOUND)
set(LIBDWARF_H_FOUND false)
set(LIBDWARF_H_INCLUDE_DIRS NOTFOUND)
set(LIBDWARF_H_DEFINITIONS false)
endif()
# Find library
find_library(LIBDWARF_LIBRARY dwarf)
# Handle the arguments
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LibDwarf
DEFAULT_MSG
LIBDWARF_LIBRARY
DWARF_H_FOUND
LIBDWARF_H_FOUND
)
if(NOT LIBDWARF_FOUND)
set(LIBDWARF_INCLUDE_DIRS NOTFOUND)
set(LIBDWARF_LIBRARIES NOTFOUND)
set(LIBDWARF_DEFINITIONS NOTFOUND)
return()
endif()
# Everything below is only set if the library is found
set(LIBDWARF_INCLUDE_DIRS ${DWARF_H_INCLUDE_DIRS} ${LIBDWARF_H_INCLUDE_DIRS})
set(LIBDWARF_LIBRARIES ${LIBDWARF_LIBRARY})
set(LIBDWARF_DEFINITIONS ${DWARF_H_DEFINITIONS} ${LIBDWARF_H_DEFINITIONS})
if(LibZ_FOUND)
list(APPEND LIBDWARF_INCLUDE_DIRS ${LIBZ_INCLUDE_DIRS})
list(APPEND LIBDWARF_LIBRARIES ${LIBZ_LIBRARIES})
list(APPEND LIBDWARF_DEFINITIONS ${LIBZ_DEFINITIONS})
endif(LibZ_FOUND)
if(LibElf_FOUND)
list(APPEND LIBDWARF_INCLUDE_DIRS ${LIBELF_INCLUDE_DIRS})
list(APPEND LIBDWARF_LIBRARIES ${LIBELF_LIBRARIES})
list(APPEND LIBDWARF_DEFINITIONS ${LIBELF_DEFINITIONS})
endif(LibElf_FOUND)
if(NOT TARGET LibDwarf::dwarf)
add_library(LibDwarf::dwarf UNKNOWN IMPORTED)
set_target_properties(LibDwarf::dwarf
PROPERTIES
IMPORTED_LOCATION "${LIBDWARF_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${DWARF_H_INCLUDE_DIRS};${LIBDWARF_H_INCLUDE_DIRS}"
INTERFACE_COMPILE_DEFINITIONS "${DWARF_H_DEFINITIONS};${LIBDWARF_H_DEFINITIONS}"
)
if(LibZ_FOUND)
set_property(
TARGET LibDwarf::dwarf APPEND
PROPERTY INTERFACE_LINK_LIBRARIES LibZ::z
)
endif(LibZ_FOUND)
if(LibElf_FOUND)
set_property(
TARGET LibDwarf::dwarf APPEND
PROPERTY INTERFACE_LINK_LIBRARIES LibElf::elf
)
endif(LibElf_FOUND)
endif()