1// Copyright (C) 2022 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_applicable_licenses: ["Android-Apache-2.0"],
17}
18
19genrule {
20    name: "statslog-adservices-java-gen",
21    tools: ["stats-log-api-gen"],
22    cmd: "$(location stats-log-api-gen) --java $(out) --module adservices" +
23        " --javaPackage com.android.adservices.service.stats --javaClass AdServicesStatsLog",
24    out: ["com/android/adservices/service/stats/AdServicesStatsLog.java"],
25}
26
27// Converts the text proto Cobalt registry into a binary proto.
28genrule {
29    name: "cobalt-registry-binarypb-gen",
30    srcs: [
31        "resources/cobalt_registry.textpb",
32        ":adservices-cobalt-proto",
33    ],
34    out: ["cobalt_registry.binarypb"],
35    tools: ["aprotoc"],
36    cmd: "$(location aprotoc) --encode=cobalt.CobaltRegistry " +
37        "--proto_path=packages/modules/AdServices/adservices/libraries/cobalt/proto " +
38        "packages/modules/AdServices/adservices/libraries/cobalt/proto/cobalt_registry.proto " +
39        "< $(location resources/cobalt_registry.textpb) > $(out)",
40}
41
42// Outputs a class confirming the Cobalt registry asset is validated, conditioned on
43// the asset binary proto and text proto being the same.
44genrule {
45    name: "cobalt-registry-validated-java",
46    srcs: [
47        ":checked_in_cobalt_registry_binarypb",
48        ":cobalt-registry-binarypb-gen",
49        "resources/CobaltRegistryValidated.java",
50    ],
51    // Compare the generated binary proto to the asset binary proto and fail if they
52    // are different. Additionally, print a message with instructions on how to update
53    // the asset binary proto.
54    cmd: "cp $(location resources/CobaltRegistryValidated.java) $(out) && " +
55        "cmp -s $(location :cobalt-registry-binarypb-gen) $(location :checked_in_cobalt_registry_binarypb) " +
56        "|| (echo -e '\\n\\n################################################################\\n#\\n" +
57        "#  ERROR: Binary registry is out of date.  To update it, run:\\n#\\n" +
58        "#  cp $(location :cobalt-registry-binarypb-gen) " +
59        "packages/modules/AdServices/adservices/apk/assets/cobalt/cobalt_registry.binarypb\\n#\\n" +
60        "################################################################\\n\\n' >&2 && false)",
61    out: ["com/android/adservices/cobalt/CobaltRegistryValidated.java"],
62}
63
64filegroup {
65    name: "adservices-service-core-sources",
66    srcs: [
67        "java/**/*.java",
68    ],
69    path: "java",
70    visibility: [
71        "//packages/modules/AdServices/adservices/tests:__subpackages__",
72        "//package/modules/ExtServices/extservices:__subpackages__",
73    ],
74}
75
76filegroup {
77    name: "adservices-service-core-jni-sources",
78    srcs: [
79        "jni/java/**/*.java",
80    ],
81    path: "jni",
82    visibility: [
83        "//packages/modules/AdServices/adservices:__subpackages__",
84    ],
85}
86
87filegroup {
88    name: "adservices-service-core-flags-constants-sources",
89    srcs: [
90        "java/com/android/adservices/cobalt/CobaltConstants.java",
91        "java/com/android/adservices/service/CommonFlagsConstants.java",
92        "java/com/android/adservices/service/CommonDebugFlagsConstants.java",
93        "java/com/android/adservices/service/DebugFlagsConstants.java",
94        "java/com/android/adservices/service/FlagsConstants.java",
95    ],
96    path: "java",
97    visibility: [
98        "//packages/modules/AdServices/adservices/tests/test-util",
99    ],
100}
101
102// TODO(b/306522832): move to Shared/ and change packages (to something like
103// c.a.ads.flags), although we'd need to be consider whether to make sure it's
104// used only by adservices itself, not ODP (or SdkSandbox)
105filegroup {
106    name: "adservices-service-common-flags-sources",
107    srcs: [
108        "java/com/android/adservices/service/CommonDebugFlags.java",
109        "java/com/android/adservices/service/CommonDebugFlagsConstants.java",
110        "java/com/android/adservices/service/CommonFlagsConstants.java",
111        "java/com/android/adservices/service/DeviceConfigFlagsHelper.java",
112    ],
113    path: "java",
114    visibility: [
115        "//packages/modules/AdServices/adservices/service",
116    ],
117}
118
119filegroup {
120    name: "adservices-service-core-phflags-sources",
121    srcs: [
122        ":adservices-service-core-flags-constants-sources",
123        ":adservices-service-common-flags-sources",
124        "java/com/android/adservices/service/Flags.java",
125        "java/com/android/adservices/service/FlagsFactory.java",
126        "java/com/android/adservices/service/PhFlags.java",
127        "java/com/android/adservices/service/DebugFlags.java",
128    ],
129    path: "java",
130    visibility: [
131        "//packages/modules/AdServices/adservices/tests/test-util",
132    ],
133}
134
135android_library {
136    name: "adservices-service-core",
137    sdk_version: "module_current",
138    min_sdk_version: "30",
139    srcs: [
140        ":adservices-service-core-sources",
141        ":adservices-service-core-jni-sources",
142        ":cobalt-registry-validated-java",
143        ":statslog-adservices-java-gen",
144    ],
145    manifest: "AndroidManifest.xml",
146    plugins: [
147        "androidx.appsearch_appsearch-compiler-plugin",
148        "androidx.room_room-compiler-plugin",
149        "auto_oneof_plugin",
150        "auto_value_plugin",
151        "auto_annotation_plugin",
152    ],
153    javacflags: [
154        "-Aroom.schemaLocation=packages/modules/AdServices/adservices/service-core/schemas",
155    ],
156    libs: [
157        "androidx.room_room-runtime",
158        "framework-annotations-lib", // For @SystemApi, etc
159        "framework-adservices.impl",
160        "framework-configinfrastructure.stubs.module_lib",
161        "framework-sdksandbox.impl",
162        "framework-ondevicepersonalization.stubs.module_lib",
163        "framework-statsd.stubs.module_lib", // For WW logging
164        "jsr305",
165        "auto_value_annotations",
166    ],
167    static_libs: [
168        "androidx.concurrent_concurrent-futures",
169        "androidx.annotation_annotation",
170        "androidx.appsearch_appsearch",
171        "androidx.appsearch_appsearch-platform-storage",
172        "cbor-java",
173        "mobile_data_downloader_lib",
174        "modules-utils-preconditions",
175        "tflite_support_classifiers_java",
176        "mobile_data_downloader_lib",
177        "androidx.webkit_webkit",
178        "androidx.javascriptengine_javascriptengine",
179        "adservices-cobalt",
180        "adservices-proto-lite",
181        "adservices-grpclib-lite",
182        "adservices-shared-common",
183        "adservices-shared-datastore",
184        "adservices-shared-error-logging",
185        "adservices-shared-spe",
186        "adservices-shared-storage",
187        "adservices-shared-util",
188        "modules-utils-build",
189    ],
190    jarjar_rules: "jarjar-rules.txt",
191    apex_available: [
192        "com.android.adservices",
193        "com.android.extservices",
194    ],
195    lint: {
196        extra_check_modules: ["AdServicesProdLintChecker"],
197        baseline_filename: "lint-baseline.xml",
198    },
199}
200
201cc_library_shared {
202    name: "libhpke_jni",
203    min_sdk_version: "30",
204    sdk_version: "current",
205    stl: "libc++_static",
206    cflags: [
207        "-Werror",
208        "-Wno-unused-parameter",
209        "-Wno-unused-but-set-variable",
210    ],
211    srcs: [
212        "jni/cpp/hpke_jni.cpp",
213        "jni/cpp/ohttp_jni.cpp",
214        "jni/cpp/act_jni.cpp",
215    ],
216    include_dirs: ["packages/modules/AdServices/adservices/service-core/jni/include"],
217    header_libs: ["jni_headers"],
218    shared_libs: [
219        "liblog",
220    ],
221    static_libs: [
222        "libact",
223        "libcrypto_static",
224    ],
225    version_script: "jni/version-script.lds",
226    apex_available: [
227        "//apex_available:platform",
228        "com.android.adservices",
229        "com.android.extservices",
230    ],
231    visibility: [
232        "//packages/modules/AdServices:__subpackages__",
233        "//packages/modules/ExtServices:__subpackages__",
234    ],
235}
236
237// Schemas needs to be bundled via this android_library since service-core unit tests for schema
238// migration will need this.
239android_library {
240    name: "adservices-service-core-schema",
241    sdk_version: "module_current",
242    min_sdk_version: "30",
243    asset_dirs: [
244        "schemas",
245    ],
246    // Must use EmptyManifest.xml since this will be used by the service-core tests. If we use the
247    // normal "AndroidManifest.xml", we may introduce potential error like redeclare permissions.
248    // See b/228270294 for the error about duplicated permissions.
249    manifest: "EmptyManifest.xml",
250    lint: {
251        baseline_filename: "lint-baseline2.xml",
252    },
253}
254