1// Copyright (C) 2019 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//
15//
16
17// Build the Car service.
18
19package {
20    default_team: "trendy_team_aaos_framework",
21    default_applicable_licenses: ["Android-Apache-2.0"],
22}
23
24genrule {
25    name: "statslog-Car-java-gen",
26    tools: ["stats-log-api-gen"],
27    cmd: "$(location stats-log-api-gen) --java $(out) --module car --javaPackage com.android.car" +
28        " --javaClass CarStatsLog",
29    out: ["com/android/car/CarStatsLog.java"],
30}
31
32gensrcs {
33    name: "gen-car-service-dump-javastream-protos",
34
35    tools: [
36        "aprotoc",
37        "protoc-gen-javastream",
38        "soong_zip",
39    ],
40
41    cmd: "mkdir -p $(genDir)/$(in) " +
42        "&& $(location aprotoc) " +
43        "  --plugin=$(location protoc-gen-javastream) " +
44        "  --javastream_out=$(genDir)/$(in) " +
45        "  -I . " +
46        "  $(in) " +
47        "&& $(location soong_zip) -jar -o $(out) -C $(genDir)/$(in) -D $(genDir)/$(in)",
48
49    srcs: [
50        ":car-service-dump-proto-srcs",
51    ],
52
53    output_extension: "srcjar",
54}
55
56genrule {
57    name: "gen-native-dump-cppstream-proto-headers",
58    tools: [
59        "aprotoc",
60        "protoc-gen-cppstream",
61    ],
62
63    cmd: "mkdir -p $(genDir) " +
64        "&& $(location aprotoc) " +
65        "  --plugin=$(location protoc-gen-cppstream) " +
66        "  --cppstream_out=$(genDir) " +
67        "  --cppstream_opt=experimental_allow_proto3_optional " +
68        "  -I . " +
69        "  $(in) ",
70    srcs: [
71        ":native-dump-proto-srcs",
72    ],
73
74    out: [
75        "packages/services/Car/service/proto/android/car/watchdog/carwatchdog_daemon_dump.proto.h",
76        "packages/services/Car/service/proto/android/car/watchdog/performance_stats.proto.h",
77        "packages/services/Car/service/proto/android/car/watchdog/health_check_client_info.proto.h",
78    ],
79}
80
81genrule {
82    name: "gen-native-dump-proto-headers",
83    tools: [
84        "aprotoc",
85    ],
86
87    cmd: "mkdir -p $(genDir) " +
88        "&& $(location aprotoc) " +
89        "  --cpp_out=$(genDir) " +
90        "  --proto_path=external/protobuf/src/google/protobuf " +
91        "  -I . " +
92        "  $(in) ",
93    srcs: [
94        ":native-dump-proto-srcs",
95    ],
96    out: [
97        "packages/services/Car/service/proto/android/car/watchdog/carwatchdog_daemon_dump.pb.h",
98        "packages/services/Car/service/proto/android/car/watchdog/performance_stats.pb.h",
99        "packages/services/Car/service/proto/android/car/watchdog/health_check_client_info.pb.h",
100    ],
101}
102
103genrule {
104    name: "gen-native-dump-proto-srcs",
105    tools: [
106        "aprotoc",
107    ],
108
109    cmd: "mkdir -p $(genDir) " +
110        "&& $(location aprotoc) " +
111        "  --cpp_out=$(genDir) " +
112        "  --proto_path=external/protobuf/src/google/protobuf " +
113        "  -I . " +
114        "  $(in) ",
115    srcs: [
116        ":native-dump-proto-srcs",
117    ],
118    out: [
119        "packages/services/Car/service/proto/android/car/watchdog/carwatchdog_daemon_dump.pb.cc",
120        "packages/services/Car/service/proto/android/car/watchdog/performance_stats.pb.cc",
121        "packages/services/Car/service/proto/android/car/watchdog/health_check_client_info.pb.cc",
122    ],
123}
124
125filegroup {
126    name: "car-service-dump-proto-srcs",
127    srcs: [
128        "proto/android/car/**/*_dump.proto",
129    ],
130    exclude_srcs: [
131        ":native-dump-proto-srcs",
132    ],
133}
134
135filegroup {
136    name: "native-dump-proto-srcs",
137    srcs: [
138        "proto/android/car/watchdog/*_daemon_dump.proto",
139        "proto/android/car/watchdog/performance_stats.proto",
140        "proto/android/car/watchdog/health_check_client_info.proto",
141    ],
142}
143
144filegroup {
145    name: "car-service-non-dump-proto-srcs",
146    srcs: [
147        "proto/android/car/telemetry/*.proto",
148        "proto/android/car/watchdog/atoms.proto",
149    ],
150}
151
152java_defaults {
153    name: "carservice-updatable-min-java-defaults",
154
155    defaults: [
156        "car-framework-aconfig-libraries",
157        "latest_android_hardware_automotive_audiocontrol_java_static",
158        "vhal-interface-defaults",
159    ],
160
161    srcs: [
162        // add full source for all codes under p/s/Car to reduce unnecessary library allow listing.
163        ":IVehicleGeneratedJavaFiles-V4",
164        ":android.car.cluster.navigation-src",
165        ":android.car.watchdoglib-src",
166        ":cartelemetry-cardata-proto-srcs",
167        ":cartelemetryservice-proto-srcs",
168        ":car-service-non-dump-proto-srcs",
169        ":com.android.car.procfsinspector-client-src",
170        ":gen-car-service-dump-javastream-protos",
171        ":iscriptexecutor_aidl",
172        ":statslog-Car-java-gen",
173        ":VhalTestVendorProperties",
174        "src/**/*.java",
175    ],
176
177    aidl: {
178        include_dirs: [
179            "packages/services/Car/libs/procfs-inspector/client/src",
180        ],
181    },
182
183    resource_dirs: ["res"],
184
185    // Resource is still com.android.car.R
186    aaptflags: [
187        "--custom-package com.android.car",
188    ],
189
190    libs: [
191        "android.car-module.impl",
192        "android.car.builtin.stubs.module_lib",
193        "framework-annotations-lib",
194        "framework-bluetooth.stubs.module_lib",
195        "framework-connectivity.stubs.module_lib",
196        "framework-connectivity-t.stubs.module_lib",
197        "framework-location.stubs.module_lib",
198        "framework-statsd.stubs.module_lib",
199        "framework-tethering.stubs.module_lib",
200        "framework-wifi.stubs.module_lib",
201        "modules-utils-os",
202        "modules-utils-preconditions",
203        "modules-utils-shell-command-handler",
204    ],
205
206    static_libs: [
207        "android.automotive.powerpolicy.delegate-V1-java",
208        "android.automotive.telemetry.internal-V2-java", // ICarTelemetryInternal
209        "android.automotive.watchdog.internal-java",
210        "android.frameworks.automotive.powerpolicy.internal-V1-java",
211        "android.frameworks.automotive.powerpolicy-V3-java",
212        "android.hidl.base-V1.0-java",
213        "android.hardware.automotive.audiocontrol-V1.0-java",
214        "android.hardware.automotive.audiocontrol-V2.0-java",
215        "android.hardware.automotive.remoteaccess-V2-java",
216        "android.hardware.health-V1.0-java",
217        "android.hardware.health-V2.0-java",
218        "android.hardware.automotive.occupant_awareness-V1-java",
219        "android.media.audiopolicy-aconfig-java",
220        "libprotobuf-java-lite",
221        "modules-utils-expresslog",
222    ],
223
224    proto: {
225        type: "lite",
226    },
227
228    optimize: {
229        proguard_flags_files: ["proguard.flags"],
230        enabled: false,
231    },
232
233    sdk_version: "module_current",
234
235    java_resources: [
236        ":CarSvcProps_JSON",
237        ":VehicleHalDefaultProperties_JSON",
238    ],
239}
240
241java_defaults {
242    name: "carservice-updatable-java-defaults",
243
244    visibility: [
245        "//packages/services/Car:__subpackages__",
246    ],
247
248    flags_packages: [
249        "android.car.feature-aconfig",
250    ],
251
252    defaults: ["carservice-updatable-min-java-defaults"],
253
254    // TODO(b/288271411): enable it when car mainline module is supported
255    // min_sdk_version: "33",
256}
257
258// Non-module build
259android_app {
260    name: "CarServiceUpdatableNonModule",
261
262    defaults: ["carservice-updatable-java-defaults"],
263    privileged: true,
264
265    required: ["allowed_privapp_com.android.car"],
266}
267
268// Added to car.framework module
269android_app {
270    name: "CarServiceUpdatable",
271
272    defaults: ["carservice-updatable-java-defaults"],
273    privileged: true,
274
275    apex_available: ["com.android.car.framework"],
276}
277
278java_library {
279    name: "car-service-common-util-static-lib",
280
281    defaults: ["vhal-interface-defaults"],
282
283    srcs: [
284        "src/com/android/car/CarServiceBase.java",
285        "src/com/android/car/CarServiceUtils.java",
286        "src/com/android/car/CarLog.java",
287        "src/com/android/car/CarSystemService.java",
288        "src/com/android/car/util/TransitionLog.java",
289    ],
290
291    libs: [
292        "android.car.builtin.stubs.module_lib",
293        "android.car",
294    ],
295}
296
297// Minimum code shared with carservice builtin.
298// Be careful with what is added here as it takes double space.
299// Also static instance sharing will not work.
300java_library {
301    name: "car-service-lib-for-builtin",
302
303    srcs: [
304        "src/com/android/car/CarLog.java",
305    ],
306
307    libs: [
308        "android.car",
309    ],
310}
311
312//####################################################################################
313// Build a static library to help mocking various car services in testing. This is meant to be used
314// for internal unit tests around the car service.
315//####################################################################################
316android_library {
317    name: "car-service-test-static-lib",
318
319    defaults: ["carservice-updatable-min-java-defaults"],
320
321    manifest: "EmptyAndroidManifest.xml",
322
323    // Avoid using the java_sdk_library version for android.car.builtin since it cannot be found
324    // during runtime on host. Use a java_library version instead.
325    exclude_uses_libs: ["android.car.builtin"],
326
327    static_libs: [
328        "android.car.builtin.testonly",
329    ],
330}
331
332filegroup {
333    name: "iscriptexecutor_aidl",
334    srcs: [
335        "src/com/android/car/telemetry/scriptexecutorinterface/BundleList.aidl",
336        "src/com/android/car/telemetry/scriptexecutorinterface/IScriptExecutor.aidl",
337        "src/com/android/car/telemetry/scriptexecutorinterface/IScriptExecutorListener.aidl",
338    ],
339    path: "src",
340}
341
342java_defaults {
343    name: "vhal-interface-defaults",
344    static_libs: [
345        "android.hardware.automotive.vehicle-V2.0-java",
346        "android.hardware.automotive.vehicle-V4-java",
347        "android.hardware.automotive.vehicle.property-V4-java",
348    ],
349}
350