41051290abcmake: Ignore build subdirectories within source directory (Hennadii Stepanov)6ce50fd9d0doc: Update for CMake-based build system (Hennadii Stepanov)9730288a0cci: Migrate CI scripts to CMake (Hennadii Stepanov)c360837ca5cmake, lint: Adjust `lint_includes_build_config` (Hennadii Stepanov)3885441ee0cmake: Add presets for native Windows builds (Hennadii Stepanov)7681746b20cmake: Add vcpkg manifest file (Hennadii Stepanov)8b6f1c4353cmake: Add `Coverage` and `CoverageFuzz` scripts (Hennadii Stepanov)65bdbc1ff2cmake: Add `docs` build target (Hennadii Stepanov)fb75ebbc33cmake: Add compiler diagnostic flags (Hennadii Stepanov)e821f0a37acmake: Migrate Guix build scripts to CMake (Hennadii Stepanov)747adb6ffecmake: Add `Maintenance` module (Hennadii Stepanov)1f60b30df0cmake: Add `APPEND_{CPP,C,CXX,LD}FLAGS` cache variables (Hennadii Stepanov)2b43c45b13cmake: Add `AddWindowsResources` module (Hennadii Stepanov)973a3b0c5dcmake: Implement `install` build target (Hennadii Stepanov)84ac35cfd4cmake: Add cross-compiling support (Hennadii Stepanov)0d01c228a7build: Generate `toolchain.cmake` in depends (Hennadii Stepanov)91a799247ddepends: Add host-specific `cmake_system_version` variables (Hennadii Stepanov)9b31209b4cdepends: Rename `cmake_system` -> `cmake_system_name` (Hennadii Stepanov)4a5208a81dRevert "build, qt: Do not install *.prl files" (Hennadii Stepanov)6522af62afdepends: Amend handling flags environment variables (Hennadii Stepanov)90cec4d251cmake: Add `MULTIPROCESS` option (Hennadii Stepanov)bb1a450dcbcmake: Build `bitcoin-chainstate` executable (Hennadii Stepanov)aed38ea58ccmake: Build `bitcoinkernel` library (Hennadii Stepanov)975d67369bcmake: Build `test_bitcoin-qt` executable (Hennadii Stepanov)10fcc668a3cmake: Add `WITH_DBUS` option (Hennadii Stepanov)5bb5a4bc75cmake: Add `libqrencode` optional package support (Hennadii Stepanov)57a6e2ef4acmake: Build `bitcoin-qt` executable (Hennadii Stepanov)30f642952ccmake: Add `WERROR` option (Hennadii Stepanov)c98d4a4c34cmake: Add `REDUCE_EXPORTS` option (Hennadii Stepanov)a01cb6e63fcmake: Add `HARDENING` option (Hennadii Stepanov)a8a2e364accmake: Add Python-based tests (Hennadii Stepanov)3d85379570cmake: Add fuzzing options (Hennadii Stepanov)908530e312cmake: Add `SANITIZERS` option (Hennadii Stepanov)8bb0e85631cmake: Build `bench_bitcoin` executable (Hennadii Stepanov)801735163acmake: Add external signer support (Hennadii Stepanov)353e0c9e96cmake: Add `systemtap-sdt` optional package support (Hennadii Stepanov)d2fda82b49cmake: Add `libzmq` optional package support (Hennadii Stepanov)ae7b39a0e1cmake: Add `libminiupnpc` optional package support (Hennadii Stepanov)6480e1dcdbcmake: Add `libnatpmp` optional package support (Hennadii Stepanov)e73e9304a1cmake: Build `bitcoin-util` executable (Hennadii Stepanov)027c6d7caacmake: Build `bitcoin-tx` executable (Hennadii Stepanov)d10c5c34c3cmake: Add wallet functionality (Hennadii Stepanov)ab2e99b0d9cmake: Create test suite for `ctest` (Hennadii Stepanov)959370bd76cmake: Build `test_bitcoin` executable (Hennadii Stepanov)b27bf9700dcmake: Build `bitcoin-cli` executable (Hennadii Stepanov)a9813df826cmake: Build `bitcoind` executable (Hennadii Stepanov)97829ce2d5cmake: Add `FindLibevent` module (Hennadii Stepanov)3118e40c61cmake: Build `bitcoin_consensus` library (Hennadii Stepanov)809a2f1929cmake: Build `bitcoin_util` static library (Hennadii Stepanov)0a9a521a70cmake: Build `bitcoin_crypto` library (Hennadii Stepanov)958971f476cmake: Build `univalue` static library (Hennadii Stepanov)752747fda8cmake: Generate `obj/build.h` header (Hennadii Stepanov)1f0a78edf3cmake: Build `minisketch` static library (Hennadii Stepanov)12bfbc8154cmake: Build `leveldb` static library (Hennadii Stepanov)51985c5304cmake: Build `crc32c` static library (Hennadii Stepanov)db7a198f29cmake: Build `secp256k1` subtree (Hennadii Stepanov)dbb7ed14e8cmake: Add `ccache` support (Hennadii Stepanov)cedfdf6c72cmake: Redefine/adjust per-configuration flags (Hennadii Stepanov)b6b5e732c8cmake: Add global compiler and linker flags (Hennadii Stepanov)f98327931bcmake: Add `TryAppendLinkerFlag` module (Hennadii Stepanov)4a0af29697cmake: Add `TryAppendCXXFlags` module (Hennadii Stepanov)35cffc497dcmake: Add POSIX threads support (Hennadii Stepanov)fd72d00ffecmake: Add position independent code support (Hennadii Stepanov)07069e2bb0cmake: Add introspection module (Hennadii Stepanov)27d687fc1fcmake: Add `config/bitcoin-config.h` support (Hennadii Stepanov)fe5cdace5fcmake: Print compiler and linker flags in summary (Hennadii Stepanov)70683884c5cmake: Introduce interface libraries to encapsulate common flags (Hennadii Stepanov)a2317e27b7cmake: Add root `CMakeLists.txt` file (Hennadii Stepanov) Pull request description: This PR introduces a new CMake-based build system, which is a drop-in replacement for the current Autotools-based build system. ML announcement: https://groups.google.com/g/bitcoindev/c/hgKkfQWzrTo As discussed during the recent CoreDev meetup in April, the switch from Autotools to CMake is intended to happen as soon as possible after branching 28.x off, which means that 29.0 will be built using CMake. This PR branch is essentially the [staging branch](https://github.com/hebasto/bitcoin/tree/cmake-staging), with every change reviewed and tested by a group of contributors, including (in alphabetical order): - [**achow101**](https://github.com/achow101) - [**fanquake**](https://github.com/fanquake) - [**maflcko**](https://github.com/maflcko) - [**m3dwards**](https://github.com/m3dwards) - [**pablomartin4btc**](https://github.com/pablomartin4btc) - [**real-or-random**](https://github.com/real-or-random) - [**ryanofsky**](https://github.com/ryanofsky) - [**sipsorcery**](https://github.com/sipsorcery) - [**TheCharlatan**](https://github.com/TheCharlatan) - [**theStack**](https://github.com/theStack) - [**theuni**](https://github.com/theuni) - [**vasild**](https://github.com/vasild) Reviewing in a separate staging repo was suggested in https://github.com/bitcoin/bitcoin/pull/27060#issuecomment-1431798320. The accompanying changes to the OSS-Fuzz project are available in https://github.com/hebasto/oss-fuzz/pull/8. Please refer to the [build options parity table](https://gist.github.com/hebasto/2ef97d3a726bfce08ded9df07f7dab5e). The "auto" value is no longer available; non-default values must be specified explicitly. Additionally, the new default values have been chosen to suit the everyday build experience for the majority of developers. System requirements for using the CMake-based build system: - CMake >= 3.22 (if not available in your system's repository, it can be downloaded from https://cmake.org/download/) - a build tool of your choice: - any Make (GNU Make is no longer a requirement); GNU Make is still required to build depends - Ninja (https://ninja-build.org/) - MSBuild - Xcode A note for Windows users: The default installation of the latest version of MSVC 17.10.4 includes both CMake 3.28.3 and the vcpkg package manager). --- We, the build system developers, kindly ask reviewers to refrain from making suggestions that are not directly related to the migration process or can be implemented separately. Bugs in the scripts and errors in the updated documentation should be the focus of this PR. Please be advised that comments not aligned with this PR's goal may be ignored. Thank you all for your understanding. ACKs for top commit: maflcko: review ACK41051290ab🐥 sipsorcery: ACK41051290ab. vasild: ACK41051290abTheCharlatan: ACK41051290abpablomartin4btc: tACK41051290abi-am-yuvi: tACK [`4105129`](41051290ab) theuni: ACK41051290ab. fanquake: ACK41051290abTree-SHA512: 6c1445054436c6c00ad63bfa0f19d64091a2b25c9bd694f85bf2218ac358ffb774d6c000685b3ca1e9b50401babed989fa2a0694b774c211d226bfd1944c9b39
Bitcoin Core
Setup
Bitcoin Core is the original Bitcoin client and it builds the backbone of the network. It downloads and, by default, stores the entire history of Bitcoin transactions, which requires a few hundred gigabytes of disk space. Depending on the speed of your computer and network connection, the synchronization process can take anywhere from a few hours to a day or more.
To download Bitcoin Core, visit bitcoincore.org.
Running
The following are some helpful notes on how to run Bitcoin Core on your native platform.
Unix
Unpack the files into a directory and run:
bin/bitcoin-qt(GUI) orbin/bitcoind(headless)
Windows
Unpack the files into a directory, and then run bitcoin-qt.exe.
macOS
Drag Bitcoin Core to your applications folder, and then run Bitcoin Core.
Need Help?
- See the documentation at the Bitcoin Wiki for help and more information.
- Ask for help on Bitcoin StackExchange.
- Ask for help on #bitcoin on Libera Chat. If you don't have an IRC client, you can use web.libera.chat.
- Ask for help on the BitcoinTalk forums, in the Technical Support board.
Building
The following are developer notes on how to build Bitcoin Core on your native platform. They are not complete guides, but include notes on the necessary libraries, compile flags, etc.
- Dependencies
- macOS Build Notes
- Unix Build Notes
- Windows Build Notes
- FreeBSD Build Notes
- OpenBSD Build Notes
- NetBSD Build Notes
Development
The Bitcoin repo's root README contains relevant information on the development process and automated testing.
- Developer Notes
- Productivity Notes
- Release Process
- Source Code Documentation (External Link)
- Translation Process
- Translation Strings Policy
- JSON-RPC Interface
- Unauthenticated REST Interface
- BIPS
- Dnsseed Policy
- Benchmarking
- Internal Design Docs
Resources
- Discuss on the BitcoinTalk forums, in the Development & Technical Discussion board.
- Discuss project-specific development on #bitcoin-core-dev on Libera Chat. If you don't have an IRC client, you can use web.libera.chat.
Miscellaneous
- Assets Attribution
- bitcoin.conf Configuration File
- CJDNS Support
- Files
- Fuzz-testing
- I2P Support
- Init Scripts (systemd/upstart/openrc)
- Managing Wallets
- Multisig Tutorial
- Offline Signing Tutorial
- P2P bad ports definition and list
- PSBT support
- Reduce Memory
- Reduce Traffic
- Tor Support
- Transaction Relay Policy
- ZMQ
License
Distributed under the MIT software license.