)]}'
{
  "commit": "5747dbb0197245dc50f748853c0c5279796ce12b",
  "tree": "1ed18a387b928eb73ed0f8818d9976c13d65f3c4",
  "parents": [
    "324ef93654e53fbc92091f579cd7933089cbcf93"
  ],
  "author": {
    "name": "Jonathon Reinhart",
    "email": "jrreinhart@google.com",
    "time": "Mon Sep 21 20:36:17 2026 -0700"
  },
  "committer": {
    "name": "CQ Bot Account",
    "email": "pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Mon Sep 21 20:36:17 2026 -0700"
  },
  "message": "pw_build: Add pw_hermetic_cc_library Bazel rule\n\nAdds `pw_hermetic_cc_library`, a custom Bazel rule for creating\nincrementally-linked hermetic C/C++ static libraries.\n\nAn incrementally-linked hermetic library compiles sources from `srcs`,\ntakes private dependencies from `deps`, performs a relocatable link\n(`ld -r`), and localizes all internal symbols using `objcopy`. Only\nsymbols explicitly listed in `global_symbols` (or `global_symbols_file`)\nremain globally exported, avoiding symbol collisions across dependencies.\n\nFeatures:\n- Supports constraint checks for disallowed `.init_array` / `.fini_array`\n  sections (`allow_init`, `allow_fini`).\n- Supports undefined symbol verification against an allowlist\n  (`undefined_symbols`) via a dedicated pyelftools script\n  (`pw_build/py/pw_build/verify_hermetic_elf.py`).\n\nDerived from:\nhttps://cs.opensource.google/fuchsia/fuchsia/+/main:build/toolchain/hermetic_source_set.gni\n\nTAG\u003dagy\nCONV\u003d888be584-d2e8-42d1-9db3-ff5ef356cbf0\n\nBug: 529790473\nChange-Id: I2bd0b9f895be01fa6322511b5fefe4e0a948a676\nReviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/430932\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "926055dac1b6de306a8c1e8c10ce67467b620390",
      "old_mode": 33188,
      "old_path": "pw_build/BUILD.gn",
      "new_id": "fa273d9a1d4383acfca3f2abb52e88dc846335c7",
      "new_mode": 33188,
      "new_path": "pw_build/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "615c1fc7bc0783a5b0eada2384323dd09f86c373",
      "old_mode": 33188,
      "old_path": "pw_build/bazel_rules.rst",
      "new_id": "40574b7f1e8a8ae861d66679669f002f4146bf53",
      "new_mode": 33188,
      "new_path": "pw_build/bazel_rules.rst"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c84982f9773bc246d8e3a3746e3b1eccc8afe486",
      "new_mode": 33188,
      "new_path": "pw_build/bazel_tests/hermetic_cc_library/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b8f07e868acb6b400ede8f88645a091e87e7ef6b",
      "new_mode": 33188,
      "new_path": "pw_build/bazel_tests/hermetic_cc_library/hermetic_cc_library_test.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "026dd537d1edc3864bb6f2d441aa42ae233d7d44",
      "new_mode": 33188,
      "new_path": "pw_build/bazel_tests/hermetic_cc_library/hermetic_test_lib.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "76cfb19b810abe0d0feffce1f37ad9291895b8e5",
      "new_mode": 33188,
      "new_path": "pw_build/bazel_tests/hermetic_cc_library/hermetic_test_lib.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "75a25a2e377f153a5826968dd294333706e5862f",
      "new_mode": 33188,
      "new_path": "pw_build/bazel_tests/hermetic_cc_library/private_dep.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bae24bc651cdf82f2e3349789fd64394aa725687",
      "new_mode": 33188,
      "new_path": "pw_build/bazel_tests/hermetic_cc_library/private_dep.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5d0720849b612735b2fc094bc6f06021f1c64f9f",
      "new_mode": 33188,
      "new_path": "pw_build/pw_hermetic_cc_library.bzl"
    },
    {
      "type": "modify",
      "old_id": "390fecf1c190d7155f721863433082b78dbd8de0",
      "old_mode": 33188,
      "old_path": "pw_build/py/BUILD.bazel",
      "new_id": "a985426ed53cfb58ef25e31a685096514268197f",
      "new_mode": 33188,
      "new_path": "pw_build/py/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "47216be9c23dcc371c81e704bbc2a07df249a7ed",
      "new_mode": 33188,
      "new_path": "pw_build/py/pw_build/verify_hermetic_elf.py"
    }
  ]
}
