xref: /aosp_15_r20/external/gwp_asan/Android.bp (revision b302aa5039729da396909ef03e815160dab4448c)
1*b302aa50SMitch Phillips//
2*b302aa50SMitch Phillips// Copyright (C) 2019 The Android Open Source Project
3*b302aa50SMitch Phillips//
4*b302aa50SMitch Phillips// Licensed under the Apache License, Version 2.0 (the "License");
5*b302aa50SMitch Phillips// you may not use this file except in compliance with the License.
6*b302aa50SMitch Phillips// You may obtain a copy of the License at
7*b302aa50SMitch Phillips//
8*b302aa50SMitch Phillips//      http://www.apache.org/licenses/LICENSE-2.0
9*b302aa50SMitch Phillips//
10*b302aa50SMitch Phillips// Unless required by applicable law or agreed to in writing, software
11*b302aa50SMitch Phillips// distributed under the License is distributed on an "AS IS" BASIS,
12*b302aa50SMitch Phillips// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*b302aa50SMitch Phillips// See the License for the specific language governing permissions and
14*b302aa50SMitch Phillips// limitations under the License.
15*b302aa50SMitch Phillips//
16*b302aa50SMitch Phillips
17*b302aa50SMitch Phillipspackage {
18*b302aa50SMitch Phillips    default_applicable_licenses: ["external_gwp_asan_license"],
19*b302aa50SMitch Phillips}
20*b302aa50SMitch Phillips
21*b302aa50SMitch Phillips// Added automatically by a large-scale-change that took the approach of
22*b302aa50SMitch Phillips// 'apply every license found to every target'. While this makes sure we respect
23*b302aa50SMitch Phillips// every license restriction, it may not be entirely correct.
24*b302aa50SMitch Phillips//
25*b302aa50SMitch Phillips// e.g. GPL in an MIT project might only apply to the contrib/ directory.
26*b302aa50SMitch Phillips//
27*b302aa50SMitch Phillips// Please consider splitting the single license below into multiple licenses,
28*b302aa50SMitch Phillips// taking care not to lose any license_kind information, and overriding the
29*b302aa50SMitch Phillips// default license using the 'licenses: [...]' property on targets as needed.
30*b302aa50SMitch Phillips//
31*b302aa50SMitch Phillips// For unused files, consider creating a 'fileGroup' with "//visibility:private"
32*b302aa50SMitch Phillips// to attach the license to, and including a comment whether the files may be
33*b302aa50SMitch Phillips// used in the current project.
34*b302aa50SMitch Phillips// See: http://go/android-license-faq
35*b302aa50SMitch Phillipslicense {
36*b302aa50SMitch Phillips    name: "external_gwp_asan_license",
37*b302aa50SMitch Phillips    visibility: [":__subpackages__"],
38*b302aa50SMitch Phillips    license_kinds: [
39*b302aa50SMitch Phillips        "SPDX-license-identifier-Apache-2.0",
40*b302aa50SMitch Phillips        "SPDX-license-identifier-BSD",
41*b302aa50SMitch Phillips        "SPDX-license-identifier-MIT",
42*b302aa50SMitch Phillips        "SPDX-license-identifier-NCSA",
43*b302aa50SMitch Phillips    ],
44*b302aa50SMitch Phillips    license_text: [
45*b302aa50SMitch Phillips        "LICENSE.TXT",
46*b302aa50SMitch Phillips    ],
47*b302aa50SMitch Phillips}
48*b302aa50SMitch Phillips
49*b302aa50SMitch Phillipscc_defaults {
50*b302aa50SMitch Phillips    name: "gwp_asan_defaults",
51*b302aa50SMitch Phillips    host_supported: true,
52*b302aa50SMitch Phillips    vendor_available: true,
53*b302aa50SMitch Phillips    product_available: true,
54*b302aa50SMitch Phillips    recovery_available: true,
55*b302aa50SMitch Phillips    native_bridge_supported: true,
56*b302aa50SMitch Phillips    ramdisk_available: true,
57*b302aa50SMitch Phillips    vendor_ramdisk_available: true,
58*b302aa50SMitch Phillips
59*b302aa50SMitch Phillips    // GWP-ASan currently has no support for darwin.
60*b302aa50SMitch Phillips    target: {
61*b302aa50SMitch Phillips        darwin: {
62*b302aa50SMitch Phillips            enabled: false,
63*b302aa50SMitch Phillips        },
64*b302aa50SMitch Phillips    },
65*b302aa50SMitch Phillips    min_sdk_version: "S",
66*b302aa50SMitch Phillips}
67*b302aa50SMitch Phillips
68*b302aa50SMitch Phillipscc_defaults {
69*b302aa50SMitch Phillips    name: "gwp_asan_no_libs_defaults",
70*b302aa50SMitch Phillips    defaults: ["gwp_asan_defaults"],
71*b302aa50SMitch Phillips
72*b302aa50SMitch Phillips    // GWP-ASan is used by bionic libc, and should have no libc/libc++
73*b302aa50SMitch Phillips    // dependencies.
74*b302aa50SMitch Phillips    target: {
75*b302aa50SMitch Phillips        bionic: {
76*b302aa50SMitch Phillips            system_shared_libs: [],
77*b302aa50SMitch Phillips            header_libs: ["libc_headers"],
78*b302aa50SMitch Phillips        },
79*b302aa50SMitch Phillips    },
80*b302aa50SMitch Phillips    stl: "none",
81*b302aa50SMitch Phillips}
82*b302aa50SMitch Phillips
83*b302aa50SMitch Phillipscc_library_headers {
84*b302aa50SMitch Phillips    name: "gwp_asan_headers",
85*b302aa50SMitch Phillips    defaults: [
86*b302aa50SMitch Phillips        "gwp_asan_defaults",
87*b302aa50SMitch Phillips        "gwp_asan_no_libs_defaults",
88*b302aa50SMitch Phillips    ],
89*b302aa50SMitch Phillips    export_include_dirs: [
90*b302aa50SMitch Phillips        ".",
91*b302aa50SMitch Phillips    ],
92*b302aa50SMitch Phillips    apex_available: [
93*b302aa50SMitch Phillips        // This header lib is compiled also as part of the platform due to libasync_safe
94*b302aa50SMitch Phillips        // and others that are compiled with this header and are statically included
95*b302aa50SMitch Phillips        // in the platform side.
96*b302aa50SMitch Phillips        "//apex_available:platform",
97*b302aa50SMitch Phillips        "com.android.runtime",
98*b302aa50SMitch Phillips    ],
99*b302aa50SMitch Phillips}
100*b302aa50SMitch Phillips
101*b302aa50SMitch Phillips// Only static linkage is provided for performance reasons.
102*b302aa50SMitch Phillipscc_library_static {
103*b302aa50SMitch Phillips    name: "gwp_asan",
104*b302aa50SMitch Phillips    defaults: ["gwp_asan_no_libs_defaults"],
105*b302aa50SMitch Phillips    header_libs: [
106*b302aa50SMitch Phillips        "gwp_asan_headers",
107*b302aa50SMitch Phillips    ],
108*b302aa50SMitch Phillips    srcs: [
109*b302aa50SMitch Phillips        "gwp_asan/common.cpp",
110*b302aa50SMitch Phillips        "gwp_asan/crash_handler.cpp", // for __gwp_asan_error_is_mine in libc().
111*b302aa50SMitch Phillips        "gwp_asan/guarded_pool_allocator.cpp",
112*b302aa50SMitch Phillips        "gwp_asan/platform_specific/common_posix.cpp",
113*b302aa50SMitch Phillips        "gwp_asan/platform_specific/guarded_pool_allocator_posix.cpp",
114*b302aa50SMitch Phillips        "gwp_asan/platform_specific/mutex_posix.cpp",
115*b302aa50SMitch Phillips        "gwp_asan/platform_specific/utilities_posix.cpp",
116*b302aa50SMitch Phillips        "gwp_asan/stack_trace_compressor.cpp",
117*b302aa50SMitch Phillips    ],
118*b302aa50SMitch Phillips    apex_available: [
119*b302aa50SMitch Phillips        // Required to not occlude the default platform variation from being
120*b302aa50SMitch Phillips        // skipped by the apex mutator. If this happens - the license file for
121*b302aa50SMitch Phillips        // the static GWP-ASan library won't be generated, and you'll get errors
122*b302aa50SMitch Phillips        // at build time.
123*b302aa50SMitch Phillips        "//apex_available:platform",
124*b302aa50SMitch Phillips
125*b302aa50SMitch Phillips        "com.android.runtime", // GWP-ASan is used in libc.
126*b302aa50SMitch Phillips        "com.android.media.swcodec", // libc_scudo (from media) uses GWP-ASan.
127*b302aa50SMitch Phillips    ],
128*b302aa50SMitch Phillips}
129*b302aa50SMitch Phillips
130*b302aa50SMitch Phillips// GWP-ASan crash handler API. Provides all the tools you need to symbolize a
131*b302aa50SMitch Phillips// GWP-ASan crash.
132*b302aa50SMitch Phillipscc_library_static {
133*b302aa50SMitch Phillips    name: "gwp_asan_crash_handler",
134*b302aa50SMitch Phillips    defaults: ["gwp_asan_no_libs_defaults"],
135*b302aa50SMitch Phillips    header_libs: [
136*b302aa50SMitch Phillips        "gwp_asan_headers",
137*b302aa50SMitch Phillips    ],
138*b302aa50SMitch Phillips    srcs: [
139*b302aa50SMitch Phillips        "gwp_asan/common.cpp",
140*b302aa50SMitch Phillips        "gwp_asan/crash_handler.cpp",
141*b302aa50SMitch Phillips        "gwp_asan/platform_specific/common_posix.cpp",
142*b302aa50SMitch Phillips        "gwp_asan/platform_specific/utilities_posix.cpp",
143*b302aa50SMitch Phillips        "gwp_asan/stack_trace_compressor.cpp",
144*b302aa50SMitch Phillips    ],
145*b302aa50SMitch Phillips    apex_available: [
146*b302aa50SMitch Phillips        "//apex_available:platform",
147*b302aa50SMitch Phillips        "com.android.runtime",
148*b302aa50SMitch Phillips    ],
149*b302aa50SMitch Phillips}
150*b302aa50SMitch Phillips
151*b302aa50SMitch Phillipscc_fuzz {
152*b302aa50SMitch Phillips    name: "stack_trace_compressor_fuzzer",
153*b302aa50SMitch Phillips    host_supported: true,
154*b302aa50SMitch Phillips    srcs: ["tools/stack_trace_compressor_fuzzer.cpp"],
155*b302aa50SMitch Phillips    static_libs: ["gwp_asan"],
156*b302aa50SMitch Phillips}
157*b302aa50SMitch Phillips
158*b302aa50SMitch Phillipscc_fuzz {
159*b302aa50SMitch Phillips    name: "options_parser_fuzzer",
160*b302aa50SMitch Phillips    host_supported: true,
161*b302aa50SMitch Phillips    srcs: [
162*b302aa50SMitch Phillips        "tools/options_parser_fuzzer.cpp",
163*b302aa50SMitch Phillips        "gwp_asan/optional/options_parser.cpp",
164*b302aa50SMitch Phillips    ],
165*b302aa50SMitch Phillips    static_libs: ["gwp_asan"],
166*b302aa50SMitch Phillips}
167*b302aa50SMitch Phillips
168*b302aa50SMitch Phillips// These unit tests are also continuously run upstream in LLVM's buildbots.
169*b302aa50SMitch Phillipscc_test {
170*b302aa50SMitch Phillips    name: "gwp_asan_unittest",
171*b302aa50SMitch Phillips    defaults: ["linux_bionic_supported"],
172*b302aa50SMitch Phillips    static_libs: [
173*b302aa50SMitch Phillips        "gwp_asan",
174*b302aa50SMitch Phillips        "gwp_asan_crash_handler",
175*b302aa50SMitch Phillips        "libasync_safe",
176*b302aa50SMitch Phillips        "liblog",
177*b302aa50SMitch Phillips        "libunwindstack_no_dex",
178*b302aa50SMitch Phillips        "liblzma", // Dependency from libunwindstack.
179*b302aa50SMitch Phillips        "libz", // Dependency from libunwindstack.
180*b302aa50SMitch Phillips    ],
181*b302aa50SMitch Phillips    shared_libs: [
182*b302aa50SMitch Phillips        "libbase",
183*b302aa50SMitch Phillips    ],
184*b302aa50SMitch Phillips
185*b302aa50SMitch Phillips    ldflags: [
186*b302aa50SMitch Phillips        // Ensure that ICF doesn't clobber DeallocateMemory2 into
187*b302aa50SMitch Phillips        // DeallocateMemory in tests/backtrace.cpp. This is done in the linker,
188*b302aa50SMitch Phillips        // so `optnone` in the function declaration doesn't help.
189*b302aa50SMitch Phillips        "-Wl,--icf=none",
190*b302aa50SMitch Phillips    ],
191*b302aa50SMitch Phillips    srcs: [
192*b302aa50SMitch Phillips        "android/test_backtrace.cpp",
193*b302aa50SMitch Phillips        "android/test_printf.cpp",
194*b302aa50SMitch Phillips        "gwp_asan/optional/options_parser.cpp",
195*b302aa50SMitch Phillips        "gwp_asan/optional/segv_handler_posix.cpp",
196*b302aa50SMitch Phillips        "gwp_asan/tests/alignment.cpp",
197*b302aa50SMitch Phillips        "gwp_asan/tests/backtrace.cpp",
198*b302aa50SMitch Phillips        "gwp_asan/tests/basic.cpp",
199*b302aa50SMitch Phillips        "gwp_asan/tests/compression.cpp",
200*b302aa50SMitch Phillips        "gwp_asan/tests/crash_handler_api.cpp",
201*b302aa50SMitch Phillips        "gwp_asan/tests/enable_disable.cpp",
202*b302aa50SMitch Phillips        "gwp_asan/tests/harness.cpp",
203*b302aa50SMitch Phillips        "gwp_asan/tests/iterate.cpp",
204*b302aa50SMitch Phillips        "gwp_asan/tests/late_init.cpp",
205*b302aa50SMitch Phillips        "gwp_asan/tests/mutex_test.cpp",
206*b302aa50SMitch Phillips        "gwp_asan/tests/never_allocated.cpp",
207*b302aa50SMitch Phillips        "gwp_asan/tests/recoverable.cpp",
208*b302aa50SMitch Phillips        "gwp_asan/tests/options.cpp",
209*b302aa50SMitch Phillips        "gwp_asan/tests/slot_reuse.cpp",
210*b302aa50SMitch Phillips        "gwp_asan/tests/thread_contention.cpp",
211*b302aa50SMitch Phillips    ],
212*b302aa50SMitch Phillips    include_dirs: ["bionic/libc/async_safe/include"],
213*b302aa50SMitch Phillips    test_suites: ["general-tests"],
214*b302aa50SMitch Phillips    cflags: [
215*b302aa50SMitch Phillips        // GWP-ASan requires anything that uses GuardedPoolAllocator headers to
216*b302aa50SMitch Phillips        // use platform (ELF) TLS.
217*b302aa50SMitch Phillips        "-fno-emulated-tls",
218*b302aa50SMitch Phillips
219*b302aa50SMitch Phillips        // Ensure that the helper functions in test/backtrace.cpp don't get
220*b302aa50SMitch Phillips        // tail-call optimised, as this breaks the unwind chain.
221*b302aa50SMitch Phillips        "-fno-optimize-sibling-calls",
222*b302aa50SMitch Phillips    ],
223*b302aa50SMitch Phillips}
224