From b05e8fb3ae3a385d5615a8e9753f4510c4ca8d79 Mon Sep 17 00:00:00 2001
From: Serge Bazanski <serge@monogon.tech>
Date: Wed, 25 Sep 2024 02:38:50 +0200
Subject: [PATCH 3/4] Improve reproducibility

Fixes a few issues with rules_rust/rustc reproducibility when the same code is
being built in slightly different BuildConfigurations.

Even if BuildConfigurations differ only by insignificant (to rules_rust)
configuration flags, the resulting output directory will be different (keyed by
an 'ST-hash' which is generated from the configuration).

Unfortunately, rust/rules_rust really likes to embed bazel-out/<dir>/bin paths
into the binaries by default, thus embedding the ST-hash, thus leading to
different bit-for-bit binaries when built across two slightly different
configs.

We fix this by doing two changes:

 1. We override the codegen metadata hash suffix to not depend on the ST-hash
    directory name. Otherwise, built rlibs will have a numeric .XXX suffix that
    changes depending on the ST-hash. We have to do this separately for prost
    codegen, too.
 2. We add a remap path option to rustc that replaces bazel-out/<dir>/bin/ with
    bin/.
---
 extensions/prost/private/prost.bzl | 3 ++-
 extensions/protobuf/proto.bzl      | 2 +-
 rust/private/clippy.bzl            | 2 +-
 rust/private/rust.bzl              | 6 +++---
 rust/private/rustc.bzl             | 4 ++++
 rust/private/utils.bzl             | 8 ++++++--
 6 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/extensions/prost/private/prost.bzl b/extensions/prost/private/prost.bzl
index 6d9d4969..8dad0961 100644
--- a/extensions/prost/private/prost.bzl
+++ b/extensions/prost/private/prost.bzl
@@ -164,7 +164,8 @@ def _compile_rust(
       A DepVariantInfo provider.
     """
     toolchain = ctx.toolchains["@rules_rust//rust:toolchain_type"]
-    output_hash = repr(hash(src.path + ".prost"))
+    src_path = src.path.replace(ctx.bin_dir.path, 'bin')
+    output_hash = repr(hash(src_path + ".prost"))
 
     lib_name = "{prefix}{name}-{lib_hash}{extension}".format(
         prefix = "lib",
diff --git a/extensions/protobuf/proto.bzl b/extensions/protobuf/proto.bzl
index 56025417..7c025b11 100644
--- a/extensions/protobuf/proto.bzl
+++ b/extensions/protobuf/proto.bzl
@@ -187,7 +187,7 @@ def _rust_proto_compile(protos, descriptor_sets, imports, crate_name, ctx, is_gr
     srcs.append(lib_rs)
 
     # And simulate rust_library behavior
-    output_hash = determine_output_hash(lib_rs, ctx.label)
+    output_hash = determine_output_hash(ctx.bin_dir, lib_rs, ctx.label)
     rust_lib = ctx.actions.declare_file("%s/lib%s-%s.rlib" % (
         output_dir,
         crate_name,
diff --git a/rust/private/clippy.bzl b/rust/private/clippy.bzl
index 8c172ae0..efdba8fc 100644
--- a/rust/private/clippy.bzl
+++ b/rust/private/clippy.bzl
@@ -138,7 +138,7 @@ def _clippy_aspect_impl(target, ctx):
         dep_info = dep_info,
         linkstamp_outs = linkstamp_outs,
         ambiguous_libs = ambiguous_libs,
-        output_hash = determine_output_hash(crate_info.root, ctx.label),
+        output_hash = determine_output_hash(ctx.bin_dir, crate_info.root, ctx.label),
         rust_flags = [],
         out_dir = out_dir,
         build_env_files = build_env_files,
diff --git a/rust/private/rust.bzl b/rust/private/rust.bzl
index 2717d3f5..be277010 100644
--- a/rust/private/rust.bzl
+++ b/rust/private/rust.bzl
@@ -159,7 +159,7 @@ def _rust_library_common(ctx, crate_type):
     if crate_type in ["cdylib", "staticlib"]:
         output_hash = None
     else:
-        output_hash = determine_output_hash(crate_root, ctx.label)
+        output_hash = determine_output_hash(ctx.bin_dir, crate_root, ctx.label)
 
     rust_lib_name = determine_lib_name(
         crate_name,
@@ -321,7 +321,7 @@ def _rust_test_impl(ctx):
             )
         else:
             crate_name = crate.name
-            output_hash = determine_output_hash(crate.root, ctx.label)
+            output_hash = determine_output_hash(ctx.bin_dir, crate.root, ctx.label)
             output = ctx.actions.declare_file(
                 "test-%s/%s%s" % (
                     output_hash,
@@ -388,7 +388,7 @@ def _rust_test_impl(ctx):
                 ctx.label.name + toolchain.binary_ext,
             )
         else:
-            output_hash = determine_output_hash(crate_root, ctx.label)
+            output_hash = determine_output_hash(ctx.bin_dir, crate_root, ctx.label)
             output = ctx.actions.declare_file(
                 "test-%s/%s%s" % (
                     output_hash,
diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl
index 2bc6ce19..73e472f5 100644
--- a/rust/private/rustc.bzl
+++ b/rust/private/rustc.bzl
@@ -972,6 +972,10 @@ def construct_arguments(
     if remap_path_prefix != None:
         rustc_flags.add("--remap-path-prefix=${{pwd}}={}".format(remap_path_prefix))
 
+    # Replace unstable bindir path (based on ST-hash which is in turn based on
+    # build configuration) with a stable bin/ path.
+    rustc_flags.add("--remap-path-prefix={}=bin".format(ctx.bin_dir.path))
+
     emit_without_paths = []
     for kind in emit:
         if kind == "link" and crate_info.type == "bin" and crate_info.output != None:
diff --git a/rust/private/utils.bzl b/rust/private/utils.bzl
index 7b11c10d..41f7d2db 100644
--- a/rust/private/utils.bzl
+++ b/rust/private/utils.bzl
@@ -176,7 +176,7 @@ def get_lib_name_for_windows(lib):
 
     return libname
 
-def determine_output_hash(crate_root, label):
+def determine_output_hash(bin_dir, crate_root, label):
     """Generates a hash of the crate root file's path.
 
     Args:
@@ -187,8 +187,12 @@ def determine_output_hash(crate_root, label):
         str: A string representation of the hash.
     """
 
+    # Remove any unstable BuildConfiguration derived dir fragments to unify
+    # hashes between different configs.
+    crate_root_path = crate_root.path.replace(bin_dir.path, "bin")
+
     # Take the absolute value of hash() since it could be negative.
-    h = abs(hash(crate_root.path) + hash(repr(label)))
+    h = abs(hash(crate_root_path) + hash(repr(label)))
     return repr(h)
 
 def get_preferred_artifact(library_to_link, use_pic):
-- 
2.47.0

