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// Module-specific defaults. 17// 18// For module X, if we need to build it both as a library and an executable: 19// - A default rule `releasetools_X_defaults` is created, which lists `srcs`, `libs` and 20// `required` properties. 21// - `python_library_host` and `python_binary_host` are created by listing 22// `releasetools_X_defaults` in their defaults. 23// 24 25package { 26 default_applicable_licenses: ["Android-Apache-2.0"], 27} 28 29python_defaults { 30 name: "releasetools_add_img_to_target_files_defaults", 31 srcs: [ 32 "add_img_to_target_files.py", 33 ], 34 libs: [ 35 "ota_metadata_proto", 36 "releasetools_apex_utils", 37 "releasetools_build_image", 38 "releasetools_build_super_image", 39 "releasetools_common", 40 "libavbtool", 41 ], 42 required: [ 43 "care_map_generator", 44 ], 45} 46 47python_defaults { 48 name: "releasetools_build_image_defaults", 49 srcs: [ 50 "build_image.py", 51 ], 52 libs: [ 53 "releasetools_common", 54 "releasetools_fsverity_metadata_generator", 55 "releasetools_verity_utils", 56 ], 57 required: [ 58 "blk_alloc_to_base_fs", 59 "e2fsck", 60 "fsck.erofs", 61 "img2simg", 62 "mkfs.erofs", 63 "mkuserimg_mke2fs", 64 "simg2img", 65 "tune2fs", 66 "mkf2fsuserimg", 67 "fsck.f2fs", 68 ], 69} 70 71python_defaults { 72 name: "releasetools_build_super_image_defaults", 73 srcs: [ 74 "build_super_image.py", 75 ], 76 libs: [ 77 "releasetools_common", 78 ], 79} 80 81python_defaults { 82 name: "releasetools_img_from_target_files_defaults", 83 srcs: [ 84 "img_from_target_files.py", 85 ], 86 libs: [ 87 "releasetools_build_super_image", 88 "releasetools_common", 89 ], 90} 91 92python_defaults { 93 name: "releasetools_check_target_files_vintf_defaults", 94 srcs: [ 95 "check_target_files_vintf.py", 96 ], 97 libs: [ 98 "apex_manifest", 99 "releasetools_apex_utils", 100 "releasetools_common", 101 ], 102 required: [ 103 "apexd_host", 104 "checkvintf", 105 ], 106} 107 108python_library_host { 109 name: "ota_metadata_proto", 110 srcs: [ 111 "ota_metadata.proto", 112 ], 113 proto: { 114 canonical_path_from_root: false, 115 }, 116} 117 118cc_library_static { 119 name: "ota_metadata_proto_cc", 120 srcs: [ 121 "ota_metadata.proto", 122 ], 123 host_supported: true, 124 recovery_available: true, 125 proto: { 126 canonical_path_from_root: false, 127 type: "lite", 128 export_proto_headers: true, 129 }, 130} 131 132java_library_static { 133 name: "ota_metadata_proto_java", 134 host_supported: true, 135 proto: { 136 type: "nano", 137 }, 138 srcs: ["ota_metadata.proto"], 139 sdk_version: "9", 140 target: { 141 android: { 142 jarjar_rules: "jarjar-rules.txt", 143 }, 144 host: { 145 static_libs: ["libprotobuf-java-nano"], 146 }, 147 }, 148 visibility: ["//frameworks/base:__subpackages__"], 149} 150 151python_defaults { 152 name: "releasetools_ota_from_target_files_defaults", 153 srcs: [ 154 "edify_generator.py", 155 "non_ab_ota.py", 156 "ota_from_target_files.py", 157 "target_files_diff.py", 158 ], 159 libs: [ 160 "ota_metadata_proto", 161 "releasetools_check_target_files_vintf", 162 "releasetools_common", 163 "releasetools_verity_utils", 164 "apex_manifest", 165 "care_map_proto_py", 166 "ota_utils_lib", 167 ], 168 required: [ 169 "apexd_host", 170 "brillo_update_payload", 171 "checkvintf", 172 "lz4", 173 "toybox", 174 "unpack_bootimg", 175 "deapexer", 176 ], 177 target: { 178 darwin: { 179 // required module "brillo_update_payload" is disabled on darwin 180 enabled: false, 181 }, 182 }, 183} 184 185// 186// Host libraries. 187// 188 189python_library_host { 190 name: "releasetools_add_img_to_target_files", 191 defaults: [ 192 "releasetools_add_img_to_target_files_defaults", 193 ], 194} 195 196python_library_host { 197 name: "releasetools_apex_utils", 198 srcs: [ 199 "apex_utils.py", 200 ], 201 libs: [ 202 "apex_manifest", 203 "ota_metadata_proto", 204 "releasetools_common", 205 ], 206} 207 208python_library_host { 209 name: "releasetools_build_image", 210 defaults: [ 211 "releasetools_build_image_defaults", 212 ], 213} 214 215python_library_host { 216 name: "releasetools_build_super_image", 217 defaults: [ 218 "releasetools_build_super_image_defaults", 219 ], 220} 221 222python_library_host { 223 name: "releasetools_check_target_files_vintf", 224 defaults: [ 225 "releasetools_check_target_files_vintf_defaults", 226 ], 227} 228 229python_library_host { 230 name: "releasetools_common", 231 srcs: [ 232 "blockimgdiff.py", 233 "common.py", 234 "images.py", 235 "rangelib.py", 236 "sparse_img.py", 237 ], 238 data: [ 239 ":zip2zip", 240 ], 241 // Only the tools that are referenced directly are listed as required modules. For example, 242 // `avbtool` is not here, as the script always uses the one from info_dict['avb_avbtool']. 243 required: [ 244 "aapt2", 245 "boot_signer", 246 "brotli", 247 "bsdiff", 248 "lz4", 249 "mkbootfs", 250 "signapk", 251 "toybox", 252 "unpack_bootimg", 253 ], 254} 255 256python_library_host { 257 name: "releasetools_img_from_target_files", 258 defaults: [ 259 "releasetools_img_from_target_files_defaults", 260 ], 261} 262 263python_library_host { 264 name: "releasetools_ota_from_target_files", 265 defaults: [ 266 "releasetools_ota_from_target_files_defaults", 267 ], 268} 269 270python_library_host { 271 name: "releasetools_fsverity_metadata_generator", 272 srcs: [ 273 "fsverity_metadata_generator.py", 274 ], 275 libs: [ 276 "fsverity_digests_proto_python", 277 ], 278} 279 280python_library_host { 281 name: "releasetools_verity_utils", 282 srcs: [ 283 "verity_utils.py", 284 ], 285 required: [ 286 "append2simg", 287 "build_verity_metadata", 288 "build_verity_tree", 289 "fec", 290 ], 291} 292 293// 294// Host binaries. 295// 296 297python_defaults { 298 name: "releasetools_binary_defaults", 299 // TODO (b/140144201) Build imgdiff from releasetools_common 300 required: [ 301 "aapt2", 302 "boot_signer", 303 "brotli", 304 "bsdiff", 305 "deapexer", 306 "lz4", 307 "mkbootfs", 308 "signapk", 309 "toybox", 310 "unpack_bootimg", 311 ], 312} 313 314python_binary_host { 315 name: "add_img_to_target_files", 316 defaults: [ 317 "releasetools_binary_defaults", 318 "releasetools_add_img_to_target_files_defaults", 319 ], 320} 321 322python_library_host { 323 name: "ota_utils_lib", 324 srcs: [ 325 "ota_utils.py", 326 "payload_signer.py", 327 "ota_signing_utils.py", 328 ], 329 libs: [ 330 "releasetools_common", 331 ], 332} 333 334python_binary_host { 335 name: "merge_ota", 336 srcs: [ 337 "merge_ota.py", 338 ], 339 libs: [ 340 "ota_metadata_proto", 341 "update_payload", 342 "care_map_proto_py", 343 "releasetools_common", 344 "ota_utils_lib", 345 ], 346} 347 348python_binary_host { 349 name: "create_brick_ota", 350 srcs: [ 351 "create_brick_ota.py", 352 ], 353 libs: [ 354 "ota_utils_lib", 355 ], 356 required: [ 357 "signapk", 358 ], 359} 360 361python_binary_host { 362 name: "build_image", 363 defaults: [ 364 "releasetools_binary_defaults", 365 "releasetools_build_image_defaults", 366 ], 367} 368 369python_binary_host { 370 name: "build_super_image", 371 defaults: [ 372 "releasetools_binary_defaults", 373 "releasetools_build_super_image_defaults", 374 ], 375} 376 377python_binary_host { 378 name: "check_partition_sizes", 379 srcs: [ 380 "check_partition_sizes.py", 381 ], 382 libs: [ 383 "releasetools_common", 384 ], 385 defaults: [ 386 "releasetools_binary_defaults", 387 ], 388} 389 390python_binary_host { 391 name: "check_ota_package_signature", 392 defaults: ["releasetools_binary_defaults"], 393 srcs: [ 394 "check_ota_package_signature.py", 395 ], 396 libs: [ 397 "releasetools_common", 398 ], 399 required: [ 400 "delta_generator", 401 ], 402 target: { 403 darwin: { 404 // required module "delta_generator" is disabled on darwin 405 enabled: false, 406 }, 407 }, 408} 409 410python_binary_host { 411 name: "check_target_files_signatures", 412 defaults: ["releasetools_binary_defaults"], 413 srcs: [ 414 "check_target_files_signatures.py", 415 ], 416 libs: [ 417 "releasetools_common", 418 ], 419 required: [ 420 "aapt2", 421 ], 422} 423 424python_binary_host { 425 name: "check_target_files_vintf", 426 defaults: [ 427 "releasetools_binary_defaults", 428 "releasetools_check_target_files_vintf_defaults", 429 ], 430} 431 432python_binary_host { 433 name: "img_from_target_files", 434 defaults: [ 435 "releasetools_binary_defaults", 436 "releasetools_img_from_target_files_defaults", 437 ], 438} 439 440python_defaults { 441 name: "releasetools_find_shareduid_violation_defaults", 442 srcs: [ 443 "find_shareduid_violation.py", 444 ], 445 libs: [ 446 "releasetools_common", 447 ], 448} 449 450python_binary_host { 451 name: "find_shareduid_violation", 452 defaults: [ 453 "releasetools_binary_defaults", 454 "releasetools_find_shareduid_violation_defaults", 455 ], 456} 457 458python_library_host { 459 name: "releasetools_find_shareduid_violation", 460 defaults: [ 461 "releasetools_find_shareduid_violation_defaults", 462 ], 463} 464 465python_binary_host { 466 name: "make_recovery_patch", 467 defaults: ["releasetools_binary_defaults"], 468 srcs: [ 469 "make_recovery_patch.py", 470 ], 471 libs: [ 472 "releasetools_common", 473 ], 474} 475 476python_binary_host { 477 name: "ota_from_target_files", 478 defaults: [ 479 "releasetools_binary_defaults", 480 "releasetools_ota_from_target_files_defaults", 481 ], 482} 483 484python_binary_host { 485 name: "ota_from_raw_img", 486 srcs: [ 487 "ota_from_raw_img.py", 488 ], 489 main: "ota_from_raw_img.py", 490 defaults: [ 491 "releasetools_binary_defaults", 492 ], 493 required: [ 494 "delta_generator", 495 ], 496 libs: [ 497 "ota_metadata_proto", 498 "releasetools_common", 499 "ota_utils_lib", 500 ], 501} 502 503python_binary_host { 504 name: "ota_package_parser", 505 defaults: ["releasetools_binary_defaults"], 506 srcs: [ 507 "ota_package_parser.py", 508 "rangelib.py", 509 ], 510} 511 512python_binary_host { 513 name: "sparse_img", 514 defaults: ["releasetools_binary_defaults"], 515 srcs: [ 516 "rangelib.py", 517 "sparse_img.py", 518 ], 519} 520 521python_binary_host { 522 name: "sign_apex", 523 defaults: ["releasetools_binary_defaults"], 524 srcs: [ 525 "sign_apex.py", 526 ], 527 libs: [ 528 "releasetools_apex_utils", 529 "releasetools_common", 530 ], 531} 532 533python_binary_host { 534 name: "sign_target_files_apks", 535 defaults: ["releasetools_binary_defaults"], 536 srcs: [ 537 "sign_target_files_apks.py", 538 "ota_from_raw_img.py", 539 ], 540 libs: [ 541 "releasetools_add_img_to_target_files", 542 "releasetools_apex_utils", 543 "releasetools_common", 544 "ota_metadata_proto", 545 "ota_utils_lib", 546 "update_payload", 547 ], 548} 549 550python_binary_host { 551 name: "validate_target_files", 552 defaults: ["releasetools_binary_defaults"], 553 srcs: [ 554 "validate_target_files.py", 555 ], 556 libs: [ 557 "releasetools_common", 558 ], 559} 560 561python_binary_host { 562 name: "verity_utils", 563 defaults: ["releasetools_binary_defaults"], 564 srcs: [ 565 "verity_utils.py", 566 ], 567 libs: [ 568 "releasetools_common", 569 ], 570 required: [ 571 "append2simg", 572 "build_verity_metadata", 573 "build_verity_tree", 574 "fec", 575 ], 576} 577 578python_binary_host { 579 name: "fsverity_metadata_generator", 580 defaults: ["releasetools_binary_defaults"], 581 srcs: [ 582 "fsverity_metadata_generator.py", 583 ], 584 required: [ 585 "fsverity", 586 ], 587} 588 589// 590// Tests. 591// 592 593python_defaults { 594 name: "releasetools_test_defaults", 595 srcs: [ 596 "check_ota_package_signature.py", 597 "check_partition_sizes.py", 598 "check_target_files_signatures.py", 599 "make_recovery_patch.py", 600 "ota_package_parser.py", 601 "sign_apex.py", 602 "sign_target_files_apks.py", 603 "validate_target_files.py", 604 "merge_ota.py", 605 ":releasetools_merge_sources", 606 ":releasetools_merge_tests", 607 608 "test_*.py", 609 ], 610 libs: [ 611 "releasetools_add_img_to_target_files", 612 "releasetools_apex_utils", 613 "releasetools_build_image", 614 "releasetools_build_super_image", 615 "releasetools_check_target_files_vintf", 616 "releasetools_common", 617 "releasetools_find_shareduid_violation", 618 "releasetools_img_from_target_files", 619 "releasetools_ota_from_target_files", 620 "releasetools_verity_utils", 621 "update_payload", 622 ], 623 data: [ 624 "testdata/**/*", 625 ], 626 device_common_data: [ 627 ":com.android.apex.compressed.v1", 628 ":com.android.apex.vendor.foo.with_vintf", 629 ], 630 target: { 631 darwin: { 632 // libs dep "releasetools_ota_from_target_files" is disabled on darwin 633 enabled: false, 634 }, 635 }, 636 required: [ 637 "apexd_host", 638 "deapexer", 639 ], 640} 641 642python_test_host { 643 name: "releasetools_test", 644 defaults: ["releasetools_test_defaults"], 645 main: "test_utils.py", 646 // Don't use embedded_launcher, atest will try (but may fail) to load libc++.so from 647 // host, because the test executable won't be able to find the needed libs via its 648 // runpath. 649 test_options: { 650 unit_test: true, 651 }, 652} 653 654genrule { 655 name: "otatools_package_releasetools", 656 tools: ["soong_zip"], 657 srcs: ["**/*"], 658 cmd: "find build/make/tools/releasetools -name '*.pyc' -prune -o \\( -type f -o -type l \\) -print | sort > $(genDir)/files.txt && " + 659 "$(location soong_zip) -o $(out) -C build/make/tools -l $(genDir)/files.txt", 660 out: ["otatools_package_releasetools.zip"], 661} 662