1// Copyright (C) 2020 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//      http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package {
16    default_team: "trendy_team_aaos_framework",
17    default_applicable_licenses: ["Android-Apache-2.0"],
18}
19
20cc_defaults {
21    name: "carwatchdogd_defaults",
22    cflags: [
23        "-Wall",
24        "-Wno-missing-field-initializers",
25        "-Werror",
26        "-Wno-unused-variable",
27        "-Wunused-parameter",
28        "-Wno-error=deprecated",
29        "-DANDROID_UTILS_REF_BASE_DISABLE_IMPLICIT_CONSTRUCTION",
30    ],
31    include_dirs: [
32        "system/libbase/include",
33    ],
34    generated_headers: [
35        "gen-native-dump-proto-headers",
36        "gen-native-dump-cppstream-proto-headers",
37    ],
38    shared_libs: [
39        "libbase",
40        "libbinder",
41        "libbinder_ndk",
42        "liblog",
43        "libmeminfo",
44        "libpsi",
45        "libutils",
46        "packagemanager_aidl-cpp",
47        "libprotoutil",
48        "libcutils",
49        "server_configurable_flags",
50    ],
51    static_libs: [
52        "android.automotive.watchdog.internal-ndk",
53        "android.automotive.watchdog-V3-ndk",
54        "android.car.feature-aconfig-cpp",
55        "libvhalclient",
56        "libwatchdog_properties",
57    ],
58    header_libs: [
59        "libgtest_prod_headers",
60    ],
61    defaults: [
62        "aconfig_lib_cc_shared_link.defaults",
63        "vhalclient_defaults",
64    ],
65}
66
67cc_library {
68    name: "libwatchdog_looper_wrapper",
69    srcs: [
70        "src/LooperWrapper.cpp",
71    ],
72    defaults: [
73        "carwatchdogd_defaults",
74    ],
75    export_include_dirs: [
76        "src",
77    ],
78}
79
80cc_library {
81    name: "libwatchdog_package_info_resolver",
82    srcs: [
83        "src/PackageInfoResolver.cpp",
84    ],
85    defaults: [
86        "carwatchdogd_defaults",
87    ],
88    whole_static_libs: [
89        "libwatchdog_looper_wrapper",
90    ],
91    shared_libs: [
92        "libprocessgroup",
93    ],
94    export_include_dirs: [
95        "src",
96    ],
97}
98
99cc_defaults {
100    name: "libwatchdog_perf_service_defaults",
101    shared_libs: [
102        "libprocessgroup",
103        "libtinyxml2",
104    ],
105}
106
107cc_library {
108    name: "libwatchdog_binder_utils",
109    srcs: [
110        "src/AIBinderDeathRegistrationWrapper.cpp",
111    ],
112    defaults: [
113        "carwatchdogd_defaults",
114    ],
115}
116
117cc_library {
118    name: "libwatchdog_perf_service",
119    defaults: [
120        "carwatchdogd_defaults",
121        "libwatchdog_perf_service_defaults",
122    ],
123    srcs: [
124        "src/IoOveruseConfigs.cpp",
125        "src/IoOveruseMonitor.cpp",
126        "src/OveruseConfigurationXmlHelper.cpp",
127        "src/PerformanceProfiler.cpp",
128        "src/PressureMonitor.cpp",
129        "src/ProcDiskStatsCollector.cpp",
130        "src/ProcStatCollector.cpp",
131        "src/UidCpuStatsCollector.cpp",
132        "src/UidIoStatsCollector.cpp",
133        "src/UidProcStatsCollector.cpp",
134        "src/UidStatsCollector.cpp",
135        "src/WatchdogPerfService.cpp",
136    ],
137    static_libs: [
138        "libwatchdog_binder_utils",
139        "libwatchdog_package_info_resolver",
140        "libwatchdog_looper_wrapper",
141    ],
142    export_include_dirs: [
143        "src",
144    ],
145    target: {
146        android: {
147            proto: {
148                type: "lite",
149            },
150            shared_libs: [
151                "libprotobuf-cpp-full",
152            ],
153        },
154    },
155}
156
157filegroup {
158    name: "watchdog_test_xml_files",
159    srcs: [
160        "tests/data/*.xml",
161    ],
162}
163
164cc_test {
165    name: "libwatchdog_test",
166    defaults: [
167        "carwatchdogd_defaults",
168        "libwatchdog_perf_service_defaults",
169        "libwatchdog_process_service_defaults",
170        "libwatchdog_service_manager_defaults",
171    ],
172    generated_sources: ["gen-native-dump-proto-srcs"],
173    test_suites: [
174        "general-tests",
175        "automotive-tests",
176    ],
177    tidy_disabled_srcs: [
178        // b/207508335
179        "tests/PackageInfoResolverTest.cpp",
180    ],
181    tidy_timeout_srcs: [
182        "tests/IoOveruseMonitorTest.cpp",
183        "tests/WatchdogServiceHelperTest.cpp",
184    ],
185    srcs: [
186        "tests/IoOveruseConfigsTest.cpp",
187        "tests/IoOveruseMonitorTest.cpp",
188        "tests/PerformanceProfilerTest.cpp",
189        "tests/PressureMonitorTest.cpp",
190        "tests/LooperStub.cpp",
191        "tests/OveruseConfigurationTestUtils.cpp",
192        "tests/OveruseConfigurationXmlHelperTest.cpp",
193        "tests/PackageInfoResolverTest.cpp",
194        "tests/PackageInfoTestUtils.cpp",
195        "tests/ProcDiskStatsCollectorTest.cpp",
196        "tests/ProcPidDir.cpp",
197        "tests/ProcStatCollectorTest.cpp",
198        "tests/ThreadPriorityControllerTest.cpp",
199        "tests/UidIoStatsCollectorTest.cpp",
200        "tests/UidProcStatsCollectorTest.cpp",
201        "tests/UidCpuStatsCollectorTest.cpp",
202        "tests/UidStatsCollectorTest.cpp",
203        "tests/WatchdogBinderMediatorTest.cpp",
204        "tests/WatchdogInternalHandlerTest.cpp",
205        "tests/WatchdogPerfServiceTest.cpp",
206        "tests/WatchdogProcessServiceTest.cpp",
207        "tests/WatchdogServiceHelperTest.cpp",
208
209    ],
210    static_libs: [
211        "[email protected]",
212        "libgmock",
213        "libgtest",
214        "libwatchdog_binder_mediator",
215        "libwatchdog_perf_service",
216        "libwatchdog_process_service",
217        "libwatchdog_service_manager",
218    ],
219    data: [":watchdog_test_xml_files"],
220    target: {
221        android: {
222            proto: {
223                type: "lite",
224            },
225            shared_libs: [
226                "libprotobuf-cpp-full",
227            ],
228        },
229    },
230}
231
232cc_defaults {
233    name: "libwatchdog_process_service_defaults",
234    shared_libs: [
235        "libhidlbase",
236    ],
237}
238
239cc_library_static {
240    name: "libwatchdog_process_service",
241    srcs: [
242        "src/WatchdogProcessService.cpp",
243    ],
244    static_libs: [
245        "libwatchdog_binder_utils",
246    ],
247    defaults: [
248        "carwatchdogd_defaults",
249        "libwatchdog_process_service_defaults",
250    ],
251    shared_libs: [
252        "[email protected]",
253    ],
254}
255
256cc_library {
257    name: "libwatchdog_binder_mediator",
258    defaults: [
259        "carwatchdogd_defaults",
260        "libwatchdog_perf_service_defaults",
261        "libwatchdog_process_service_defaults",
262    ],
263    srcs: [
264        "src/ThreadPriorityController.cpp",
265        "src/WatchdogBinderMediator.cpp",
266        "src/WatchdogInternalHandler.cpp",
267        "src/WatchdogServiceHelper.cpp",
268    ],
269    shared_libs: [
270        "[email protected]",
271    ],
272    static_libs: [
273        "libwatchdog_binder_utils",
274        "libwatchdog_perf_service",
275        "libwatchdog_process_service",
276    ],
277    export_include_dirs: [
278        "src",
279    ],
280}
281
282cc_defaults {
283    name: "libwatchdog_service_manager_defaults",
284    defaults: [
285        "libwatchdog_perf_service_defaults",
286        "libwatchdog_process_service_defaults",
287    ],
288    static_libs: [
289        "libwatchdog_binder_mediator",
290        "libwatchdog_binder_utils",
291        "libwatchdog_package_info_resolver",
292        "libwatchdog_perf_service",
293        "libwatchdog_process_service",
294    ],
295}
296
297cc_library {
298    name: "libwatchdog_service_manager",
299    defaults: [
300        "carwatchdogd_defaults",
301        "libwatchdog_service_manager_defaults",
302    ],
303    srcs: [
304        "src/ServiceManager.cpp",
305    ],
306}
307
308vintf_fragment {
309    name: "carwatchdogd.xml",
310    src: "carwatchdogd.xml",
311}
312
313cc_binary {
314    name: "carwatchdogd",
315    defaults: [
316        "carwatchdogd_defaults",
317        "libwatchdog_service_manager_defaults",
318    ],
319    srcs: [
320        "src/main.cpp",
321    ],
322    init_rc: ["carwatchdogd.rc"],
323    shared_libs: [
324        "[email protected]",
325    ],
326    static_libs: [
327        "libwatchdog_binder_utils",
328        "libwatchdog_service_manager",
329    ],
330    vintf_fragment_modules: ["carwatchdogd.xml"],
331    required: [
332        "system_resource_overuse_configuration.xml",
333        "third_party_resource_overuse_configuration.xml",
334    ],
335}
336
337prebuilt_etc {
338    name: "system_resource_overuse_configuration.xml",
339    src: "data/system_resource_overuse_configuration.xml",
340    sub_dir: "automotive/watchdog/",
341}
342
343prebuilt_etc {
344    name: "third_party_resource_overuse_configuration.xml",
345    src: "data/third_party_resource_overuse_configuration.xml",
346    sub_dir: "automotive/watchdog/",
347}
348