Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
9b6f914
build: add cmake build system alongside autotools
fanquake Aug 28, 2024
44a9464
build: fix CMake build failures against the Dash sources
PastaPastaPasta Jul 25, 2026
d142edf
build: restore Dash-specific feature detection under CMake
PastaPastaPasta Jul 25, 2026
63c3e94
build: report the git description in CMake builds
PastaPastaPasta Jul 25, 2026
a2f4e0f
test: fix CMake test wiring
PastaPastaPasta Jul 25, 2026
dad4790
ci: keep the Autotools invocations working while CMake is optional
PastaPastaPasta Jul 25, 2026
9964711
doc: adapt the new MSVC build guide to Dash
PastaPastaPasta Jul 25, 2026
880b992
build: suppress -Wdeprecated-literal-operator under Clang WERROR builds
PastaPastaPasta Jul 25, 2026
d2ac24b
build: make a WERROR CMake build possible
PastaPastaPasta Jul 25, 2026
70bc6f2
ci: add a linux64_cmake job that builds the full stack with CMake
PastaPastaPasta Jul 25, 2026
0df0df3
build: restore Dash Windows resources and installer packaging
PastaPastaPasta Jul 25, 2026
4da5ac2
build: restore Dash executable names and chainstate installation
PastaPastaPasta Jul 25, 2026
8b9f7aa
build: keep the Qt masternode model available without a wallet
PastaPastaPasta Jul 25, 2026
7670021
build: restore the public libdashconsensus CMake target
PastaPastaPasta Jul 25, 2026
6bb84b4
build: drop the multiprocess IPC test block Dash cannot build
PastaPastaPasta Jul 25, 2026
bc31a3a
doc: correct the CMake build documentation
PastaPastaPasta Jul 25, 2026
cdc5fa5
ci: give linux64_cmake the depends artifact fallback and hardened che…
PastaPastaPasta Aug 1, 2026
a433cd1
build: target the same Windows API level as Autotools
PastaPastaPasta Aug 1, 2026
1794ae0
build: define DEBUG_CORE and Boost multi_index safe mode like Autotools
PastaPastaPasta Aug 1, 2026
20dd068
build: keep the Doxyfile template usable by Autotools
PastaPastaPasta Aug 1, 2026
834de55
build: drop the broken Qt plugin staging for test_dash-qt
PastaPastaPasta Aug 1, 2026
a800882
build: adapt CMake sources to current develop
PastaPastaPasta Aug 9, 2026
4bfe801
test: restore omitted CMake test sources
PastaPastaPasta Aug 11, 2026
e165dc0
build: resync CMake source lists with develop
UdjinM6 Sep 1, 2026
83cfa3f
build: restore CMake parity with Autotools for stacktraces
UdjinM6 Sep 1, 2026
3ea91e2
build: bump the CMake CLIENT_VERSION_BUILD to match configure.ac
PastaPastaPasta Sep 2, 2026
685d192
doc: derive VCPKG_ROOT from the Visual Studio installation
PastaPastaPasta Sep 2, 2026
86cd86a
build: apply appended C flags before creating source targets
PastaPastaPasta Sep 8, 2026
f89dfb5
build: omit the URL helper from libevent-free utility builds
PastaPastaPasta Sep 8, 2026
9f65bc8
docs: disable the GUI in the headless MSVC build recipe
PastaPastaPasta Sep 8, 2026
a02b5f3
build: scope CMake crash-hook wrapping to its implementation
PastaPastaPasta Sep 16, 2026
24ceeaf
build: restore Dash kernel linkage for CMake chainstate
PastaPastaPasta Sep 16, 2026
86bd1c4
ci: cover CMake chainstate and crash-hook builds
PastaPastaPasta Sep 16, 2026
4f6ef0e
build: preserve consensus-only dependencies and MinGW ABI
PastaPastaPasta Sep 16, 2026
cf5f661
build: fix CMake maintenance checks
PastaPastaPasta Sep 16, 2026
aeb6ab9
build: resync CMake source lists with develop again
PastaPastaPasta Oct 5, 2026
be46f8d
build: follow develop's build configuration in CMake
PastaPastaPasta Oct 5, 2026
dd521f5
build: resync CMake source lists with develop 23479b95d7
PastaPastaPasta Oct 14, 2026
47b10c3
ci: follow develop's workflow hardening in the CMake job
PastaPastaPasta Oct 24, 2026
cbf5d4e
build: resync CMake with develop
PastaPastaPasta Oct 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
149 changes: 149 additions & 0 deletions .github/workflows/build-src-cmake.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
name: Build source (CMake)

