From 184e3b4aff65901a7f3b3e0b16ae41c9b14acda3 Mon Sep 17 00:00:00 2001 From: Alex Jones Date: Thu, 9 Jan 2025 15:02:24 +0000 Subject: [PATCH] [bazel] Patch rules_foreign_cc to clean build logs Move rules_foreign_cc from the root MODULE.bazel to its own `third_party/foreign_cc` directory so that we can patch it to fix an issue that has not yet been supported upstream yet, in the same way as we do for e.g. `rules_rust`. When `rules_foreign_cc` builds using tools such as e.g. Configure+Make, output files Configure.log and BootstrapGNUMake.log are generated and emitted which contain references to the absolute path. When building inside Bazel's sandbox, this produces a non-determinstic output which changes between each run, preventing builds of openocd from being cached. The OpenOCD binary defined as an execution environment attribute, and so will be built when running tests, stopping FPGA test results from being cached when they should be. To fix this, this PR introduces a simple patch to completely remove this logging output, as it is not needed by any later steps as part of the build. Signed-off-by: Alex Jones --- MODULE.bazel | 3 ++- third_party/foreign_cc/BUILD | 5 +++++ third_party/foreign_cc/foreign_cc.MODULE.bazel | 15 +++++++++++++++ third_party/foreign_cc/patches/BUILD | 5 +++++ .../rules_foreign_cc.remove_log_output.patch | 13 +++++++++++++ 5 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 third_party/foreign_cc/BUILD create mode 100644 third_party/foreign_cc/foreign_cc.MODULE.bazel create mode 100644 third_party/foreign_cc/patches/BUILD create mode 100644 third_party/foreign_cc/patches/rules_foreign_cc.remove_log_output.patch diff --git a/MODULE.bazel b/MODULE.bazel index 3b1b342b45967..2c9ef1d9e28af 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -10,7 +10,6 @@ bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "googletest", version = "1.14.0.bcr.1") bazel_dep(name = "platforms", version = "0.0.10") bazel_dep(name = "rules_cc", version = "0.0.14") -bazel_dep(name = "rules_foreign_cc", version = "0.9.0") bazel_dep(name = "rules_fuzzing", version = "0.5.2") bazel_dep(name = "rules_pkg", version = "1.0.1") @@ -35,6 +34,8 @@ include("//third_party/rust:rust.MODULE.bazel") include("//third_party/python:python.MODULE.bazel") +include("//third_party/foreign_cc:foreign_cc.MODULE.bazel") + # Repository rules: bitstreams_repo = use_repo_rule("//rules:bitstreams.bzl", "bitstreams_repo") diff --git a/third_party/foreign_cc/BUILD b/third_party/foreign_cc/BUILD new file mode 100644 index 0000000000000..c85882e64fe2c --- /dev/null +++ b/third_party/foreign_cc/BUILD @@ -0,0 +1,5 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 + +package(default_visibility = ["//visibility:public"]) diff --git a/third_party/foreign_cc/foreign_cc.MODULE.bazel b/third_party/foreign_cc/foreign_cc.MODULE.bazel new file mode 100644 index 0000000000000..2915c2ed54c54 --- /dev/null +++ b/third_party/foreign_cc/foreign_cc.MODULE.bazel @@ -0,0 +1,15 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 + +# Dependencies: +bazel_dep(name = "rules_foreign_cc", version = "0.9.0") + +# Overrides and patches: +single_version_override( + module_name = "rules_foreign_cc", + patches = [ + "//third_party/foreign_cc/patches:rules_foreign_cc.remove_log_output.patch", + ], + version = "0.9.0", +) diff --git a/third_party/foreign_cc/patches/BUILD b/third_party/foreign_cc/patches/BUILD new file mode 100644 index 0000000000000..c85882e64fe2c --- /dev/null +++ b/third_party/foreign_cc/patches/BUILD @@ -0,0 +1,5 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 + +package(default_visibility = ["//visibility:public"]) diff --git a/third_party/foreign_cc/patches/rules_foreign_cc.remove_log_output.patch b/third_party/foreign_cc/patches/rules_foreign_cc.remove_log_output.patch new file mode 100644 index 0000000000000..f7ef020d62ae6 --- /dev/null +++ b/third_party/foreign_cc/patches/rules_foreign_cc.remove_log_output.patch @@ -0,0 +1,13 @@ +diff --git foreign_cc/private/framework.bzl foreign_cc/private/framework.bzl +index c84c217..f43da2c 100644 +--- foreign_cc/private/framework.bzl ++++ foreign_cc/private/framework.bzl +@@ -561,7 +561,7 @@ def wrap_outputs(ctx, lib_name, configure_name, script_text, build_script_file = + cleanup_on_success_function = create_function( + ctx, + "cleanup_on_success", +- "rm -rf $BUILD_TMPDIR $EXT_BUILD_DEPS", ++ "rm -rf $BUILD_TMPDIR $EXT_BUILD_DEPS && echo > $BUILD_LOG", + ) + cleanup_on_failure_function = create_function( + ctx,