| // |
| // Copyright (C) 2014 The Android Open Source Project |
| // |
| // 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 to true to enable a debug build of the libraries. |
| // To control what is logged, set the environment variable UNW_DEBUG_LEVEL=x, |
| // where x controls the verbosity (from 1 to 20). |
| //libunwind_debug = false |
| |
| cc_defaults { |
| name: "libunwind_defaults", |
| host_supported: true, |
| |
| cppflags: [ |
| "-Wno-old-style-cast", |
| ], |
| |
| cflags: [ |
| "-Werror", |
| "-Wno-#pragma-messages", |
| "-Wno-unused-parameter", |
| |
| "-DHAVE_CONFIG_H", |
| "-D_GNU_SOURCE", |
| "-DNDEBUG", |
| ], |
| |
| // libunwind expects to find include/libunwind_i.h before |
| // include/tdep-<arch>/libunwind_i.h, but soong prepends arch-specific |
| // include directories. To keep the include directories in the right |
| // order, pass "include" as an architecture specific include for every |
| // architecture. |
| arch: { |
| arm: { |
| local_include_dirs: [ |
| "include", |
| "include/tdep-arm", |
| ], |
| }, |
| arm64: { |
| local_include_dirs: [ |
| "include", |
| "include/tdep-aarch64", |
| ], |
| }, |
| x86: { |
| local_include_dirs: [ |
| "include", |
| "include/tdep-x86", |
| ], |
| }, |
| x86_64: { |
| local_include_dirs: [ |
| "include", |
| "include/tdep-x86_64", |
| ], |
| }, |
| }, |
| |
| target: { |
| android: { |
| // gcc 4.8 appears to be overeager declaring that a variable is uninitialized, |
| // under certain circumstances. Turn off this warning only for target so that |
| // coverage is still present for the host code. When the entire build system |
| // is switched to 4.9, then this can be removed. |
| cflags: ["-Wno-maybe-uninitialized"], |
| }, |
| darwin: { |
| enabled: false, |
| }, |
| }, |
| |
| clang_cflags: [ |
| // src/mi/backtrace.c is misdetected as a bogus header guard by clang 3.5 |
| // src/x86_64/Gstash_frame.c has unnecessary calls to labs. |
| "-Wno-header-guard", |
| "-Wno-absolute-value", |
| // The latest clang (r230699) does not allow SP/PC to be declared in inline asm lists. |
| "-Wno-inline-asm", |
| ], |
| |
| debug: { |
| cflags: [ |
| "-UNDEBUG", |
| "-DDEBUG", |
| "-U_FORTIFY_SOURCE", |
| ], |
| }, |
| |
| local_include_dirs: [ |
| "src", |
| ], |
| } |
| |
| //----------------------------------------------------------------------- |
| // libunwind shared and static library |
| //----------------------------------------------------------------------- |
| |
| cc_defaults { |
| name: "libunwind_core_defaults", |
| defaults: ["libunwind_defaults"], |
| sdk_version: "21", |
| stl: "none", |
| |
| srcs: [ |
| "src/mi/init.c", |
| "src/mi/flush_cache.c", |
| "src/mi/mempool.c", |
| "src/mi/strerror.c", |
| "src/mi/backtrace.c", |
| "src/mi/dyn-cancel.c", |
| "src/mi/dyn-info-list.c", |
| "src/mi/dyn-register.c", |
| "src/mi/map.c", |
| "src/mi/Lmap.c", |
| "src/mi/Ldyn-extract.c", |
| "src/mi/Lfind_dynamic_proc_info.c", |
| "src/mi/Lget_proc_info_by_ip.c", |
| "src/mi/Lget_proc_name.c", |
| "src/mi/Lput_dynamic_unwind_info.c", |
| "src/mi/Ldestroy_addr_space.c", |
| "src/mi/Lget_reg.c", |
| "src/mi/Lset_reg.c", |
| "src/mi/Lget_fpreg.c", |
| "src/mi/Lset_fpreg.c", |
| "src/mi/Lset_caching_policy.c", |
| "src/mi/Gdyn-extract.c", |
| "src/mi/Gdyn-remote.c", |
| "src/mi/Gfind_dynamic_proc_info.c", |
| "src/mi/Gget_accessors.c", |
| "src/mi/Gget_proc_info_by_ip.c", |
| "src/mi/Gget_proc_name.c", |
| "src/mi/Gput_dynamic_unwind_info.c", |
| "src/mi/Gdestroy_addr_space.c", |
| "src/mi/Gget_reg.c", |
| "src/mi/Gset_reg.c", |
| "src/mi/Gget_fpreg.c", |
| "src/mi/Gset_fpreg.c", |
| "src/mi/Gset_caching_policy.c", |
| "src/dwarf/Lexpr.c", |
| "src/dwarf/Lfde.c", |
| "src/dwarf/Lparser.c", |
| "src/dwarf/Lpe.c", |
| "src/dwarf/Lstep_dwarf.c", |
| "src/dwarf/Lfind_proc_info-lsb.c", |
| "src/dwarf/Lfind_unwind_table.c", |
| "src/dwarf/Gexpr.c", |
| "src/dwarf/Gfde.c", |
| "src/dwarf/Gfind_proc_info-lsb.c", |
| "src/dwarf/Gfind_unwind_table.c", |
| "src/dwarf/Gparser.c", |
| "src/dwarf/Gpe.c", |
| "src/dwarf/Gstep_dwarf.c", |
| "src/dwarf/global.c", |
| "src/os-common.c", |
| "src/os-linux.c", |
| "src/Los-common.c", |
| |
| // ptrace files for remote unwinding. |
| "src/ptrace/_UPT_accessors.c", |
| "src/ptrace/_UPT_access_fpreg.c", |
| "src/ptrace/_UPT_access_mem.c", |
| "src/ptrace/_UPT_access_reg.c", |
| "src/ptrace/_UPT_create.c", |
| "src/ptrace/_UPT_destroy.c", |
| "src/ptrace/_UPT_find_proc_info.c", |
| "src/ptrace/_UPT_get_dyn_info_list_addr.c", |
| "src/ptrace/_UPT_put_unwind_info.c", |
| "src/ptrace/_UPT_get_proc_name.c", |
| "src/ptrace/_UPT_reg_offset.c", |
| "src/ptrace/_UPT_resume.c", |
| ], |
| |
| arch: { |
| arm: { |
| srcs: [ |
| "src/arm/is_fpreg.c", |
| "src/arm/regname.c", |
| "src/arm/Gcreate_addr_space.c", |
| "src/arm/Gget_proc_info.c", |
| "src/arm/Gget_save_loc.c", |
| "src/arm/Gglobal.c", |
| "src/arm/Ginit.c", |
| "src/arm/Ginit_local.c", |
| "src/arm/Ginit_remote.c", |
| "src/arm/Gregs.c", |
| "src/arm/Gresume.c", |
| "src/arm/Gstep.c", |
| "src/arm/Lcreate_addr_space.c", |
| "src/arm/Lget_proc_info.c", |
| "src/arm/Lget_save_loc.c", |
| "src/arm/Lglobal.c", |
| "src/arm/Linit.c", |
| "src/arm/Linit_local.c", |
| "src/arm/Linit_remote.c", |
| "src/arm/Lregs.c", |
| "src/arm/Lresume.c", |
| "src/arm/Lstep.c", |
| |
| "src/arm/getcontext.S", |
| "src/arm/Gis_signal_frame.c", |
| "src/arm/Gex_tables.c", |
| "src/arm/Lis_signal_frame.c", |
| "src/arm/Lex_tables.c", |
| ], |
| }, |
| arm64: { |
| srcs: [ |
| "src/aarch64/is_fpreg.c", |
| "src/aarch64/regname.c", |
| "src/aarch64/Gcreate_addr_space.c", |
| "src/aarch64/Gget_proc_info.c", |
| "src/aarch64/Gget_save_loc.c", |
| "src/aarch64/Gglobal.c", |
| "src/aarch64/Ginit.c", |
| "src/aarch64/Ginit_local.c", |
| "src/aarch64/Ginit_remote.c", |
| "src/aarch64/Gregs.c", |
| "src/aarch64/Gresume.c", |
| "src/aarch64/Gstep.c", |
| "src/aarch64/Lcreate_addr_space.c", |
| "src/aarch64/Lget_proc_info.c", |
| "src/aarch64/Lget_save_loc.c", |
| "src/aarch64/Lglobal.c", |
| "src/aarch64/Linit.c", |
| "src/aarch64/Linit_local.c", |
| "src/aarch64/Linit_remote.c", |
| "src/aarch64/Lregs.c", |
| "src/aarch64/Lresume.c", |
| "src/aarch64/Lstep.c", |
| |
| "src/aarch64/Gis_signal_frame.c", |
| "src/aarch64/Lis_signal_frame.c", |
| ], |
| }, |
| x86: { |
| srcs: [ |
| "src/x86/is_fpreg.c", |
| "src/x86/regname.c", |
| "src/x86/Gcreate_addr_space.c", |
| "src/x86/Gget_proc_info.c", |
| "src/x86/Gget_save_loc.c", |
| "src/x86/Gglobal.c", |
| "src/x86/Ginit.c", |
| "src/x86/Ginit_local.c", |
| "src/x86/Ginit_remote.c", |
| "src/x86/Gregs.c", |
| "src/x86/Gresume.c", |
| "src/x86/Gstep.c", |
| "src/x86/Lcreate_addr_space.c", |
| "src/x86/Lget_proc_info.c", |
| "src/x86/Lget_save_loc.c", |
| "src/x86/Lglobal.c", |
| "src/x86/Linit.c", |
| "src/x86/Linit_local.c", |
| "src/x86/Linit_remote.c", |
| "src/x86/Lregs.c", |
| "src/x86/Lresume.c", |
| "src/x86/Lstep.c", |
| |
| "src/x86/getcontext-linux.S", |
| "src/x86/Gos-linux.c", |
| "src/x86/Los-linux.c", |
| ], |
| }, |
| x86_64: { |
| srcs: [ |
| "src/x86_64/is_fpreg.c", |
| "src/x86_64/regname.c", |
| "src/x86_64/Gcreate_addr_space.c", |
| "src/x86_64/Gget_proc_info.c", |
| "src/x86_64/Gget_save_loc.c", |
| "src/x86_64/Gglobal.c", |
| "src/x86_64/Ginit.c", |
| "src/x86_64/Ginit_local.c", |
| "src/x86_64/Ginit_remote.c", |
| "src/x86_64/Gregs.c", |
| "src/x86_64/Gresume.c", |
| "src/x86_64/Gstep.c", |
| "src/x86_64/Lcreate_addr_space.c", |
| "src/x86_64/Lget_proc_info.c", |
| "src/x86_64/Lget_save_loc.c", |
| "src/x86_64/Lglobal.c", |
| "src/x86_64/Linit.c", |
| "src/x86_64/Linit_local.c", |
| "src/x86_64/Linit_remote.c", |
| "src/x86_64/Lregs.c", |
| "src/x86_64/Lresume.c", |
| "src/x86_64/Lstep.c", |
| |
| "src/x86_64/getcontext.S", |
| "src/x86_64/Gstash_frame.c", |
| "src/x86_64/Gtrace.c", |
| "src/x86_64/Gos-linux.c", |
| "src/x86_64/Lstash_frame.c", |
| "src/x86_64/Ltrace.c", |
| "src/x86_64/Los-linux.c", |
| "src/x86_64/setcontext.S", |
| ], |
| }, |
| }, |
| |
| multilib: { |
| lib32: { |
| srcs: ["src/elf32.c"], |
| }, |
| lib64: { |
| srcs: ["src/elf64.c"], |
| }, |
| }, |
| |
| target: { |
| linux_bionic: { |
| enabled: true, |
| }, |
| }, |
| |
| export_include_dirs: ["include"], |
| |
| debug: { |
| //shared_libs: ["liblog"], |
| }, |
| } |
| |
| cc_library_shared { |
| name: "libunwind_shared", |
| defaults: ["libunwind_core_defaults"], |
| } |
| |
| cc_library_static { |
| name: "libunwind_static", |
| defaults: ["libunwind_core_defaults"], |
| vendor_available: true, |
| native_bridge_supported: true, |
| } |
| |
| //----------------------------------------------------------------------- |
| // libunwindbacktrace static library |
| //----------------------------------------------------------------------- |
| cc_library_static { |
| name: "libunwindbacktrace", |
| defaults: ["libunwind_defaults"], |
| vendor_available: true, |
| native_bridge_supported: true, |
| sdk_version: "21", |
| srcs: [ |
| "src/unwind/BacktraceWrapper.c", |
| "src/unwind/DeleteException.c", |
| "src/unwind/FindEnclosingFunction.c", |
| "src/unwind/ForcedUnwind.c", |
| "src/unwind/GetBSP.c", |
| "src/unwind/GetCFA.c", |
| "src/unwind/GetDataRelBase.c", |
| "src/unwind/GetGR.c", |
| "src/unwind/GetIP.c", |
| "src/unwind/GetIPInfo.c", |
| "src/unwind/GetLanguageSpecificData.c", |
| "src/unwind/GetRegionStart.c", |
| "src/unwind/GetTextRelBase.c", |
| "src/unwind/RaiseException.c", |
| "src/unwind/Resume.c", |
| "src/unwind/Resume_or_Rethrow.c", |
| "src/unwind/SetGR.c", |
| "src/unwind/SetIP.c", |
| ], |
| |
| cflags: [ |
| "-Wno-old-style-declaration", |
| "-fvisibility=hidden", |
| ], |
| |
| target: { |
| linux_bionic: { |
| enabled: true, |
| }, |
| }, |
| } |
| |
| //----------------------------------------------------------------------- |
| // libunwind testing |
| //----------------------------------------------------------------------- |
| cc_test { |
| name: "libunwind-unit-tests", |
| srcs: ["android/tests/local_test.cpp"], |
| defaults: ["libunwind_defaults"], |
| |
| cflags: [ |
| "-fno-builtin", |
| "-O0", |
| "-g", |
| ], |
| |
| local_include_dirs: ["include"], |
| shared_libs: ["libunwind_shared"], |
| } |
| |
| /* |
| // Run the unit tests built for x86 or x86_64. |
| // ANDROIDMK TRANSLATION ERROR: unsupported conditional |
| // ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64)) |
| // ANDROIDMK TRANSLATION ERROR: unsupported conditional |
| // ifneq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86)) |
| LINKER = ["linker64"] |
| TEST_SUFFIX = ["64"] |
| // ANDROIDMK TRANSLATION ERROR: else from unsupported contitional |
| // else |
| LINKER = ["linker"] |
| TEST_SUFFIX = ["32"] |
| // ANDROIDMK TRANSLATION ERROR: endif from unsupported contitional |
| // endif |
| |
| // ANDROIDMK TRANSLATION ERROR: endif from unsupported contitional |
| // endif |
| */ |