on:
workflow_call:
inputs:
build-target:
description: "Target name as defined by inputs.sh"
required: true
type: string
container-path:
description: "Path to built container at registry"
required: true
type: string
depends-key:
description: "Key needed to access cached depends"
required: true
type: string
depends-host:
description: "Host triplet from depends build"
required: true
type: string
depends-dep-opts:
description: "DEP_OPTS used to build depends"
required: false
type: string
default: ""
depends-artifact:
description: "Artifact holding freshly built depends, used if the cache restore misses"
required: false
type: string
default: ""
runs-on:
description: "Runner label to use (e.g., ubuntu-24.04 or ubuntu-24.04-arm)"
required: true
type: string

# Builds the tree with CMake on top of the depends prefix produced for the
# Autotools jobs, which is what makes this a full-stack check: depends emits
# toolchain.cmake, CMake consumes it, and the unit tests run against the
# result, followed by a short functional smoke list. The full functional suite
# stays with the Autotools jobs, so this job does not bundle artifacts.
jobs:
build-src-cmake:
name: Build source (CMake)
runs-on: ${{ inputs.runs-on }}
container:
image: ${{ inputs.container-path }} # zizmor: ignore[unpinned-images] built earlier in this run by build-container.yml
options: --user root
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.head.sha }}
allow-unsafe-pr-checkout: true
persist-credentials: false
fetch-depth: 50

- name: Initial setup
run: |
git config --global --add safe.directory "$PWD"
shell: bash

- name: Restore depends cache
id: depends-cache
uses: actions/cache/restore@v5
with:
path: depends/built/${{ inputs.depends-host }}
key: ${{ inputs.depends-key }}

- name: Download built depends
# Same-run handoff from build-depends.yml: pull_request_target runs
# have read-only cache tokens (GitHub change, June 2026), so freshly
# built depends arrive as an artifact instead of a cache entry. Also
# covers trusted runs whose cache save was denied (save only warns).
if: steps.depends-cache.outputs.cache-hit != 'true' && inputs.depends-artifact != ''
uses: actions/download-artifact@v8
with:
name: ${{ inputs.depends-artifact }}
path: depends/built/${{ inputs.depends-host }}

- name: Check built depends are present
if: steps.depends-cache.outputs.cache-hit != 'true' && inputs.depends-artifact == ''
run: |
echo "::error::Depends cache restore missed and no built depends artifact was provided"
exit 1
shell: bash

- name: Rebuild depends prefix
env:
DEPENDS_HOST: ${{ inputs.depends-host }}
DEP_OPTS: ${{ inputs.depends-dep-opts }}
run: |
# Use the HOST and DEP_OPTS from the depends build, not this build-target
# This ensures the build_id matches the cached packages, and it is what
# writes depends/${HOST}/toolchain.cmake.
# DEP_OPTS may contain shell-quoted values, e.g. CXX='clang++-19 -stdlib=libc++'
eval "DEP_OPTS_ARGS=(${DEP_OPTS})"
make -j$(nproc) -C depends HOST="${DEPENDS_HOST}" "${DEP_OPTS_ARGS[@]}"
shell: bash

