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 15package sdk 16 17import ( 18 "testing" 19 20 "android/soong/android" 21 "android/soong/cc" 22) 23 24func testSdkWithCc(t *testing.T, bp string) *testSdkResult { 25 t.Helper() 26 27 fs := map[string][]byte{ 28 "Test.cpp": nil, 29 "include/Test.h": nil, 30 "include-android/AndroidTest.h": nil, 31 "include-host/HostTest.h": nil, 32 "arm64/include/Arm64Test.h": nil, 33 "libfoo.so": nil, 34 "aidl/foo/bar/Test.aidl": nil, 35 "some/where/stubslib.map.txt": nil, 36 } 37 return testSdkWithFs(t, bp, fs) 38} 39 40// Contains tests for SDK members provided by the cc package. 41 42func TestSdkIsCompileMultilibBoth(t *testing.T) { 43 result := testSdkWithCc(t, ` 44 sdk { 45 name: "mysdk", 46 native_shared_libs: ["sdkmember"], 47 } 48 49 cc_library_shared { 50 name: "sdkmember", 51 srcs: ["Test.cpp"], 52 stl: "none", 53 } 54 `) 55 56 armOutput := result.Module("sdkmember", "android_arm_armv7-a-neon_shared").(*cc.Module).OutputFile() 57 arm64Output := result.Module("sdkmember", "android_arm64_armv8-a_shared").(*cc.Module).OutputFile() 58 59 var inputs []string 60 buildParams := result.Module("mysdk", android.CommonOS.Name).BuildParamsForTests() 61 for _, bp := range buildParams { 62 if bp.Input != nil { 63 inputs = append(inputs, bp.Input.String()) 64 } 65 } 66 67 // ensure that both 32/64 outputs are inputs of the sdk snapshot 68 ensureListContains(t, inputs, armOutput.String()) 69 ensureListContains(t, inputs, arm64Output.String()) 70} 71 72func TestBasicSdkWithCc(t *testing.T) { 73 result := testSdkWithCc(t, ` 74 sdk { 75 name: "mysdk", 76 native_shared_libs: ["sdkmember"], 77 } 78 79 cc_library_shared { 80 name: "sdkmember", 81 system_shared_libs: [], 82 } 83 84 sdk_snapshot { 85 name: "mysdk@1", 86 native_shared_libs: ["sdkmember_mysdk_1"], 87 } 88 89 sdk_snapshot { 90 name: "mysdk@2", 91 native_shared_libs: ["sdkmember_mysdk_2"], 92 } 93 94 cc_prebuilt_library_shared { 95 name: "sdkmember", 96 srcs: ["libfoo.so"], 97 prefer: false, 98 system_shared_libs: [], 99 stl: "none", 100 } 101 102 cc_prebuilt_library_shared { 103 name: "sdkmember_mysdk_1", 104 sdk_member_name: "sdkmember", 105 srcs: ["libfoo.so"], 106 system_shared_libs: [], 107 stl: "none", 108 // TODO: remove //apex_available:platform 109 apex_available: [ 110 "//apex_available:platform", 111 "myapex", 112 ], 113 } 114 115 cc_prebuilt_library_shared { 116 name: "sdkmember_mysdk_2", 117 sdk_member_name: "sdkmember", 118 srcs: ["libfoo.so"], 119 system_shared_libs: [], 120 stl: "none", 121 // TODO: remove //apex_available:platform 122 apex_available: [ 123 "//apex_available:platform", 124 "myapex2", 125 ], 126 } 127 128 cc_library_shared { 129 name: "mycpplib", 130 srcs: ["Test.cpp"], 131 shared_libs: ["sdkmember"], 132 system_shared_libs: [], 133 stl: "none", 134 apex_available: [ 135 "myapex", 136 "myapex2", 137 ], 138 } 139 140 apex { 141 name: "myapex", 142 native_shared_libs: ["mycpplib"], 143 uses_sdks: ["mysdk@1"], 144 key: "myapex.key", 145 certificate: ":myapex.cert", 146 } 147 148 apex { 149 name: "myapex2", 150 native_shared_libs: ["mycpplib"], 151 uses_sdks: ["mysdk@2"], 152 key: "myapex.key", 153 certificate: ":myapex.cert", 154 } 155 `) 156 157 sdkMemberV1 := result.ModuleForTests("sdkmember_mysdk_1", "android_arm64_armv8-a_shared_myapex").Rule("toc").Output 158 sdkMemberV2 := result.ModuleForTests("sdkmember_mysdk_2", "android_arm64_armv8-a_shared_myapex2").Rule("toc").Output 159 160 cpplibForMyApex := result.ModuleForTests("mycpplib", "android_arm64_armv8-a_shared_myapex") 161 cpplibForMyApex2 := result.ModuleForTests("mycpplib", "android_arm64_armv8-a_shared_myapex2") 162 163 // Depending on the uses_sdks value, different libs are linked 164 ensureListContains(t, pathsToStrings(cpplibForMyApex.Rule("ld").Implicits), sdkMemberV1.String()) 165 ensureListContains(t, pathsToStrings(cpplibForMyApex2.Rule("ld").Implicits), sdkMemberV2.String()) 166} 167 168// Make sure the sdk can use host specific cc libraries static/shared and both. 169func TestHostSdkWithCc(t *testing.T) { 170 testSdkWithCc(t, ` 171 sdk { 172 name: "mysdk", 173 device_supported: false, 174 host_supported: true, 175 native_shared_libs: ["sdkshared"], 176 native_static_libs: ["sdkstatic"], 177 } 178 179 cc_library_host_shared { 180 name: "sdkshared", 181 stl: "none", 182 } 183 184 cc_library_host_static { 185 name: "sdkstatic", 186 stl: "none", 187 } 188 `) 189} 190 191// Make sure the sdk can use cc libraries static/shared and both. 192func TestSdkWithCc(t *testing.T) { 193 testSdkWithCc(t, ` 194 sdk { 195 name: "mysdk", 196 native_shared_libs: ["sdkshared", "sdkboth1"], 197 native_static_libs: ["sdkstatic", "sdkboth2"], 198 } 199 200 cc_library_shared { 201 name: "sdkshared", 202 stl: "none", 203 } 204 205 cc_library_static { 206 name: "sdkstatic", 207 stl: "none", 208 } 209 210 cc_library { 211 name: "sdkboth1", 212 stl: "none", 213 } 214 215 cc_library { 216 name: "sdkboth2", 217 stl: "none", 218 } 219 `) 220} 221 222func TestSnapshotWithObject(t *testing.T) { 223 result := testSdkWithCc(t, ` 224 sdk { 225 name: "mysdk", 226 native_objects: ["crtobj"], 227 } 228 229 cc_object { 230 name: "crtobj", 231 stl: "none", 232 } 233 `) 234 235 result.CheckSnapshot("mysdk", "", 236 checkAndroidBpContents(` 237// This is auto-generated. DO NOT EDIT. 238 239cc_prebuilt_object { 240 name: "mysdk_crtobj@current", 241 sdk_member_name: "crtobj", 242 stl: "none", 243 arch: { 244 arm64: { 245 srcs: ["arm64/lib/crtobj.o"], 246 }, 247 arm: { 248 srcs: ["arm/lib/crtobj.o"], 249 }, 250 }, 251} 252 253cc_prebuilt_object { 254 name: "crtobj", 255 prefer: false, 256 stl: "none", 257 arch: { 258 arm64: { 259 srcs: ["arm64/lib/crtobj.o"], 260 }, 261 arm: { 262 srcs: ["arm/lib/crtobj.o"], 263 }, 264 }, 265} 266 267sdk_snapshot { 268 name: "mysdk@current", 269 native_objects: ["mysdk_crtobj@current"], 270} 271`), 272 checkAllCopyRules(` 273.intermediates/crtobj/android_arm64_armv8-a/crtobj.o -> arm64/lib/crtobj.o 274.intermediates/crtobj/android_arm_armv7-a-neon/crtobj.o -> arm/lib/crtobj.o 275`), 276 ) 277} 278 279func TestSnapshotWithCcDuplicateHeaders(t *testing.T) { 280 result := testSdkWithCc(t, ` 281 sdk { 282 name: "mysdk", 283 native_shared_libs: ["mynativelib1", "mynativelib2"], 284 } 285 286 cc_library_shared { 287 name: "mynativelib1", 288 srcs: [ 289 "Test.cpp", 290 ], 291 export_include_dirs: ["include"], 292 stl: "none", 293 } 294 295 cc_library_shared { 296 name: "mynativelib2", 297 srcs: [ 298 "Test.cpp", 299 ], 300 export_include_dirs: ["include"], 301 stl: "none", 302 } 303 `) 304 305 result.CheckSnapshot("mysdk", "", 306 checkAllCopyRules(` 307include/Test.h -> include/include/Test.h 308.intermediates/mynativelib1/android_arm64_armv8-a_shared/mynativelib1.so -> arm64/lib/mynativelib1.so 309.intermediates/mynativelib1/android_arm_armv7-a-neon_shared/mynativelib1.so -> arm/lib/mynativelib1.so 310.intermediates/mynativelib2/android_arm64_armv8-a_shared/mynativelib2.so -> arm64/lib/mynativelib2.so 311.intermediates/mynativelib2/android_arm_armv7-a-neon_shared/mynativelib2.so -> arm/lib/mynativelib2.so 312`), 313 ) 314} 315 316// Verify that when the shared library has some common and some arch specific properties that the generated 317// snapshot is optimized properly. 318func TestSnapshotWithCcSharedLibraryCommonProperties(t *testing.T) { 319 result := testSdkWithCc(t, ` 320 sdk { 321 name: "mysdk", 322 native_shared_libs: ["mynativelib"], 323 } 324 325 cc_library_shared { 326 name: "mynativelib", 327 srcs: [ 328 "Test.cpp", 329 "aidl/foo/bar/Test.aidl", 330 ], 331 export_include_dirs: ["include"], 332 arch: { 333 arm64: { 334 export_system_include_dirs: ["arm64/include"], 335 }, 336 }, 337 stl: "none", 338 } 339 `) 340 341 result.CheckSnapshot("mysdk", "", 342 checkAndroidBpContents(` 343// This is auto-generated. DO NOT EDIT. 344 345cc_prebuilt_library_shared { 346 name: "mysdk_mynativelib@current", 347 sdk_member_name: "mynativelib", 348 installable: false, 349 stl: "none", 350 export_include_dirs: ["include/include"], 351 arch: { 352 arm64: { 353 srcs: ["arm64/lib/mynativelib.so"], 354 export_system_include_dirs: ["arm64/include/arm64/include"], 355 }, 356 arm: { 357 srcs: ["arm/lib/mynativelib.so"], 358 }, 359 }, 360} 361 362cc_prebuilt_library_shared { 363 name: "mynativelib", 364 prefer: false, 365 stl: "none", 366 export_include_dirs: ["include/include"], 367 arch: { 368 arm64: { 369 srcs: ["arm64/lib/mynativelib.so"], 370 export_system_include_dirs: ["arm64/include/arm64/include"], 371 }, 372 arm: { 373 srcs: ["arm/lib/mynativelib.so"], 374 }, 375 }, 376} 377 378sdk_snapshot { 379 name: "mysdk@current", 380 native_shared_libs: ["mysdk_mynativelib@current"], 381} 382`), 383 checkAllCopyRules(` 384include/Test.h -> include/include/Test.h 385.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so 386arm64/include/Arm64Test.h -> arm64/include/arm64/include/Arm64Test.h 387.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so`), 388 ) 389} 390 391func TestSnapshotWithCcBinary(t *testing.T) { 392 result := testSdkWithCc(t, ` 393 module_exports { 394 name: "mymodule_exports", 395 native_binaries: ["mynativebinary"], 396 } 397 398 cc_binary { 399 name: "mynativebinary", 400 srcs: [ 401 "Test.cpp", 402 ], 403 compile_multilib: "both", 404 stl: "none", 405 } 406 `) 407 408 result.CheckSnapshot("mymodule_exports", "", 409 checkAndroidBpContents(` 410// This is auto-generated. DO NOT EDIT. 411 412cc_prebuilt_binary { 413 name: "mymodule_exports_mynativebinary@current", 414 sdk_member_name: "mynativebinary", 415 installable: false, 416 compile_multilib: "both", 417 arch: { 418 arm64: { 419 srcs: ["arm64/bin/mynativebinary"], 420 }, 421 arm: { 422 srcs: ["arm/bin/mynativebinary"], 423 }, 424 }, 425} 426 427cc_prebuilt_binary { 428 name: "mynativebinary", 429 prefer: false, 430 compile_multilib: "both", 431 arch: { 432 arm64: { 433 srcs: ["arm64/bin/mynativebinary"], 434 }, 435 arm: { 436 srcs: ["arm/bin/mynativebinary"], 437 }, 438 }, 439} 440 441module_exports_snapshot { 442 name: "mymodule_exports@current", 443 native_binaries: ["mymodule_exports_mynativebinary@current"], 444} 445`), 446 checkAllCopyRules(` 447.intermediates/mynativebinary/android_arm64_armv8-a/mynativebinary -> arm64/bin/mynativebinary 448.intermediates/mynativebinary/android_arm_armv7-a-neon/mynativebinary -> arm/bin/mynativebinary 449`), 450 ) 451} 452 453func TestMultipleHostOsTypesSnapshotWithCcBinary(t *testing.T) { 454 // b/145598135 - Generating host snapshots for anything other than linux is not supported. 455 SkipIfNotLinux(t) 456 457 result := testSdkWithCc(t, ` 458 module_exports { 459 name: "myexports", 460 device_supported: false, 461 host_supported: true, 462 native_binaries: ["mynativebinary"], 463 target: { 464 windows: { 465 enabled: true, 466 }, 467 }, 468 } 469 470 cc_binary { 471 name: "mynativebinary", 472 device_supported: false, 473 host_supported: true, 474 srcs: [ 475 "Test.cpp", 476 ], 477 compile_multilib: "both", 478 stl: "none", 479 target: { 480 windows: { 481 enabled: true, 482 }, 483 }, 484 } 485 `) 486 487 result.CheckSnapshot("myexports", "", 488 checkAndroidBpContents(` 489// This is auto-generated. DO NOT EDIT. 490 491cc_prebuilt_binary { 492 name: "myexports_mynativebinary@current", 493 sdk_member_name: "mynativebinary", 494 device_supported: false, 495 host_supported: true, 496 installable: false, 497 target: { 498 linux_glibc: { 499 compile_multilib: "both", 500 }, 501 linux_glibc_x86_64: { 502 srcs: ["linux_glibc/x86_64/bin/mynativebinary"], 503 }, 504 linux_glibc_x86: { 505 srcs: ["linux_glibc/x86/bin/mynativebinary"], 506 }, 507 windows: { 508 compile_multilib: "64", 509 }, 510 windows_x86_64: { 511 srcs: ["windows/x86_64/bin/mynativebinary.exe"], 512 }, 513 }, 514} 515 516cc_prebuilt_binary { 517 name: "mynativebinary", 518 prefer: false, 519 device_supported: false, 520 host_supported: true, 521 target: { 522 linux_glibc: { 523 compile_multilib: "both", 524 }, 525 linux_glibc_x86_64: { 526 srcs: ["linux_glibc/x86_64/bin/mynativebinary"], 527 }, 528 linux_glibc_x86: { 529 srcs: ["linux_glibc/x86/bin/mynativebinary"], 530 }, 531 windows: { 532 compile_multilib: "64", 533 }, 534 windows_x86_64: { 535 srcs: ["windows/x86_64/bin/mynativebinary.exe"], 536 }, 537 }, 538} 539 540module_exports_snapshot { 541 name: "myexports@current", 542 device_supported: false, 543 host_supported: true, 544 native_binaries: ["myexports_mynativebinary@current"], 545 target: { 546 windows: { 547 compile_multilib: "64", 548 }, 549 }, 550} 551`), 552 checkAllCopyRules(` 553.intermediates/mynativebinary/linux_glibc_x86_64/mynativebinary -> linux_glibc/x86_64/bin/mynativebinary 554.intermediates/mynativebinary/linux_glibc_x86/mynativebinary -> linux_glibc/x86/bin/mynativebinary 555.intermediates/mynativebinary/windows_x86_64/mynativebinary.exe -> windows/x86_64/bin/mynativebinary.exe 556`), 557 ) 558} 559 560func TestSnapshotWithCcSharedLibrary(t *testing.T) { 561 result := testSdkWithCc(t, ` 562 sdk { 563 name: "mysdk", 564 native_shared_libs: ["mynativelib"], 565 } 566 567 cc_library_shared { 568 name: "mynativelib", 569 srcs: [ 570 "Test.cpp", 571 "aidl/foo/bar/Test.aidl", 572 ], 573 apex_available: ["apex1", "apex2"], 574 export_include_dirs: ["include"], 575 aidl: { 576 export_aidl_headers: true, 577 }, 578 stl: "none", 579 } 580 `) 581 582 result.CheckSnapshot("mysdk", "", 583 checkAndroidBpContents(` 584// This is auto-generated. DO NOT EDIT. 585 586cc_prebuilt_library_shared { 587 name: "mysdk_mynativelib@current", 588 sdk_member_name: "mynativelib", 589 apex_available: [ 590 "apex1", 591 "apex2", 592 ], 593 installable: false, 594 stl: "none", 595 export_include_dirs: ["include/include"], 596 arch: { 597 arm64: { 598 srcs: ["arm64/lib/mynativelib.so"], 599 export_include_dirs: ["arm64/include_gen/mynativelib"], 600 }, 601 arm: { 602 srcs: ["arm/lib/mynativelib.so"], 603 export_include_dirs: ["arm/include_gen/mynativelib"], 604 }, 605 }, 606} 607 608cc_prebuilt_library_shared { 609 name: "mynativelib", 610 prefer: false, 611 apex_available: [ 612 "apex1", 613 "apex2", 614 ], 615 stl: "none", 616 export_include_dirs: ["include/include"], 617 arch: { 618 arm64: { 619 srcs: ["arm64/lib/mynativelib.so"], 620 export_include_dirs: ["arm64/include_gen/mynativelib"], 621 }, 622 arm: { 623 srcs: ["arm/lib/mynativelib.so"], 624 export_include_dirs: ["arm/include_gen/mynativelib"], 625 }, 626 }, 627} 628 629sdk_snapshot { 630 name: "mysdk@current", 631 native_shared_libs: ["mysdk_mynativelib@current"], 632} 633`), 634 checkAllCopyRules(` 635include/Test.h -> include/include/Test.h 636.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so 637.intermediates/mynativelib/android_arm64_armv8-a_shared/gen/aidl/aidl/foo/bar/Test.h -> arm64/include_gen/mynativelib/aidl/foo/bar/Test.h 638.intermediates/mynativelib/android_arm64_armv8-a_shared/gen/aidl/aidl/foo/bar/BnTest.h -> arm64/include_gen/mynativelib/aidl/foo/bar/BnTest.h 639.intermediates/mynativelib/android_arm64_armv8-a_shared/gen/aidl/aidl/foo/bar/BpTest.h -> arm64/include_gen/mynativelib/aidl/foo/bar/BpTest.h 640.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so 641.intermediates/mynativelib/android_arm_armv7-a-neon_shared/gen/aidl/aidl/foo/bar/Test.h -> arm/include_gen/mynativelib/aidl/foo/bar/Test.h 642.intermediates/mynativelib/android_arm_armv7-a-neon_shared/gen/aidl/aidl/foo/bar/BnTest.h -> arm/include_gen/mynativelib/aidl/foo/bar/BnTest.h 643.intermediates/mynativelib/android_arm_armv7-a-neon_shared/gen/aidl/aidl/foo/bar/BpTest.h -> arm/include_gen/mynativelib/aidl/foo/bar/BpTest.h 644`), 645 ) 646} 647 648func TestSnapshotWithCcSharedLibrarySharedLibs(t *testing.T) { 649 result := testSdkWithCc(t, ` 650 sdk { 651 name: "mysdk", 652 native_shared_libs: [ 653 "mynativelib", 654 "myothernativelib", 655 "mysystemnativelib", 656 ], 657 } 658 659 cc_library { 660 name: "mysystemnativelib", 661 srcs: [ 662 "Test.cpp", 663 ], 664 stl: "none", 665 } 666 667 cc_library_shared { 668 name: "myothernativelib", 669 srcs: [ 670 "Test.cpp", 671 ], 672 system_shared_libs: [ 673 // A reference to a library that is not an sdk member. Uses libm as that 674 // is in the default set of modules available to this test and so is available 675 // both here and also when the generated Android.bp file is tested in 676 // CheckSnapshot(). This ensures that the system_shared_libs property correctly 677 // handles references to modules that are not sdk members. 678 "libm", 679 ], 680 stl: "none", 681 } 682 683 cc_library { 684 name: "mynativelib", 685 srcs: [ 686 "Test.cpp", 687 ], 688 shared_libs: [ 689 // A reference to another sdk member. 690 "myothernativelib", 691 ], 692 target: { 693 android: { 694 shared: { 695 shared_libs: [ 696 // A reference to a library that is not an sdk member. The libc library 697 // is used here to check that the shared_libs property is handled correctly 698 // in a similar way to how libm is used to check system_shared_libs above. 699 "libc", 700 ], 701 }, 702 }, 703 }, 704 stl: "none", 705 } 706 `) 707 708 result.CheckSnapshot("mysdk", "", 709 checkAndroidBpContents(` 710// This is auto-generated. DO NOT EDIT. 711 712cc_prebuilt_library_shared { 713 name: "mysdk_mynativelib@current", 714 sdk_member_name: "mynativelib", 715 installable: false, 716 stl: "none", 717 shared_libs: [ 718 "mysdk_myothernativelib@current", 719 "libc", 720 ], 721 arch: { 722 arm64: { 723 srcs: ["arm64/lib/mynativelib.so"], 724 }, 725 arm: { 726 srcs: ["arm/lib/mynativelib.so"], 727 }, 728 }, 729} 730 731cc_prebuilt_library_shared { 732 name: "mynativelib", 733 prefer: false, 734 stl: "none", 735 shared_libs: [ 736 "myothernativelib", 737 "libc", 738 ], 739 arch: { 740 arm64: { 741 srcs: ["arm64/lib/mynativelib.so"], 742 }, 743 arm: { 744 srcs: ["arm/lib/mynativelib.so"], 745 }, 746 }, 747} 748 749cc_prebuilt_library_shared { 750 name: "mysdk_myothernativelib@current", 751 sdk_member_name: "myothernativelib", 752 installable: false, 753 stl: "none", 754 system_shared_libs: ["libm"], 755 arch: { 756 arm64: { 757 srcs: ["arm64/lib/myothernativelib.so"], 758 }, 759 arm: { 760 srcs: ["arm/lib/myothernativelib.so"], 761 }, 762 }, 763} 764 765cc_prebuilt_library_shared { 766 name: "myothernativelib", 767 prefer: false, 768 stl: "none", 769 system_shared_libs: ["libm"], 770 arch: { 771 arm64: { 772 srcs: ["arm64/lib/myothernativelib.so"], 773 }, 774 arm: { 775 srcs: ["arm/lib/myothernativelib.so"], 776 }, 777 }, 778} 779 780cc_prebuilt_library_shared { 781 name: "mysdk_mysystemnativelib@current", 782 sdk_member_name: "mysystemnativelib", 783 installable: false, 784 stl: "none", 785 arch: { 786 arm64: { 787 srcs: ["arm64/lib/mysystemnativelib.so"], 788 }, 789 arm: { 790 srcs: ["arm/lib/mysystemnativelib.so"], 791 }, 792 }, 793} 794 795cc_prebuilt_library_shared { 796 name: "mysystemnativelib", 797 prefer: false, 798 stl: "none", 799 arch: { 800 arm64: { 801 srcs: ["arm64/lib/mysystemnativelib.so"], 802 }, 803 arm: { 804 srcs: ["arm/lib/mysystemnativelib.so"], 805 }, 806 }, 807} 808 809sdk_snapshot { 810 name: "mysdk@current", 811 native_shared_libs: [ 812 "mysdk_mynativelib@current", 813 "mysdk_myothernativelib@current", 814 "mysdk_mysystemnativelib@current", 815 ], 816} 817`), 818 checkAllCopyRules(` 819.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so 820.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so 821.intermediates/myothernativelib/android_arm64_armv8-a_shared/myothernativelib.so -> arm64/lib/myothernativelib.so 822.intermediates/myothernativelib/android_arm_armv7-a-neon_shared/myothernativelib.so -> arm/lib/myothernativelib.so 823.intermediates/mysystemnativelib/android_arm64_armv8-a_shared/mysystemnativelib.so -> arm64/lib/mysystemnativelib.so 824.intermediates/mysystemnativelib/android_arm_armv7-a-neon_shared/mysystemnativelib.so -> arm/lib/mysystemnativelib.so 825`), 826 ) 827} 828 829func TestHostSnapshotWithCcSharedLibrary(t *testing.T) { 830 // b/145598135 - Generating host snapshots for anything other than linux is not supported. 831 SkipIfNotLinux(t) 832 833 result := testSdkWithCc(t, ` 834 sdk { 835 name: "mysdk", 836 device_supported: false, 837 host_supported: true, 838 native_shared_libs: ["mynativelib"], 839 } 840 841 cc_library_shared { 842 name: "mynativelib", 843 device_supported: false, 844 host_supported: true, 845 srcs: [ 846 "Test.cpp", 847 "aidl/foo/bar/Test.aidl", 848 ], 849 export_include_dirs: ["include"], 850 aidl: { 851 export_aidl_headers: true, 852 }, 853 stl: "none", 854 sdk_version: "minimum", 855 } 856 `) 857 858 result.CheckSnapshot("mysdk", "", 859 checkAndroidBpContents(` 860// This is auto-generated. DO NOT EDIT. 861 862cc_prebuilt_library_shared { 863 name: "mysdk_mynativelib@current", 864 sdk_member_name: "mynativelib", 865 device_supported: false, 866 host_supported: true, 867 installable: false, 868 sdk_version: "minimum", 869 stl: "none", 870 export_include_dirs: ["include/include"], 871 arch: { 872 x86_64: { 873 srcs: ["x86_64/lib/mynativelib.so"], 874 export_include_dirs: ["x86_64/include_gen/mynativelib"], 875 }, 876 x86: { 877 srcs: ["x86/lib/mynativelib.so"], 878 export_include_dirs: ["x86/include_gen/mynativelib"], 879 }, 880 }, 881} 882 883cc_prebuilt_library_shared { 884 name: "mynativelib", 885 prefer: false, 886 device_supported: false, 887 host_supported: true, 888 sdk_version: "minimum", 889 stl: "none", 890 export_include_dirs: ["include/include"], 891 arch: { 892 x86_64: { 893 srcs: ["x86_64/lib/mynativelib.so"], 894 export_include_dirs: ["x86_64/include_gen/mynativelib"], 895 }, 896 x86: { 897 srcs: ["x86/lib/mynativelib.so"], 898 export_include_dirs: ["x86/include_gen/mynativelib"], 899 }, 900 }, 901} 902 903sdk_snapshot { 904 name: "mysdk@current", 905 device_supported: false, 906 host_supported: true, 907 native_shared_libs: ["mysdk_mynativelib@current"], 908} 909`), 910 checkAllCopyRules(` 911include/Test.h -> include/include/Test.h 912.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> x86_64/lib/mynativelib.so 913.intermediates/mynativelib/linux_glibc_x86_64_shared/gen/aidl/aidl/foo/bar/Test.h -> x86_64/include_gen/mynativelib/aidl/foo/bar/Test.h 914.intermediates/mynativelib/linux_glibc_x86_64_shared/gen/aidl/aidl/foo/bar/BnTest.h -> x86_64/include_gen/mynativelib/aidl/foo/bar/BnTest.h 915.intermediates/mynativelib/linux_glibc_x86_64_shared/gen/aidl/aidl/foo/bar/BpTest.h -> x86_64/include_gen/mynativelib/aidl/foo/bar/BpTest.h 916.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> x86/lib/mynativelib.so 917.intermediates/mynativelib/linux_glibc_x86_shared/gen/aidl/aidl/foo/bar/Test.h -> x86/include_gen/mynativelib/aidl/foo/bar/Test.h 918.intermediates/mynativelib/linux_glibc_x86_shared/gen/aidl/aidl/foo/bar/BnTest.h -> x86/include_gen/mynativelib/aidl/foo/bar/BnTest.h 919.intermediates/mynativelib/linux_glibc_x86_shared/gen/aidl/aidl/foo/bar/BpTest.h -> x86/include_gen/mynativelib/aidl/foo/bar/BpTest.h 920`), 921 ) 922} 923 924func TestMultipleHostOsTypesSnapshotWithCcSharedLibrary(t *testing.T) { 925 // b/145598135 - Generating host snapshots for anything other than linux is not supported. 926 SkipIfNotLinux(t) 927 928 result := testSdkWithCc(t, ` 929 sdk { 930 name: "mysdk", 931 device_supported: false, 932 host_supported: true, 933 native_shared_libs: ["mynativelib"], 934 target: { 935 windows: { 936 enabled: true, 937 }, 938 }, 939 } 940 941 cc_library_shared { 942 name: "mynativelib", 943 device_supported: false, 944 host_supported: true, 945 srcs: [ 946 "Test.cpp", 947 ], 948 stl: "none", 949 target: { 950 windows: { 951 enabled: true, 952 }, 953 }, 954 } 955 `) 956 957 result.CheckSnapshot("mysdk", "", 958 checkAndroidBpContents(` 959// This is auto-generated. DO NOT EDIT. 960 961cc_prebuilt_library_shared { 962 name: "mysdk_mynativelib@current", 963 sdk_member_name: "mynativelib", 964 device_supported: false, 965 host_supported: true, 966 installable: false, 967 stl: "none", 968 target: { 969 linux_glibc_x86_64: { 970 srcs: ["linux_glibc/x86_64/lib/mynativelib.so"], 971 }, 972 linux_glibc_x86: { 973 srcs: ["linux_glibc/x86/lib/mynativelib.so"], 974 }, 975 windows_x86_64: { 976 srcs: ["windows/x86_64/lib/mynativelib.dll"], 977 }, 978 }, 979} 980 981cc_prebuilt_library_shared { 982 name: "mynativelib", 983 prefer: false, 984 device_supported: false, 985 host_supported: true, 986 stl: "none", 987 target: { 988 linux_glibc_x86_64: { 989 srcs: ["linux_glibc/x86_64/lib/mynativelib.so"], 990 }, 991 linux_glibc_x86: { 992 srcs: ["linux_glibc/x86/lib/mynativelib.so"], 993 }, 994 windows_x86_64: { 995 srcs: ["windows/x86_64/lib/mynativelib.dll"], 996 }, 997 }, 998} 999 1000sdk_snapshot { 1001 name: "mysdk@current", 1002 device_supported: false, 1003 host_supported: true, 1004 native_shared_libs: ["mysdk_mynativelib@current"], 1005 target: { 1006 windows: { 1007 compile_multilib: "64", 1008 }, 1009 }, 1010} 1011`), 1012 checkAllCopyRules(` 1013.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> linux_glibc/x86_64/lib/mynativelib.so 1014.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> linux_glibc/x86/lib/mynativelib.so 1015.intermediates/mynativelib/windows_x86_64_shared/mynativelib.dll -> windows/x86_64/lib/mynativelib.dll 1016`), 1017 ) 1018} 1019 1020func TestSnapshotWithCcStaticLibrary(t *testing.T) { 1021 result := testSdkWithCc(t, ` 1022 module_exports { 1023 name: "myexports", 1024 native_static_libs: ["mynativelib"], 1025 } 1026 1027 cc_library_static { 1028 name: "mynativelib", 1029 srcs: [ 1030 "Test.cpp", 1031 "aidl/foo/bar/Test.aidl", 1032 ], 1033 export_include_dirs: ["include"], 1034 aidl: { 1035 export_aidl_headers: true, 1036 }, 1037 stl: "none", 1038 } 1039 `) 1040 1041 result.CheckSnapshot("myexports", "", 1042 checkAndroidBpContents(` 1043// This is auto-generated. DO NOT EDIT. 1044 1045cc_prebuilt_library_static { 1046 name: "myexports_mynativelib@current", 1047 sdk_member_name: "mynativelib", 1048 installable: false, 1049 stl: "none", 1050 export_include_dirs: ["include/include"], 1051 arch: { 1052 arm64: { 1053 srcs: ["arm64/lib/mynativelib.a"], 1054 export_include_dirs: ["arm64/include_gen/mynativelib"], 1055 }, 1056 arm: { 1057 srcs: ["arm/lib/mynativelib.a"], 1058 export_include_dirs: ["arm/include_gen/mynativelib"], 1059 }, 1060 }, 1061} 1062 1063cc_prebuilt_library_static { 1064 name: "mynativelib", 1065 prefer: false, 1066 stl: "none", 1067 export_include_dirs: ["include/include"], 1068 arch: { 1069 arm64: { 1070 srcs: ["arm64/lib/mynativelib.a"], 1071 export_include_dirs: ["arm64/include_gen/mynativelib"], 1072 }, 1073 arm: { 1074 srcs: ["arm/lib/mynativelib.a"], 1075 export_include_dirs: ["arm/include_gen/mynativelib"], 1076 }, 1077 }, 1078} 1079 1080module_exports_snapshot { 1081 name: "myexports@current", 1082 native_static_libs: ["myexports_mynativelib@current"], 1083} 1084`), 1085 checkAllCopyRules(` 1086include/Test.h -> include/include/Test.h 1087.intermediates/mynativelib/android_arm64_armv8-a_static/mynativelib.a -> arm64/lib/mynativelib.a 1088.intermediates/mynativelib/android_arm64_armv8-a_static/gen/aidl/aidl/foo/bar/Test.h -> arm64/include_gen/mynativelib/aidl/foo/bar/Test.h 1089.intermediates/mynativelib/android_arm64_armv8-a_static/gen/aidl/aidl/foo/bar/BnTest.h -> arm64/include_gen/mynativelib/aidl/foo/bar/BnTest.h 1090.intermediates/mynativelib/android_arm64_armv8-a_static/gen/aidl/aidl/foo/bar/BpTest.h -> arm64/include_gen/mynativelib/aidl/foo/bar/BpTest.h 1091.intermediates/mynativelib/android_arm_armv7-a-neon_static/mynativelib.a -> arm/lib/mynativelib.a 1092.intermediates/mynativelib/android_arm_armv7-a-neon_static/gen/aidl/aidl/foo/bar/Test.h -> arm/include_gen/mynativelib/aidl/foo/bar/Test.h 1093.intermediates/mynativelib/android_arm_armv7-a-neon_static/gen/aidl/aidl/foo/bar/BnTest.h -> arm/include_gen/mynativelib/aidl/foo/bar/BnTest.h 1094.intermediates/mynativelib/android_arm_armv7-a-neon_static/gen/aidl/aidl/foo/bar/BpTest.h -> arm/include_gen/mynativelib/aidl/foo/bar/BpTest.h 1095`), 1096 ) 1097} 1098 1099func TestHostSnapshotWithCcStaticLibrary(t *testing.T) { 1100 // b/145598135 - Generating host snapshots for anything other than linux is not supported. 1101 SkipIfNotLinux(t) 1102 1103 result := testSdkWithCc(t, ` 1104 module_exports { 1105 name: "myexports", 1106 device_supported: false, 1107 host_supported: true, 1108 native_static_libs: ["mynativelib"], 1109 } 1110 1111 cc_library_static { 1112 name: "mynativelib", 1113 device_supported: false, 1114 host_supported: true, 1115 srcs: [ 1116 "Test.cpp", 1117 "aidl/foo/bar/Test.aidl", 1118 ], 1119 export_include_dirs: ["include"], 1120 aidl: { 1121 export_aidl_headers: true, 1122 }, 1123 stl: "none", 1124 } 1125 `) 1126 1127 result.CheckSnapshot("myexports", "", 1128 checkAndroidBpContents(` 1129// This is auto-generated. DO NOT EDIT. 1130 1131cc_prebuilt_library_static { 1132 name: "myexports_mynativelib@current", 1133 sdk_member_name: "mynativelib", 1134 device_supported: false, 1135 host_supported: true, 1136 installable: false, 1137 stl: "none", 1138 export_include_dirs: ["include/include"], 1139 arch: { 1140 x86_64: { 1141 srcs: ["x86_64/lib/mynativelib.a"], 1142 export_include_dirs: ["x86_64/include_gen/mynativelib"], 1143 }, 1144 x86: { 1145 srcs: ["x86/lib/mynativelib.a"], 1146 export_include_dirs: ["x86/include_gen/mynativelib"], 1147 }, 1148 }, 1149} 1150 1151cc_prebuilt_library_static { 1152 name: "mynativelib", 1153 prefer: false, 1154 device_supported: false, 1155 host_supported: true, 1156 stl: "none", 1157 export_include_dirs: ["include/include"], 1158 arch: { 1159 x86_64: { 1160 srcs: ["x86_64/lib/mynativelib.a"], 1161 export_include_dirs: ["x86_64/include_gen/mynativelib"], 1162 }, 1163 x86: { 1164 srcs: ["x86/lib/mynativelib.a"], 1165 export_include_dirs: ["x86/include_gen/mynativelib"], 1166 }, 1167 }, 1168} 1169 1170module_exports_snapshot { 1171 name: "myexports@current", 1172 device_supported: false, 1173 host_supported: true, 1174 native_static_libs: ["myexports_mynativelib@current"], 1175} 1176`), 1177 checkAllCopyRules(` 1178include/Test.h -> include/include/Test.h 1179.intermediates/mynativelib/linux_glibc_x86_64_static/mynativelib.a -> x86_64/lib/mynativelib.a 1180.intermediates/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/Test.h -> x86_64/include_gen/mynativelib/aidl/foo/bar/Test.h 1181.intermediates/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/BnTest.h -> x86_64/include_gen/mynativelib/aidl/foo/bar/BnTest.h 1182.intermediates/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/BpTest.h -> x86_64/include_gen/mynativelib/aidl/foo/bar/BpTest.h 1183.intermediates/mynativelib/linux_glibc_x86_static/mynativelib.a -> x86/lib/mynativelib.a 1184.intermediates/mynativelib/linux_glibc_x86_static/gen/aidl/aidl/foo/bar/Test.h -> x86/include_gen/mynativelib/aidl/foo/bar/Test.h 1185.intermediates/mynativelib/linux_glibc_x86_static/gen/aidl/aidl/foo/bar/BnTest.h -> x86/include_gen/mynativelib/aidl/foo/bar/BnTest.h 1186.intermediates/mynativelib/linux_glibc_x86_static/gen/aidl/aidl/foo/bar/BpTest.h -> x86/include_gen/mynativelib/aidl/foo/bar/BpTest.h 1187`), 1188 ) 1189} 1190 1191func TestSnapshotWithCcLibrary(t *testing.T) { 1192 result := testSdkWithCc(t, ` 1193 module_exports { 1194 name: "myexports", 1195 native_libs: ["mynativelib"], 1196 } 1197 1198 cc_library { 1199 name: "mynativelib", 1200 srcs: [ 1201 "Test.cpp", 1202 ], 1203 export_include_dirs: ["include"], 1204 stl: "none", 1205 } 1206 `) 1207 1208 result.CheckSnapshot("myexports", "", 1209 checkAndroidBpContents(` 1210// This is auto-generated. DO NOT EDIT. 1211 1212cc_prebuilt_library { 1213 name: "myexports_mynativelib@current", 1214 sdk_member_name: "mynativelib", 1215 installable: false, 1216 stl: "none", 1217 export_include_dirs: ["include/include"], 1218 arch: { 1219 arm64: { 1220 static: { 1221 srcs: ["arm64/lib/mynativelib.a"], 1222 }, 1223 shared: { 1224 srcs: ["arm64/lib/mynativelib.so"], 1225 }, 1226 }, 1227 arm: { 1228 static: { 1229 srcs: ["arm/lib/mynativelib.a"], 1230 }, 1231 shared: { 1232 srcs: ["arm/lib/mynativelib.so"], 1233 }, 1234 }, 1235 }, 1236} 1237 1238cc_prebuilt_library { 1239 name: "mynativelib", 1240 prefer: false, 1241 stl: "none", 1242 export_include_dirs: ["include/include"], 1243 arch: { 1244 arm64: { 1245 static: { 1246 srcs: ["arm64/lib/mynativelib.a"], 1247 }, 1248 shared: { 1249 srcs: ["arm64/lib/mynativelib.so"], 1250 }, 1251 }, 1252 arm: { 1253 static: { 1254 srcs: ["arm/lib/mynativelib.a"], 1255 }, 1256 shared: { 1257 srcs: ["arm/lib/mynativelib.so"], 1258 }, 1259 }, 1260 }, 1261} 1262 1263module_exports_snapshot { 1264 name: "myexports@current", 1265 native_libs: ["myexports_mynativelib@current"], 1266} 1267`), 1268 checkAllCopyRules(` 1269include/Test.h -> include/include/Test.h 1270.intermediates/mynativelib/android_arm64_armv8-a_static/mynativelib.a -> arm64/lib/mynativelib.a 1271.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so 1272.intermediates/mynativelib/android_arm_armv7-a-neon_static/mynativelib.a -> arm/lib/mynativelib.a 1273.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so`), 1274 ) 1275} 1276 1277func TestHostSnapshotWithMultiLib64(t *testing.T) { 1278 // b/145598135 - Generating host snapshots for anything other than linux is not supported. 1279 SkipIfNotLinux(t) 1280 1281 result := testSdkWithCc(t, ` 1282 module_exports { 1283 name: "myexports", 1284 device_supported: false, 1285 host_supported: true, 1286 target: { 1287 host: { 1288 compile_multilib: "64", 1289 }, 1290 }, 1291 native_static_libs: ["mynativelib"], 1292 } 1293 1294 cc_library_static { 1295 name: "mynativelib", 1296 device_supported: false, 1297 host_supported: true, 1298 srcs: [ 1299 "Test.cpp", 1300 "aidl/foo/bar/Test.aidl", 1301 ], 1302 export_include_dirs: ["include"], 1303 aidl: { 1304 export_aidl_headers: true, 1305 }, 1306 stl: "none", 1307 } 1308 `) 1309 1310 result.CheckSnapshot("myexports", "", 1311 checkAndroidBpContents(` 1312// This is auto-generated. DO NOT EDIT. 1313 1314cc_prebuilt_library_static { 1315 name: "myexports_mynativelib@current", 1316 sdk_member_name: "mynativelib", 1317 device_supported: false, 1318 host_supported: true, 1319 installable: false, 1320 stl: "none", 1321 export_include_dirs: ["include/include"], 1322 arch: { 1323 x86_64: { 1324 srcs: ["x86_64/lib/mynativelib.a"], 1325 export_include_dirs: ["x86_64/include_gen/mynativelib"], 1326 }, 1327 }, 1328} 1329 1330cc_prebuilt_library_static { 1331 name: "mynativelib", 1332 prefer: false, 1333 device_supported: false, 1334 host_supported: true, 1335 stl: "none", 1336 export_include_dirs: ["include/include"], 1337 arch: { 1338 x86_64: { 1339 srcs: ["x86_64/lib/mynativelib.a"], 1340 export_include_dirs: ["x86_64/include_gen/mynativelib"], 1341 }, 1342 }, 1343} 1344 1345module_exports_snapshot { 1346 name: "myexports@current", 1347 device_supported: false, 1348 host_supported: true, 1349 native_static_libs: ["myexports_mynativelib@current"], 1350 target: { 1351 linux_glibc: { 1352 compile_multilib: "64", 1353 }, 1354 }, 1355}`), 1356 checkAllCopyRules(` 1357include/Test.h -> include/include/Test.h 1358.intermediates/mynativelib/linux_glibc_x86_64_static/mynativelib.a -> x86_64/lib/mynativelib.a 1359.intermediates/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/Test.h -> x86_64/include_gen/mynativelib/aidl/foo/bar/Test.h 1360.intermediates/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/BnTest.h -> x86_64/include_gen/mynativelib/aidl/foo/bar/BnTest.h 1361.intermediates/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/BpTest.h -> x86_64/include_gen/mynativelib/aidl/foo/bar/BpTest.h 1362`), 1363 ) 1364} 1365 1366func TestSnapshotWithCcHeadersLibrary(t *testing.T) { 1367 result := testSdkWithCc(t, ` 1368 sdk { 1369 name: "mysdk", 1370 native_header_libs: ["mynativeheaders"], 1371 } 1372 1373 cc_library_headers { 1374 name: "mynativeheaders", 1375 export_include_dirs: ["include"], 1376 stl: "none", 1377 } 1378 `) 1379 1380 result.CheckSnapshot("mysdk", "", 1381 checkAndroidBpContents(` 1382// This is auto-generated. DO NOT EDIT. 1383 1384cc_prebuilt_library_headers { 1385 name: "mysdk_mynativeheaders@current", 1386 sdk_member_name: "mynativeheaders", 1387 stl: "none", 1388 export_include_dirs: ["include/include"], 1389} 1390 1391cc_prebuilt_library_headers { 1392 name: "mynativeheaders", 1393 prefer: false, 1394 stl: "none", 1395 export_include_dirs: ["include/include"], 1396} 1397 1398sdk_snapshot { 1399 name: "mysdk@current", 1400 native_header_libs: ["mysdk_mynativeheaders@current"], 1401} 1402`), 1403 checkAllCopyRules(` 1404include/Test.h -> include/include/Test.h 1405`), 1406 ) 1407} 1408 1409func TestHostSnapshotWithCcHeadersLibrary(t *testing.T) { 1410 // b/145598135 - Generating host snapshots for anything other than linux is not supported. 1411 SkipIfNotLinux(t) 1412 1413 result := testSdkWithCc(t, ` 1414 sdk { 1415 name: "mysdk", 1416 device_supported: false, 1417 host_supported: true, 1418 native_header_libs: ["mynativeheaders"], 1419 } 1420 1421 cc_library_headers { 1422 name: "mynativeheaders", 1423 device_supported: false, 1424 host_supported: true, 1425 export_include_dirs: ["include"], 1426 stl: "none", 1427 } 1428 `) 1429 1430 result.CheckSnapshot("mysdk", "", 1431 checkAndroidBpContents(` 1432// This is auto-generated. DO NOT EDIT. 1433 1434cc_prebuilt_library_headers { 1435 name: "mysdk_mynativeheaders@current", 1436 sdk_member_name: "mynativeheaders", 1437 device_supported: false, 1438 host_supported: true, 1439 stl: "none", 1440 export_include_dirs: ["include/include"], 1441} 1442 1443cc_prebuilt_library_headers { 1444 name: "mynativeheaders", 1445 prefer: false, 1446 device_supported: false, 1447 host_supported: true, 1448 stl: "none", 1449 export_include_dirs: ["include/include"], 1450} 1451 1452sdk_snapshot { 1453 name: "mysdk@current", 1454 device_supported: false, 1455 host_supported: true, 1456 native_header_libs: ["mysdk_mynativeheaders@current"], 1457} 1458`), 1459 checkAllCopyRules(` 1460include/Test.h -> include/include/Test.h 1461`), 1462 ) 1463} 1464 1465func TestDeviceAndHostSnapshotWithCcHeadersLibrary(t *testing.T) { 1466 // b/145598135 - Generating host snapshots for anything other than linux is not supported. 1467 SkipIfNotLinux(t) 1468 1469 result := testSdkWithCc(t, ` 1470 sdk { 1471 name: "mysdk", 1472 host_supported: true, 1473 native_header_libs: ["mynativeheaders"], 1474 } 1475 1476 cc_library_headers { 1477 name: "mynativeheaders", 1478 host_supported: true, 1479 stl: "none", 1480 export_system_include_dirs: ["include"], 1481 target: { 1482 android: { 1483 export_include_dirs: ["include-android"], 1484 }, 1485 host: { 1486 export_include_dirs: ["include-host"], 1487 }, 1488 }, 1489 } 1490 `) 1491 1492 result.CheckSnapshot("mysdk", "", 1493 checkAndroidBpContents(` 1494// This is auto-generated. DO NOT EDIT. 1495 1496cc_prebuilt_library_headers { 1497 name: "mysdk_mynativeheaders@current", 1498 sdk_member_name: "mynativeheaders", 1499 host_supported: true, 1500 stl: "none", 1501 export_system_include_dirs: ["include/include"], 1502 target: { 1503 android: { 1504 export_include_dirs: ["include/include-android"], 1505 }, 1506 linux_glibc: { 1507 export_include_dirs: ["include/include-host"], 1508 }, 1509 }, 1510} 1511 1512cc_prebuilt_library_headers { 1513 name: "mynativeheaders", 1514 prefer: false, 1515 host_supported: true, 1516 stl: "none", 1517 export_system_include_dirs: ["include/include"], 1518 target: { 1519 android: { 1520 export_include_dirs: ["include/include-android"], 1521 }, 1522 linux_glibc: { 1523 export_include_dirs: ["include/include-host"], 1524 }, 1525 }, 1526} 1527 1528sdk_snapshot { 1529 name: "mysdk@current", 1530 host_supported: true, 1531 native_header_libs: ["mysdk_mynativeheaders@current"], 1532} 1533`), 1534 checkAllCopyRules(` 1535include/Test.h -> include/include/Test.h 1536include-android/AndroidTest.h -> include/include-android/AndroidTest.h 1537include-host/HostTest.h -> include/include-host/HostTest.h 1538`), 1539 ) 1540} 1541 1542func TestSystemSharedLibPropagation(t *testing.T) { 1543 // b/145598135 - Generating host snapshots for anything other than linux is not supported. 1544 SkipIfNotLinux(t) 1545 1546 result := testSdkWithCc(t, ` 1547 sdk { 1548 name: "mysdk", 1549 native_shared_libs: ["sslnil", "sslempty", "sslnonempty"], 1550 } 1551 1552 cc_library { 1553 name: "sslnil", 1554 host_supported: true, 1555 } 1556 1557 cc_library { 1558 name: "sslempty", 1559 system_shared_libs: [], 1560 } 1561 1562 cc_library { 1563 name: "sslnonempty", 1564 system_shared_libs: ["sslnil"], 1565 } 1566 `) 1567 1568 result.CheckSnapshot("mysdk", "", 1569 checkAndroidBpContents(` 1570// This is auto-generated. DO NOT EDIT. 1571 1572cc_prebuilt_library_shared { 1573 name: "mysdk_sslnil@current", 1574 sdk_member_name: "sslnil", 1575 installable: false, 1576 arch: { 1577 arm64: { 1578 srcs: ["arm64/lib/sslnil.so"], 1579 }, 1580 arm: { 1581 srcs: ["arm/lib/sslnil.so"], 1582 }, 1583 }, 1584} 1585 1586cc_prebuilt_library_shared { 1587 name: "sslnil", 1588 prefer: false, 1589 arch: { 1590 arm64: { 1591 srcs: ["arm64/lib/sslnil.so"], 1592 }, 1593 arm: { 1594 srcs: ["arm/lib/sslnil.so"], 1595 }, 1596 }, 1597} 1598 1599cc_prebuilt_library_shared { 1600 name: "mysdk_sslempty@current", 1601 sdk_member_name: "sslempty", 1602 installable: false, 1603 system_shared_libs: [], 1604 arch: { 1605 arm64: { 1606 srcs: ["arm64/lib/sslempty.so"], 1607 }, 1608 arm: { 1609 srcs: ["arm/lib/sslempty.so"], 1610 }, 1611 }, 1612} 1613 1614cc_prebuilt_library_shared { 1615 name: "sslempty", 1616 prefer: false, 1617 system_shared_libs: [], 1618 arch: { 1619 arm64: { 1620 srcs: ["arm64/lib/sslempty.so"], 1621 }, 1622 arm: { 1623 srcs: ["arm/lib/sslempty.so"], 1624 }, 1625 }, 1626} 1627 1628cc_prebuilt_library_shared { 1629 name: "mysdk_sslnonempty@current", 1630 sdk_member_name: "sslnonempty", 1631 installable: false, 1632 system_shared_libs: ["mysdk_sslnil@current"], 1633 arch: { 1634 arm64: { 1635 srcs: ["arm64/lib/sslnonempty.so"], 1636 }, 1637 arm: { 1638 srcs: ["arm/lib/sslnonempty.so"], 1639 }, 1640 }, 1641} 1642 1643cc_prebuilt_library_shared { 1644 name: "sslnonempty", 1645 prefer: false, 1646 system_shared_libs: ["sslnil"], 1647 arch: { 1648 arm64: { 1649 srcs: ["arm64/lib/sslnonempty.so"], 1650 }, 1651 arm: { 1652 srcs: ["arm/lib/sslnonempty.so"], 1653 }, 1654 }, 1655} 1656 1657sdk_snapshot { 1658 name: "mysdk@current", 1659 native_shared_libs: [ 1660 "mysdk_sslnil@current", 1661 "mysdk_sslempty@current", 1662 "mysdk_sslnonempty@current", 1663 ], 1664} 1665`)) 1666 1667 result = testSdkWithCc(t, ` 1668 sdk { 1669 name: "mysdk", 1670 host_supported: true, 1671 native_shared_libs: ["sslvariants"], 1672 } 1673 1674 cc_library { 1675 name: "sslvariants", 1676 host_supported: true, 1677 target: { 1678 android: { 1679 system_shared_libs: [], 1680 }, 1681 }, 1682 } 1683 `) 1684 1685 result.CheckSnapshot("mysdk", "", 1686 checkAndroidBpContents(` 1687// This is auto-generated. DO NOT EDIT. 1688 1689cc_prebuilt_library_shared { 1690 name: "mysdk_sslvariants@current", 1691 sdk_member_name: "sslvariants", 1692 host_supported: true, 1693 installable: false, 1694 target: { 1695 android: { 1696 system_shared_libs: [], 1697 }, 1698 android_arm64: { 1699 srcs: ["android/arm64/lib/sslvariants.so"], 1700 }, 1701 android_arm: { 1702 srcs: ["android/arm/lib/sslvariants.so"], 1703 }, 1704 linux_glibc_x86_64: { 1705 srcs: ["linux_glibc/x86_64/lib/sslvariants.so"], 1706 }, 1707 linux_glibc_x86: { 1708 srcs: ["linux_glibc/x86/lib/sslvariants.so"], 1709 }, 1710 }, 1711} 1712 1713cc_prebuilt_library_shared { 1714 name: "sslvariants", 1715 prefer: false, 1716 host_supported: true, 1717 target: { 1718 android: { 1719 system_shared_libs: [], 1720 }, 1721 android_arm64: { 1722 srcs: ["android/arm64/lib/sslvariants.so"], 1723 }, 1724 android_arm: { 1725 srcs: ["android/arm/lib/sslvariants.so"], 1726 }, 1727 linux_glibc_x86_64: { 1728 srcs: ["linux_glibc/x86_64/lib/sslvariants.so"], 1729 }, 1730 linux_glibc_x86: { 1731 srcs: ["linux_glibc/x86/lib/sslvariants.so"], 1732 }, 1733 }, 1734} 1735 1736sdk_snapshot { 1737 name: "mysdk@current", 1738 host_supported: true, 1739 native_shared_libs: ["mysdk_sslvariants@current"], 1740} 1741`)) 1742} 1743 1744func TestStubsLibrary(t *testing.T) { 1745 result := testSdkWithCc(t, ` 1746 sdk { 1747 name: "mysdk", 1748 native_shared_libs: ["stubslib"], 1749 } 1750 1751 cc_library { 1752 name: "internaldep", 1753 } 1754 1755 cc_library { 1756 name: "stubslib", 1757 shared_libs: ["internaldep"], 1758 stubs: { 1759 symbol_file: "some/where/stubslib.map.txt", 1760 versions: ["1", "2", "3"], 1761 }, 1762 } 1763 `) 1764 1765 result.CheckSnapshot("mysdk", "", 1766 checkAndroidBpContents(` 1767// This is auto-generated. DO NOT EDIT. 1768 1769cc_prebuilt_library_shared { 1770 name: "mysdk_stubslib@current", 1771 sdk_member_name: "stubslib", 1772 installable: false, 1773 stubs: { 1774 versions: ["3"], 1775 }, 1776 arch: { 1777 arm64: { 1778 srcs: ["arm64/lib/stubslib.so"], 1779 }, 1780 arm: { 1781 srcs: ["arm/lib/stubslib.so"], 1782 }, 1783 }, 1784} 1785 1786cc_prebuilt_library_shared { 1787 name: "stubslib", 1788 prefer: false, 1789 stubs: { 1790 versions: ["3"], 1791 }, 1792 arch: { 1793 arm64: { 1794 srcs: ["arm64/lib/stubslib.so"], 1795 }, 1796 arm: { 1797 srcs: ["arm/lib/stubslib.so"], 1798 }, 1799 }, 1800} 1801 1802sdk_snapshot { 1803 name: "mysdk@current", 1804 native_shared_libs: ["mysdk_stubslib@current"], 1805} 1806`)) 1807} 1808 1809func TestDeviceAndHostSnapshotWithStubsLibrary(t *testing.T) { 1810 // b/145598135 - Generating host snapshots for anything other than linux is not supported. 1811 SkipIfNotLinux(t) 1812 1813 result := testSdkWithCc(t, ` 1814 sdk { 1815 name: "mysdk", 1816 host_supported: true, 1817 native_shared_libs: ["stubslib"], 1818 } 1819 1820 cc_library { 1821 name: "internaldep", 1822 host_supported: true, 1823 } 1824 1825 cc_library { 1826 name: "stubslib", 1827 host_supported: true, 1828 shared_libs: ["internaldep"], 1829 stubs: { 1830 symbol_file: "some/where/stubslib.map.txt", 1831 versions: ["1", "2", "3"], 1832 }, 1833 } 1834 `) 1835 1836 result.CheckSnapshot("mysdk", "", 1837 checkAndroidBpContents(` 1838// This is auto-generated. DO NOT EDIT. 1839 1840cc_prebuilt_library_shared { 1841 name: "mysdk_stubslib@current", 1842 sdk_member_name: "stubslib", 1843 host_supported: true, 1844 installable: false, 1845 stubs: { 1846 versions: ["3"], 1847 }, 1848 target: { 1849 android_arm64: { 1850 srcs: ["android/arm64/lib/stubslib.so"], 1851 }, 1852 android_arm: { 1853 srcs: ["android/arm/lib/stubslib.so"], 1854 }, 1855 linux_glibc_x86_64: { 1856 srcs: ["linux_glibc/x86_64/lib/stubslib.so"], 1857 }, 1858 linux_glibc_x86: { 1859 srcs: ["linux_glibc/x86/lib/stubslib.so"], 1860 }, 1861 }, 1862} 1863 1864cc_prebuilt_library_shared { 1865 name: "stubslib", 1866 prefer: false, 1867 host_supported: true, 1868 stubs: { 1869 versions: ["3"], 1870 }, 1871 target: { 1872 android_arm64: { 1873 srcs: ["android/arm64/lib/stubslib.so"], 1874 }, 1875 android_arm: { 1876 srcs: ["android/arm/lib/stubslib.so"], 1877 }, 1878 linux_glibc_x86_64: { 1879 srcs: ["linux_glibc/x86_64/lib/stubslib.so"], 1880 }, 1881 linux_glibc_x86: { 1882 srcs: ["linux_glibc/x86/lib/stubslib.so"], 1883 }, 1884 }, 1885} 1886 1887sdk_snapshot { 1888 name: "mysdk@current", 1889 host_supported: true, 1890 native_shared_libs: ["mysdk_stubslib@current"], 1891} 1892`)) 1893} 1894