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