ci: merge bitcoin#27314, #28954, introduce dependency options in GitHub Actions builds, fix multiprocess builds, bump to Clang 18 #6400
+81
−58
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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) andlinux64_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 onlyHOST
, 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 bylinux64-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.
DEP_OPTS
arm-linux-gnueabihf
arm-linux-gnueabihf
arm-linux
x86_64-w64-mingw32
x86_64-w64-mingw32
x86_64-apple-darwin
x86_64-apple-darwin
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
andx86_64-apple-darwin
are currently unimplemented in GitHub Actionsdepends
instead of Clang-builtdepends
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 asnative_clang
) and mandate the presence of Clang 18 or higher for cross-compilation.The
version
attribute in thedevelop
container'sdocker-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 thedevelop
container, which inherits from the CI container but is a container of its own.Breaking Changes
None expected
Checklist