Commit graph

117 commits

Author SHA1 Message Date
ivanlele
eef25fd42f
Merge 28dec6c5f8 into merged_master (Bitcoin PR bitcoin/bitcoin#31268) 2026-04-16 11:00:57 +00:00
Tom Trevethan
a1a5adee04 Merge 06b9236f43 into merged_master (Bitcoin PR bitcoin/bitcoin#31359) 2026-04-15 23:20:36 +01:00
Tom Trevethan
189a598a2a Merge 73e2ec1373 into merged_master (Bitcoin PR bitcoin/bitcoin#31844) 2026-04-15 22:53:42 +01:00
Tom Trevethan
245617c480 Merge 55cf39e4c5 into merged_master (Bitcoin PR bitcoin/bitcoin#31722) 2026-04-15 13:58:24 +01:00
Tom Trevethan
d1715bf4b5 Merge ede388d03d into merged_master (Bitcoin PR bitcoin/bitcoin#30911) 2026-04-15 13:50:47 +01:00
Tom Trevethan
0769cf8a98 Merge 0b6ed342b5 into merged_master (Bitcoin PR bitcoin/bitcoin#31711) 2026-04-15 13:41:27 +01:00
Tom Trevethan
c1c9b145b7 Merge a44ccedcc2 into merged_master (Bitcoin PR bitcoin/bitcoin#31818) 2026-04-15 13:41:13 +01:00
ikripaka
be7caa853a
Merge 8fc7140846 into merged_master (Bitcoin PR bitcoin/bitcoin#31671) 2026-04-10 11:28:50 +00:00
ivanlele
2fa9dc38d2
Merge 4036ee3f2b into merged_master (Bitcoin PR bitcoin/bitcoin#31542) 2026-04-09 13:46:18 +00:00
ivanlele
af292df457
Merge eb2ebe6f30 into merged_master (Bitcoin PR bitcoin/bitcoin#31231) 2026-04-08 13:52:04 +00:00
ivanlele
a9df14c956
Merge 8d340be924 into merged_master (Bitcoin PR bitcoin/bitcoin#31181) 2026-04-03 08:14:04 +00:00
ivanlele
b766b3f8c8
Merge 19f277711e into merged_master (Bitcoin PR bitcoin/bitcoin#26593) 2026-04-02 15:08:15 +00:00
ivanlele
cbad0e0ef9
Merge 45e2f8f87d into merged_master (Bitcoin PR bitcoin/bitcoin#31173) 2026-04-02 13:24:37 +00:00
ivanlele
9decd13df6
Merge 85224f92d5 into merged_master (Bitcoin PR bitcoin/bitcoin#30811) 2026-04-02 12:40:02 +00:00
Tom Trevethan
bb2657cc2d Merge dc97e7f6db into merged_master (Bitcoin PR bitcoin/bitcoin#30903) 2026-04-01 23:02:28 +01:00
Tom Trevethan
030ab66c70 Merge 54c4b09f08 into merged_master (Bitcoin PR bitcoin/bitcoin#31042) 2026-04-01 22:41:52 +01:00
Tom Trevethan
1244d0d5a3 Merge 6e21dedbf2 into merged_master (Bitcoin PR bitcoin/bitcoin#31130) 2026-04-01 13:36:19 +01:00
ivanlele
55dd6d547d
Merge 9f45062b9b into merged_master (Bitcoin PR bitcoin/bitcoin#30937) 2026-03-30 10:51:11 +00:00
ivanlele
8318484912
Merge ec58dfe8f7 into merged_master (Bitcoin PR bitcoin/bitcoin#31010) 2026-03-27 14:20:47 +00:00
ivanlele
1f6c8b929f
Merge c33eb2360e into merged_master (Bitcoin PR bitcoin/bitcoin#30043) 2026-03-27 11:35:17 +00:00
ivanlele
e8b733a7b2
Merge 2a0949f097 into merged_master (Bitcoin PR bitcoin/bitcoin#30888) 2026-03-26 14:03:13 +00:00
ivanlele
e20f63d245
Merge 07c7c96022 into merged_master (Bitcoin PR bitcoin/bitcoin#30883) 2026-03-25 16:54:59 +00:00
ivanlele
1259c13ba5
Merge db8350b0e3 into merged_master (Bitcoin PR bitcoin/bitcoin#30803) 2026-03-25 15:32:18 +00:00
ivanlele
55ee06f0d9
Merge a86e7a476d into merged_master (Bitcoin PR bitcoin/bitcoin#30838) 2026-03-25 14:55:09 +00:00
ivanlele
165fefb6e4
Merge 155963768a into merged_master (Bitcoin PR bitcoin/bitcoin#30842) 2026-03-25 14:16:12 +00:00
ivanlele
7c12a0a5b0
Merge ba84c2774d into merged_master (Bitcoin PR bitcoin/bitcoin#30823) 2026-03-25 11:42:36 +00:00
ivanlele
4fcd6f4927
Merge c3af4b1ec3 into merged_master (Bitcoin PR bitcoin/bitcoin#30822) 2026-03-25 10:02:16 +00:00
ivanlele
0501efa402
Merge 6852d1d487 into merged_master (Bitcoin PR bitcoin/bitcoin#30796) 2026-03-25 09:34:43 +00:00
ivanlele
b1b308f6e7
Merge fa05ee0517 into merged_master (Bitcoin PR bitcoin/bitcoin#30772) 2026-03-25 09:28:30 +00:00
ivanlele
c9b157ccbf
Merge ab317ad2ef into merged_master (Bitcoin PR bitcoin/bitcoin#30804) 2026-03-24 14:35:57 +00:00
ivanlele
26176c3cd4
Migrate elements build to Cmake 2026-03-24 11:11:11 +00:00
merge-script
28dec6c5f8
Merge bitcoin/bitcoin#31268: cmake: add optional source files to bitcoin_crypto and crc32c directly
9cf746d663 cmake: add optional source files to crc32c directly (Daniel Pfeifer)
9c7823c5b5 cmake: add optional source files to bitcoin_crypto directly (Daniel Pfeifer)

Pull request description:

  Avoid having many static libraries by adding the optional sources to the target `bitcoin_crypto` directly.
  Set the necessary compile options at the source file level, rather than the target level.

  fixes: #31697

ACKs for top commit:
  s373nZ:
    ACK 9cf746d663
  hebasto:
    re-ACK 9cf746d663.
  TheCharlatan:
    ACK 9cf746d663

Tree-SHA512: 04b468ccbd284d63fc83b382177bb8183b325369835c3b92e555e159955c73d71712a63a2e556f8da68a1232ac07d3845e11f1057c50666843db91db98fca979
2025-02-18 12:08:51 +00:00
merge-script
06b9236f43
Merge bitcoin/bitcoin#31359: cmake: Add CheckLinkerSupportsPIE module
81c174e318 cmake: Refer to the configure log instead of printing PIE test error (Hennadii Stepanov)
65a0920ca6 cmake: Add `CheckLinkerSupportsPIE` module (Hennadii Stepanov)

Pull request description:

  This new module is a wrapper around CMake's `CheckPIESupported` module that fixes an upstream bug.

  See: https://gitlab.kitware.com/cmake/cmake/-/issues/26463.

  Fixes https://github.com/bitcoin/bitcoin/issues/30771.

ACKs for top commit:
  theuni:
    utACK 81c174e318.
  vasild:
    ACK 81c174e318

Tree-SHA512: 77d7022238551a4e69c59d1fe6b78975bb552cbbed5339459853d7ebf0086813036081f464fed230be330b3bd7d6cf8590b536b064028d2f786d6ae40f342f95
2025-02-14 18:02:35 +01:00
merge-script
73e2ec1373
Merge bitcoin/bitcoin#31844: cmake: add a component for each binary
9b033bebb1 cmake: rename Kernel component to bitcoinkernel for consistency (Cory Fields)
2e0c92558e cmake: add and use install_binary_component (Cory Fields)
0264c5d86c cmake: use per-target components for bitcoin-qt and bitcoin-gui (Cory Fields)
fb0546b1c5 ci: don't try to install for a fuzz build (Cory Fields)

Pull request description:

  This makes it possible to build/install only the desired binaries regardless of the configuration.
  For consistency, the component names match the binary names. `Kernel` and `GUI` have been renamed.

  Additionally it fixes #31762 by installing only the manpages for the configured targets (and includes them in the component installs for each).

  Also fixes #31745.

  Alternative to #31765 which is (imo) more correct/thorough.

  Can be tested using (for ex):
  ```bash
  $ cmake -B build
  $ cmake --build build -t bitcoind -t bitcoin-cli
  $ cmake --install build --component bitcoind
  $ cmake --install build --component bitcoin-cli
  ```

ACKs for top commit:
  hebasto:
    ACK 9b033bebb1.
  TheCharlatan:
    Re-ACK 9b033bebb1
  stickies-v:
    re-ACK 9b033bebb1

Tree-SHA512: fd4818e76f190dbeafbf0c246b466f829771902c9d6d7111ed917093b811c8a5536a4a45e20708f73e7f581d6cb77c8e61cfa69e065788dcf0886792f553a355
2025-02-14 14:19:12 +01:00
Cory Fields
2e0c92558e cmake: add and use install_binary_component
Add a separate component for each binary for fine-grained installation options.

Also install the man pages for only for the targets enabled.
2025-02-13 18:14:41 +00:00
merge-script
55cf39e4c5
Merge bitcoin/bitcoin#31722: cmake: Copy cov_tool_wrapper.sh.in to the build tree
e3c0152769 cmake: Copy `cov_tool_wrapper.sh.in` to the build tree (Hennadii Stepanov)

Pull request description:

  This PR ensures that `cov_tool_wrapper.sh.in` is available when invoking the `Coverage.cmake` script from any directory.

  Here is an example of usage on Ubuntu 24.10 with the default GCC 14.2.0:
  ```
  $ cmake -B build -DCMAKE_BUILD_TYPE=Coverage -DCMAKE_CXX_FLAGS="-fprofile-update=atomic" -DCMAKE_C_FLAGS="-fprofile-update=atomic"
  $ cmake --build build -j $(nproc)
  $ cd ..
  $ cmake -DJOBS=$(nproc) -DLCOV_OPTS="--ignore-errors inconsistent,inconsistent" -P bitcoin/build/Coverage.cmake
  ```

  Fixes https://github.com/bitcoin/bitcoin/issues/31638.

ACKs for top commit:
  theuni:
    utACK e3c0152769

Tree-SHA512: ccfc8e893567f199d9b05ea3916cac06fca89c5892cc7492d5251c331c35408222fd918ed08017515e2dfca10970ae3f633b3917bfb7037db539559e71d7f711
2025-02-13 10:34:28 +01:00
merge-script
ede388d03d
Merge bitcoin/bitcoin#30911: build: simplify by flattening the dependency graph
12fa9511b5 build: simplify dependency graph (Cory Fields)
c4e498300c build: avoid unnecessary dependencies on generated headers (Cory Fields)

Pull request description:

  These changes speed up my build (default config/options/targets) by roughly 10%. I suspect the difference may be more significant in other build configs.

  Before:
  > $ time cmake --build build -j24
  > real3m26.932s

  After:
  > $ time cmake --build build -j24
  > real3m7.556s

  Generally they allow for jobservers (either `make -jX` or `ninja`) to be better utilized. This can be verified using `top` while building and looking at the number of compiles running at any given time before/after these changes. Before, it's easy to observe periods of stalling when only one or two compiles are happening. After these changes, the compiler process count should mostly match the number of jobs given (`-jX`) until it falls off at the end.

  ---

  The first commit sets [DEPENDS_EXPLICIT_ONLY](https://cmake.org/cmake/help/latest/command/add_custom_command.html#command:add_custom_command) for commands which generate our test header files. Without this option, `test_bitcoin`'s generated headers won't be built until all of its other dependencies have been built. This introduces a significant stall in the build, though currently only Ninja benefits from this being set, and only CMake >= 3.27 understands it.

  Example from a generated `build.ninja`:

  Before:

  > \# Custom command for src/test/data/base58_encode_decode.json.h
  >
  > build src/test/data/base58_encode_decode.json.h | ${cmake_ninja_workdir}src/test/data/base58_encode_decode.json.h: CUSTOM_COMMAND /home/cory/dev/bitcoin/src/test/data/base58_encode_decode.json /home/cory/dev/bitcoin/cmake/script/GenerateHeaderFromJson.cmake || libcrc32c.a libcrc32c_sse42.a libleveldb.a libminisketch.a minisketch_clmul src/bitcoin_clientversion src/crypto/libbitcoin_crypto.a src/crypto/libbitcoin_crypto_avx2.a src/crypto/libbitcoin_crypto_sse41.a src/crypto/libbitcoin_crypto_x86_shani.a src/generate_build_info src/libbitcoin_cli.a src/libbitcoin_common.a src/libbitcoin_consensus.a src/libbitcoin_node.a src/secp256k1/src/libsecp256k1.a src/secp256k1/src/secp256k1_precomputed src/test/util/libtest_util.a src/univalue/libunivalue.a src/util/libbitcoin_util.a src/wallet/libbitcoin_wallet.a src/zmq/libbitcoin_zmq.a

  After:

  > \# Custom command for src/test/data/base58_encode_decode.json.h
  >
  > build src/test/data/base58_encode_decode.json.h | ${cmake_ninja_workdir}src/test/data/base58_encode_decode.json.h: CUSTOM_COMMAND /home/cory/dev/bitcoin/src/test/data/base58_encode_decode.json /home/cory/dev/bitcoin/cmake/script/GenerateHeaderFromJson.cmake

  ---

  The second commit is more significant. It sets [CMAKE_OPTIMIZE_DEPENDENCIES](https://cmake.org/cmake/help/latest/prop_tgt/OPTIMIZE_DEPENDENCIES.html) globally, which allows the objects of static libs to be built in parallel when one lib depends on the other. This can be set as a per-lib property, ~but I don't see any need for that as we don't currently have any edge-cases where this wouldn't be ok. If those should arise, we could always disable on a per-lib basis~.

  Edit: turns out this triggers an [upstream bug](https://gitlab.kitware.com/cmake/cmake/-/issues/24058), which I guess can be considered an edge-case until fixed in CMake. I've added 2 per-lib opt-outs as a result.

  Example:

  Before:

  > \# Link the static library src/libbitcoin_cli.a
  >
  > build src/libbitcoin_cli.a: CXX_STATIC_LIBRARY_LINKER__bitcoin_cli_RelWithDebInfo src/CMakeFiles/bitcoin_cli.dir/compat/stdin.cpp.o src/CMakeFiles/bitcoin_cli.dir/rpc/client.cpp.o || src/univalue/libunivalue.a

  After:

  > \# Link the static library src/libbitcoin_cli.a
  >
  > build src/libbitcoin_cli.a: CXX_STATIC_LIBRARY_LINKER__bitcoin_cli_RelWithDebInfo src/CMakeFiles/bitcoin_cli.dir/compat/stdin.cpp.o src/CMakeFiles/bitcoin_cli.dir/rpc/client.cpp.o
  >

ACKs for top commit:
  l0rinc:
    utACK 12fa9511b5
  hebasto:
    ACK 12fa9511b5.

Tree-SHA512: f85f507e70cdc06acd07542161d9f9b8edf9ba866f08c8ef17aaaed770fa11530a27521c4413456d863463a6e77d4d6983fa623a64e17bbd602c2bc70aacc112
2025-02-12 16:02:57 +01:00
merge-script
0b6ed342b5
Merge bitcoin/bitcoin#31711: build: set build type and per-build-type flags as early as possible
56a9b847bb build: set build type and per-build-type flags as early as possible (Cory Fields)
f605f7a9c2 build: refactor: set debug definitions in main CMakeLists (Cory Fields)

Pull request description:

  This ensures that most compiler tests are not run with the wrong build type's flags. The initial c++ checks are an exception to that because many internal CMake variables are unset until a language is selected, so it's problematic to change our build type before that.

  The difference can be seen in `build/CMakeFiles/CMakeConfigureLog.yaml`. Before, `Debug` was used for many of the earlly checks. After this PR, it's only the first 2 checks.

ACKs for top commit:
  hebasto:
    ACK 56a9b847bb.

Tree-SHA512: 87947352d6d4fd08554515822cb13634ed3be33fcda2af817c22ef943b1d0856ceb39311ddc01b8221397528fdc09f630dc7e74fc92f5a4a073f09c4ae493596
2025-02-12 10:41:25 +01:00
Cory Fields
0264c5d86c cmake: use per-target components for bitcoin-qt and bitcoin-gui
This makes the usage consistent with the next commit, which will add a
per-target component for each binary.
2025-02-11 22:52:58 +00:00
Cory Fields
56a9b847bb build: set build type and per-build-type flags as early as possible
With the exception of the first c++ checks, this ensures that compiler tests
are never run with the wrong build type's flags.

Co-Authored-By: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com>
2025-02-10 21:51:22 +00:00
fanquake
76c090145e
guix: remove test-security/symbol-check scripts
These scripts are becoming more of nuisance, than a value-add;
particularly since we've been building releases using Guix. Adding new
(release bin) tests can be harder, because it requires constructing a
failing test, which is becoming less easy e.g trying to disable a
feature or protection that has been built into the compiler/toolchain by
default.

In the pre-Guix days, these were valuable to sanity-check the environment,
because we were pulling that pre-built from Ubuntu, with little control.
At this point, it's less clear what these scripts are (sanity) checking.

Note that these also weren't completely ported to CMake (#31698), see
also #31715 which contains other fixes that would be needed for these
test-tests, to accomodate future changes.
2025-02-10 11:12:33 +01:00
Daniel Pfeifer
9cf746d663
cmake: add optional source files to crc32c directly 2025-02-07 09:11:45 +01:00
Cory Fields
f605f7a9c2 build: refactor: set debug definitions in main CMakeLists
No functional change. This is a simple move required the next commit.
2025-02-06 20:21:37 +00:00
Cory Fields
12fa9511b5 build: simplify dependency graph
Allow the objects of static libs to be built in parallel rather than serially
based on their dependency ordering.

For more detail, see:
https://cmake.org/cmake/help/latest/prop_tgt/OPTIMIZE_DEPENDENCIES.html
2025-01-31 15:07:44 +00:00
Cory Fields
c4e498300c build: avoid unnecessary dependencies on generated headers
This prevents the generation of these headers from also depending on the
dependencies of the libs/binaries which consume them.

Specifically, this prevents generated test headers (such as
test/data/base58_encode_decode.json.h) from depending on the
dependencies of test_bitcoin (libcrc32c.a libcrc32c_sse42.a libleveldb.a)

Note that this is currently only relevant for Ninja.

For more detail, see:
https://cmake.org/cmake/help/latest/command/add_custom_command.html
2025-01-31 15:07:23 +00:00
Hennadii Stepanov
81c174e318
cmake: Refer to the configure log instead of printing PIE test error
This change improves the user experience on systems where the toolchain
does not support PIE.
2025-01-23 15:38:36 +00:00
Hennadii Stepanov
e3c0152769
cmake: Copy cov_tool_wrapper.sh.in to the build tree
This change ensures that `cov_tool_wrapper.sh.in` is available when
invoking the `Coverage.cmake` script from any directory.
2025-01-23 10:00:58 +00:00
fanquake
910a11fa66
build: remove LEVELDB_IS_BIG_ENDIAN 2025-01-16 11:10:23 +00:00
Hennadii Stepanov
65a0920ca6
cmake: Add CheckLinkerSupportsPIE module
This new module serves as a wrapper around CMake's `CheckPIESupported`
module and addresses an upstream bug:
- https://gitlab.kitware.com/cmake/cmake/-/issues/26463
- https://gitlab.kitware.com/cmake/cmake/-/merge_requests/10034
2025-01-15 16:09:16 +00:00
Lőrinc
63b6b638aa build: Use character literals for generated headers to avoid narrowing
Use character literals instead of integer hex values (i.e. `'\x5b','\x0a', ...` instead of `0x5b, 0x0a, ...`) for generated headers.
This avoids C++11 narrowing warnings in a more concise way than using explicit char casts.

Extra whitespace is also removed between elements for brevity.
2024-12-20 14:37:31 +01:00