buildMozillaMach: fix darwin build

Versions before 144 vendor bindgen 0.69, which emits invalid Rust for
libc++ 21's attributed basic_string::__self_view alias on Darwin.

This was exposed by commit 0758fc3add ("darwin.libcxx:
20.1.0+apple-sdk-26.0 -> 21.1.6+apple-sdk-26.4"), where libc++
changed `basic_string::__self_view` from a typedef to an attributed
`using` alias. bindgen then drops the alias template parameter and emits
`basic_string___self_view = ...<_CharT>`.

The solution is to blocklist the unused `string_view` internals for the
profiler Rust API. They are not used in the actual build.

Note: Mozilla 144 updated vendored bindgen via:
https://bugzilla.mozilla.org/show_bug.cgi?id=1985509

Assisted-by: Codex gpt-5.5 xhigh
This commit is contained in:
Ihar Hrachyshka
2026-05-26 21:59:44 -04:00
parent 4f1cb8b7c1
commit c19203e06f
2 changed files with 23 additions and 0 deletions
@@ -0,0 +1,15 @@
diff --git a/tools/profiler/rust-api/build.rs b/tools/profiler/rust-api/build.rs
index 9bb27eb83e5e..3f09f7f01bcb 100644
--- a/tools/profiler/rust-api/build.rs
+++ b/tools/profiler/rust-api/build.rs
@@ -88,6 +88,10 @@ fn generate_bindings() {
// successfully. Otherwise, it fails to build because MarkerSchema has
// some std::strings as its fields.
.opaque_type("std::string")
+ .blocklist_type(".*basic_string_view.*")
+ .opaque_type(".*basic_string_view.*")
+ .blocklist_type(".*basic_string___self_view.*")
+ .opaque_type(".*basic_string___self_view.*")
// std::vector needs to be converted to an opaque type because, if it's
// not an opaque type, bindgen can't find its size properly and
// MarkerSchema's total size reduces. That causes a heap buffer overflow.
@@ -332,6 +332,14 @@ buildStdenv.mkDerivation {
# https://hg-edge.mozilla.org/mozilla-central/rev/aa8a29bd1fb9
./139-wayland-drag-animation.patch
]
++ lib.optionals (lib.versionAtLeast version "140" && lib.versionOlder version "144") [
# Versions before 144 vendor bindgen 0.69. On Darwin, libc++ 21 changed
# basic_string::__self_view from a typedef to an attributed using alias;
# bindgen then emits it without its template parameter, producing invalid
# Rust. Vendored bindgen was updated in:
# https://bugzilla.mozilla.org/show_bug.cgi?id=1985509
./140-bindgen-string-view.patch
]
++ extraPatches;
postPatch = ''