Commit Graph

971 Commits

Author SHA1 Message Date
Luke Dashjr
84b7c6adf4 Merge rm_kernel_lib 2025-03-05 03:27:08 +00:00
Luke Dashjr
86c5ef3785 Merge 28564 via fix_conf_fuzzbin_main 2025-03-05 03:27:08 +00:00
Luke Dashjr
301886f3d0 Merge 29868 via hww_windows-28 2025-03-05 03:27:08 +00:00
Luke Dashjr
da1e5f9ffa Merge 18427 via 2020mingwthrd-mini 2025-03-05 03:27:08 +00:00
Luke Dashjr
45a2e5951c Merge nowarn_unused-function 2025-03-05 03:27:08 +00:00
Luke Dashjr
ad6a12d7bb Merge nowarn_unreachable-code 2025-03-05 03:27:08 +00:00
Luke Dashjr
22df203e4c Merge 13789 via bugfix_asm_pragmas 2025-03-05 03:27:08 +00:00
Luke Dashjr
3d44110252 Merge 5416 via sys_libsecp256k1 2025-03-05 03:27:08 +00:00
Luke Dashjr
91af8d0c4e Merge 2241 via sys_leveldb 2025-03-05 03:27:08 +00:00
Luke Dashjr
eb4575a9de CI: Disable libbitcoinkernel (not supported by Knots) 2025-02-28 04:55:33 +00:00
Luke Dashjr
8a4e129845 Diff-minimise 2025-02-25 18:40:17 +00:00
Hennadii Stepanov
8c8249b545 build: Re-enable external signer support for Windows
Github-Pull: #29868
Rebased-From: 944717a08a99b750f27a0a81512b3cac92d39923
2025-02-25 18:40:17 +00:00
Luke Dashjr
2011d6f969 configure: Never error for unused-function warnings 2025-02-21 15:25:57 +00:00
Luke Dashjr
ed77ceddd8 Revert "build: Enable -Wunreachable-code"
This partially reverts commit fa8adbe7c1.
2025-02-17 02:40:35 +00:00
Ava Chow
6a68ef9bfb build: bump to 28.1 2025-01-02 20:53:02 +01:00
Ava Chow
e0b27b234c build: Bump to 28.1rc2 2024-12-13 21:16:24 -05:00
fanquake
df7764621e
build: bump version to 28.1rc1 2024-12-02 14:20:15 +00:00
Ava Chow
5feef9ce7e
build: Bump to 28.0 2024-09-25 14:34:29 -04:00
Ava Chow
5315886bf5
build: Bump to 28.0rc2 2024-09-16 23:10:18 -04:00
Luke Dashjr
b84b22188c Explicitly enable SHA4.1 via pragma for sha_x86_shani which needs it 2024-08-28 20:56:46 +00:00
Luke Dashjr
4684e2971d configure: Check that libsecp256k1 is new enough and error clearly if not 2024-08-28 18:02:41 +00:00
Luke Dashjr
318c850e87 configure: Add unsupported --with-system-libsecp256k1 configure flag 2024-08-28 18:02:36 +00:00
Luke Dashjr
2080d467fa configure: Add unsupported --with-system-leveldb configure flag 2024-08-28 17:39:48 +00:00
Ava Chow
6974e30bdd build: Bump to 28.0rc1 2024-08-27 13:16:06 -04:00
Ava Chow
f5cf43bb91 build: Bump to 28.99 2024-08-26 15:12:58 -04:00
merge-script
d7333ece15
Merge bitcoin/bitcoin#30590: build: Remove unused visibility checks
bbcba09cd5 build: remove check for __declspec(dllexport) (fanquake)
37c9abdc43 build: remove check for __attribute__((visibility.. (fanquake)

Pull request description:

  These are unused (since libbitcoinconsensus / #29648), and the current CMake port doesn't quite match behaviour, such that there's no real point in doing the check. So rather than port anything, just remove it. If these are needed again in future (i.e for kernel or similar), they can be revisted, and it might be the case that build-system level checks will not be wanted.

ACKs for top commit:
  hebasto:
    ACK bbcba09cd5. I've verified that neither `HAVE_DEFAULT_VISIBILITY_ATTRIBUTE` nor `HAVE_DLLEXPORT_ATTRIBUTE` are used or evaluated in the current codebase.
  TheCharlatan:
    ACK bbcba09cd5
  willcl-ark:
    ACK bbcba09cd5

Tree-SHA512: 332f018c50a159d2cbfd2f9ce018538fa11cf06a94e27ed42146945b86645af5881095df39cadd2f775a8ae348ebfc949d54f7eb4b62264bf48119c9f9952c20
2024-08-06 17:44:43 +01:00
fanquake
bbcba09cd5
build: remove check for __declspec(dllexport) 2024-08-05 14:54:56 +01:00
fanquake
37c9abdc43
build: remove check for __attribute__((visibility.. 2024-08-05 14:54:55 +01:00
fanquake
9ec776adff
Revert "build: pass --with-ecmult-gen-kb=86 to secp256k1"
This reverts commit a057869aa3.
2024-08-02 11:33:07 +01:00
merge-script
3679fa167f
Merge bitcoin/bitcoin#28893: Fix SSE4.1-related issues
d440f13db0 crypto: Guard code with `ENABLE_SSE41` macro (Hennadii Stepanov)
6ec1ca7c85 build: Fix test for SSE4.1 intrinsics (Hennadii Stepanov)

Pull request description:

  1. Fix the test for SSE4.1 intrinsics during build system configuration, which currently can be false positive, for example, when `CXXFLAGS="-mno-sse4.1"` provided.

  This PR fixes the test by adding the `_mm_blend_epi16` SSE4.1 function used in our codebase.

  2. Guard `sha_x86_shani.cpp` code with `ENABLE_SSE41` macro as it uses the `_mm_blend_epi16` function from
  the SSE4.1 instruction set.

  It is possible that SHA-NI is enabled even when SSE4.1 is disabled, which causes compile errors in the master branch.

  Closes https://github.com/bitcoin/bitcoin/issues/28864.

ACKs for top commit:
  sipa:
    utACK d440f13db0
  willcl-ark:
    tACK d440f13db0
  theuni:
    utACK d440f13db0

Tree-SHA512: a6e1e8c94e1b94874ff51846815ef445e6135cbdb01b08eb695b3548115f2340dd835ebe53673ae46a553fe6be4815e68d8642c34235dd7af5106c4b7c9ea6f3
2024-07-17 16:58:54 +01:00
merge-script
24dffdde7b
Merge bitcoin/bitcoin#29072: build: use -no_exported_symbols on macOS
81d4dc8e87 build: use -no_exported_symbols on macOS (fanquake)

Pull request description:

  This reduces the size of the binary by ~1% when building with `--enable-reduce-exports`.

  > -no_exported_symbols
  > Useful for main executable that don't have plugins and thus need no symbol exports.

  Can be tested with `dyld_info -exports src/bitcoind`. The only exported symbol should be `__mh_execute_header`.

ACKs for top commit:
  theuni:
    utACK 81d4dc8e87
  hebasto:
    ACK 81d4dc8e87.

Tree-SHA512: ae46065a05d190753ba807943c0734a06cfe6d2cf9eaf3c3aa93250bf8639da8bc53b81c6b0390e6d572a74c6bb31a695f8c5924810bfa358a3c9b08caff03f7
2024-07-16 15:49:12 +01:00
merge-script
d3d2bbf576
Merge bitcoin/bitcoin#30327: build: Drop redundant sys/sysctl.h header check
c0b5ea5901 build: Drop redundant `sys/sysctl.h` header check (Hennadii Stepanov)

Pull request description:

  The `AC_CHECK_HEADERS` macro defines `HAVE_SYS_SYSCTL_H` if the `sys/sysctl.h` header is found. However, in the source code, this header is guarded by `HAVE_SYSCTL` and `HAVE_SYSCTL_ARND` macros, which have their own checks. Since `HAVE_SYS_SYSCTL_H` is not used, we can skip the `AC_CHECK_HEADERS(... sys/sysctl.h ...)` check.

ACKs for top commit:
  laanwj:
    ACK c0b5ea5901
  fanquake:
    ACK c0b5ea5901 - we could got the other way, and add nested #defs, but that doesn't seem worthwhile.

Tree-SHA512: 73bc4bbfc5c457cd2c38e40f8e57d2a70c06ef661d76d4148d683d262be45b9405b8cda1958ac611c312ca7d9e2f9624cf2cac1b61f1008af0856875c62f0eac
2024-06-26 15:25:46 +01:00
Hennadii Stepanov
c0b5ea5901
build: Drop redundant sys/sysctl.h header check
The `AC_CHECK_HEADERS` macro defines `HAVE_SYS_SYSCTL_H` if the
`sys/sysctl.h` header is found. However, in the source code, this header
is guarded by `HAVE_SYSCTL` and `HAVE_SYSCTL_ARND` macros, which have
their own checks. Since `HAVE_SYS_SYSCTL_H` is not used, we can skip the
`AC_CHECK_HEADERS(... sys/sysctl.h ...)` check.
2024-06-24 14:28:23 +01:00
fanquake
e3dc64f499
build: add -Wundef
"Warn if an undefined identifier is evaluated in an #if directive. Such
identifiers are replaced with zero."
2024-06-21 09:43:48 +01:00
Ryan Ofsky
79e197b175
build: Suppress warnings from boost and capnproto in multiprocess code
Without this change there are errors from boost like:

/ci_container_base/depends/i686-pc-linux-gnu/include/boost/signals2/expired_slot.hpp:23:28: error: 'what' overrides a member function but is not marked 'override' [-Werror,-Wsuggest-override]
/ci_container_base/depends/i686-pc-linux-gnu/include/boost/signals2/detail/signal_template.hpp:750:32: error: 'lock_pimpl' overrides a member function but is not marked 'override' [-Werror,-Wsuggest-override]
/ci_container_base/depends/i686-pc-linux-gnu/include/boost/signals2/connection.hpp:150:22: error: 'connected' overrides a member function but is not marked 'override' [-Werror,-Wsuggest-override]

There do not seem to be errors from capnproto currently, but add a suppression
for it, too, to be consistent with other libraries.
2024-06-21 09:42:32 +01:00
fanquake
81d4dc8e87
build: use -no_exported_symbols on macOS
This reduces the size of the binary by 2-3% when building with
`--enable-reduce-exports`.
2024-06-18 13:03:32 +01:00
merge-script
cad127235e
Merge bitcoin/bitcoin#30257: build: Remove --enable-gprof
fa780e1c25 build: Remove --enable-gprof (MarcoFalke)

Pull request description:

  It is unclear what benefit this option has, given that:

  * `gprof` requires re-compilation (`perf` and other tools can instead be used on existing executables)
  * `gprof` requires hardening to be disabled
  * `gprof` doesn't work with `clang`
  * `perf` is documented in the dev-notes, and test notes, and embedded into the functional test framework; `gprof` isn't
  * Anyone really wanting to use it could pass the required flags to `./configure`
  * I couldn't find any mention of the use of `gprof` in the discussions in this repo, apart from the initial pull request adding it (cfaac2a60f)
  * Keeping it means that it needs to be maintained and ported to CMake

  Fix all issues by removing it.

ACKs for top commit:
  TheCharlatan:
    ACK fa780e1c25
  hebasto:
    ACK fa780e1c25, I have reviewed the code and it looks OK.
  willcl-ark:
    crACK fa780e1c25

Tree-SHA512: 0a9ff363ac2bec8b743878a4e3147f18bc16823d00c5007568432c36320bd0199b13b6d0ce828a9a83c2cc434c058afaa64eb2eccfbd93ed85b81ce10c41760c
2024-06-10 12:01:19 +01:00
MarcoFalke
fa780e1c25
build: Remove --enable-gprof
This reverts cfaac2a60f
2024-06-09 22:45:29 +02:00
Cory Fields
15796d4b61 build: warn on self-assignment
Belt-and suspenders after #30234. Self-assignment should be safe _and_
discouraged.

We used to opt out of this warning because something deep in our
serialization/byteswapping code could self-assign, but that doesn't appear to
be the case anymore.
2024-06-06 14:14:34 +00:00
Cory Fields
c3a5e8a063 build: re-enable deprecated warning copy
This was disabled in #18738 due to the combo of old gcc and qt, neither of
which are relevant to us anymore.
2024-06-05 21:06:44 +00:00
fanquake
cbd4640ede
build: remove --enable-lcov-branch-coverage
This supports lcov 2.x in the sense that we are no-longer hardcoding
version specific options, and instead will use the `LCOV_OPTS` variable
(which is the more correct/flexible thing to do in any case). It's also
quite likely that devs are already having to pass extra options to lcov
2.x, given it's more stringent in terms of coverage generation and error
checking. See this thread for an example:
https://github.com/linux-test-project/lcov/issues/238.

Added an example to the developer notes.

Tested on one machine (LCOV 2.0, gcc 13.2) with:
```bash
./autogen.sh
./configure --enable-lcov CXXFLAGS="-fprofile-update=prefer-atomic" LCOV_OPTS="--rc branch_coverage=1 --ignore-errors mismatch"
make
make cov
<snip>
Processing file src/netaddress.cpp
  lines=521 hit=480 functions=72 hit=72 branches=675 hit=499
Overall coverage rate:
  lines......: 81.8% (79362 of 97002 lines)
  functions......: 77.8% (10356 of 13310 functions)
  branches......: 49.6% (130628 of 263196 branches)
```

and another machine (LCOV 2.1, Clang 18.1.3) with:
```bash
./autogen.sh
./configure --enable-lcov CC=clang CXX=clang++ LCOV_OPTS="--rc branch_coverage=1 --ignore-errors mismatch,inconsistent"
make
make cov
<snip>
Processing file src/util/strencodings.cpp
  lines=315 hit=311 functions=38 hit=38 branches=425 hit=357
Overall coverage rate:
  source files: 622
  lines.......: 79.8% (70311 of 88132 lines)
  functions...: 78.1% (13968 of 17881 functions)
  branches....: 44.5% (157551 of 354317 branches)
Message summary:
  101 warning messages:
    count: 1
    inconsistent: 100
  3528 ignore messages:
    inconsistent: 3528
```
2024-05-30 10:36:55 +01:00
merge-script
f61ede574c
Merge bitcoin/bitcoin#30049: build, test, doc: Temporarily remove Android-related stuff
5deb0b024e build, test, doc: Temporarily remove Android-related stuff (Hennadii Stepanov)

Pull request description:

  Previously, our Android builds were geared towards generating APKs, which relied on Qt. However, after migrating to C++20, compiling for Android became unfeasible due to Qt 5.15's compatibility limitations with NDK only up to r25, which includes an outdated embedded libc++ (see https://github.com/bitcoin/bitcoin/issues/29360).

  All removed stuff will be reinstated after migrating the build system to CMake and upgrading Qt to version 6.x.

  This PR makes possible a clean migration to the CMake-based build system as it removes code, which is not used at this moment.

ACKs for top commit:
  vasild:
    ACK 5deb0b024e
  fanquake:
    ACK 5deb0b024e - given none of this is currently tested/wont compile. Can be revisted in future.

Tree-SHA512: 3bc2ccfe881e11cc1d78c27acd6f1d86cfba86821ef3bb5eca2e80d978fdfa13659ec82284dcaadc507e2394524dea91d4b8f81d0030c1cef9708df8be76bf07
2024-05-30 09:25:42 +01:00
merge-script
0388dd702b
Merge bitcoin/bitcoin#30120: Update libsecp256k1 subtree to current master
a057869aa3 build: pass --with-ecmult-gen-kb=86 to secp256k1 (fanquake)
ca3d945dc6 Squashed 'src/secp256k1/' changes from d8311688bd..06bff6dec8 (fanquake)

Pull request description:

  This includes changes from the 0.5.0 release: https://github.com/bitcoin-core/secp256k1/releases/tag/v0.5.0

  > New function secp256k1_ec_pubkey_sort that sorts public keys using lexicographic (of compressed serialization) order.

  > The implementation of the point multiplication algorithm used for signing and public key generation was changed, resulting in improved performance for those operations.
  >    The related configure option --ecmult-gen-precision was replaced with --ecmult-gen-kb (ECMULT_GEN_KB for CMake).
  >    This changes the supported precomputed table sizes for these operations. The new supported sizes are 2 KiB, 22 KiB, or 86 KiB (while the old supported sizes were 32 KiB, 64 KiB, or 512 KiB).

ACKs for top commit:
  hebasto:
    ACK a057869aa3, I've got a zero diff with my local branch, which reproduces the subtree update, and `ecmult gen table size   = 86 KiB` in the configure summary.
  jonasnick:
    utACK a057869aa3

Tree-SHA512: 907012b0d7e0a6bd68b245c238e968f2318d8ac5de5ec9070245de8391c996eb5ec6428184d028f6f0f54d3b2f5a8292ad7081177e1c331397879505436dc38e
2024-05-22 08:50:42 +01:00
fanquake
17fe948cce
build: remove --enable-threadlocal 2024-05-21 10:29:51 +01:00
Hennadii Stepanov
5bba43312c
build: Enable thread_local for MinGW-w64 builds
The assumption in the commit 188ca75e5f
about the broken `thread_local` implementation in GCC was misguided
because the initial failure was not due to GCC, but a bug in the Wine
runtime, as evidenced, for example, here:
 - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=917307
 - https://bugs.freedesktop.org/show_bug.cgi?id=108662

Consequently, it is safe to re-enable `thread_local` support for
MinGW-w64 builds.
2024-05-21 10:27:42 +01:00
fanquake
a057869aa3
build: pass --with-ecmult-gen-kb=86 to secp256k1 2024-05-18 11:12:25 +08:00
Vasil Dimov
d35ba1b3f1
util: avoid using thread_local variable that has a destructor
Store the thread name in a `thread_local` variable of type `char[]`
instead of `std::string`. This avoids calling the destructor when
the thread exits. This is a workaround for
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=278701

For type-safety, return `std::string` from
`util::ThreadGetInternalName()` instead of `char[]`.

As a side effect of this change, we no longer store a reference
to a `thread_local` variable in `CLockLocation`. This was
dangerous because if the thread quits while the reference still
exists (in the global variable `lock_data`, see inside `GetLockData()`)
then the reference will become dangling.
2024-05-16 18:16:46 +02:00
Luke Dashjr
b228803dcf Bugfix: configure: Correct check for fuzz binary needing a main function 2024-05-15 17:50:53 +00:00
fanquake
7f5ac4520d
build: swap otool for (llvm-)objdump
Similar to libtool, (llvm-)otool only exists with a version suffix
on some systems (Ubuntu), which makes it annoying to use/find. Avoid
this, by switching to objdump. Which is a drop-in replacement.

This is related to #21778, and the switchover to using vanilla LLVM for
macOS.
2024-05-08 16:36:41 +08:00
Hennadii Stepanov
5deb0b024e
build, test, doc: Temporarily remove Android-related stuff
Previously, our Android builds were geared towards generating APKs,
which relied on Qt. However, after migrating to C++20, compiling for
Android became unfeasible due to Qt 5.15's compatibility limitations
with NDK only up to r25, which includes an outdated embedded libc++.

All removed stuff will be reinstated after migrating the build system to
CMake and upgrading Qt to version 6.x."
2024-05-06 11:29:14 +01:00