Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
12 changes: 9 additions & 3 deletions .github/workflows/artifacts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [macos-14, ubuntu-24.04]
os: [macos-15, ubuntu-24.04]

steps:
- name: Checkout
Expand All @@ -30,10 +30,14 @@ jobs:
- name: MacOS Install Deps
if: contains(matrix.os, 'macos')
run: |
brew install ccache boost pkgconf libevent qt@6 qrencode coreutils
brew install ccache boost pkgconf libevent qt@6 qrencode coreutils llvm
if [ "${BUILD_APP_TESTS}" = "ON" ]; then
brew install googletest
fi
llvm_prefix="$(brew --prefix llvm)"
echo "CC=${llvm_prefix}/bin/clang" >> "$GITHUB_ENV"
echo "CXX=${llvm_prefix}/bin/clang++" >> "$GITHUB_ENV"
echo "SDKROOT=$(xcrun --sdk macosx --show-sdk-path)" >> "$GITHUB_ENV"
echo "CCACHE_DIR=${{ runner.temp }}/ccache" >> "$GITHUB_ENV"

- name: Ubuntu Install Deps
Expand All @@ -60,7 +64,9 @@ jobs:
- name: Build
run: |
git submodule update --init
cmake -B build -DBUILD_APP_TESTS=${{ env.BUILD_APP_TESTS }}
cmake -B build \
-DBUILD_APP_TESTS=${{ env.BUILD_APP_TESTS }} \
-DENABLE_IPC=OFF
cmake --build build -j$(nproc)

- name: Save Ccache cache
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ jobs:
run: |
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_APP_TESTS=${{ env.BUILD_APP_TESTS }}
-DBUILD_APP_TESTS=${{ env.BUILD_APP_TESTS }} \
-DENABLE_IPC=OFF

- name: Build
run: cmake --build build --parallel
Expand Down
168 changes: 168 additions & 0 deletions .github/workflows/depends-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
# Copyright (c) 2026 The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.

name: Depends Build

on:
pull_request:
push:
branches:
- "**"
tags-ignore:
- "**"
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
build:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
timeout-minutes: 360
strategy:
fail-fast: false
matrix:
include:
- name: linux-x86_64
os: ubuntu-24.04
host: x86_64-pc-linux-gnu
make: make
cache-id: linux-x86_64
- name: macos-native
os: macos-15
host: ""
make: gmake
cache-id: macos-15-native

env:
BUILD_DIR: build-depends
DEPENDS_PATCH: patches/depends-Add-Qt-Qml-and-Qt-Quick-modules.patch

steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive

- name: Install Linux build dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y \
bison \
build-essential \
cmake \
curl \
make \
ninja-build \
patch \
pkgconf \
python3 \
xz-utils
echo "JOBS=$(nproc)" >> "$GITHUB_ENV"

- name: Install macOS build dependencies
if: runner.os == 'macOS'
run: |
brew install bison cmake make ninja pkgconf python
echo "$(brew --prefix bison)/bin" >> "$GITHUB_PATH"
echo "JOBS=$(sysctl -n hw.logicalcpu)" >> "$GITHUB_ENV"

- name: Select depends host
run: |
if [ -n "${{ matrix.host }}" ]; then
host="${{ matrix.host }}"
else
host="$(cd bitcoin/depends && ./config.guess)"
fi
host="$(cd bitcoin/depends && ./config.sub "$host")"
echo "HOST=${host}" >> "$GITHUB_ENV"
echo "Using depends host: ${host}"

- name: Apply Bitcoin depends patch
run: |
if [ ! -f "${DEPENDS_PATCH}" ]; then
echo "::error::Missing ${DEPENDS_PATCH}"
exit 1
fi

patch="../${DEPENDS_PATCH}"
if git -C bitcoin apply --whitespace=nowarn --reverse --check "${patch}" >/dev/null 2>&1; then
echo "${DEPENDS_PATCH} is already applied"
else
git -C bitcoin apply --whitespace=nowarn --check "${patch}"
git -C bitcoin apply --whitespace=nowarn "${patch}"
fi

- name: Restore depends sources cache
uses: actions/cache/restore@v4
id: depends-sources-cache
with:
path: bitcoin/depends/sources
key: ${{ matrix.cache-id }}-depends-sources-${{ hashFiles('bitcoin/depends/packages/*.mk', 'bitcoin/depends/patches/**', 'patches/*.patch') }}
restore-keys: |
${{ matrix.cache-id }}-depends-sources-

- name: Restore depends package cache
uses: actions/cache/restore@v4
id: depends-built-cache
with:
path: bitcoin/depends/built
key: ${{ matrix.cache-id }}-depends-built-${{ hashFiles('bitcoin/depends/Makefile', 'bitcoin/depends/funcs.mk', 'bitcoin/depends/builders/**', 'bitcoin/depends/hosts/**', 'bitcoin/depends/packages/*.mk', 'bitcoin/depends/patches/**', 'patches/*.patch') }}
restore-keys: |
${{ matrix.cache-id }}-depends-built-

- name: Build depends
run: |
cd bitcoin/depends
${{ matrix.make }} -j"${JOBS}" HOST="${HOST}" DEBUG= LOG=1

