1# Copyright (C) 2022 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 15load("@bazel_skylib//lib:new_sets.bzl", "sets") 16load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts") 17load(":stl.bzl", "stl_info_from_attr") 18 19_ANDROID_STATIC_DEPS = ["//external/libcxxabi:libc++demangle"] 20_STATIC_DEP = ["//external/libcxx:libc++_static"] 21_ANDROID_BINARY_STATIC_DEP = ["//prebuilts/clang/host/linux-x86:libunwind"] 22_SHARED_DEP = ["//external/libcxx:libc++"] 23 24_ANDROID_CPPFLAGS = [] 25_ANDROID_LINKOPTS = [] 26_LINUX_CPPFLAGS = ["-nostdinc++"] 27_LINUX_LINKOPTS = ["-nostdlib++"] 28_LINUX_BIONIC_CPPFLAGS = [] 29_LINUX_BIONIC_LINKOPTS = [] 30_DARWIN_CPPFLAGS = [ 31 "-nostdinc++", 32 "-D_LIBCPP_DISABLE_AVAILABILITY", 33] 34_DARWIN_CPPFLAGS_STL_NONE = ["-nostdinc++"] 35_DARWIN_LINKOPTS = ["-nostdlib++"] 36_WINDOWS_CPPFLAGS = [ 37 "-nostdinc++", 38 "-D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS", 39 "-D_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS", 40 "-D_LIBCPP_HAS_THREAD_API_WIN32", 41] 42_WINDOWS_CPPFLAGS_STL_NONE = ["-nostdinc++"] 43_WINDOWS_LINKOPTS = ["-nostdlib++"] 44 45_StlInfo = provider(fields = ["static", "shared"]) 46 47def _stl_impl(ctx): 48 return [ 49 _StlInfo( 50 static = ctx.attr.static, 51 shared = ctx.attr.shared, 52 ), 53 ] 54 55_stl = rule( 56 implementation = _stl_impl, 57 attrs = { 58 "shared": attr.string_list(), 59 "static": attr.string_list(), 60 }, 61) 62 63_StlFlagsInfo = provider(fields = ["cppflags", "linkopts"]) 64 65def _stl_flags_impl(ctx): 66 return [ 67 _StlFlagsInfo( 68 cppflags = ctx.attr.cppflags, 69 linkopts = ctx.attr.linkopts, 70 ), 71 ] 72 73_stl_flags = rule( 74 implementation = _stl_flags_impl, 75 attrs = { 76 "cppflags": attr.string_list(), 77 "linkopts": attr.string_list(), 78 }, 79) 80 81def _test_stl( 82 stl, 83 is_shared, 84 is_binary, 85 android_deps, 86 non_android_deps, 87 android_flags, 88 linux_flags, 89 linux_bionic_flags, 90 darwin_flags, 91 windows_flags): 92 target_name = _stl_deps_target(stl, is_shared, is_binary) 93 flags_target_name = _stl_flags_target(stl, is_shared, is_binary) 94 android_test_name = target_name + "_android_test" 95 non_android_test_name = target_name + "_non_android_test" 96 android_flags_test_name = target_name + "_android_flags_test" 97 linux_flags_test_name = target_name + "_linux_flags_test" 98 linux_bionic_flags_test_name = target_name + "_linux_bionic_flags_test" 99 darwin_flags_test_name = target_name + "_darwin_flags_test" 100 windows_flags_test_name = target_name + "_windows_flags_test" 101 102 _stl_deps_android_test( 103 name = android_test_name, 104 static = android_deps.static, 105 shared = android_deps.shared, 106 target_under_test = target_name, 107 ) 108 109 _stl_deps_non_android_test( 110 name = non_android_test_name, 111 static = non_android_deps.static, 112 shared = non_android_deps.shared, 113 target_under_test = target_name, 114 ) 115 116 _stl_flags_android_test( 117 name = android_flags_test_name, 118 cppflags = android_flags.cppflags, 119 linkopts = android_flags.linkopts, 120 target_under_test = flags_target_name, 121 ) 122 123 _stl_flags_linux_test( 124 name = linux_flags_test_name, 125 cppflags = linux_flags.cppflags, 126 linkopts = linux_flags.linkopts, 127 target_under_test = flags_target_name, 128 ) 129 130 _stl_flags_linux_bionic_test( 131 name = linux_bionic_flags_test_name, 132 cppflags = linux_bionic_flags.cppflags, 133 linkopts = linux_bionic_flags.linkopts, 134 target_under_test = flags_target_name, 135 ) 136 137 _stl_flags_darwin_test( 138 name = darwin_flags_test_name, 139 cppflags = darwin_flags.cppflags, 140 linkopts = darwin_flags.linkopts, 141 target_under_test = flags_target_name, 142 ) 143 144 _stl_flags_windows_test( 145 name = windows_flags_test_name, 146 cppflags = windows_flags.cppflags, 147 linkopts = windows_flags.linkopts, 148 target_under_test = flags_target_name, 149 ) 150 151 return [ 152 android_test_name, 153 non_android_test_name, 154 android_flags_test_name, 155 linux_flags_test_name, 156 linux_bionic_flags_test_name, 157 darwin_flags_test_name, 158 windows_flags_test_name, 159 ] 160 161def _stl_deps_target(name, is_shared, is_binary): 162 target_name = name if name else "empty" 163 target_name += "_shared" if is_shared else "_static" 164 target_name += "_bin" if is_binary else "_lib" 165 info = stl_info_from_attr(name, is_shared, is_binary) 166 167 _stl( 168 name = target_name, 169 shared = info.shared_deps, 170 static = info.static_deps, 171 tags = ["manual"], 172 ) 173 174 return target_name 175 176def _stl_deps_test_impl(ctx): 177 env = analysistest.begin(ctx) 178 179 stl_info = analysistest.target_under_test(env)[_StlInfo] 180 181 expected_static = sets.make(ctx.attr.static) 182 actual_static = sets.make(stl_info.static) 183 asserts.set_equals( 184 env, 185 expected = expected_static, 186 actual = actual_static, 187 ) 188 189 expected_shared = sets.make(ctx.attr.shared) 190 actual_shared = sets.make(stl_info.shared) 191 asserts.set_equals( 192 env, 193 expected = expected_shared, 194 actual = actual_shared, 195 ) 196 197 return analysistest.end(env) 198 199def _stl_flags_target(name, is_shared, is_binary): 200 target_name = name if name else "empty" 201 target_name += "_shared" if is_shared else "_static" 202 target_name += "_bin" if is_binary else "_lib" 203 target_name += "_flags" 204 info = stl_info_from_attr(name, is_shared) 205 206 _stl_flags( 207 name = target_name, 208 cppflags = info.cppflags, 209 linkopts = info.linkopts, 210 tags = ["manual"], 211 ) 212 213 return target_name 214 215def _stl_flags_test_impl(ctx): 216 env = analysistest.begin(ctx) 217 218 stl_info = analysistest.target_under_test(env)[_StlFlagsInfo] 219 220 expected_cppflags = sets.make(ctx.attr.cppflags) 221 actual_cppflags = sets.make(stl_info.cppflags) 222 asserts.set_equals( 223 env, 224 expected = expected_cppflags, 225 actual = actual_cppflags, 226 ) 227 228 expected_linkopts = sets.make(ctx.attr.linkopts) 229 actual_linkopts = sets.make(stl_info.linkopts) 230 asserts.set_equals( 231 env, 232 expected = expected_linkopts, 233 actual = actual_linkopts, 234 ) 235 236 return analysistest.end(env) 237 238__stl_flags_android_test = analysistest.make( 239 impl = _stl_flags_test_impl, 240 attrs = { 241 "cppflags": attr.string_list(), 242 "linkopts": attr.string_list(), 243 }, 244) 245 246def _stl_flags_android_test(**kwargs): 247 __stl_flags_android_test( 248 target_compatible_with = ["//build/bazel/platforms/os:android"], 249 **kwargs 250 ) 251 252__stl_flags_linux_test = analysistest.make( 253 impl = _stl_flags_test_impl, 254 attrs = { 255 "cppflags": attr.string_list(), 256 "linkopts": attr.string_list(), 257 }, 258) 259 260def _stl_flags_linux_test(**kwargs): 261 __stl_flags_linux_test( 262 target_compatible_with = ["//build/bazel/platforms/os:linux"], 263 **kwargs 264 ) 265 266__stl_flags_linux_bionic_test = analysistest.make( 267 impl = _stl_flags_test_impl, 268 attrs = { 269 "cppflags": attr.string_list(), 270 "linkopts": attr.string_list(), 271 }, 272) 273 274def _stl_flags_linux_bionic_test(**kwargs): 275 __stl_flags_linux_bionic_test( 276 target_compatible_with = ["//build/bazel/platforms/os:linux_bionic"], 277 **kwargs 278 ) 279 280_stl_flags_windows_test = analysistest.make( 281 impl = _stl_flags_test_impl, 282 attrs = { 283 "cppflags": attr.string_list(), 284 "linkopts": attr.string_list(), 285 }, 286 config_settings = { 287 "//command_line_option:platforms": "@//build/bazel/rules/cc:windows_for_testing", 288 }, 289) 290 291_stl_flags_darwin_test = analysistest.make( 292 impl = _stl_flags_test_impl, 293 attrs = { 294 "cppflags": attr.string_list(), 295 "linkopts": attr.string_list(), 296 }, 297 config_settings = { 298 "//command_line_option:platforms": "@//build/bazel/rules/cc:darwin_for_testing", 299 }, 300) 301 302__stl_deps_android_test = analysistest.make( 303 impl = _stl_deps_test_impl, 304 attrs = { 305 "static": attr.string_list(), 306 "shared": attr.string_list(), 307 }, 308) 309 310def _stl_deps_android_test(**kwargs): 311 __stl_deps_android_test( 312 target_compatible_with = ["//build/bazel/platforms/os:android"], 313 **kwargs 314 ) 315 316__stl_deps_non_android_test = analysistest.make( 317 impl = _stl_deps_test_impl, 318 attrs = { 319 "static": attr.string_list(), 320 "shared": attr.string_list(), 321 }, 322) 323 324def _stl_deps_non_android_test(**kwargs): 325 __stl_deps_non_android_test( 326 target_compatible_with = ["//build/bazel/platforms/os:linux"], 327 **kwargs 328 ) 329 330def stl_test_suite(name): 331 native.test_suite( 332 name = name, 333 tests = 334 _test_stl( 335 stl = "", 336 is_shared = True, 337 is_binary = False, 338 android_deps = struct( 339 static = _ANDROID_STATIC_DEPS, 340 shared = _SHARED_DEP, 341 ), 342 non_android_deps = struct( 343 static = None, 344 shared = _SHARED_DEP, 345 ), 346 android_flags = struct( 347 cppflags = _ANDROID_CPPFLAGS, 348 linkopts = _ANDROID_LINKOPTS, 349 ), 350 linux_flags = struct( 351 cppflags = _LINUX_CPPFLAGS, 352 linkopts = _LINUX_LINKOPTS, 353 ), 354 linux_bionic_flags = struct( 355 cppflags = _LINUX_BIONIC_CPPFLAGS, 356 linkopts = _LINUX_BIONIC_LINKOPTS, 357 ), 358 darwin_flags = struct( 359 cppflags = _DARWIN_CPPFLAGS, 360 linkopts = _DARWIN_LINKOPTS, 361 ), 362 windows_flags = struct( 363 cppflags = _WINDOWS_CPPFLAGS, 364 linkopts = _WINDOWS_LINKOPTS, 365 ), 366 ) + 367 _test_stl( 368 stl = "system", 369 is_shared = True, 370 is_binary = False, 371 android_deps = struct( 372 static = _ANDROID_STATIC_DEPS, 373 shared = _SHARED_DEP, 374 ), 375 non_android_deps = struct( 376 static = None, 377 shared = _SHARED_DEP, 378 ), 379 android_flags = struct( 380 cppflags = _ANDROID_CPPFLAGS, 381 linkopts = _ANDROID_LINKOPTS, 382 ), 383 linux_flags = struct( 384 cppflags = _LINUX_CPPFLAGS, 385 linkopts = _LINUX_LINKOPTS, 386 ), 387 linux_bionic_flags = struct( 388 cppflags = _LINUX_BIONIC_CPPFLAGS, 389 linkopts = _LINUX_BIONIC_LINKOPTS, 390 ), 391 darwin_flags = struct( 392 cppflags = _DARWIN_CPPFLAGS, 393 linkopts = _DARWIN_LINKOPTS, 394 ), 395 windows_flags = struct( 396 cppflags = _WINDOWS_CPPFLAGS, 397 linkopts = _WINDOWS_LINKOPTS, 398 ), 399 ) + 400 _test_stl( 401 stl = "libc++", 402 is_shared = True, 403 is_binary = False, 404 android_deps = struct( 405 static = _ANDROID_STATIC_DEPS, 406 shared = _SHARED_DEP, 407 ), 408 non_android_deps = struct( 409 static = None, 410 shared = _SHARED_DEP, 411 ), 412 android_flags = struct( 413 cppflags = _ANDROID_CPPFLAGS, 414 linkopts = _ANDROID_LINKOPTS, 415 ), 416 linux_flags = struct( 417 cppflags = _LINUX_CPPFLAGS, 418 linkopts = _LINUX_LINKOPTS, 419 ), 420 linux_bionic_flags = struct( 421 cppflags = _LINUX_BIONIC_CPPFLAGS, 422 linkopts = _LINUX_BIONIC_LINKOPTS, 423 ), 424 darwin_flags = struct( 425 cppflags = _DARWIN_CPPFLAGS, 426 linkopts = _DARWIN_LINKOPTS, 427 ), 428 windows_flags = struct( 429 cppflags = _WINDOWS_CPPFLAGS, 430 linkopts = _WINDOWS_LINKOPTS, 431 ), 432 ) + 433 _test_stl( 434 stl = "libc++_static", 435 is_shared = True, 436 is_binary = False, 437 android_deps = struct( 438 static = _ANDROID_STATIC_DEPS + _STATIC_DEP, 439 shared = None, 440 ), 441 non_android_deps = struct( 442 static = _STATIC_DEP, 443 shared = None, 444 ), 445 android_flags = struct( 446 cppflags = _ANDROID_CPPFLAGS, 447 linkopts = _ANDROID_LINKOPTS, 448 ), 449 linux_flags = struct( 450 cppflags = _LINUX_CPPFLAGS, 451 linkopts = _LINUX_LINKOPTS, 452 ), 453 linux_bionic_flags = struct( 454 cppflags = _LINUX_BIONIC_CPPFLAGS, 455 linkopts = _LINUX_BIONIC_LINKOPTS, 456 ), 457 darwin_flags = struct( 458 cppflags = _DARWIN_CPPFLAGS, 459 linkopts = _DARWIN_LINKOPTS, 460 ), 461 windows_flags = struct( 462 cppflags = _WINDOWS_CPPFLAGS, 463 linkopts = _WINDOWS_LINKOPTS, 464 ), 465 ) + 466 _test_stl( 467 stl = "none", 468 is_shared = True, 469 is_binary = False, 470 android_deps = struct( 471 static = None, 472 shared = None, 473 ), 474 non_android_deps = struct( 475 static = None, 476 shared = None, 477 ), 478 android_flags = struct( 479 cppflags = _ANDROID_CPPFLAGS, 480 linkopts = _ANDROID_LINKOPTS, 481 ), 482 linux_flags = struct( 483 cppflags = _LINUX_CPPFLAGS, 484 linkopts = _LINUX_LINKOPTS, 485 ), 486 linux_bionic_flags = struct( 487 cppflags = _LINUX_BIONIC_CPPFLAGS, 488 linkopts = _LINUX_BIONIC_LINKOPTS, 489 ), 490 darwin_flags = struct( 491 cppflags = _DARWIN_CPPFLAGS_STL_NONE, 492 linkopts = _DARWIN_LINKOPTS, 493 ), 494 windows_flags = struct( 495 cppflags = _WINDOWS_CPPFLAGS_STL_NONE, 496 linkopts = _WINDOWS_LINKOPTS, 497 ), 498 ) + 499 _test_stl( 500 stl = "", 501 is_shared = False, 502 is_binary = False, 503 android_deps = struct( 504 static = _ANDROID_STATIC_DEPS + _STATIC_DEP, 505 shared = None, 506 ), 507 non_android_deps = struct( 508 static = _STATIC_DEP, 509 shared = None, 510 ), 511 android_flags = struct( 512 cppflags = _ANDROID_CPPFLAGS, 513 linkopts = _ANDROID_LINKOPTS, 514 ), 515 linux_flags = struct( 516 cppflags = _LINUX_CPPFLAGS, 517 linkopts = _LINUX_LINKOPTS, 518 ), 519 linux_bionic_flags = struct( 520 cppflags = _LINUX_BIONIC_CPPFLAGS, 521 linkopts = _LINUX_BIONIC_LINKOPTS, 522 ), 523 darwin_flags = struct( 524 cppflags = _DARWIN_CPPFLAGS, 525 linkopts = _DARWIN_LINKOPTS, 526 ), 527 windows_flags = struct( 528 cppflags = _WINDOWS_CPPFLAGS, 529 linkopts = _WINDOWS_LINKOPTS, 530 ), 531 ) + 532 _test_stl( 533 stl = "system", 534 is_shared = False, 535 is_binary = False, 536 android_deps = struct( 537 static = _ANDROID_STATIC_DEPS + _STATIC_DEP, 538 shared = None, 539 ), 540 non_android_deps = struct( 541 static = _STATIC_DEP, 542 shared = None, 543 ), 544 android_flags = struct( 545 cppflags = _ANDROID_CPPFLAGS, 546 linkopts = _ANDROID_LINKOPTS, 547 ), 548 linux_flags = struct( 549 cppflags = _LINUX_CPPFLAGS, 550 linkopts = _LINUX_LINKOPTS, 551 ), 552 linux_bionic_flags = struct( 553 cppflags = _LINUX_BIONIC_CPPFLAGS, 554 linkopts = _LINUX_BIONIC_LINKOPTS, 555 ), 556 darwin_flags = struct( 557 cppflags = _DARWIN_CPPFLAGS, 558 linkopts = _DARWIN_LINKOPTS, 559 ), 560 windows_flags = struct( 561 cppflags = _WINDOWS_CPPFLAGS, 562 linkopts = _WINDOWS_LINKOPTS, 563 ), 564 ) + 565 _test_stl( 566 stl = "libc++", 567 is_shared = False, 568 is_binary = False, 569 android_deps = struct( 570 static = _ANDROID_STATIC_DEPS, 571 shared = _SHARED_DEP, 572 ), 573 non_android_deps = struct( 574 static = None, 575 shared = _SHARED_DEP, 576 ), 577 android_flags = struct( 578 cppflags = _ANDROID_CPPFLAGS, 579 linkopts = _ANDROID_LINKOPTS, 580 ), 581 linux_flags = struct( 582 cppflags = _LINUX_CPPFLAGS, 583 linkopts = _LINUX_LINKOPTS, 584 ), 585 linux_bionic_flags = struct( 586 cppflags = _LINUX_BIONIC_CPPFLAGS, 587 linkopts = _LINUX_BIONIC_LINKOPTS, 588 ), 589 darwin_flags = struct( 590 cppflags = _DARWIN_CPPFLAGS, 591 linkopts = _DARWIN_LINKOPTS, 592 ), 593 windows_flags = struct( 594 cppflags = _WINDOWS_CPPFLAGS, 595 linkopts = _WINDOWS_LINKOPTS, 596 ), 597 ) + 598 _test_stl( 599 stl = "libc++_static", 600 is_shared = False, 601 is_binary = False, 602 android_deps = struct( 603 static = _ANDROID_STATIC_DEPS + _STATIC_DEP, 604 shared = None, 605 ), 606 non_android_deps = struct( 607 static = _STATIC_DEP, 608 shared = None, 609 ), 610 android_flags = struct( 611 cppflags = _ANDROID_CPPFLAGS, 612 linkopts = _ANDROID_LINKOPTS, 613 ), 614 linux_flags = struct( 615 cppflags = _LINUX_CPPFLAGS, 616 linkopts = _LINUX_LINKOPTS, 617 ), 618 linux_bionic_flags = struct( 619 cppflags = _LINUX_BIONIC_CPPFLAGS, 620 linkopts = _LINUX_BIONIC_LINKOPTS, 621 ), 622 darwin_flags = struct( 623 cppflags = _DARWIN_CPPFLAGS, 624 linkopts = _DARWIN_LINKOPTS, 625 ), 626 windows_flags = struct( 627 cppflags = _WINDOWS_CPPFLAGS, 628 linkopts = _WINDOWS_LINKOPTS, 629 ), 630 ) + 631 _test_stl( 632 stl = "none", 633 is_shared = False, 634 is_binary = False, 635 android_deps = struct( 636 static = None, 637 shared = None, 638 ), 639 non_android_deps = struct( 640 static = None, 641 shared = None, 642 ), 643 android_flags = struct( 644 cppflags = _ANDROID_CPPFLAGS, 645 linkopts = _ANDROID_LINKOPTS, 646 ), 647 linux_flags = struct( 648 cppflags = _LINUX_CPPFLAGS, 649 linkopts = _LINUX_LINKOPTS, 650 ), 651 linux_bionic_flags = struct( 652 cppflags = _LINUX_BIONIC_CPPFLAGS, 653 linkopts = _LINUX_BIONIC_LINKOPTS, 654 ), 655 darwin_flags = struct( 656 cppflags = _DARWIN_CPPFLAGS_STL_NONE, 657 linkopts = _DARWIN_LINKOPTS, 658 ), 659 windows_flags = struct( 660 cppflags = _WINDOWS_CPPFLAGS_STL_NONE, 661 linkopts = _WINDOWS_LINKOPTS, 662 ), 663 ) + 664 _test_stl( 665 stl = "", 666 is_shared = True, 667 is_binary = True, 668 android_deps = struct( 669 static = _ANDROID_STATIC_DEPS + _ANDROID_BINARY_STATIC_DEP, 670 shared = _SHARED_DEP, 671 ), 672 non_android_deps = struct( 673 static = None, 674 shared = _SHARED_DEP, 675 ), 676 android_flags = struct( 677 cppflags = _ANDROID_CPPFLAGS, 678 linkopts = _ANDROID_LINKOPTS, 679 ), 680 linux_flags = struct( 681 cppflags = _LINUX_CPPFLAGS, 682 linkopts = _LINUX_LINKOPTS, 683 ), 684 linux_bionic_flags = struct( 685 cppflags = _LINUX_BIONIC_CPPFLAGS, 686 linkopts = _LINUX_BIONIC_LINKOPTS, 687 ), 688 darwin_flags = struct( 689 cppflags = _DARWIN_CPPFLAGS, 690 linkopts = _DARWIN_LINKOPTS, 691 ), 692 windows_flags = struct( 693 cppflags = _WINDOWS_CPPFLAGS, 694 linkopts = _WINDOWS_LINKOPTS, 695 ), 696 ) + 697 _test_stl( 698 stl = "system", 699 is_shared = True, 700 is_binary = True, 701 android_deps = struct( 702 static = _ANDROID_STATIC_DEPS + _ANDROID_BINARY_STATIC_DEP, 703 shared = _SHARED_DEP, 704 ), 705 non_android_deps = struct( 706 static = None, 707 shared = _SHARED_DEP, 708 ), 709 android_flags = struct( 710 cppflags = _ANDROID_CPPFLAGS, 711 linkopts = _ANDROID_LINKOPTS, 712 ), 713 linux_flags = struct( 714 cppflags = _LINUX_CPPFLAGS, 715 linkopts = _LINUX_LINKOPTS, 716 ), 717 linux_bionic_flags = struct( 718 cppflags = _LINUX_BIONIC_CPPFLAGS, 719 linkopts = _LINUX_BIONIC_LINKOPTS, 720 ), 721 darwin_flags = struct( 722 cppflags = _DARWIN_CPPFLAGS, 723 linkopts = _DARWIN_LINKOPTS, 724 ), 725 windows_flags = struct( 726 cppflags = _WINDOWS_CPPFLAGS, 727 linkopts = _WINDOWS_LINKOPTS, 728 ), 729 ) + 730 _test_stl( 731 stl = "libc++", 732 is_shared = True, 733 is_binary = True, 734 android_deps = struct( 735 static = _ANDROID_STATIC_DEPS + _ANDROID_BINARY_STATIC_DEP, 736 shared = _SHARED_DEP, 737 ), 738 non_android_deps = struct( 739 static = None, 740 shared = _SHARED_DEP, 741 ), 742 android_flags = struct( 743 cppflags = _ANDROID_CPPFLAGS, 744 linkopts = _ANDROID_LINKOPTS, 745 ), 746 linux_flags = struct( 747 cppflags = _LINUX_CPPFLAGS, 748 linkopts = _LINUX_LINKOPTS, 749 ), 750 linux_bionic_flags = struct( 751 cppflags = _LINUX_BIONIC_CPPFLAGS, 752 linkopts = _LINUX_BIONIC_LINKOPTS, 753 ), 754 darwin_flags = struct( 755 cppflags = _DARWIN_CPPFLAGS, 756 linkopts = _DARWIN_LINKOPTS, 757 ), 758 windows_flags = struct( 759 cppflags = _WINDOWS_CPPFLAGS, 760 linkopts = _WINDOWS_LINKOPTS, 761 ), 762 ) + 763 _test_stl( 764 stl = "libc++_static", 765 is_shared = True, 766 is_binary = True, 767 android_deps = struct( 768 static = _ANDROID_STATIC_DEPS + _STATIC_DEP + _ANDROID_BINARY_STATIC_DEP, 769 shared = None, 770 ), 771 non_android_deps = struct( 772 static = _STATIC_DEP, 773 shared = None, 774 ), 775 android_flags = struct( 776 cppflags = _ANDROID_CPPFLAGS, 777 linkopts = _ANDROID_LINKOPTS, 778 ), 779 linux_flags = struct( 780 cppflags = _LINUX_CPPFLAGS, 781 linkopts = _LINUX_LINKOPTS, 782 ), 783 linux_bionic_flags = struct( 784 cppflags = _LINUX_BIONIC_CPPFLAGS, 785 linkopts = _LINUX_BIONIC_LINKOPTS, 786 ), 787 darwin_flags = struct( 788 cppflags = _DARWIN_CPPFLAGS, 789 linkopts = _DARWIN_LINKOPTS, 790 ), 791 windows_flags = struct( 792 cppflags = _WINDOWS_CPPFLAGS, 793 linkopts = _WINDOWS_LINKOPTS, 794 ), 795 ) + 796 _test_stl( 797 stl = "none", 798 is_shared = True, 799 is_binary = True, 800 android_deps = struct( 801 static = None, 802 shared = None, 803 ), 804 non_android_deps = struct( 805 static = None, 806 shared = None, 807 ), 808 android_flags = struct( 809 cppflags = _ANDROID_CPPFLAGS, 810 linkopts = _ANDROID_LINKOPTS, 811 ), 812 linux_flags = struct( 813 cppflags = _LINUX_CPPFLAGS, 814 linkopts = _LINUX_LINKOPTS, 815 ), 816 linux_bionic_flags = struct( 817 cppflags = _LINUX_BIONIC_CPPFLAGS, 818 linkopts = _LINUX_BIONIC_LINKOPTS, 819 ), 820 darwin_flags = struct( 821 cppflags = _DARWIN_CPPFLAGS_STL_NONE, 822 linkopts = _DARWIN_LINKOPTS, 823 ), 824 windows_flags = struct( 825 cppflags = _WINDOWS_CPPFLAGS_STL_NONE, 826 linkopts = _WINDOWS_LINKOPTS, 827 ), 828 ) + 829 _test_stl( 830 stl = "", 831 is_shared = False, 832 is_binary = True, 833 android_deps = struct( 834 static = _ANDROID_STATIC_DEPS + _STATIC_DEP + _ANDROID_BINARY_STATIC_DEP, 835 shared = None, 836 ), 837 non_android_deps = struct( 838 static = _STATIC_DEP, 839 shared = None, 840 ), 841 android_flags = struct( 842 cppflags = _ANDROID_CPPFLAGS, 843 linkopts = _ANDROID_LINKOPTS, 844 ), 845 linux_flags = struct( 846 cppflags = _LINUX_CPPFLAGS, 847 linkopts = _LINUX_LINKOPTS, 848 ), 849 linux_bionic_flags = struct( 850 cppflags = _LINUX_BIONIC_CPPFLAGS, 851 linkopts = _LINUX_BIONIC_LINKOPTS, 852 ), 853 darwin_flags = struct( 854 cppflags = _DARWIN_CPPFLAGS, 855 linkopts = _DARWIN_LINKOPTS, 856 ), 857 windows_flags = struct( 858 cppflags = _WINDOWS_CPPFLAGS, 859 linkopts = _WINDOWS_LINKOPTS, 860 ), 861 ) + 862 _test_stl( 863 stl = "system", 864 is_shared = False, 865 is_binary = True, 866 android_deps = struct( 867 static = _ANDROID_STATIC_DEPS + _STATIC_DEP + _ANDROID_BINARY_STATIC_DEP, 868 shared = None, 869 ), 870 non_android_deps = struct( 871 static = _STATIC_DEP, 872 shared = None, 873 ), 874 android_flags = struct( 875 cppflags = _ANDROID_CPPFLAGS, 876 linkopts = _ANDROID_LINKOPTS, 877 ), 878 linux_flags = struct( 879 cppflags = _LINUX_CPPFLAGS, 880 linkopts = _LINUX_LINKOPTS, 881 ), 882 linux_bionic_flags = struct( 883 cppflags = _LINUX_BIONIC_CPPFLAGS, 884 linkopts = _LINUX_BIONIC_LINKOPTS, 885 ), 886 darwin_flags = struct( 887 cppflags = _DARWIN_CPPFLAGS, 888 linkopts = _DARWIN_LINKOPTS, 889 ), 890 windows_flags = struct( 891 cppflags = _WINDOWS_CPPFLAGS, 892 linkopts = _WINDOWS_LINKOPTS, 893 ), 894 ) + 895 _test_stl( 896 stl = "libc++", 897 is_shared = False, 898 is_binary = True, 899 android_deps = struct( 900 static = _ANDROID_STATIC_DEPS + _ANDROID_BINARY_STATIC_DEP, 901 shared = _SHARED_DEP, 902 ), 903 non_android_deps = struct( 904 static = None, 905 shared = _SHARED_DEP, 906 ), 907 android_flags = struct( 908 cppflags = _ANDROID_CPPFLAGS, 909 linkopts = _ANDROID_LINKOPTS, 910 ), 911 linux_flags = struct( 912 cppflags = _LINUX_CPPFLAGS, 913 linkopts = _LINUX_LINKOPTS, 914 ), 915 linux_bionic_flags = struct( 916 cppflags = _LINUX_BIONIC_CPPFLAGS, 917 linkopts = _LINUX_BIONIC_LINKOPTS, 918 ), 919 darwin_flags = struct( 920 cppflags = _DARWIN_CPPFLAGS, 921 linkopts = _DARWIN_LINKOPTS, 922 ), 923 windows_flags = struct( 924 cppflags = _WINDOWS_CPPFLAGS, 925 linkopts = _WINDOWS_LINKOPTS, 926 ), 927 ) + 928 _test_stl( 929 stl = "libc++_static", 930 is_shared = False, 931 is_binary = True, 932 android_deps = struct( 933 static = _ANDROID_STATIC_DEPS + _STATIC_DEP + _ANDROID_BINARY_STATIC_DEP, 934 shared = None, 935 ), 936 non_android_deps = struct( 937 static = _STATIC_DEP, 938 shared = None, 939 ), 940 android_flags = struct( 941 cppflags = _ANDROID_CPPFLAGS, 942 linkopts = _ANDROID_LINKOPTS, 943 ), 944 linux_flags = struct( 945 cppflags = _LINUX_CPPFLAGS, 946 linkopts = _LINUX_LINKOPTS, 947 ), 948 linux_bionic_flags = struct( 949 cppflags = _LINUX_BIONIC_CPPFLAGS, 950 linkopts = _LINUX_BIONIC_LINKOPTS, 951 ), 952 darwin_flags = struct( 953 cppflags = _DARWIN_CPPFLAGS, 954 linkopts = _DARWIN_LINKOPTS, 955 ), 956 windows_flags = struct( 957 cppflags = _WINDOWS_CPPFLAGS, 958 linkopts = _WINDOWS_LINKOPTS, 959 ), 960 ) + 961 _test_stl( 962 stl = "none", 963 is_shared = False, 964 is_binary = True, 965 android_deps = struct( 966 static = None, 967 shared = None, 968 ), 969 non_android_deps = struct( 970 static = None, 971 shared = None, 972 ), 973 android_flags = struct( 974 cppflags = _ANDROID_CPPFLAGS, 975 linkopts = _ANDROID_LINKOPTS, 976 ), 977 linux_flags = struct( 978 cppflags = _LINUX_CPPFLAGS, 979 linkopts = _LINUX_LINKOPTS, 980 ), 981 linux_bionic_flags = struct( 982 cppflags = _LINUX_BIONIC_CPPFLAGS, 983 linkopts = _LINUX_BIONIC_LINKOPTS, 984 ), 985 darwin_flags = struct( 986 cppflags = _DARWIN_CPPFLAGS_STL_NONE, 987 linkopts = _DARWIN_LINKOPTS, 988 ), 989 windows_flags = struct( 990 cppflags = _WINDOWS_CPPFLAGS_STL_NONE, 991 linkopts = _WINDOWS_LINKOPTS, 992 ), 993 ), 994 ) 995