From 2f2d852a2075cdbf23b3af67d9d27f7f00178f68 Mon Sep 17 00:00:00 2001 From: Dan Calavrezo <195309321+dcalavrezo-qorix@users.noreply.github.com> Date: Fri, 24 Jul 2026 16:35:56 +0300 Subject: [PATCH] ferrocene: wire LLVM coverage tools into generated rust_toolchain coverage-tools tarballs from ferrocene_toolchain_builder >= 1.3.0 additionally ship llvm-cov, llvm-profdata and llvm-cxxfilt built from the same LLVM tree as the Ferrocene rustc. ferrocene_toolchain_ext now detects these tools after extracting the coverage-tools archive and sets llvm_cov/llvm_profdata on the generated rust_toolchain. This is what makes rules_rust instrument crates (--codegen=instrument-coverage) and export RUST_LLVM_COV / RUST_LLVM_PROFDATA to the coverage runner under 'bazel coverage' - without it, Rust code silently produces no coverage data. - expose llvm-cov-bin / llvm-profdata-bin / llvm-cxxfilt-bin filegroups from the generated repo - bump all ferrocene_toolchain_builder pins 1.2.0 -> 1.3.0; only the coverage-tools tarball changed content, all other 1.3.0 assets are byte-identical to the previously pinned 1.2.0 ones (checksums verified) Backward compatible: coverage-tools tarballs without the llvm tools (<= 1.2.0) simply skip the wiring. --- MODULE.bazel | 34 +++++++++--------- MODULE.bazel.lock | 38 ++++++++++---------- README.md | 16 ++++----- extensions/ferrocene_toolchain_ext.bzl | 50 ++++++++++++++++++++++++-- 4 files changed, 91 insertions(+), 47 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 56fbf2a..ee598e1 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -22,7 +22,7 @@ bazel_dep(name = "rules_rust", version = "0.56.0") bazel_dep(name = "rules_shell", version = "0.3.0") # Prebuilt Ferrocene Rust toolchains (QNX + Linux) from: -# https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/tag/1.2.0 +# https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/tag/1.3.0 ferrocene = use_extension( "//extensions:ferrocene_toolchain_ext.bzl", "ferrocene_toolchain_ext", @@ -35,9 +35,9 @@ ferrocene_rules_rust_miri = use_extension( ferrocene.toolchain( name = "ferrocene_x86_64_unknown_linux_gnu", - coverage_tools_sha256 = "841172d34b2fc0a8bed2756cf16f38d29ac18c13ee29fbb87af3ae047aa2a6a0", + coverage_tools_sha256 = "f4b1cdcaf644b3dac429dfc50c674cde8f9620e1a563e3dcdfb313a7ce68c888", coverage_tools_strip_prefix = "779fbed05ae9e9fe2a04137929d99cc9b3d516fd/x86_64-unknown-linux-gnu", - coverage_tools_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + coverage_tools_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", exec_triple = "x86_64-unknown-linux-gnu", extra_rustc_flags = [ "-Clink-arg=-Wl,--no-as-needed", @@ -47,20 +47,20 @@ ferrocene.toolchain( ], miri_sysroot_sha256 = "8b745cc64fe4d9d27081196cc565ea3cd198b24fce0ef7e2f014a11d85629745", miri_sysroot_strip_prefix = "x86_64-unknown-linux-gnu", - miri_sysroot_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + miri_sysroot_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", sha256 = "4082058e4d054b1e26261e7ec99f01bf807f87b4ea580d246e48d9ccd487a591", target_compatible_with = [ "@platforms//cpu:x86_64", "@platforms//os:linux", ], target_triple = "x86_64-unknown-linux-gnu", - url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", ) ferrocene.toolchain( name = "ferrocene_aarch64_unknown_linux_gnu", - coverage_tools_sha256 = "841172d34b2fc0a8bed2756cf16f38d29ac18c13ee29fbb87af3ae047aa2a6a0", + coverage_tools_sha256 = "f4b1cdcaf644b3dac429dfc50c674cde8f9620e1a563e3dcdfb313a7ce68c888", coverage_tools_strip_prefix = "779fbed05ae9e9fe2a04137929d99cc9b3d516fd/x86_64-unknown-linux-gnu", - coverage_tools_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + coverage_tools_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", exec_triple = "x86_64-unknown-linux-gnu", extra_rustc_flags = [ "-Clink-arg=-Wl,--no-as-needed", @@ -71,20 +71,20 @@ ferrocene.toolchain( ], miri_sysroot_sha256 = "74f90eabcb34809e44300535016f25eb0cf4a500763c0d18e7f587583b5b9908", miri_sysroot_strip_prefix = "aarch64-unknown-linux-gnu", - miri_sysroot_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-linux-gnu.tar.gz", + miri_sysroot_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-linux-gnu.tar.gz", sha256 = "3fd5fe5da4836eb6d554731e7899d378a6992106ce6275b136279dec29598383", target_compatible_with = [ "@platforms//cpu:aarch64", "@platforms//os:linux", ], target_triple = "aarch64-unknown-linux-gnu", - url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-linux-gnu.tar.gz", + url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-linux-gnu.tar.gz", ) ferrocene.toolchain( name = "ferrocene_x86_64_pc_nto_qnx800", - coverage_tools_sha256 = "841172d34b2fc0a8bed2756cf16f38d29ac18c13ee29fbb87af3ae047aa2a6a0", + coverage_tools_sha256 = "f4b1cdcaf644b3dac429dfc50c674cde8f9620e1a563e3dcdfb313a7ce68c888", coverage_tools_strip_prefix = "779fbed05ae9e9fe2a04137929d99cc9b3d516fd/x86_64-unknown-linux-gnu", - coverage_tools_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + coverage_tools_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", exec_triple = "x86_64-unknown-linux-gnu", extra_rustc_flags = [ "-Clink-arg=-Wl,--no-as-needed", @@ -94,20 +94,20 @@ ferrocene.toolchain( ], miri_sysroot_sha256 = "ac434b7dc3cc3d67d31f73513a027aea50cca355c189c3a3f8c3162b1fccbca0", miri_sysroot_strip_prefix = "x86_64-pc-nto-qnx800", - miri_sysroot_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-pc-nto-qnx800.tar.gz", + miri_sysroot_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-pc-nto-qnx800.tar.gz", sha256 = "3fede22a89d7431668d4bc2810147a957d2b334ee8cb7097ad9c56b546f805cc", target_compatible_with = [ "@platforms//cpu:x86_64", "@platforms//os:qnx", ], target_triple = "x86_64-pc-nto-qnx800", - url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-pc-nto-qnx800.tar.gz", + url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-pc-nto-qnx800.tar.gz", ) ferrocene.toolchain( name = "ferrocene_aarch64_unknown_nto_qnx800", - coverage_tools_sha256 = "841172d34b2fc0a8bed2756cf16f38d29ac18c13ee29fbb87af3ae047aa2a6a0", + coverage_tools_sha256 = "f4b1cdcaf644b3dac429dfc50c674cde8f9620e1a563e3dcdfb313a7ce68c888", coverage_tools_strip_prefix = "779fbed05ae9e9fe2a04137929d99cc9b3d516fd/x86_64-unknown-linux-gnu", - coverage_tools_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + coverage_tools_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", exec_triple = "x86_64-unknown-linux-gnu", extra_rustc_flags = [ "-Clink-arg=-Wl,--no-as-needed", @@ -117,14 +117,14 @@ ferrocene.toolchain( ], miri_sysroot_sha256 = "8fc8f406c33a7dc31362133b8a2ffbb66b44f62354bfc98a3bc21a1fcbc9a7e6", miri_sysroot_strip_prefix = "aarch64-unknown-nto-qnx800", - miri_sysroot_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-nto-qnx800.tar.gz", + miri_sysroot_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-nto-qnx800.tar.gz", sha256 = "d5ccceb0e3118a5e6bfdf1a3f894054db3c2cd346f927b39a57a69faf688849d", target_compatible_with = [ "@platforms//cpu:aarch64", "@platforms//os:qnx", ], target_triple = "aarch64-unknown-nto-qnx800", - url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-nto-qnx800.tar.gz", + url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-nto-qnx800.tar.gz", ) ferrocene_rules_rust_miri.toolchain( diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 27450e9..7692d0a 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -271,7 +271,7 @@ "moduleExtensions": { "//extensions:ferrocene_toolchain_ext.bzl%ferrocene_rules_rust_miri_toolchain_ext": { "general": { - "bzlTransitiveDigest": "JTR6scmBZuukTYspnbvaNFU27CfBHiQyu6OywcI1QPE=", + "bzlTransitiveDigest": "9k8SLwP4ec9xXjFivq0Kn0FradTQhcEA+j/WsLxfVPM=", "usagesDigest": "Z4fXKYOxqm4evxSNjaaTWD65TdzzvcsfkuFRiIbfwcc=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -347,8 +347,8 @@ }, "//extensions:ferrocene_toolchain_ext.bzl%ferrocene_toolchain_ext": { "general": { - "bzlTransitiveDigest": "JTR6scmBZuukTYspnbvaNFU27CfBHiQyu6OywcI1QPE=", - "usagesDigest": "rWEZaM0xWw7yeL7B75jmGTsU4xi83MP5olBN4FBicSo=", + "bzlTransitiveDigest": "9k8SLwP4ec9xXjFivq0Kn0FradTQhcEA+j/WsLxfVPM=", + "usagesDigest": "pWJDj+Pz55dopb1Gg/MLa5lRHSmJ0u0AFuQF4FXk+w4=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -356,7 +356,7 @@ "ferrocene_x86_64_unknown_linux_gnu": { "repoRuleId": "@@//extensions:ferrocene_toolchain_ext.bzl%ferrocene_toolchain_repo", "attributes": { - "url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + "url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", "sha256": "4082058e4d054b1e26261e7ec99f01bf807f87b4ea580d246e48d9ccd487a591", "strip_prefix": "", "toolchain_name": "rust_ferrocene", @@ -383,10 +383,10 @@ "@platforms//cpu:x86_64", "@platforms//os:linux" ], - "coverage_tools_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", - "coverage_tools_sha256": "841172d34b2fc0a8bed2756cf16f38d29ac18c13ee29fbb87af3ae047aa2a6a0", + "coverage_tools_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + "coverage_tools_sha256": "f4b1cdcaf644b3dac429dfc50c674cde8f9620e1a563e3dcdfb313a7ce68c888", "coverage_tools_strip_prefix": "779fbed05ae9e9fe2a04137929d99cc9b3d516fd/x86_64-unknown-linux-gnu", - "miri_sysroot_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + "miri_sysroot_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", "miri_sysroot_sha256": "8b745cc64fe4d9d27081196cc565ea3cd198b24fce0ef7e2f014a11d85629745", "miri_sysroot_strip_prefix": "x86_64-unknown-linux-gnu" } @@ -394,7 +394,7 @@ "ferrocene_aarch64_unknown_linux_gnu": { "repoRuleId": "@@//extensions:ferrocene_toolchain_ext.bzl%ferrocene_toolchain_repo", "attributes": { - "url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-linux-gnu.tar.gz", + "url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-linux-gnu.tar.gz", "sha256": "3fd5fe5da4836eb6d554731e7899d378a6992106ce6275b136279dec29598383", "strip_prefix": "", "toolchain_name": "rust_ferrocene", @@ -422,10 +422,10 @@ "@platforms//cpu:aarch64", "@platforms//os:linux" ], - "coverage_tools_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", - "coverage_tools_sha256": "841172d34b2fc0a8bed2756cf16f38d29ac18c13ee29fbb87af3ae047aa2a6a0", + "coverage_tools_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + "coverage_tools_sha256": "f4b1cdcaf644b3dac429dfc50c674cde8f9620e1a563e3dcdfb313a7ce68c888", "coverage_tools_strip_prefix": "779fbed05ae9e9fe2a04137929d99cc9b3d516fd/x86_64-unknown-linux-gnu", - "miri_sysroot_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-linux-gnu.tar.gz", + "miri_sysroot_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-linux-gnu.tar.gz", "miri_sysroot_sha256": "74f90eabcb34809e44300535016f25eb0cf4a500763c0d18e7f587583b5b9908", "miri_sysroot_strip_prefix": "aarch64-unknown-linux-gnu" } @@ -433,7 +433,7 @@ "ferrocene_x86_64_pc_nto_qnx800": { "repoRuleId": "@@//extensions:ferrocene_toolchain_ext.bzl%ferrocene_toolchain_repo", "attributes": { - "url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-pc-nto-qnx800.tar.gz", + "url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-pc-nto-qnx800.tar.gz", "sha256": "3fede22a89d7431668d4bc2810147a957d2b334ee8cb7097ad9c56b546f805cc", "strip_prefix": "", "toolchain_name": "rust_ferrocene", @@ -460,10 +460,10 @@ "@platforms//cpu:x86_64", "@platforms//os:qnx" ], - "coverage_tools_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", - "coverage_tools_sha256": "841172d34b2fc0a8bed2756cf16f38d29ac18c13ee29fbb87af3ae047aa2a6a0", + "coverage_tools_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + "coverage_tools_sha256": "f4b1cdcaf644b3dac429dfc50c674cde8f9620e1a563e3dcdfb313a7ce68c888", "coverage_tools_strip_prefix": "779fbed05ae9e9fe2a04137929d99cc9b3d516fd/x86_64-unknown-linux-gnu", - "miri_sysroot_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-pc-nto-qnx800.tar.gz", + "miri_sysroot_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-pc-nto-qnx800.tar.gz", "miri_sysroot_sha256": "ac434b7dc3cc3d67d31f73513a027aea50cca355c189c3a3f8c3162b1fccbca0", "miri_sysroot_strip_prefix": "x86_64-pc-nto-qnx800" } @@ -471,7 +471,7 @@ "ferrocene_aarch64_unknown_nto_qnx800": { "repoRuleId": "@@//extensions:ferrocene_toolchain_ext.bzl%ferrocene_toolchain_repo", "attributes": { - "url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-nto-qnx800.tar.gz", + "url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-nto-qnx800.tar.gz", "sha256": "d5ccceb0e3118a5e6bfdf1a3f894054db3c2cd346f927b39a57a69faf688849d", "strip_prefix": "", "toolchain_name": "rust_ferrocene", @@ -498,10 +498,10 @@ "@platforms//cpu:aarch64", "@platforms//os:qnx" ], - "coverage_tools_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", - "coverage_tools_sha256": "841172d34b2fc0a8bed2756cf16f38d29ac18c13ee29fbb87af3ae047aa2a6a0", + "coverage_tools_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + "coverage_tools_sha256": "f4b1cdcaf644b3dac429dfc50c674cde8f9620e1a563e3dcdfb313a7ce68c888", "coverage_tools_strip_prefix": "779fbed05ae9e9fe2a04137929d99cc9b3d516fd/x86_64-unknown-linux-gnu", - "miri_sysroot_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-nto-qnx800.tar.gz", + "miri_sysroot_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-nto-qnx800.tar.gz", "miri_sysroot_sha256": "8fc8f406c33a7dc31362133b8a2ffbb66b44f62354bfc98a3bc21a1fcbc9a7e6", "miri_sysroot_strip_prefix": "aarch64-unknown-nto-qnx800" } diff --git a/README.md b/README.md index 6162c02..efb655e 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ extension to wrap custom Ferrocene archives. ## What’s inside -- `MODULE.bazel`: pins Ferrocene 1.2.0 archives built from the Ubuntu 24.04 Ferrocene image and depends on `score_bazel_platforms`. +- `MODULE.bazel`: pins Ferrocene 1.3.0 archives built from the Ubuntu 24.04 Ferrocene image and depends on `score_bazel_platforms`. - `extensions/ferrocene_toolchain_ext.bzl`: bzlmod extension to wrap arbitrary Ferrocene archives. - Optional Ferrocene Rust coverage tools (`symbol-report`, `blanket`) when configured. - Optional Miri toolchain support backed by prebuilt Miri sysroot archives. @@ -63,11 +63,11 @@ ferrocene = use_extension( ferrocene.toolchain( name = "ferrocene_x86_64_unknown_linux_gnu", - url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", sha256 = "4082058e4d054b1e26261e7ec99f01bf807f87b4ea580d246e48d9ccd487a591", - coverage_tools_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", - coverage_tools_sha256 = "841172d34b2fc0a8bed2756cf16f38d29ac18c13ee29fbb87af3ae047aa2a6a0", - miri_sysroot_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + coverage_tools_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + coverage_tools_sha256 = "f4b1cdcaf644b3dac429dfc50c674cde8f9620e1a563e3dcdfb313a7ce68c888", + miri_sysroot_url = "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", miri_sysroot_sha256 = "8b745cc64fe4d9d27081196cc565ea3cd198b24fce0ef7e2f014a11d85629745", miri_sysroot_strip_prefix = "x86_64-unknown-linux-gnu", target_triple = "x86_64-unknown-linux-gnu", @@ -100,10 +100,10 @@ Add more `ferrocene.toolchain(...)` entries for other archives such as `aarch64-unknown-linux-gnu`, `aarch64-unknown-nto-qnx800`, or `x86_64-pc-nto-qnx800`. -Ferrocene `1.2.0` artifacts: +Ferrocene `1.3.0` artifacts: Base URL: -`https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.2.0/` +`https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.3.0/` | File | sha256 | | --- | --- | @@ -111,7 +111,7 @@ Base URL: | `ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-linux-gnu.tar.gz` | `3fd5fe5da4836eb6d554731e7899d378a6992106ce6275b136279dec29598383` | | `ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz` | `4082058e4d054b1e26261e7ec99f01bf807f87b4ea580d246e48d9ccd487a591` | | `ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-pc-nto-qnx800.tar.gz` | `3fede22a89d7431668d4bc2810147a957d2b334ee8cb7097ad9c56b546f805cc` | -| `coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz` | `841172d34b2fc0a8bed2756cf16f38d29ac18c13ee29fbb87af3ae047aa2a6a0` | +| `coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz` | `f4b1cdcaf644b3dac429dfc50c674cde8f9620e1a563e3dcdfb313a7ce68c888` | | `miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz` | `8b745cc64fe4d9d27081196cc565ea3cd198b24fce0ef7e2f014a11d85629745` | | `miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-linux-gnu.tar.gz` | `74f90eabcb34809e44300535016f25eb0cf4a500763c0d18e7f587583b5b9908` | | `miri-sysroot-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-pc-nto-qnx800.tar.gz` | `ac434b7dc3cc3d67d31f73513a027aea50cca355c189c3a3f8c3162b1fccbca0` | diff --git a/extensions/ferrocene_toolchain_ext.bzl b/extensions/ferrocene_toolchain_ext.bzl index 320341c..0f12d00 100644 --- a/extensions/ferrocene_toolchain_ext.bzl +++ b/extensions/ferrocene_toolchain_ext.bzl @@ -119,7 +119,7 @@ rust_toolchain( extra_rustc_flags = {extra_rustc_flags}, extra_exec_rustc_flags = {extra_exec_rustc_flags}, env = {env}, - tags = ["manual"], +{llvm_tools_block} tags = ["manual"], ) toolchain( @@ -169,6 +169,32 @@ sh_binary( ) """ +# LLVM coverage tools shipped in coverage-tools tarballs produced by +# ferrocene_toolchain_builder >= 1.3.0. They are built from the same LLVM +# tree as the Ferrocene rustc, so they can always read the profraw/covmap +# format the compiler emits. +_LLVM_COV_TOOLS_TMPL = """\\ +filegroup( + name = "llvm-cov-bin", + srcs = ["llvm-cov"], + visibility = ["//visibility:public"], +) + +filegroup( + name = "llvm-profdata-bin", + srcs = ["llvm-profdata"], + visibility = ["//visibility:public"], +) +""" + +_LLVM_CXXFILT_TMPL = """\\ +filegroup( + name = "llvm-cxxfilt-bin", + srcs = ["llvm-cxxfilt"], + visibility = ["//visibility:public"], +) +""" + _MIRI_ARTIFACTS_TMPL = """\ sh_binary( name = "miri", @@ -286,7 +312,7 @@ def _fmt_dict(values): items.append('"%s": "%s"' % (key, values[key])) return "{\n " + ",\n ".join(items) + "\n }" -def _render_build_content(args, coverage_tools_block, miri_block): +def _render_build_content(args, coverage_tools_block, miri_block, llvm_tools_block = ""): return _BUILD_TMPL.format( toolchain_name = args.toolchain_name, target_triple = args.target_triple, @@ -303,6 +329,7 @@ def _render_build_content(args, coverage_tools_block, miri_block): env = _fmt_dict(args.env), coverage_tools_block = coverage_tools_block, miri_block = miri_block, + llvm_tools_block = llvm_tools_block, ) def _render_wrapper_script(tool, target_triple): @@ -328,6 +355,7 @@ def _ferrocene_toolchain_repo_impl(ctx): ) coverage_tools_block = "" + llvm_tools_block = "" miri_block = "" if ctx.attr.coverage_tools_url: if not ctx.attr.coverage_tools_sha256: @@ -349,6 +377,22 @@ def _ferrocene_toolchain_repo_impl(ctx): ) coverage_tools_block = _COVERAGE_TOOLS_TMPL + # coverage-tools tarballs from ferrocene_toolchain_builder >= 1.3.0 + # additionally ship llvm-cov/llvm-profdata (and llvm-cxxfilt) built + # from the same LLVM as rustc. When present, wire them into the + # rust_toolchain: rules_rust only instruments crates under + # `bazel coverage` (--codegen=instrument-coverage) and exports + # RUST_LLVM_COV / RUST_LLVM_PROFDATA to the coverage runner when the + # toolchain declares llvm_cov. Older tarballs simply skip this block. + if ctx.path("llvm-cov").exists and ctx.path("llvm-profdata").exists: + coverage_tools_block += "\n" + _LLVM_COV_TOOLS_TMPL + llvm_tools_block = ( + ' llvm_cov = ":llvm-cov-bin",\n' + + ' llvm_profdata = ":llvm-profdata-bin",\n' + ) + if ctx.path("llvm-cxxfilt").exists: + coverage_tools_block += "\n" + _LLVM_CXXFILT_TMPL + if ctx.attr.miri_sysroot_url: if not ctx.attr.miri_sysroot_sha256: fail("miri_sysroot_sha256 must be set when miri_sysroot_url is provided") @@ -366,7 +410,7 @@ def _ferrocene_toolchain_repo_impl(ctx): ) miri_block = _render_miri_block() - ctx.file("BUILD.bazel", _render_build_content(ctx.attr, coverage_tools_block, miri_block)) + ctx.file("BUILD.bazel", _render_build_content(ctx.attr, coverage_tools_block, miri_block, llvm_tools_block)) ferrocene_toolchain_repo = repository_rule( implementation = _ferrocene_toolchain_repo_impl,