2021-02-04 19:06:44 +08:00
|
|
|
# Copyright 2019 Google LLC
|
|
|
|
#
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
# you may not use this file except in compliance with the License.
|
|
|
|
# You may obtain a copy of the License at
|
|
|
|
#
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
#
|
|
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
# See the License for the specific language governing permissions and
|
|
|
|
# limitations under the License.
|
|
|
|
|
|
|
|
set(workdir "${CMAKE_BINARY_DIR}/_deps/libunwind-populate")
|
|
|
|
|
|
|
|
set(SAPI_LIBUNWIND_URL
|
2022-01-07 00:25:18 +08:00
|
|
|
https://github.com/libunwind/libunwind/releases/download/v1.6.2/libunwind-1.6.2.tar.gz
|
2021-02-04 19:06:44 +08:00
|
|
|
CACHE STRING "")
|
|
|
|
set(SAPI_LIBUNWIND_URL_HASH
|
2022-01-07 00:25:18 +08:00
|
|
|
SHA256=4a6aec666991fb45d0889c44aede8ad6eb108071c3554fcdff671f9c94794976
|
2021-02-04 19:06:44 +08:00
|
|
|
CACHE STRING "")
|
|
|
|
set(SAPI_LIBUNWIND_SOURCE_DIR "${CMAKE_BINARY_DIR}/_deps/libunwind-src"
|
|
|
|
CACHE STRING "")
|
|
|
|
set(SAPI_LIBUNWIND_BINARY_DIR "${CMAKE_BINARY_DIR}/_deps/libunwind-build"
|
|
|
|
CACHE STRING "")
|
|
|
|
|
|
|
|
file(WRITE "${workdir}/CMakeLists.txt" "\
|
|
|
|
cmake_minimum_required(VERSION ${CMAKE_VERSION})
|
|
|
|
project(libunwind-populate NONE)
|
|
|
|
include(ExternalProject)
|
|
|
|
ExternalProject_Add(libunwind
|
|
|
|
URL \"${SAPI_LIBUNWIND_URL}\"
|
|
|
|
URL_HASH \"${SAPI_LIBUNWIND_URL_HASH}\"
|
|
|
|
SOURCE_DIR \"${SAPI_LIBUNWIND_SOURCE_DIR}\"
|
|
|
|
CONFIGURE_COMMAND ./configure
|
|
|
|
--disable-dependency-tracking
|
|
|
|
--disable-documentation
|
|
|
|
--disable-minidebuginfo
|
|
|
|
--disable-shared
|
|
|
|
--enable-ptrace
|
|
|
|
${SAPI_THIRD_PARTY_CONFIGUREOPTS}
|
|
|
|
BUILD_COMMAND \"\"
|
|
|
|
INSTALL_COMMAND \"\"
|
|
|
|
TEST_COMMAND \"\"
|
|
|
|
BUILD_IN_SOURCE TRUE
|
|
|
|
)
|
|
|
|
")
|
|
|
|
|
|
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
|
|
|
|
RESULT_VARIABLE error
|
|
|
|
WORKING_DIRECTORY "${workdir}")
|
|
|
|
if(error)
|
|
|
|
message(FATAL_ERROR "CMake step for ${PROJECT_NAME} failed: ${error}")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
execute_process(COMMAND ${CMAKE_COMMAND} --build .
|
|
|
|
RESULT_VARIABLE error
|
|
|
|
WORKING_DIRECTORY "${workdir}")
|
|
|
|
if(error)
|
|
|
|
message(FATAL_ERROR "Build step for ${PROJECT_NAME} failed: ${error}")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
|
|
|
|
set(_unwind_cpu "x86_64")
|
|
|
|
list(APPEND _unwind_platform_srcs
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/x86_64/Gcreate_addr_space.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/x86_64/Gglobal.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/x86_64/Ginit.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/x86_64/Gos-linux.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/x86_64/Gregs.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/x86_64/Gresume.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/x86_64/Gstash_frame.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/x86_64/Gstep.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/x86_64/is_fpreg.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/x86_64/setcontext.S
|
|
|
|
)
|
|
|
|
list(APPEND _unwind_ptrace_srcs
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/x86_64/Ginit_remote.c
|
|
|
|
)
|
|
|
|
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64")
|
|
|
|
set(_unwind_cpu "ppc64")
|
|
|
|
list(APPEND _unwind_platform_srcs
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ppc/Gis_signal_frame.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ppc64/Gcreate_addr_space.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ppc64/Gglobal.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ppc64/Ginit.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ppc64/Gregs.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ppc64/Gresume.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ppc64/Gstep.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ppc64/get_func_addr.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ppc64/is_fpreg.c
|
|
|
|
)
|
|
|
|
list(APPEND _unwind_ptrace_srcs
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ppc/Ginit_remote.c
|
|
|
|
)
|
|
|
|
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
|
|
|
|
set(_unwind_cpu "aarch64")
|
|
|
|
list(APPEND _unwind_platform_srcs
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/aarch64/Gcreate_addr_space.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/aarch64/Gglobal.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/aarch64/Ginit.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/aarch64/Gis_signal_frame.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/aarch64/Gregs.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/aarch64/Gresume.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/aarch64/Gstash_frame.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/aarch64/Gstep.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/aarch64/is_fpreg.c
|
|
|
|
)
|
|
|
|
list(APPEND _unwind_ptrace_srcs
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/aarch64/Ginit_remote.c
|
|
|
|
)
|
|
|
|
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm")
|
|
|
|
set(_unwind_cpu "arm")
|
|
|
|
list(APPEND _unwind_platform_srcs
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/arm/Gcreate_addr_space.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/arm/Gex_tables.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/arm/Gglobal.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/arm/Ginit.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/arm/Gis_signal_frame.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/arm/Gregs.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/arm/Gresume.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/arm/Gstash_frame.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/arm/Gstep.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/arm/is_fpreg.c
|
|
|
|
)
|
|
|
|
list(APPEND _unwind_ptrace_srcs
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/arm/Ginit_remote.c
|
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
add_library(unwind_ptrace_wrapped STATIC
|
|
|
|
# internal_headers
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/compiler.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/config.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/dwarf.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/dwarf-eh.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/dwarf_i.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/libunwind.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/libunwind-common.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/libunwind-coredump.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/libunwind-dynamic.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/libunwind-ptrace.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/libunwind-x86_64.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/libunwind_i.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/mempool.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/remote.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/tdep-x86_64/dwarf-config.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/tdep-x86_64/libunwind_i.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/tdep/dwarf-config.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/tdep/libunwind_i.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/unwind.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/elf32.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/elf64.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/elfxx.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/os-linux.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/x86_64/init.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/x86_64/offsets.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/x86_64/ucontext_i.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/x86_64/unwind_i.h
|
|
|
|
# included_sources
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/elf64.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/elfxx.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/elfxx.c
|
|
|
|
# sources_common
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/dwarf/Gexpr.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/dwarf/Gfde.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/dwarf/Gfind_proc_info-lsb.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/dwarf/Gfind_unwind_table.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/dwarf/Gparser.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/dwarf/Gpe.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/dwarf/global.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/mi/Gdestroy_addr_space.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/mi/Gdyn-extract.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/mi/Gfind_dynamic_proc_info.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/mi/Gget_accessors.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/mi/Gget_proc_name.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/mi/Gget_reg.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/mi/Gput_dynamic_unwind_info.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/mi/flush_cache.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/mi/init.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/mi/mempool.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/os-linux.c
|
|
|
|
${_unwind_platform_srcs}
|
|
|
|
# srcs
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/mi/Gdyn-remote.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ptrace/_UPT_access_fpreg.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ptrace/_UPT_access_mem.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ptrace/_UPT_access_reg.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ptrace/_UPT_accessors.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ptrace/_UPT_create.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ptrace/_UPT_destroy.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ptrace/_UPT_elf.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ptrace/_UPT_find_proc_info.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ptrace/_UPT_get_dyn_info_list_addr.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ptrace/_UPT_get_proc_name.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ptrace/_UPT_internal.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ptrace/_UPT_put_unwind_info.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ptrace/_UPT_reg_offset.c
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src/ptrace/_UPT_resume.c
|
|
|
|
# hdrs
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/config.h
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/libunwind.h
|
|
|
|
# source_ptrace
|
|
|
|
${_unwind_ptrace_srcs}
|
|
|
|
)
|
|
|
|
add_library(unwind::unwind_ptrace_wrapped ALIAS unwind_ptrace_wrapped)
|
|
|
|
target_include_directories(unwind_ptrace_wrapped PUBLIC
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/tdep
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/include/tdep-${_unwind_cpu}
|
|
|
|
${SAPI_LIBUNWIND_SOURCE_DIR}/src
|
|
|
|
)
|
|
|
|
target_compile_options(unwind_ptrace_wrapped PRIVATE
|
|
|
|
-fno-common
|
|
|
|
-Wno-cpp
|
|
|
|
)
|
|
|
|
target_compile_definitions(unwind_ptrace_wrapped
|
|
|
|
PRIVATE -DHAVE_CONFIG_H
|
|
|
|
-D_GNU_SOURCE
|
|
|
|
-DNO_FRAME_POINTER
|
|
|
|
PUBLIC -D_UPT_accessors=_UPT_accessors_wrapped
|
|
|
|
-D_UPT_create=_UPT_create_wrapped
|
|
|
|
-D_UPT_destroy=_UPT_destroy_wrapped
|
|
|
|
|
|
|
|
-D_U${_unwind_cpu}_create_addr_space=_U${_unwind_cpu}_create_addr_space_wrapped
|
|
|
|
-D_U${_unwind_cpu}_destroy_addr_space=_U${_unwind_cpu}_destroy_addr_space_wrapped
|
|
|
|
-D_U${_unwind_cpu}_get_proc_name=_U${_unwind_cpu}_get_proc_name_wrapped
|
|
|
|
-D_U${_unwind_cpu}_get_reg=_U${_unwind_cpu}_get_reg_wrapped
|
|
|
|
-D_U${_unwind_cpu}_init_remote=_U${_unwind_cpu}_init_remote_wrapped
|
|
|
|
-D_U${_unwind_cpu}_step=_U${_unwind_cpu}_step_wrapped
|
|
|
|
|
|
|
|
-Dptrace=ptrace_wrapped
|
|
|
|
)
|
|
|
|
target_link_libraries(unwind_ptrace_wrapped PRIVATE
|
|
|
|
sapi::base
|
|
|
|
sandbox2::ptrace_hook
|
|
|
|
)
|