xref: /aosp_15_r20/frameworks/base/ravenwood/Framework.bp (revision d57664e9bc4670b3ecf6748a746a57c557b6bc9e)
1// Copyright (C) 2024 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// This file hosts all the genrule and module definitions for all Android specific
16// code that needs further post-processing by hoststubgen to support Ravenwood.
17
18/////////////////////////
19// framework-minus-apex
20/////////////////////////
21
22// Process framework-minus-apex with hoststubgen for Ravenwood.
23// This step takes several tens of seconds, so we manually shard it to multiple modules.
24// All the copies have to be kept in sync.
25// TODO: Do the sharding better, either by making hostsubgen support sharding natively, or
26// making a better build rule.
27
28genrule_defaults {
29    name: "framework-minus-apex.ravenwood-base_defaults",
30    tools: ["hoststubgen"],
31    srcs: [
32        ":framework-minus-apex-for-host",
33        ":ravenwood-common-policies",
34        ":ravenwood-framework-policies",
35        ":ravenwood-standard-options",
36        ":ravenwood-annotation-allowed-classes",
37    ],
38    out: [
39        "ravenwood.jar",
40        "hoststubgen_framework-minus-apex.log",
41    ],
42    visibility: ["//visibility:private"],
43}
44
45framework_minus_apex_cmd = "$(location hoststubgen) " +
46    "@$(location :ravenwood-standard-options) " +
47    "--debug-log $(location hoststubgen_framework-minus-apex.log) " +
48    "--out-jar $(location ravenwood.jar) " +
49    "--in-jar $(location :framework-minus-apex-for-host) " +
50    "--policy-override-file $(location :ravenwood-common-policies) " +
51    "--policy-override-file $(location :ravenwood-framework-policies) " +
52    "--annotation-allowed-classes-file $(location :ravenwood-annotation-allowed-classes) "
53
54java_genrule {
55    name: "framework-minus-apex.ravenwood-base_X0",
56    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
57    cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 0",
58}
59
60java_genrule {
61    name: "framework-minus-apex.ravenwood-base_X1",
62    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
63    cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 1",
64}
65
66java_genrule {
67    name: "framework-minus-apex.ravenwood-base_X2",
68    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
69    cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 2",
70}
71
72java_genrule {
73    name: "framework-minus-apex.ravenwood-base_X3",
74    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
75    cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 3",
76}
77
78java_genrule {
79    name: "framework-minus-apex.ravenwood-base_X4",
80    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
81    cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 4",
82}
83
84java_genrule {
85    name: "framework-minus-apex.ravenwood-base_X5",
86    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
87    cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 5",
88}
89
90java_genrule {
91    name: "framework-minus-apex.ravenwood-base_X6",
92    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
93    cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 6",
94}
95
96java_genrule {
97    name: "framework-minus-apex.ravenwood-base_X7",
98    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
99    cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 7",
100}
101
102java_genrule {
103    name: "framework-minus-apex.ravenwood-base_X8",
104    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
105    cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 8",
106}
107
108java_genrule {
109    name: "framework-minus-apex.ravenwood-base_X9",
110    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
111    cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 9",
112}
113
114// Build framework-minus-apex.ravenwood-base without sharding.
115// We extract the various dump files from this one, rather than the sharded ones, because
116// some dumps use the output from other classes (e.g. base classes) which may not be in the
117// same shard. Also some of the dump files ("apis") may be slow even when sharded, because
118// the output contains the information from all the input classes, rather than the output classes.
119// Not using sharding is fine for this module because it's only used for collecting the
120// dump / stats files, which don't have to happen regularly.
121java_genrule {
122    name: "framework-minus-apex.ravenwood-base_all",
123    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
124    cmd: framework_minus_apex_cmd +
125        "--stats-file $(location hoststubgen_framework-minus-apex_stats.csv) " +
126        "--supported-api-list-file $(location hoststubgen_framework-minus-apex_apis.csv) " +
127
128        "--gen-keep-all-file $(location hoststubgen_framework-minus-apex_keep_all.txt) " +
129        "--gen-input-dump-file $(location hoststubgen_framework-minus-apex_dump.txt) ",
130
131    out: [
132        "hoststubgen_framework-minus-apex_keep_all.txt",
133        "hoststubgen_framework-minus-apex_dump.txt",
134        "hoststubgen_framework-minus-apex_stats.csv",
135        "hoststubgen_framework-minus-apex_apis.csv",
136    ],
137}
138
139// Marge all the sharded jars
140java_genrule {
141    name: "framework-minus-apex.ravenwood",
142    defaults: ["ravenwood-internal-only-visibility-java"],
143    cmd: "$(location merge_zips) $(out) $(in)",
144    tools: ["merge_zips"],
145    srcs: [
146        ":framework-minus-apex.ravenwood-base_X0{ravenwood.jar}",
147        ":framework-minus-apex.ravenwood-base_X1{ravenwood.jar}",
148        ":framework-minus-apex.ravenwood-base_X2{ravenwood.jar}",
149        ":framework-minus-apex.ravenwood-base_X3{ravenwood.jar}",
150        ":framework-minus-apex.ravenwood-base_X4{ravenwood.jar}",
151        ":framework-minus-apex.ravenwood-base_X5{ravenwood.jar}",
152        ":framework-minus-apex.ravenwood-base_X6{ravenwood.jar}",
153        ":framework-minus-apex.ravenwood-base_X7{ravenwood.jar}",
154        ":framework-minus-apex.ravenwood-base_X8{ravenwood.jar}",
155        ":framework-minus-apex.ravenwood-base_X9{ravenwood.jar}",
156    ],
157    out: [
158        "framework-minus-apex.ravenwood.jar",
159    ],
160}
161
162//////////////////
163// services.core
164//////////////////
165
166java_library {
167    name: "services.core-for-host",
168    installable: false, // host only jar.
169    static_libs: [
170        "services.core",
171    ],
172    sdk_version: "core_platform",
173    visibility: ["//visibility:private"],
174}
175
176java_genrule {
177    name: "services.core.ravenwood-base",
178    tools: ["hoststubgen"],
179    cmd: "$(location hoststubgen) " +
180        "@$(location :ravenwood-standard-options) " +
181
182        "--debug-log $(location hoststubgen_services.core.log) " +
183        "--stats-file $(location hoststubgen_services.core_stats.csv) " +
184        "--supported-api-list-file $(location hoststubgen_services.core_apis.csv) " +
185        "--gen-keep-all-file $(location hoststubgen_services.core_keep_all.txt) " +
186        "--gen-input-dump-file $(location hoststubgen_services.core_dump.txt) " +
187
188        "--out-jar $(location ravenwood.jar) " +
189        "--in-jar $(location :services.core-for-host) " +
190
191        "--policy-override-file $(location :ravenwood-common-policies) " +
192        "--policy-override-file $(location :ravenwood-services-policies) " +
193        "--annotation-allowed-classes-file $(location :ravenwood-annotation-allowed-classes) ",
194    srcs: [
195        ":services.core-for-host",
196        ":ravenwood-common-policies",
197        ":ravenwood-services-policies",
198        ":ravenwood-standard-options",
199        ":ravenwood-annotation-allowed-classes",
200    ],
201    out: [
202        "ravenwood.jar",
203
204        // Following files are created just as FYI.
205        "hoststubgen_services.core_keep_all.txt",
206        "hoststubgen_services.core_dump.txt",
207
208        "hoststubgen_services.core.log",
209        "hoststubgen_services.core_stats.csv",
210        "hoststubgen_services.core_apis.csv",
211    ],
212    visibility: ["//visibility:private"],
213}
214
215java_genrule {
216    name: "services.core.ravenwood",
217    // This is used by unit tests too (so tests will be able to access HSG-processed implementation)
218    // so it's visible to all.
219    cmd: "cp $(in) $(out)",
220    srcs: [
221        ":services.core.ravenwood-base{ravenwood.jar}",
222    ],
223    out: [
224        "services.core.ravenwood.jar",
225    ],
226}
227
228// TODO(b/313930116) This jarjar is a bit slow. We should use hoststubgen for renaming,
229// but services.core.ravenwood has complex dependencies, so it'll take more than
230// just using hoststubgen "rename"s.
231java_library {
232    name: "services.core.ravenwood-jarjar",
233    defaults: ["ravenwood-internal-only-visibility-java"],
234    installable: false,
235    static_libs: [
236        "services.core.ravenwood",
237    ],
238    jarjar_rules: ":ravenwood-services-jarjar-rules",
239}
240
241///////////////
242// core-icu4j
243///////////////
244
245java_genrule {
246    name: "core-icu4j-for-host.ravenwood-base",
247    tools: ["hoststubgen"],
248    cmd: "$(location hoststubgen) " +
249        "@$(location :ravenwood-standard-options) " +
250
251        "--debug-log $(location hoststubgen_core-icu4j-for-host.log) " +
252        "--stats-file $(location hoststubgen_core-icu4j-for-host_stats.csv) " +
253        "--supported-api-list-file $(location hoststubgen_core-icu4j-for-host_apis.csv) " +
254        "--gen-keep-all-file $(location hoststubgen_core-icu4j-for-host_keep_all.txt) " +
255        "--gen-input-dump-file $(location hoststubgen_core-icu4j-for-host_dump.txt) " +
256
257        "--out-jar $(location ravenwood.jar) " +
258        "--in-jar $(location :core-icu4j-for-host) " +
259
260        "--policy-override-file $(location :ravenwood-common-policies) " +
261        "--policy-override-file $(location :icu-ravenwood-policies) ",
262    srcs: [
263        ":core-icu4j-for-host",
264
265        ":ravenwood-common-policies",
266        ":icu-ravenwood-policies",
267        ":ravenwood-standard-options",
268    ],
269    out: [
270        "ravenwood.jar",
271
272        // Following files are created just as FYI.
273        "hoststubgen_core-icu4j-for-host_keep_all.txt",
274        "hoststubgen_core-icu4j-for-host_dump.txt",
275
276        "hoststubgen_core-icu4j-for-host.log",
277        "hoststubgen_core-icu4j-for-host_stats.csv",
278        "hoststubgen_core-icu4j-for-host_apis.csv",
279    ],
280    visibility: ["//visibility:private"],
281}
282
283java_genrule {
284    name: "core-icu4j-for-host.ravenwood",
285    defaults: ["ravenwood-internal-only-visibility-genrule"],
286    cmd: "cp $(in) $(out)",
287    srcs: [
288        ":core-icu4j-for-host.ravenwood-base{ravenwood.jar}",
289    ],
290    out: [
291        "core-icu4j-for-host.ravenwood.jar",
292    ],
293}
294
295///////////////////////////////////
296// framework-configinfrastructure
297///////////////////////////////////
298
299java_genrule {
300    name: "framework-configinfrastructure.ravenwood-base",
301    tools: ["hoststubgen"],
302    cmd: "$(location hoststubgen) " +
303        "@$(location :ravenwood-standard-options) " +
304
305        "--debug-log $(location framework-configinfrastructure.log) " +
306        "--stats-file $(location framework-configinfrastructure_stats.csv) " +
307        "--supported-api-list-file $(location framework-configinfrastructure_apis.csv) " +
308        "--gen-keep-all-file $(location framework-configinfrastructure_keep_all.txt) " +
309        "--gen-input-dump-file $(location framework-configinfrastructure_dump.txt) " +
310
311        "--out-impl-jar $(location ravenwood.jar) " +
312        "--in-jar $(location :framework-configinfrastructure.impl{.jar}) " +
313
314        "--policy-override-file $(location :ravenwood-common-policies) " +
315        "--policy-override-file $(location :framework-configinfrastructure-ravenwood-policies) ",
316    srcs: [
317        ":framework-configinfrastructure.impl{.jar}",
318
319        ":ravenwood-common-policies",
320        ":framework-configinfrastructure-ravenwood-policies",
321        ":ravenwood-standard-options",
322    ],
323    out: [
324        "ravenwood.jar",
325
326        // Following files are created just as FYI.
327        "framework-configinfrastructure_keep_all.txt",
328        "framework-configinfrastructure_dump.txt",
329
330        "framework-configinfrastructure.log",
331        "framework-configinfrastructure_stats.csv",
332        "framework-configinfrastructure_apis.csv",
333    ],
334    visibility: ["//visibility:private"],
335}
336
337java_genrule {
338    name: "framework-configinfrastructure.ravenwood",
339    defaults: ["ravenwood-internal-only-visibility-genrule"],
340    cmd: "cp $(in) $(out)",
341    srcs: [
342        ":framework-configinfrastructure.ravenwood-base{ravenwood.jar}",
343    ],
344    out: [
345        "framework-configinfrastructure.ravenwood.jar",
346    ],
347}
348
349///////////////////////////////////
350// framework-statsd
351///////////////////////////////////
352
353java_genrule {
354    name: "framework-statsd.ravenwood-base",
355    tools: ["hoststubgen"],
356    cmd: "$(location hoststubgen) " +
357        "@$(location :ravenwood-standard-options) " +
358
359        "--debug-log $(location framework-statsd.log) " +
360        "--stats-file $(location framework-statsd_stats.csv) " +
361        "--supported-api-list-file $(location framework-statsd_apis.csv) " +
362        "--gen-keep-all-file $(location framework-statsd_keep_all.txt) " +
363        "--gen-input-dump-file $(location framework-statsd_dump.txt) " +
364
365        "--out-impl-jar $(location ravenwood.jar) " +
366        "--in-jar $(location :framework-statsd.impl{.jar}) " +
367
368        "--policy-override-file $(location :ravenwood-common-policies) " +
369        "--policy-override-file $(location :framework-statsd-ravenwood-policies) ",
370    srcs: [
371        ":framework-statsd.impl{.jar}",
372
373        ":ravenwood-common-policies",
374        ":framework-statsd-ravenwood-policies",
375        ":ravenwood-standard-options",
376    ],
377    out: [
378        "ravenwood.jar",
379
380        // Following files are created just as FYI.
381        "framework-statsd_keep_all.txt",
382        "framework-statsd_dump.txt",
383
384        "framework-statsd.log",
385        "framework-statsd_stats.csv",
386        "framework-statsd_apis.csv",
387    ],
388    visibility: ["//visibility:private"],
389}
390
391java_genrule {
392    name: "framework-statsd.ravenwood",
393    defaults: ["ravenwood-internal-only-visibility-genrule"],
394    cmd: "cp $(in) $(out)",
395    srcs: [
396        ":framework-statsd.ravenwood-base{ravenwood.jar}",
397    ],
398    out: [
399        "framework-statsd.ravenwood.jar",
400    ],
401}
402