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