xref: /aosp_15_r20/external/sandboxed-api/cmake/libunwind.cmake (revision ec63e07ab9515d95e79c211197c445ef84cefa6a)
1*ec63e07aSXin Li# Copyright 2019 Google LLC
2*ec63e07aSXin Li#
3*ec63e07aSXin Li# Licensed under the Apache License, Version 2.0 (the "License");
4*ec63e07aSXin Li# you may not use this file except in compliance with the License.
5*ec63e07aSXin Li# You may obtain a copy of the License at
6*ec63e07aSXin Li#
7*ec63e07aSXin Li#     https://www.apache.org/licenses/LICENSE-2.0
8*ec63e07aSXin Li#
9*ec63e07aSXin Li# Unless required by applicable law or agreed to in writing, software
10*ec63e07aSXin Li# distributed under the License is distributed on an "AS IS" BASIS,
11*ec63e07aSXin Li# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*ec63e07aSXin Li# See the License for the specific language governing permissions and
13*ec63e07aSXin Li# limitations under the License.
14*ec63e07aSXin Li
15*ec63e07aSXin LiFetchContent_Declare(libunwind
16*ec63e07aSXin Li  URL https://github.com/libunwind/libunwind/releases/download/v1.6.2/libunwind-1.6.2.tar.gz
17*ec63e07aSXin Li  URL_HASH SHA256=4a6aec666991fb45d0889c44aede8ad6eb108071c3554fcdff671f9c94794976
18*ec63e07aSXin Li)
19*ec63e07aSXin LiFetchContent_GetProperties(libunwind)
20*ec63e07aSXin Liif(NOT libunwind_POPULATED)
21*ec63e07aSXin Li  FetchContent_Populate(libunwind)
22*ec63e07aSXin Li  set(libunwind_STATUS_FILE "${libunwind_SOURCE_DIR}/config.status")
23*ec63e07aSXin Li  if(EXISTS "${libunwind_STATUS_FILE}")
24*ec63e07aSXin Li    file(SHA256 "${libunwind_STATUS_FILE}" _sapi_CONFIG_STATUS)
25*ec63e07aSXin Li  endif()
26*ec63e07aSXin Li  if(NOT _sapi_CONFIG_STATUS STREQUAL "${libunwind_CONFIG_STATUS}")
27*ec63e07aSXin Li    message("-- Running ./configure for libunwind...")
28*ec63e07aSXin Li    execute_process(
29*ec63e07aSXin Li      COMMAND ./configure --disable-dependency-tracking
30*ec63e07aSXin Li                          --disable-minidebuginfo
31*ec63e07aSXin Li                          --disable-shared
32*ec63e07aSXin Li                          --enable-ptrace
33*ec63e07aSXin Li                          --quiet
34*ec63e07aSXin Li      WORKING_DIRECTORY "${libunwind_SOURCE_DIR}"
35*ec63e07aSXin Li      RESULT_VARIABLE _sapi_libunwind_config_result
36*ec63e07aSXin Li    )
37*ec63e07aSXin Li    if(NOT _sapi_libunwind_config_result EQUAL "0")
38*ec63e07aSXin Li      message(FATAL_ERROR "Configuration of libunwind dependency failed")
39*ec63e07aSXin Li    endif()
40*ec63e07aSXin Li    file(SHA256 "${libunwind_SOURCE_DIR}/config.status" _sapi_CONFIG_STATUS)
41*ec63e07aSXin Li    set(libunwind_CONFIG_STATUS "${_sapi_CONFIG_STATUS}" CACHE INTERNAL "")
42*ec63e07aSXin Li  endif()
43*ec63e07aSXin Liendif()
44*ec63e07aSXin Li
45*ec63e07aSXin Liif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
46*ec63e07aSXin Li  set(_unwind_cpu "x86_64")
47*ec63e07aSXin Li  list(APPEND _unwind_platform_srcs
48*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/x86_64/Gcreate_addr_space.c
49*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/x86_64/Gglobal.c
50*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/x86_64/Ginit.c
51*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/x86_64/Gos-linux.c
52*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/x86_64/Gregs.c
53*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/x86_64/Gresume.c
54*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/x86_64/Gstash_frame.c
55*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/x86_64/Gstep.c
56*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/x86_64/is_fpreg.c
57*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/x86_64/setcontext.S
58*ec63e07aSXin Li  )
59*ec63e07aSXin Li  list(APPEND _unwind_ptrace_srcs
60*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/x86_64/Ginit_remote.c
61*ec63e07aSXin Li  )
62*ec63e07aSXin Lielseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64")
63*ec63e07aSXin Li  set(_unwind_cpu "ppc64")
64*ec63e07aSXin Li  list(APPEND _unwind_platform_srcs
65*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/ppc/Gis_signal_frame.c
66*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/ppc64/Gcreate_addr_space.c
67*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/ppc64/Gglobal.c
68*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/ppc64/Ginit.c
69*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/ppc64/Gregs.c
70*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/ppc64/Gresume.c
71*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/ppc64/Gstep.c
72*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/ppc64/get_func_addr.c
73*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/ppc64/is_fpreg.c
74*ec63e07aSXin Li  )
75*ec63e07aSXin Li  list(APPEND _unwind_ptrace_srcs
76*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/ppc/Ginit_remote.c
77*ec63e07aSXin Li  )
78*ec63e07aSXin Lielseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
79*ec63e07aSXin Li  set(_unwind_cpu "aarch64")
80*ec63e07aSXin Li  list(APPEND _unwind_platform_srcs
81*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/aarch64/Gcreate_addr_space.c
82*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/aarch64/Gglobal.c
83*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/aarch64/Ginit.c
84*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/aarch64/Gis_signal_frame.c
85*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/aarch64/Gregs.c
86*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/aarch64/Gresume.c
87*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/aarch64/Gstash_frame.c
88*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/aarch64/Gstep.c
89*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/aarch64/is_fpreg.c
90*ec63e07aSXin Li  )
91*ec63e07aSXin Li  list(APPEND _unwind_ptrace_srcs
92*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/aarch64/Ginit_remote.c
93*ec63e07aSXin Li  )
94*ec63e07aSXin Lielseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm")
95*ec63e07aSXin Li  set(_unwind_cpu "arm")
96*ec63e07aSXin Li  list(APPEND _unwind_platform_srcs
97*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/arm/Gcreate_addr_space.c
98*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/arm/Gex_tables.c
99*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/arm/Gglobal.c
100*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/arm/Ginit.c
101*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/arm/Gis_signal_frame.c
102*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/arm/Gregs.c
103*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/arm/Gresume.c
104*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/arm/Gstash_frame.c
105*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/arm/Gstep.c
106*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/arm/is_fpreg.c
107*ec63e07aSXin Li  )
108*ec63e07aSXin Li  list(APPEND _unwind_ptrace_srcs
109*ec63e07aSXin Li    ${libunwind_SOURCE_DIR}/src/arm/Ginit_remote.c
110*ec63e07aSXin Li  )
111*ec63e07aSXin Liendif()
112*ec63e07aSXin Li
113*ec63e07aSXin Liadd_library(unwind_ptrace STATIC
114*ec63e07aSXin Li  # internal_headers
115*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/compiler.h
116*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/config.h
117*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/dwarf.h
118*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/dwarf-eh.h
119*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/dwarf_i.h
120*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/libunwind.h
121*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/libunwind-common.h
122*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/libunwind-coredump.h
123*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/libunwind-dynamic.h
124*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/libunwind-ptrace.h
125*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/libunwind-x86_64.h
126*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/libunwind_i.h
127*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/mempool.h
128*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/remote.h
129*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/tdep-x86_64/dwarf-config.h
130*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/tdep-x86_64/libunwind_i.h
131*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/tdep/dwarf-config.h
132*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/tdep/libunwind_i.h
133*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/unwind.h
134*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/elf32.h
135*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/elf64.h
136*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/elfxx.h
137*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/os-linux.h
138*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/x86_64/init.h
139*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/x86_64/offsets.h
140*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/x86_64/ucontext_i.h
141*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/x86_64/unwind_i.h
142*ec63e07aSXin Li  # included_sources
143*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/elf64.h
144*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/elfxx.h
145*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/elfxx.c
146*ec63e07aSXin Li  # sources_common
147*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/dwarf/Gexpr.c
148*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/dwarf/Gfde.c
149*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/dwarf/Gfind_proc_info-lsb.c
150*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/dwarf/Gfind_unwind_table.c
151*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/dwarf/Gparser.c
152*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/dwarf/Gpe.c
153*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/dwarf/global.c
154*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/mi/Gdestroy_addr_space.c
155*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/mi/Gdyn-extract.c
156*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/mi/Gfind_dynamic_proc_info.c
157*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/mi/Gget_accessors.c
158*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/mi/Gget_proc_name.c
159*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/mi/Gget_reg.c
160*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/mi/Gput_dynamic_unwind_info.c
161*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/mi/flush_cache.c
162*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/mi/init.c
163*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/mi/mempool.c
164*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/os-linux.c
165*ec63e07aSXin Li  ${_unwind_platform_srcs}
166*ec63e07aSXin Li  # srcs
167*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/mi/Gdyn-remote.c
168*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/ptrace/_UPT_access_fpreg.c
169*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/ptrace/_UPT_access_mem.c
170*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/ptrace/_UPT_access_reg.c
171*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/ptrace/_UPT_accessors.c
172*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/ptrace/_UPT_create.c
173*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/ptrace/_UPT_destroy.c
174*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/ptrace/_UPT_elf.c
175*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/ptrace/_UPT_find_proc_info.c
176*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/ptrace/_UPT_get_dyn_info_list_addr.c
177*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/ptrace/_UPT_get_proc_name.c
178*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/ptrace/_UPT_internal.h
179*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/ptrace/_UPT_put_unwind_info.c
180*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/ptrace/_UPT_reg_offset.c
181*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src/ptrace/_UPT_resume.c
182*ec63e07aSXin Li  # hdrs
183*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/config.h
184*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/libunwind.h
185*ec63e07aSXin Li  # source_ptrace
186*ec63e07aSXin Li  ${_unwind_ptrace_srcs}
187*ec63e07aSXin Li)
188*ec63e07aSXin Liadd_library(unwind::unwind_ptrace ALIAS unwind_ptrace)
189*ec63e07aSXin Litarget_include_directories(unwind_ptrace PUBLIC
190*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include
191*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/tdep
192*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/include/tdep-${_unwind_cpu}
193*ec63e07aSXin Li  ${libunwind_SOURCE_DIR}/src
194*ec63e07aSXin Li)
195*ec63e07aSXin Litarget_compile_options(unwind_ptrace PRIVATE
196*ec63e07aSXin Li  -fno-common
197*ec63e07aSXin Li  -Wno-cpp
198*ec63e07aSXin Li)
199*ec63e07aSXin Litarget_compile_definitions(unwind_ptrace
200*ec63e07aSXin Li  PRIVATE -DHAVE_CONFIG_H
201*ec63e07aSXin Li          -D_GNU_SOURCE
202*ec63e07aSXin Li          -DNO_FRAME_POINTER
203*ec63e07aSXin Li)
204*ec63e07aSXin Litarget_link_libraries(unwind_ptrace PRIVATE
205*ec63e07aSXin Li  sapi::base
206*ec63e07aSXin Li)
207