ci: Compile with minimum supported g++-10 in olddeps #366

pull maflcko wants to merge 1 commits into bitcoin-core:master from maflcko:2609-gcc-10 changing 2 files +4 −4
  1. maflcko commented at 11:13 AM on September 16, 2026: contributor

    Follow up to #330 (comment)

  2. DrahtBot commented at 11:13 AM on September 16, 2026: none

    <!--e57a25ab6845829454e8d69fc972939a-->

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    <!--021abf342d371248e50ceaed478a90ca-->

    Reviews

    See the guideline and AI policy for information on the review process.

    Type Reviewers
    ACK ryanofsky

    If your review is incorrectly listed, please copy-paste <code>&lt;!--meta-tag:bot-skip--&gt;</code> into the comment that the bot should ignore.

    <!--174a7506f384e20aa4161008e828411d-->

    Conflicts

    Reviewers, this pull request conflicts with the following ones:

    • #362 (Enable -Wunused by fanquake)
    • #342 (Allow request cancellation for wrapped C++ methods by xyzconstant)
    • #175 (Set cmake_minimum_required(VERSION 3.22) by maflcko)

    If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

    <!--5faf32d7da4f0f540f40219e4f7537a3-->

  3. ci: Compile with minimum supported g++-10 in olddeps fa5633467a
  4. maflcko force-pushed on Sep 16, 2026
  5. in ci/configs/olddeps.bash:3 in fa5633467a
       0 | @@ -1,8 +1,8 @@
       1 |  CI_DESC="CI job using old Cap'n Proto and cmake versions"
       2 |  CI_DIR=build-olddeps
       3 | -# Pin olddeps to an older Nixpkgs channel, since compiling the old CMake
       4 | -# requires an older GCC.
       5 | +# Pin olddeps to an older Nixpkgs channel, to be able to test an older GCC.
    


    ryanofsky commented at 1:54 PM on October 1, 2026:

    Possible followup: this comment could keep the old reason too, and say that 25.05 is the last channel with GCC 10 (25.11 and unstable only have gcc13 and later), so whoever bumps the channel knows the job's GCC version has to change with it. Maybe something like:

    # Pin olddeps to an older Nixpkgs channel, since nixos-25.05 is the last
    # channel providing GCC 10, and compiling the old CMake requires an older GCC.
    
  6. in ci/configs/olddeps.bash:6 in fa5633467a
       0 | @@ -1,8 +1,8 @@
       1 |  CI_DESC="CI job using old Cap'n Proto and cmake versions"
       2 |  CI_DIR=build-olddeps
       3 | -# Pin olddeps to an older Nixpkgs channel, since compiling the old CMake
       4 | -# requires an older GCC.
       5 | +# Pin olddeps to an older Nixpkgs channel, to be able to test an older GCC.
       6 |  CI_NIXPKGS_CHANNEL=nixos-25.05
       7 |  export CXXFLAGS="-Werror -Wall -Wextra -Wpedantic -Wno-unused-parameter -Wno-error=array-bounds"
       8 | -NIX_ARGS=(--argstr capnprotoVersion "0.9.2" --argstr cmakeVersion "3.12.4" --argstr gccVersion "11")
       9 | +CAPNP_CHECKOUT=v0.9.2  # Use a checkout to compile it with the selected GCC
    


    ryanofsky commented at 1:55 PM on October 1, 2026:

    Possible followup: it might not be obvious why this builds Cap'n Proto from source when nix has a package for it. The comment could say what this is trying to test, something like:

    # Build Cap'n Proto from source so it is compiled with the same old GCC, like
    # on a system where that GCC is the default compiler. Nix packages are built
    # with the channel's default GCC instead.
    
  7. ryanofsky approved
  8. ryanofsky approved
  9. ryanofsky commented at 1:56 PM on October 1, 2026: collaborator

    Code review ACK fa5633467afb99ddb850f39dafb96cae3642cd75. Thanks for also building Cap'n Proto (not just libmultiprocess) with GCC 10.

    Some background for anyone reading later:

    • This PR updates the olddeps CI job, which checks that libmultiprocess works with the oldest supported dependencies. It lowers the job's compiler from GCC 11 to GCC 10, the oldest version known to work, and builds Cap'n Proto 0.9.2 from source with GCC 10 instead of using the nix package. This is now the only CI job that compiles with GCC 10.
    • Cap'n Proto is built from source because nix builds its packages with the channel's default compiler, GCC 14. Before this PR, the job compiled libmultiprocess with GCC 11 and linked it against a Cap'n Proto built with GCC 14.
    • Which GCC builds Cap'n Proto doesn't matter very much, because Cap'n Proto's headers were already compiled with the old GCC as part of building libmultiprocess, so most problems an old compiler could cause would have shown up anyway. Building both with GCC 10 is more realistic, though: someone using GCC 10 is probably on a system where it is the default compiler, and builds Cap'n Proto with it too. It also checks that the oldest supported Cap'n Proto and GCC versions really work together.
    • The new setup works: in the olddeps CI log, Cap'n Proto and libmultiprocess are both compiled with GCC 10.5.0, and the tests pass.
    • The ci.sh change is needed because building Cap'n Proto from source ran cmake --install, which requires CMake 3.15, and this job uses CMake 3.12. cmake --build . --target install does the same thing on older versions.
    • The job stays pinned to nixos-25.05 because it is the last nixpkgs channel with GCC 10, and building the old CMake also needs an older GCC.

    I left two small comment suggestions for a followup but plan to merge as is.

  10. ryanofsky merged this on Oct 1, 2026
  11. ryanofsky closed this on Oct 1, 2026

  12. maflcko deleted the branch on Oct 1, 2026

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin-core/libmultiprocess. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-10-08 00:30 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me