- name: Save depends sources cache
uses: actions/cache/save@v4
if: github.event_name != 'pull_request' && steps.depends-sources-cache.outputs.cache-hit != 'true'
with:
path: bitcoin/depends/sources
key: ${{ steps.depends-sources-cache.outputs.cache-primary-key }}

- name: Save depends package cache
uses: actions/cache/save@v4
if: github.event_name != 'pull_request' && steps.depends-built-cache.outputs.cache-hit != 'true'
with:
path: bitcoin/depends/built
key: ${{ steps.depends-built-cache.outputs.cache-primary-key }}

- name: Configure
run: |
test -f "bitcoin/depends/${HOST}/toolchain.cmake"
cmake -S . -B "${BUILD_DIR}" -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE="${PWD}/bitcoin/depends/${HOST}/toolchain.cmake" \
-DBUILD_APP_TESTS=OFF \
-DBUILD_GUI=ON \
-DENABLE_WALLET=ON \
-DENABLE_IPC=OFF

- name: Build bitcoin-core-app
run: |
cmake --build "${BUILD_DIR}" --target bitcoin-core-app --parallel "${JOBS}"

- name: Upload depends logs
uses: actions/upload-artifact@v4
if: failure()
with:
name: depends-logs-${{ matrix.cache-id }}
path: bitcoin/depends/*.log
if-no-files-found: ignore

- name: Upload app artifact
uses: actions/upload-artifact@v4
with:
name: bitcoin-core-app-${{ matrix.cache-id }}
path: ${{ env.BUILD_DIR }}/bin/bitcoin-core-app
if-no-files-found: error
3 changes: 2 additions & 1 deletion .github/workflows/gui-functional-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,8 @@ jobs:
cmake -B build \
-DBUILD_APP_TESTS=OFF \
-DENABLE_TEST_AUTOMATION=ON \
-DBUILD_DAEMON=ON
-DBUILD_DAEMON=ON \
-DENABLE_IPC=OFF

- name: Build
run: |
Expand Down
25 changes: 9 additions & 16 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -129,30 +129,22 @@ qt6_add_resources(bitcoinqml "qml_gui_translations"
)

# Embed bitcoin-qt translations built by the bitcoin submodule.
# The submodule (BUILD_GUI=ON) compiles .ts → .qm files into
# ${CMAKE_BINARY_DIR}/bitcoin/src/qt/locale/ at build time.
# We mark each file as GENERATED so CMake does not require it to exist
# at configure time, and add a dependency on the bitcoin-qt target so
# the .qm files are built before the resource compiler runs.
set(BITCOIN_LOCALE_TAGS
am ar ast_ES ay az@latin az be bg bn br bs ca cmn cs cy da
de_AT de_CH de el en eo es_CL es_CO es_DO es es_SV es_VE et eu
fa fil fi fo fr_CM fr_LU fr ga_IE ga gd gl_ES gl gu hak ha he hi
hr hu id is it ja ka kk@latin kk kl km kn ko ku_IQ ku ky la lb
lt lv mg mi mk ml mn mr_IN mr ms mt my nb ne nl no or pam pa pl
ps pt_BR pt ro ru sa sc sd si sk sl sm sn so sq
sr@ijekavianlatin sr@latin sr sv sw szl ta te th tk tl tn tr ug uk ur
uz@Cyrl uz@Latn uz ve vi yi yo yue zh_CN zh-Hans zh-Hant zh_HK zh zh_TW zu
)
# The submodule (BUILD_GUI=ON) compiles .ts -> .qm files into
# ${CMAKE_BINARY_DIR}/bitcoin/src/qt/locale/ at build time. Derive the
# embedded list from the submodule's current source list so Core translation
# additions/removals do not leave stale resource inputs behind.
include("${CMAKE_CURRENT_SOURCE_DIR}/bitcoin/src/qt/locale/ts_files.cmake")
set(BITCOIN_QT_QM_FILES)
foreach(tag IN LISTS BITCOIN_LOCALE_TAGS)
foreach(ts_file IN LISTS ts_files)
string(REGEX REPLACE "^bitcoin_(.+)\\.ts$" "\\1" tag "${ts_file}")
set(qm_file "${CMAKE_BINARY_DIR}/bitcoin/src/qt/locale/bitcoin_${tag}.qm")
set_source_files_properties(${qm_file} PROPERTIES
GENERATED TRUE
QT_RESOURCE_ALIAS "bitcoin_${tag}.qm"
)
list(APPEND BITCOIN_QT_QM_FILES ${qm_file})
endforeach()
unset(ts_files)
qt6_add_resources(bitcoinqml "bitcoin_qt_translations"
PREFIX "/translations"
FILES ${BITCOIN_QT_QM_FILES}
Expand Down Expand Up @@ -180,6 +172,7 @@ target_link_libraries(bitcoin-core-app
bitcoinqml
bitcoinqt
)
qt6_import_qml_plugins(bitcoin-core-app)

option(BUILD_APP_TESTS "Build unit tests for the app" ON)
if(BUILD_APP_TESTS)
Expand Down
2 changes: 1 addition & 1 deletion bitcoin
Submodule bitcoin updated 1979 files
Loading
Loading