Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci: merge bitcoin#27314, #28954, introduce dependency options in GitHub Actions builds, fix multiprocess builds, bump to Clang 18 #6400

Draft
wants to merge 10 commits into
base: develop
Choose a base branch
from

Conversation

kwvg
Copy link
Collaborator

@kwvg kwvg commented Nov 18, 2024

Additional Information

  • bitcoin#27314 has been backported in this PR as bitcoin#25838 (backported in dash#6384) broke Clang depends builds and this PR introduces Clang depends builds in CI.

  • Support for multiprocess builds were enabled proper in dash#6143 but unfortunately, the configuration params for multiprocess builds were not processed by CI as the build variant was not added to matrix.sh (source). This is evident by comparing two variants with Boost::Process enablement (--with-boost-process), linux64_fuzz (source) and linux64_multiprocess (source).

    Looking at a develop (6a51ab2) build, the fuzz build has it enabled (source) while the multiprocess build doesn't (source) despite both scripts having the enablement argument.

  • bitcoin#28954 has been backported to fix a problem associated with multiprocess runs (build)

  • Unlike the GitLab build, the GitHub build more-or-less builds the same set of depends seven times (source) as neither the GitLab nor the GitHub build use ./ci/dash/build_depends.sh and therefore, BUILD_TARGET has no effect there (it directly starts building depends, defining only HOST, source).

    But GitLab CI defines DEP_OPTS (source) manually, uses it (source) and uses the same set of depends for multiple build variants (for example, x86_64-pc-linux-gnu-debug is used by linux64-build, linux64_cxx20-build, linux64_sqlite-build and more, source). GitHub does no such re-use and therefore each build variant corresponds to a depends variant.

    We have attempted to get the depends built in GitLab and GitHub Actions to be at par with each other, below should be a table to illustrate expected parameters.

    Target DEP_OPTS GitLab CI GitHub Actions
    arm-linux-gnueabihf None arm-linux-gnueabihf arm-linux
    x86_64-w64-mingw32 None x86_64-w64-mingw32 None
    x86_64-apple-darwin None x86_64-apple-darwin None
    x86_64-pc-linux-gnu DEBUG=1 x86_64-pc-linux-gnu-debug linux64_cxx20, linux64_fuzz, linux64_sqlite, linux64_ubsan
    x86_64-pc-linux-gnu NO_WALLET=1 x86_64-pc-linux-gnu-nowallet linux64_nowallet
    x86_64-pc-linux-gnu DEBUG=1 MULTIPROCESS=1 CC=clang-18 CXX=clang++-18 x86_64-pc-linux-gnu-multiprocess linux64_multiprocess, linux64_tsan

    x86_64-w64-mingw32 and x86_64-apple-darwin are currently unimplemented in GitHub Actions

    • The fuzz build will continue to use GCC-built depends instead of Clang-built depends as originally planned as Clang-built depends are multiprocess-enabled and currently multiprocess and fuzz don't play nice together (see upstream build failure for example, source, corresponding with local failure, source).
  • Clang has been bumped to 18 in anticipation of bitcoin#30201, which will drop (native_llvm, formerly known as native_clang) and mandate the presence of Clang 18 or higher for cross-compilation.

  • The version attribute in the develop container's docker-compose.yml has been dropped as the attribute has been deprecated in the compose spec (source).

  • To avoid LLDB's "personality set failed: Operation not permitted" error caused by its attempt at disabling ASLR for debugging (source), the container will now operate under relaxed restrictions (seccomp=unconfined). As disabling ASLR is valuable when debugging and the container isn't used by CI but is meant for individual developers, we have opted to relax restrictions instead of skipping ASLR disablement.

    This does not affect CI as these relaxations are defined in the docker-compose.yml of the develop container, which inherits from the CI container but is a container of its own.

Breaking Changes

None expected

Checklist

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated relevant unit/integration/functional/e2e tests
  • I have made corresponding changes to the documentation
  • I have assigned this pull request to a milestone (for repository code-owners and collaborators only)

@kwvg kwvg changed the title ci: introduce dependency options in GitHub Actions builds, bump to Clang 18 and set defaults, fix multiprocess builds ci: merge bitcoin#27314, introduce dependency options in GitHub Actions builds, fix multiprocess builds Nov 18, 2024
@kwvg kwvg force-pushed the ci_stuff branch 2 times, most recently from 15cdb62 to 1d1ff41 Compare November 18, 2024 10:21
@kwvg kwvg changed the title ci: merge bitcoin#27314, introduce dependency options in GitHub Actions builds, fix multiprocess builds ci: merge bitcoin#27314, #28954, introduce dependency options in GitHub Actions builds, fix multiprocess builds, bump to Clang 18 Nov 18, 2024
@kwvg kwvg mentioned this pull request Nov 18, 2024
5 tasks
Copy link

This pull request has conflicts, please rebase.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant