Integrate stub library targets into the top level shared library proxy target.

Dependents of the shared library, e.g. libm, can inspect the target's
providers for a non-empty CcStubLibrariesInfo, and then iterating over
the list for a CcStubInfo for a particular version of the library to
build against.

A use case of this is in the APEX aspect to allow symbols in transitive
stub libraries to be resolved during linking, but excluded from the
APEX's contents.

e.g.

$ b cquery --output=starlark
--starlark:expr="providers(target)[\"//build/bazel/rules:cc_library_shared.bzl%CcStubLibrariesInfo\"]"
//bionic/libm:libm\"]

struct(infos = [
    {
        "CcStubInfo": struct(abi_symbol_list = <generated file bionic/libm/libm_29_stubs_files/abi_symbol_list.txt>, stub_map = <generated file bionic/libm/libm_29_stubs_files/stub.map>, version = "29"),
        "CcSharedLibraryInfo": struct(dynamic_deps = depset([]), exports = ["//bionic/libm:libm_29_stubs_root"], link_once_static_libs = [], linker_input = <unknown object com.google.devtools.build.lib.rules.cpp.CcLinkingContext$LinkerInput>, preloaded_deps = None), "DefaultInfo": struct(data_runfiles = <unknown object com.google.devtools.build.lib.analysis.Runfiles>, default_runfiles = <unknown object com.google.devtools.build.lib.analysis.Runfiles>, files = depset([<generated file bionic/libm/liblibm_29_stubs_so.so>]), files_to_run = <unknown object com.google.devtools.build.lib.analysis.FilesToRunProvider>)
    },
    {
        "CcStubInfo": struct(abi_symbol_list = <generated file bionic/libm/libm_current_stubs_files/abi_symbol_list.txt>, stub_map = <generated file bionic/libm/libm_current_stubs_files/stub.map>, version = "current"),
        "CcSharedLibraryInfo": struct(dynamic_deps = depset([]), exports = ["//bionic/libm:libm_current_stubs_root"], link_once_static_libs = [], linker_input = <unknown object com.google.devtools.build.lib.rules.cpp.CcLinkingContext$LinkerInput>, preloaded_deps = None), "DefaultInfo": struct(data_runfiles = <unknown object com.google.devtools.build.lib.analysis.Runfiles>, default_runfiles = <unknown object com.google.devtools.build.lib.analysis.Runfiles>, files = depset([<generated file bionic/libm/liblibm_current_stubs_so.so>]), files_to_run = <unknown object com.google.devtools.build.lib.analysis.FilesToRunProvider>)
    }
])

Test: CI
Bug: 207812332
Change-Id: I8a2326c90d37defd4183efb9b57029b0ee34658b
2 files changed
tree: 87d596417bc87b79e662102108ab5e947f7851c1
  1. ci/
  2. docs/
  3. examples/
  4. json_module_graph/
  5. mk2rbc/
  6. platforms/
  7. product_variables/
  8. rules/
  9. rules_cc/
  10. scripts/
  11. tests/
  12. bazel.BUILD
  13. bazel.sh
  14. bazel.WORKSPACE
  15. common.bazelrc
  16. darwin.bazelrc
  17. linux.bazelrc
  18. OWNERS
  19. README.md
README.md

Bazel

The code in this directory is experimental. Bazel support for Android Platform is undergoing active development and workflow stability is currently not guaranteed.