blob: 07b4534317519efaa0ec464335120d3959d51ad1 [file] [log] [blame]
John Wu2abff412024-10-10 21:58:26 +00001// 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-framework-policies",
34 ":ravenwood-standard-options",
35 ":ravenwood-annotation-allowed-classes",
36 ],
37 out: [
38 "ravenwood.jar",
39 "hoststubgen_framework-minus-apex.log",
40 ],
41 visibility: ["//visibility:private"],
42}
43
44framework_minus_apex_cmd = "$(location hoststubgen) " +
45 "@$(location :ravenwood-standard-options) " +
46 "--debug-log $(location hoststubgen_framework-minus-apex.log) " +
47 "--out-jar $(location ravenwood.jar) " +
48 "--in-jar $(location :framework-minus-apex-for-host) " +
49 "--policy-override-file $(location :ravenwood-framework-policies) " +
50 "--annotation-allowed-classes-file $(location :ravenwood-annotation-allowed-classes) "
51
52java_genrule {
53 name: "framework-minus-apex.ravenwood-base_X0",
54 defaults: ["framework-minus-apex.ravenwood-base_defaults"],
55 cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 0",
56}
57
58java_genrule {
59 name: "framework-minus-apex.ravenwood-base_X1",
60 defaults: ["framework-minus-apex.ravenwood-base_defaults"],
61 cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 1",
62}
63
64java_genrule {
65 name: "framework-minus-apex.ravenwood-base_X2",
66 defaults: ["framework-minus-apex.ravenwood-base_defaults"],
67 cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 2",
68}
69
70java_genrule {
71 name: "framework-minus-apex.ravenwood-base_X3",
72 defaults: ["framework-minus-apex.ravenwood-base_defaults"],
73 cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 3",
74}
75
76java_genrule {
77 name: "framework-minus-apex.ravenwood-base_X4",
78 defaults: ["framework-minus-apex.ravenwood-base_defaults"],
79 cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 4",
80}
81
82java_genrule {
83 name: "framework-minus-apex.ravenwood-base_X5",
84 defaults: ["framework-minus-apex.ravenwood-base_defaults"],
85 cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 5",
86}
87
88java_genrule {
89 name: "framework-minus-apex.ravenwood-base_X6",
90 defaults: ["framework-minus-apex.ravenwood-base_defaults"],
91 cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 6",
92}
93
94java_genrule {
95 name: "framework-minus-apex.ravenwood-base_X7",
96 defaults: ["framework-minus-apex.ravenwood-base_defaults"],
97 cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 7",
98}
99
100java_genrule {
101 name: "framework-minus-apex.ravenwood-base_X8",
102 defaults: ["framework-minus-apex.ravenwood-base_defaults"],
103 cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 8",
104}
105
106java_genrule {
107 name: "framework-minus-apex.ravenwood-base_X9",
108 defaults: ["framework-minus-apex.ravenwood-base_defaults"],
109 cmd: framework_minus_apex_cmd + " --num-shards 10 --shard-index 9",
110}
111
112// Build framework-minus-apex.ravenwood-base without sharding.
113// We extract the various dump files from this one, rather than the sharded ones, because
114// some dumps use the output from other classes (e.g. base classes) which may not be in the
115// same shard. Also some of the dump files ("apis") may be slow even when sharded, because
116// the output contains the information from all the input classes, rather than the output classes.
117// Not using sharding is fine for this module because it's only used for collecting the
118// dump / stats files, which don't have to happen regularly.
119java_genrule {
120 name: "framework-minus-apex.ravenwood-base_all",
121 defaults: ["framework-minus-apex.ravenwood-base_defaults"],
122 cmd: framework_minus_apex_cmd +
123 "--stats-file $(location hoststubgen_framework-minus-apex_stats.csv) " +
124 "--supported-api-list-file $(location hoststubgen_framework-minus-apex_apis.csv) " +
125
126 "--gen-keep-all-file $(location hoststubgen_framework-minus-apex_keep_all.txt) " +
127 "--gen-input-dump-file $(location hoststubgen_framework-minus-apex_dump.txt) ",
128
129 out: [
130 "hoststubgen_framework-minus-apex_keep_all.txt",
131 "hoststubgen_framework-minus-apex_dump.txt",
132 "hoststubgen_framework-minus-apex_stats.csv",
133 "hoststubgen_framework-minus-apex_apis.csv",
134 ],
135}
136
137// Marge all the sharded jars
138java_genrule {
139 name: "framework-minus-apex.ravenwood",
140 defaults: ["ravenwood-internal-only-visibility-java"],
141 cmd: "$(location merge_zips) $(out) $(in)",
142 tools: ["merge_zips"],
143 srcs: [
144 ":framework-minus-apex.ravenwood-base_X0{ravenwood.jar}",
145 ":framework-minus-apex.ravenwood-base_X1{ravenwood.jar}",
146 ":framework-minus-apex.ravenwood-base_X2{ravenwood.jar}",
147 ":framework-minus-apex.ravenwood-base_X3{ravenwood.jar}",
148 ":framework-minus-apex.ravenwood-base_X4{ravenwood.jar}",
149 ":framework-minus-apex.ravenwood-base_X5{ravenwood.jar}",
150 ":framework-minus-apex.ravenwood-base_X6{ravenwood.jar}",
151 ":framework-minus-apex.ravenwood-base_X7{ravenwood.jar}",
152 ":framework-minus-apex.ravenwood-base_X8{ravenwood.jar}",
153 ":framework-minus-apex.ravenwood-base_X9{ravenwood.jar}",
154 ],
155 out: [
156 "framework-minus-apex.ravenwood.jar",
157 ],
158}
159
160//////////////////
161// services.core
162//////////////////
163
164java_library {
165 name: "services.core-for-host",
166 installable: false, // host only jar.
167 static_libs: [
168 "services.core",
169 ],
170 sdk_version: "core_platform",
171 visibility: ["//visibility:private"],
172}
173
174java_genrule {
175 name: "services.core.ravenwood-base",
176 tools: ["hoststubgen"],
177 cmd: "$(location hoststubgen) " +
178 "@$(location :ravenwood-standard-options) " +
179
180 "--debug-log $(location hoststubgen_services.core.log) " +
181 "--stats-file $(location hoststubgen_services.core_stats.csv) " +
182 "--supported-api-list-file $(location hoststubgen_services.core_apis.csv) " +
183
184 "--out-jar $(location ravenwood.jar) " +
185
186 "--gen-keep-all-file $(location hoststubgen_services.core_keep_all.txt) " +
187 "--gen-input-dump-file $(location hoststubgen_services.core_dump.txt) " +
188
189 "--in-jar $(location :services.core-for-host) " +
190 "--policy-override-file $(location :ravenwood-services-policies) " +
191 "--annotation-allowed-classes-file $(location :ravenwood-annotation-allowed-classes) ",
192 srcs: [
193 ":services.core-for-host",
194 ":ravenwood-services-policies",
195 ":ravenwood-standard-options",
196 ":ravenwood-annotation-allowed-classes",
197 ],
198 out: [
199 "ravenwood.jar",
200
201 // Following files are created just as FYI.
202 "hoststubgen_services.core_keep_all.txt",
203 "hoststubgen_services.core_dump.txt",
204
205 "hoststubgen_services.core.log",
206 "hoststubgen_services.core_stats.csv",
207 "hoststubgen_services.core_apis.csv",
208 ],
209 visibility: ["//visibility:private"],
210}
211
212java_genrule {
213 name: "services.core.ravenwood",
214 defaults: ["ravenwood-internal-only-visibility-genrule"],
215 cmd: "cp $(in) $(out)",
216 srcs: [
217 ":services.core.ravenwood-base{ravenwood.jar}",
218 ],
219 out: [
220 "services.core.ravenwood.jar",
221 ],
222}
223
224// TODO(b/313930116) This jarjar is a bit slow. We should use hoststubgen for renaming,
225// but services.core.ravenwood has complex dependencies, so it'll take more than
226// just using hoststubgen "rename"s.
227java_library {
228 name: "services.core.ravenwood-jarjar",
229 defaults: ["ravenwood-internal-only-visibility-java"],
230 installable: false,
231 static_libs: [
232 "services.core.ravenwood",
233 ],
234 jarjar_rules: ":ravenwood-services-jarjar-rules",
235}
236
237///////////////
238// core-icu4j
239///////////////
240
241java_genrule {
242 name: "core-icu4j-for-host.ravenwood-base",
243 tools: ["hoststubgen"],
244 cmd: "$(location hoststubgen) " +
245 "@$(location :ravenwood-standard-options) " +
246
247 "--debug-log $(location hoststubgen_core-icu4j-for-host.log) " +
248 "--stats-file $(location hoststubgen_core-icu4j-for-host_stats.csv) " +
249 "--supported-api-list-file $(location hoststubgen_core-icu4j-for-host_apis.csv) " +
250
251 "--out-jar $(location ravenwood.jar) " +
252
253 "--gen-keep-all-file $(location hoststubgen_core-icu4j-for-host_keep_all.txt) " +
254 "--gen-input-dump-file $(location hoststubgen_core-icu4j-for-host_dump.txt) " +
255
256 "--in-jar $(location :core-icu4j-for-host) " +
257 "--policy-override-file $(location :icu-ravenwood-policies) " +
258 "--annotation-allowed-classes-file $(location :ravenwood-annotation-allowed-classes) ",
259 srcs: [
260 ":core-icu4j-for-host",
261
262 ":icu-ravenwood-policies",
263 ":ravenwood-standard-options",
264 ":ravenwood-annotation-allowed-classes",
265 ],
266 out: [
267 "ravenwood.jar",
268
269 // Following files are created just as FYI.
270 "hoststubgen_core-icu4j-for-host_keep_all.txt",
271 "hoststubgen_core-icu4j-for-host_dump.txt",
272
273 "hoststubgen_core-icu4j-for-host.log",
274 "hoststubgen_core-icu4j-for-host_stats.csv",
275 "hoststubgen_core-icu4j-for-host_apis.csv",
276 ],
277 visibility: ["//visibility:private"],
278}
279
280java_genrule {
281 name: "core-icu4j-for-host.ravenwood",
282 defaults: ["ravenwood-internal-only-visibility-genrule"],
283 cmd: "cp $(in) $(out)",
284 srcs: [
285 ":core-icu4j-for-host.ravenwood-base{ravenwood.jar}",
286 ],
287 out: [
288 "core-icu4j-for-host.ravenwood.jar",
289 ],
290}