grpc: Separate unsecure and channelz packages

Currently, the grpc recipe packages all runtime shared libraries into
the main ${PN} package. This pulls libgrpc_unsecure, libgrpc++_unsecure,
and libgrpcpp_channelz into any target image installing grpc. Target
binaries linking against gRPC (e.g. bmcweb) link against standard
libgrpc and libgrpc++, which support both secure (TLS) and insecure
plaintext channels via grpc::InsecureChannelCredentials(). No binaries
in target images have a DT_NEEDED dependency on the unsecure variants.
Additionally, an ELF dependency audit confirmed that zero binaries or
libraries in the target root filesystem reference libgrpcpp_channelz.
Split libgrpc*_unsecure.so.* into ${PN}-unsecure and
libgrpcpp_channelz.so.* into ${PN}-channelz via PACKAGE_BEFORE_PN.
Packages that explicitly require these variants can declare an RDEPENDS
on grpc-unsecure or grpc-channelz. On flash-constrained 64MB SPI NOR
platforms, this removes ~9.5–10 MB of uncompressed shared libraries
(~2.5–2.7 MB compressed in squashfs-xz), substantially expanding free
flash headroom.

Tested:
- platform17 (64MB SPI NOR, NPCM845x / Cortex-A35):
  - Built obmc-phosphor-image
  - Verified libgrpc*_unsecure.so.* and libgrpcpp_channelz.so.* are
    absent from target /usr/lib
  - cr51-image-layout.json:
    - rofs reduced from 52.94 MB (55,508,992 B) to 50.44 MB (52887552 B)
    - empty margin expanded from 64 KB (65,536 B) to 2.56 MB (2686976 B)
      (41x increase)
- platform11 (64MB SPI NOR, NPCM730 / ARMv7a):
  - Built obmc-phosphor-image
  - Rootfs gRPC footprint dropped from 26.22 MB (27,491,164 B) to
    16.72 MB (17,537,196 B) uncompressed (-9.49 MB)
  - cr51-image-layout.json:
    - rofs reduced from 53.81 MB (56,426,496 B) to 51.13 MB
      (53608448 B) (-2.69 MB)
    - empty margin expanded from 256 KB (262,144 B) to 2.94 MB
      (3080192 B) (11.7x increase)

- platform5: http://fusion2/07e96813-e509-357b-9acc-3a83d536a660
- platform15: http://fusion2/4a4d37e8-3a24-3011-b5d9-9667cf1f52d7
- platform18: http://fusion2/039f9c31-1433-329f-9a4a-9de8c7e7c535
- platform17: http://fusion2/4d77663a-81d3-3140-813c-82eb267aa42a
- platform11+ext: http://fusion2/96c53567-d19e-3509-9163-7e7978c4a6a6
- platform11: http://fusion2/d650156d-7e78-3c70-93d6-56bea6a393f5
- platform25: http://fusion2/b68d4d26-157e-3ded-86ec-6d69f216ba56
Google-Bug-Id: 425362808
Change-Id: I031bbf6d526f9097b0d5ed460fbf96c589b247de
Signed-off-by: Willy Tu <wltu@google.com>
1 file changed
tree: f5af96ef96df4fcacd6344f4a04a4f41b038ced0
  1. classes/
  2. conf/
  3. dynamic-layers/
  4. recipes-benchmark/
  5. recipes-bsp/
  6. recipes-connectivity/
  7. recipes-core/
  8. recipes-devtools/
  9. recipes-extended/
  10. recipes-google/
  11. recipes-kernel/
  12. recipes-phosphor/
  13. recipes-support/
  14. recipes-tpm1/
  15. recipes-tpm2/
  16. recipes-x86/
  17. LICENSE
  18. README.md
README.md

meta-gbmc-staging

This repository contains additions to the openbmc/meta-google layer that are not yet ready for OpenBMC inclusion.

How to use this layer

  1. Clone openbmc/openbmc from GitHub.
  2. Clone this layer from GitHub into a subdirectory of openbmc.