1// 2// Copyright (C) 2014 The Android Open Source Project 3// 4// Licensed under the Apache License, Version 2.0 (the "License"); 5// you may not use this file except in compliance with the License. 6// You may obtain a copy of the License at 7// 8// http://www.apache.org/licenses/LICENSE-2.0 9// 10// Unless required by applicable law or agreed to in writing, software 11// distributed under the License is distributed on an "AS IS" BASIS, 12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13// See the License for the specific language governing permissions and 14// limitations under the License. 15// 16 17// Set to true to enable a debug build of the libraries. 18// To control what is logged, set the environment variable UNW_DEBUG_LEVEL=x, 19// where x controls the verbosity (from 1 to 20). 20//libunwind_debug = false 21 22cc_defaults { 23 name: "libunwind_defaults", 24 host_supported: true, 25 26 cppflags: [ 27 "-Wno-old-style-cast", 28 ], 29 30 cflags: [ 31 "-Werror", 32 "-Wno-#pragma-messages", 33 "-Wno-unused-parameter", 34 35 "-DHAVE_CONFIG_H", 36 "-D_GNU_SOURCE", 37 "-DNDEBUG", 38 ], 39 40 // libunwind expects to find include/libunwind_i.h before 41 // include/tdep-<arch>/libunwind_i.h, but soong prepends arch-specific 42 // include directories. To keep the include directories in the right 43 // order, pass "include" as an architecture specific include for every 44 // architecture. 45 arch: { 46 arm: { 47 local_include_dirs: [ 48 "include", 49 "include/tdep-arm", 50 ], 51 }, 52 arm64: { 53 local_include_dirs: [ 54 "include", 55 "include/tdep-aarch64", 56 ], 57 }, 58 mips: { 59 local_include_dirs: [ 60 "include", 61 "include/tdep-mips", 62 ], 63 }, 64 mips64: { 65 local_include_dirs: [ 66 "include", 67 "include/tdep-mips", 68 ], 69 }, 70 x86: { 71 local_include_dirs: [ 72 "include", 73 "include/tdep-x86", 74 ], 75 }, 76 x86_64: { 77 local_include_dirs: [ 78 "include", 79 "include/tdep-x86_64", 80 ], 81 }, 82 }, 83 84 target: { 85 android: { 86 // gcc 4.8 appears to be overeager declaring that a variable is uninitialized, 87 // under certain circumstances. Turn off this warning only for target so that 88 // coverage is still present for the host code. When the entire build system 89 // is switched to 4.9, then this can be removed. 90 cflags: ["-Wno-maybe-uninitialized"], 91 }, 92 darwin: { 93 enabled: false, 94 }, 95 }, 96 97 clang_cflags: [ 98 // src/mi/backtrace.c is misdetected as a bogus header guard by clang 3.5 99 // src/x86_64/Gstash_frame.c has unnecessary calls to labs. 100 "-Wno-header-guard", 101 "-Wno-absolute-value", 102 // The latest clang (r230699) does not allow SP/PC to be declared in inline asm lists. 103 "-Wno-inline-asm", 104 ], 105 106 debug: { 107 cflags: [ 108 "-UNDEBUG", 109 "-DDEBUG", 110 "-U_FORTIFY_SOURCE", 111 ], 112 }, 113 114 local_include_dirs: [ 115 "src", 116 ], 117} 118 119//----------------------------------------------------------------------- 120// libunwind shared and static library 121//----------------------------------------------------------------------- 122 123cc_library { 124 name: "libunwind", 125 defaults: ["libunwind_defaults"], 126 vendor_available: false, 127 vndk: { 128 enabled: true, 129 support_system_process: true, 130 }, 131 sdk_version: "21", 132 stl: "none", 133 134 srcs: [ 135 "src/mi/init.c", 136 "src/mi/flush_cache.c", 137 "src/mi/mempool.c", 138 "src/mi/strerror.c", 139 "src/mi/backtrace.c", 140 "src/mi/dyn-cancel.c", 141 "src/mi/dyn-info-list.c", 142 "src/mi/dyn-register.c", 143 "src/mi/map.c", 144 "src/mi/Lmap.c", 145 "src/mi/Ldyn-extract.c", 146 "src/mi/Lfind_dynamic_proc_info.c", 147 "src/mi/Lget_proc_info_by_ip.c", 148 "src/mi/Lget_proc_name.c", 149 "src/mi/Lput_dynamic_unwind_info.c", 150 "src/mi/Ldestroy_addr_space.c", 151 "src/mi/Lget_reg.c", 152 "src/mi/Lset_reg.c", 153 "src/mi/Lget_fpreg.c", 154 "src/mi/Lset_fpreg.c", 155 "src/mi/Lset_caching_policy.c", 156 "src/mi/Gdyn-extract.c", 157 "src/mi/Gdyn-remote.c", 158 "src/mi/Gfind_dynamic_proc_info.c", 159 "src/mi/Gget_accessors.c", 160 "src/mi/Gget_proc_info_by_ip.c", 161 "src/mi/Gget_proc_name.c", 162 "src/mi/Gput_dynamic_unwind_info.c", 163 "src/mi/Gdestroy_addr_space.c", 164 "src/mi/Gget_reg.c", 165 "src/mi/Gset_reg.c", 166 "src/mi/Gget_fpreg.c", 167 "src/mi/Gset_fpreg.c", 168 "src/mi/Gset_caching_policy.c", 169 "src/dwarf/Lexpr.c", 170 "src/dwarf/Lfde.c", 171 "src/dwarf/Lparser.c", 172 "src/dwarf/Lpe.c", 173 "src/dwarf/Lstep_dwarf.c", 174 "src/dwarf/Lfind_proc_info-lsb.c", 175 "src/dwarf/Lfind_unwind_table.c", 176 "src/dwarf/Gexpr.c", 177 "src/dwarf/Gfde.c", 178 "src/dwarf/Gfind_proc_info-lsb.c", 179 "src/dwarf/Gfind_unwind_table.c", 180 "src/dwarf/Gparser.c", 181 "src/dwarf/Gpe.c", 182 "src/dwarf/Gstep_dwarf.c", 183 "src/dwarf/global.c", 184 "src/os-common.c", 185 "src/os-linux.c", 186 "src/Los-common.c", 187 188 // ptrace files for remote unwinding. 189 "src/ptrace/_UPT_accessors.c", 190 "src/ptrace/_UPT_access_fpreg.c", 191 "src/ptrace/_UPT_access_mem.c", 192 "src/ptrace/_UPT_access_reg.c", 193 "src/ptrace/_UPT_create.c", 194 "src/ptrace/_UPT_destroy.c", 195 "src/ptrace/_UPT_find_proc_info.c", 196 "src/ptrace/_UPT_get_dyn_info_list_addr.c", 197 "src/ptrace/_UPT_put_unwind_info.c", 198 "src/ptrace/_UPT_get_proc_name.c", 199 "src/ptrace/_UPT_reg_offset.c", 200 "src/ptrace/_UPT_resume.c", 201 ], 202 203 arch: { 204 arm: { 205 srcs: [ 206 "src/arm/is_fpreg.c", 207 "src/arm/regname.c", 208 "src/arm/Gcreate_addr_space.c", 209 "src/arm/Gget_proc_info.c", 210 "src/arm/Gget_save_loc.c", 211 "src/arm/Gglobal.c", 212 "src/arm/Ginit.c", 213 "src/arm/Ginit_local.c", 214 "src/arm/Ginit_remote.c", 215 "src/arm/Gregs.c", 216 "src/arm/Gresume.c", 217 "src/arm/Gstep.c", 218 "src/arm/Lcreate_addr_space.c", 219 "src/arm/Lget_proc_info.c", 220 "src/arm/Lget_save_loc.c", 221 "src/arm/Lglobal.c", 222 "src/arm/Linit.c", 223 "src/arm/Linit_local.c", 224 "src/arm/Linit_remote.c", 225 "src/arm/Lregs.c", 226 "src/arm/Lresume.c", 227 "src/arm/Lstep.c", 228 229 "src/arm/getcontext.S", 230 "src/arm/Gis_signal_frame.c", 231 "src/arm/Gex_tables.c", 232 "src/arm/Lis_signal_frame.c", 233 "src/arm/Lex_tables.c", 234 ], 235 }, 236 arm64: { 237 srcs: [ 238 "src/aarch64/is_fpreg.c", 239 "src/aarch64/regname.c", 240 "src/aarch64/Gcreate_addr_space.c", 241 "src/aarch64/Gget_proc_info.c", 242 "src/aarch64/Gget_save_loc.c", 243 "src/aarch64/Gglobal.c", 244 "src/aarch64/Ginit.c", 245 "src/aarch64/Ginit_local.c", 246 "src/aarch64/Ginit_remote.c", 247 "src/aarch64/Gregs.c", 248 "src/aarch64/Gresume.c", 249 "src/aarch64/Gstep.c", 250 "src/aarch64/Lcreate_addr_space.c", 251 "src/aarch64/Lget_proc_info.c", 252 "src/aarch64/Lget_save_loc.c", 253 "src/aarch64/Lglobal.c", 254 "src/aarch64/Linit.c", 255 "src/aarch64/Linit_local.c", 256 "src/aarch64/Linit_remote.c", 257 "src/aarch64/Lregs.c", 258 "src/aarch64/Lresume.c", 259 "src/aarch64/Lstep.c", 260 261 "src/aarch64/Gis_signal_frame.c", 262 "src/aarch64/Lis_signal_frame.c", 263 ], 264 }, 265 mips: { 266 srcs: [ 267 "src/mips/is_fpreg.c", 268 "src/mips/regname.c", 269 "src/mips/Gcreate_addr_space.c", 270 "src/mips/Gget_proc_info.c", 271 "src/mips/Gget_save_loc.c", 272 "src/mips/Gglobal.c", 273 "src/mips/Ginit.c", 274 "src/mips/Ginit_local.c", 275 "src/mips/Ginit_remote.c", 276 "src/mips/Gregs.c", 277 "src/mips/Gresume.c", 278 "src/mips/Gstep.c", 279 "src/mips/Lcreate_addr_space.c", 280 "src/mips/Lget_proc_info.c", 281 "src/mips/Lget_save_loc.c", 282 "src/mips/Lglobal.c", 283 "src/mips/Linit.c", 284 "src/mips/Linit_local.c", 285 "src/mips/Linit_remote.c", 286 "src/mips/Lregs.c", 287 "src/mips/Lresume.c", 288 "src/mips/Lstep.c", 289 290 "src/mips/getcontext-android.S", 291 "src/mips/Gis_signal_frame.c", 292 "src/mips/Lis_signal_frame.c", 293 ], 294 }, 295 // mips and mips64 use the same sources but define _MIP_SIM differently 296 // to change the behavior. 297 // mips uses o32 abi (_MIPS_SIM == _ABIO32). 298 // mips64 uses n64 abi (_MIPS_SIM == _ABI64). 299 mips64: { 300 srcs: [ 301 "src/mips/is_fpreg.c", 302 "src/mips/regname.c", 303 "src/mips/Gcreate_addr_space.c", 304 "src/mips/Gget_proc_info.c", 305 "src/mips/Gget_save_loc.c", 306 "src/mips/Gglobal.c", 307 "src/mips/Ginit.c", 308 "src/mips/Ginit_local.c", 309 "src/mips/Ginit_remote.c", 310 "src/mips/Gregs.c", 311 "src/mips/Gresume.c", 312 "src/mips/Gstep.c", 313 "src/mips/Lcreate_addr_space.c", 314 "src/mips/Lget_proc_info.c", 315 "src/mips/Lget_save_loc.c", 316 "src/mips/Lglobal.c", 317 "src/mips/Linit.c", 318 "src/mips/Linit_local.c", 319 "src/mips/Linit_remote.c", 320 "src/mips/Lregs.c", 321 "src/mips/Lresume.c", 322 "src/mips/Lstep.c", 323 324 "src/mips/getcontext-android.S", 325 "src/mips/Gis_signal_frame.c", 326 "src/mips/Lis_signal_frame.c", 327 ], 328 }, 329 x86: { 330 srcs: [ 331 "src/x86/is_fpreg.c", 332 "src/x86/regname.c", 333 "src/x86/Gcreate_addr_space.c", 334 "src/x86/Gget_proc_info.c", 335 "src/x86/Gget_save_loc.c", 336 "src/x86/Gglobal.c", 337 "src/x86/Ginit.c", 338 "src/x86/Ginit_local.c", 339 "src/x86/Ginit_remote.c", 340 "src/x86/Gregs.c", 341 "src/x86/Gresume.c", 342 "src/x86/Gstep.c", 343 "src/x86/Lcreate_addr_space.c", 344 "src/x86/Lget_proc_info.c", 345 "src/x86/Lget_save_loc.c", 346 "src/x86/Lglobal.c", 347 "src/x86/Linit.c", 348 "src/x86/Linit_local.c", 349 "src/x86/Linit_remote.c", 350 "src/x86/Lregs.c", 351 "src/x86/Lresume.c", 352 "src/x86/Lstep.c", 353 354 "src/x86/getcontext-linux.S", 355 "src/x86/Gos-linux.c", 356 "src/x86/Los-linux.c", 357 ], 358 }, 359 x86_64: { 360 srcs: [ 361 "src/x86_64/is_fpreg.c", 362 "src/x86_64/regname.c", 363 "src/x86_64/Gcreate_addr_space.c", 364 "src/x86_64/Gget_proc_info.c", 365 "src/x86_64/Gget_save_loc.c", 366 "src/x86_64/Gglobal.c", 367 "src/x86_64/Ginit.c", 368 "src/x86_64/Ginit_local.c", 369 "src/x86_64/Ginit_remote.c", 370 "src/x86_64/Gregs.c", 371 "src/x86_64/Gresume.c", 372 "src/x86_64/Gstep.c", 373 "src/x86_64/Lcreate_addr_space.c", 374 "src/x86_64/Lget_proc_info.c", 375 "src/x86_64/Lget_save_loc.c", 376 "src/x86_64/Lglobal.c", 377 "src/x86_64/Linit.c", 378 "src/x86_64/Linit_local.c", 379 "src/x86_64/Linit_remote.c", 380 "src/x86_64/Lregs.c", 381 "src/x86_64/Lresume.c", 382 "src/x86_64/Lstep.c", 383 384 "src/x86_64/getcontext.S", 385 "src/x86_64/Gstash_frame.c", 386 "src/x86_64/Gtrace.c", 387 "src/x86_64/Gos-linux.c", 388 "src/x86_64/Lstash_frame.c", 389 "src/x86_64/Ltrace.c", 390 "src/x86_64/Los-linux.c", 391 "src/x86_64/setcontext.S", 392 ], 393 }, 394 }, 395 396 multilib: { 397 lib32: { 398 srcs: ["src/elf32.c"], 399 }, 400 lib64: { 401 srcs: ["src/elf64.c"], 402 }, 403 }, 404 405 target: { 406 linux_glibc: { 407 // Remove dependencies on libgcc 408 ldflags: ["-nostdlib"], 409 }, 410 linux_bionic: { 411 enabled: true, 412 }, 413 }, 414 415 export_include_dirs: ["include"], 416 417 shared_libs: ["liblzma"], 418 419 debug: { 420 //shared_libs: ["liblog"], 421 }, 422} 423 424//----------------------------------------------------------------------- 425// libunwindbacktrace static library 426//----------------------------------------------------------------------- 427cc_library_static { 428 name: "libunwindbacktrace", 429 defaults: ["libunwind_defaults"], 430 vendor_available: true, 431 sdk_version: "21", 432 srcs: [ 433 "src/unwind/BacktraceWrapper.c", 434 "src/unwind/DeleteException.c", 435 "src/unwind/FindEnclosingFunction.c", 436 "src/unwind/ForcedUnwind.c", 437 "src/unwind/GetBSP.c", 438 "src/unwind/GetCFA.c", 439 "src/unwind/GetDataRelBase.c", 440 "src/unwind/GetGR.c", 441 "src/unwind/GetIP.c", 442 "src/unwind/GetIPInfo.c", 443 "src/unwind/GetLanguageSpecificData.c", 444 "src/unwind/GetRegionStart.c", 445 "src/unwind/GetTextRelBase.c", 446 "src/unwind/RaiseException.c", 447 "src/unwind/Resume.c", 448 "src/unwind/Resume_or_Rethrow.c", 449 "src/unwind/SetGR.c", 450 "src/unwind/SetIP.c", 451 ], 452 453 cflags: [ 454 "-Wno-old-style-declaration", 455 "-fvisibility=hidden", 456 ], 457 458 target: { 459 linux_bionic: { 460 enabled: true, 461 }, 462 }, 463} 464 465//----------------------------------------------------------------------- 466// libunwind testing 467//----------------------------------------------------------------------- 468cc_test { 469 name: "libunwind-unit-tests", 470 srcs: ["android/tests/local_test.cpp"], 471 defaults: ["libunwind_defaults"], 472 473 cflags: [ 474 "-fno-builtin", 475 "-O0", 476 "-g", 477 ], 478 479 local_include_dirs: ["include"], 480 shared_libs: ["libunwind"], 481} 482 483/* 484// Run the unit tests built for x86 or x86_64. 485// ANDROIDMK TRANSLATION ERROR: unsupported conditional 486// ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64)) 487// ANDROIDMK TRANSLATION ERROR: unsupported conditional 488// ifneq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86)) 489LINKER = ["linker64"] 490TEST_SUFFIX = ["64"] 491// ANDROIDMK TRANSLATION ERROR: else from unsupported contitional 492// else 493LINKER = ["linker"] 494TEST_SUFFIX = ["32"] 495// ANDROIDMK TRANSLATION ERROR: endif from unsupported contitional 496// endif 497 498// ANDROIDMK TRANSLATION ERROR: endif from unsupported contitional 499// endif 500*/ 501