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