- name: Restore ccache cache
uses: actions/cache/restore@v5
with:
path: |
/cache/ccache
key: ccache-${{ hashFiles('contrib/containers/ci/ci.Dockerfile', 'depends/packages/*') }}-${{ inputs.build-target }}-${{ github.sha }}
restore-keys: |
ccache-${{ hashFiles('contrib/containers/ci/ci.Dockerfile', 'depends/packages/*') }}-${{ inputs.build-target }}-

- name: Build source
env:
BUILD_TARGET: ${{ inputs.build-target }}
run: |
CCACHE_MAXSIZE="600M"
CACHE_DIR="/cache"
mkdir /output
BASE_OUTDIR="/output"
source ./ci/dash/matrix.sh
./ci/dash/build_src_cmake.sh
ccache -X 9
ccache -c
du -hd0 "${BASE_OUTDIR}"
shell: bash

- name: Save ccache cache
if: |
github.event_name == 'push' &&
github.ref_name == github.event.repository.default_branch
uses: actions/cache/save@v5
with:
path: |
/cache/ccache
key: ccache-${{ hashFiles('contrib/containers/ci/ci.Dockerfile', 'depends/packages/*') }}-${{ inputs.build-target }}-${{ github.sha }}

- name: Run unit tests
env:
BUILD_TARGET: ${{ inputs.build-target }}
run: |
source ./ci/dash/matrix.sh
./ci/dash/test_unittests_cmake.sh
shell: bash

- name: Run functional smoke tests
env:
BUILD_TARGET: ${{ inputs.build-target }}
run: |
source ./ci/dash/matrix.sh
./ci/dash/test_integrationtests_cmake.sh
shell: bash
17 changes: 16 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,7 @@ jobs:
if: |
vars.SKIP_LINUX64 == '' ||
vars.SKIP_LINUX64_ASAN == '' ||
vars.SKIP_LINUX64_CMAKE == '' ||
vars.SKIP_LINUX64_FUZZ == '' ||
vars.SKIP_LINUX64_SQLITE == ''
with:
Expand Down Expand Up @@ -340,6 +341,20 @@ jobs:
runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }}
secrets: *remote-ccache-auth

src-linux64_cmake:
name: linux64_cmake-build
uses: ./.github/workflows/build-src-cmake.yml
needs: [check-skip, container, depends-linux64]
if: ${{ vars.SKIP_LINUX64_CMAKE == '' }}
with:
build-target: linux64_cmake
container-path: ${{ needs.container.outputs.path }}
depends-key: ${{ needs.depends-linux64.outputs.key }}
depends-host: ${{ needs.depends-linux64.outputs.host }}
depends-dep-opts: ${{ needs.depends-linux64.outputs.dep-opts }}
depends-artifact: ${{ needs.depends-linux64.outputs.built-artifact }}
runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }}

src-linux64_fuzz:
name: linux64_fuzz-build
uses: ./.github/workflows/build-src.yml
Expand Down Expand Up @@ -519,7 +534,7 @@ jobs:
name: Prune old ccache generations
# Each develop push saves a new ccache/ctcache entry per target; keep only
# the newest so the 10 GB repository cache stops evicting fresh ones.
needs: [src-aarch64-linux, src-linux64, src-linux64_asan, src-linux64_fuzz, src-linux64_multiprocess, src-linux64_nowallet, src-linux64_sqlite, src-linux64_tsan, src-mac, src-win64]
needs: [src-aarch64-linux, src-linux64, src-linux64_asan, src-linux64_cmake, src-linux64_fuzz, src-linux64_multiprocess, src-linux64_nowallet, src-linux64_sqlite, src-linux64_tsan, src-mac, src-win64]
if: |
!cancelled() &&
github.event_name == 'push' &&
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
todo.txt
reset-files.bash

# Build subdirectories.
/*build*
!/build-aux
!/build_msvc

*.tar.gz

*.exe
Expand Down
Loading
Loading