)]}'
{
  "commit": "61786d54bc91869f0b80260f6b84ab96eea91ee8",
  "tree": "bb7dab65803ae17899ab4f4133b39af11c0fbe6c",
  "parents": [
    "f5dff0d9485711ad3cbae089a09491f78b843039"
  ],
  "author": {
    "name": "Jonathan Bunton",
    "email": "47643825+buntonj@users.noreply.github.com",
    "time": "Tue Aug 25 21:21:06 2026 +0000"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Aug 25 21:21:06 2026 +0000"
  },
  "message": "Add support for Rust ABI dynamic libraries (#4179)\n\nCurrently, there is not explicit stable Rust ABI for dynamic libraries,\nbut Rust library may still be compiled as one. This can be useful if a\nlarge project wants to compile some core portion of its code as a shared\nobject that can be dynamically linked against several different\nbinaries. Bevy, for example, offers this capability as a way to allow\ncustomers of Bevy to tweak their own code without having to statically\nre-link the central Bevy engine code.\n\nThis PR exposes the Rust ABI dylib capabilities with a new rule,\n`rust_dylib_library`. For clarity, it also creates a\n`rust_cylib_library` rule, and updates methods to this name, with\n`rust_shared_library` just aliasing to the `rust_cdylib_library`\nimplementation.\n\nBuilding a Rust ABI dylib may cause the standard library to be linked\ndynamically against the generated dylib. When depended on, the dynamic\nstandard library needs to be included to get the binary to execute.\nCurrently, `rules_rust` offers this as a toolchain-level flag, but\napplying a toolchain transition at the dylib\u0027s interface imposes a new\ntoolchain on its deps, which then forces any upstream `rlibs`, for\nexample, to recompile.\n\nTo fix this, this PR exposes a `link_std_dylib` attr to `rust_binary`,\n`rust_dylib_library` and `rust_test` to allow these targets to\noptionally bundle themselves with the dynamically-linked stdlib.\n\n---------\n\nCo-authored-by: UebelAndre \u003cgithub@uebelandre.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6fbbaa675921ebac00e056ab8802e4c289ccf8d4",
      "old_mode": 33188,
      "old_path": "CONTRIBUTING.md",
      "new_id": "92c660ecd0eabbd93e4e80b369d0c9f7aabc7cd3",
      "new_mode": 33188,
      "new_path": "CONTRIBUTING.md"
    },
    {
      "type": "modify",
      "old_id": "d1339df731c25d1933f663d17a2628905e7342d9",
      "old_mode": 33188,
      "old_path": "docs/BUILD.bazel",
      "new_id": "5da6684b07ccf3ba4fce065b6e0ad9c4707ac226",
      "new_mode": 33188,
      "new_path": "docs/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "ed984eaee0d4eb2cef63ce8e7e2b318d9961a25d",
      "old_mode": 33188,
      "old_path": "docs/src/SUMMARY.md",
      "new_id": "4224c1031c0cfeb9a9749abaac50051ead456b3e",
      "new_mode": 33188,
      "new_path": "docs/src/SUMMARY.md"
    },
    {
      "type": "modify",
      "old_id": "0ca031a7da06d0309882b0a41d990aeb27705da5",
      "old_mode": 33188,
      "old_path": "docs/src/rust.md",
      "new_id": "99927458c92efa2c9e58ac1db2f0a01b674e4570",
      "new_mode": 33188,
      "new_path": "docs/src/rust.md"
    },
    {
      "type": "modify",
      "old_id": "426c74384622fbfa3eb2e24a724cf935caee5a7f",
      "old_mode": 33188,
      "old_path": "rust/defs.bzl",
      "new_id": "0e4b8e7334d1e2bead3df15e9a6858b1cf60a857",
      "new_mode": 33188,
      "new_path": "rust/defs.bzl"
    },
    {
      "type": "modify",
      "old_id": "f3e8b682ecb61afb9161ce4a70567cfe600ce486",
      "old_mode": 33188,
      "old_path": "rust/private/providers.bzl",
      "new_id": "fdb952c155b1631a8fbc38aa56708af283d0413b",
      "new_mode": 33188,
      "new_path": "rust/private/providers.bzl"
    },
    {
      "type": "modify",
      "old_id": "66293bf76643557c12b0f052958923550eeb3973",
      "old_mode": 33188,
      "old_path": "rust/private/rust.bzl",
      "new_id": "a69202a0287069cefaa60acd7526fea629d89215",
      "new_mode": 33188,
      "new_path": "rust/private/rust.bzl"
    },
    {
      "type": "modify",
      "old_id": "7e2571b8bc3fe7fa9004922b2145170c78a2ed23",
      "old_mode": 33188,
      "old_path": "rust/private/rust_allocator_libraries.bzl",
      "new_id": "e1f299cd0fcd614a8edf67f0811a358abba8051c",
      "new_mode": 33188,
      "new_path": "rust/private/rust_allocator_libraries.bzl"
    },
    {
      "type": "modify",
      "old_id": "d9f72bacaa32d5d22c500a4a3b34e1d51a6a02a0",
      "old_mode": 33188,
      "old_path": "rust/private/rustc.bzl",
      "new_id": "8446fd8925e1511574eb787f55e257ef502dc4ce",
      "new_mode": 33188,
      "new_path": "rust/private/rustc.bzl"
    },
    {
      "type": "modify",
      "old_id": "0e313d460ed30b3d897b89660e2a960ac7237afd",
      "old_mode": 33188,
      "old_path": "rust/private/toolchain.bzl",
      "new_id": "b31e5e8a7e6d0589f713f467727c70ea998072a2",
      "new_mode": 33188,
      "new_path": "rust/private/toolchain.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c0f757220e8f8b8836327cd2c59d83eabcf2cfde",
      "new_mode": 33188,
      "new_path": "rust/rust_cdylib_library.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ea3f40d005c88ecd03637b33df629e648c0d4802",
      "new_mode": 33188,
      "new_path": "rust/rust_dylib_library.bzl"
    },
    {
      "type": "modify",
      "old_id": "665d85699e1b892af53ba26fbe12e77ec1e13439",
      "old_mode": 33188,
      "old_path": "rust/rust_shared_library.bzl",
      "new_id": "2ef86f3df8f30df5fab5cd4f7370a39dd0aac96d",
      "new_mode": 33188,
      "new_path": "rust/rust_shared_library.bzl"
    },
    {
      "type": "modify",
      "old_id": "f1338086d06454a5e0d2ed04d4bc3745da444cf7",
      "old_mode": 33188,
      "old_path": "test/link_std_dylib/link_std_dylib_test.bzl",
      "new_id": "f35137a4e8fecfc7012182dc7025697c9a96c405",
      "new_mode": 33188,
      "new_path": "test/link_std_dylib/link_std_dylib_test.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "15e7597f99a3de4e53dfc52b68628dac32410ecd",
      "new_mode": 33188,
      "new_path": "test/rust_dylib/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5252327577d0ab4154044dac5bce681b1a1463ca",
      "new_mode": 33188,
      "new_path": "test/rust_dylib/lib.rs"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "21633aafc0137bc20f7fa49f40d6a294c3b654b3",
      "new_mode": 33188,
      "new_path": "test/rust_dylib/main.rs"
    }
  ]
}
