25e8fe70c6build, qt: Fix handling of `CXX=clang++` when building `qt` package (Hennadii Stepanov) Pull request description: On the master branch (f380bb93e8): ``` $ cd depends $ make qt CC=clang CXX=clang++ ... Project ERROR: failed to parse default search paths from compiler output make: *** [funcs.mk:292: /home/hebasto/git/bitcoin/depends/x86_64-pc-linux-gnu/.qt_stamp_configured] Error 3 ``` Fixes https://github.com/bitcoin/bitcoin/pull/27301#issuecomment-1479622034. Guix builds: ``` daa94946aae7d4826d6f329337791a6bda0f01ac73f27003d1677dc8de031071 guix-build-25e8fe70c6e6/output/aarch64-linux-gnu/SHA256SUMS.part 38e9dcb99e329ad02837fd08559a8408bd7ba698f65163d0834d52dc9eefceae guix-build-25e8fe70c6e6/output/aarch64-linux-gnu/bitcoin-25e8fe70c6e6-aarch64-linux-gnu-debug.tar.gz 36d48b93724b112e5553a8d048c79df0532da6d271598a105038c6a5dfbce630 guix-build-25e8fe70c6e6/output/aarch64-linux-gnu/bitcoin-25e8fe70c6e6-aarch64-linux-gnu.tar.gz 6fe9697b6c73f75b1d1ce1bf89176e4afb77a0f876cfbf72b1298660c8060c17 guix-build-25e8fe70c6e6/output/arm-linux-gnueabihf/SHA256SUMS.part dffe564732625f7697274f5cec89c4340327fd3094c6e22dcda39edce064b249 guix-build-25e8fe70c6e6/output/arm-linux-gnueabihf/bitcoin-25e8fe70c6e6-arm-linux-gnueabihf-debug.tar.gz d2fe5bb056b5d12363b2b7a2bf6dca95f2fc3734b61c770fe4919ecbf6570338 guix-build-25e8fe70c6e6/output/arm-linux-gnueabihf/bitcoin-25e8fe70c6e6-arm-linux-gnueabihf.tar.gz ea63144558e7f9546b771f04fec5d59814d6dc5159fdc82c6da960fdf3de328f guix-build-25e8fe70c6e6/output/arm64-apple-darwin/SHA256SUMS.part 579d33fb5d53789849551b25de0323714fe7d282b7506d1bcdb96690dc357911 guix-build-25e8fe70c6e6/output/arm64-apple-darwin/bitcoin-25e8fe70c6e6-arm64-apple-darwin-unsigned.dmg 439628b325a72806d2a598c9c40811f9506b3d0ca3cd56ac327ed7f25d018f22 guix-build-25e8fe70c6e6/output/arm64-apple-darwin/bitcoin-25e8fe70c6e6-arm64-apple-darwin-unsigned.tar.gz 8434b75c17c3e3fae9f28cfa8236191134327118c83e603783d700b0ebcf07a6 guix-build-25e8fe70c6e6/output/arm64-apple-darwin/bitcoin-25e8fe70c6e6-arm64-apple-darwin.tar.gz 61dc9b083d63fc955f4c064348d9c49937e6cc0e969c48538b60281e0824a0f4 guix-build-25e8fe70c6e6/output/dist-archive/bitcoin-25e8fe70c6e6.tar.gz e31df50d868ec4ab6ecbd35ca0057a053eedd474dcc9c6287e4d225e8c0e8bee guix-build-25e8fe70c6e6/output/powerpc64-linux-gnu/SHA256SUMS.part 086cabfda322c5f86c128d52212ccc7276a4f6273d6acaedd949634bd211f8f4 guix-build-25e8fe70c6e6/output/powerpc64-linux-gnu/bitcoin-25e8fe70c6e6-powerpc64-linux-gnu-debug.tar.gz a245643fdad052b7fcc798bd1b7760540dcf47c54a9cdcc1e2f6bdb1fcc3f206 guix-build-25e8fe70c6e6/output/powerpc64-linux-gnu/bitcoin-25e8fe70c6e6-powerpc64-linux-gnu.tar.gz cf8f81932f8132bc26f10599cd318310b6207aea9e31a1ac41393ffc7df51801 guix-build-25e8fe70c6e6/output/powerpc64le-linux-gnu/SHA256SUMS.part f2fee686528ef507b5de03eb7f74f4d8a6d32338dbd7c6758795c963c6e9ce41 guix-build-25e8fe70c6e6/output/powerpc64le-linux-gnu/bitcoin-25e8fe70c6e6-powerpc64le-linux-gnu-debug.tar.gz 84a3b3c3b76eff95f8a6f49d1e4a3c7922722c1a202d982e9e4b83f9797d1e8d guix-build-25e8fe70c6e6/output/powerpc64le-linux-gnu/bitcoin-25e8fe70c6e6-powerpc64le-linux-gnu.tar.gz 42b8d6fa5756e200fcd99fdad07186437403ec85098d6d3d3246d7750b6f8361 guix-build-25e8fe70c6e6/output/riscv64-linux-gnu/SHA256SUMS.part 0e588eb81dfc7dcc472b9ea18825a6dee5967dd7f5a0f90a59d0ea2ac54bac8d guix-build-25e8fe70c6e6/output/riscv64-linux-gnu/bitcoin-25e8fe70c6e6-riscv64-linux-gnu-debug.tar.gz 6afcc482debcec8d3a7e32ca1216bfcd9ad4f653ace88ef39113f38bfb76e447 guix-build-25e8fe70c6e6/output/riscv64-linux-gnu/bitcoin-25e8fe70c6e6-riscv64-linux-gnu.tar.gz f58997be8b2dde088c80534977ad26c485c687a1e55783131da259d35b477e81 guix-build-25e8fe70c6e6/output/x86_64-apple-darwin/SHA256SUMS.part e7e17caa9035ba92216b591c9225b72316a65b1b6f68c85f85831d4c067e8d14 guix-build-25e8fe70c6e6/output/x86_64-apple-darwin/bitcoin-25e8fe70c6e6-x86_64-apple-darwin-unsigned.dmg 21df826825dd3b737f373513974e5e075470b6372b5ef00f0bfb69eaa806837c guix-build-25e8fe70c6e6/output/x86_64-apple-darwin/bitcoin-25e8fe70c6e6-x86_64-apple-darwin-unsigned.tar.gz 81544073e667222d60591316571444b19c72be5b2e41007098b17a45e63c9691 guix-build-25e8fe70c6e6/output/x86_64-apple-darwin/bitcoin-25e8fe70c6e6-x86_64-apple-darwin.tar.gz b1e644cc1ce3ba5bb91ca9fa22bd7abf25b2b537c9f041416555eb4327fb6a7b guix-build-25e8fe70c6e6/output/x86_64-linux-gnu/SHA256SUMS.part 6942721e65ae40604e83957d19b12a6d320fa5676a5668e890db13a7b2df5102 guix-build-25e8fe70c6e6/output/x86_64-linux-gnu/bitcoin-25e8fe70c6e6-x86_64-linux-gnu-debug.tar.gz c0596a5625d8cd2daf3c361290be6fc58642293d44944c10fde38bff203d1225 guix-build-25e8fe70c6e6/output/x86_64-linux-gnu/bitcoin-25e8fe70c6e6-x86_64-linux-gnu.tar.gz ebc7bab758d37dc7a16154d24b2335aa1d261345f94eeab1ed2664bc8679f2f0 guix-build-25e8fe70c6e6/output/x86_64-w64-mingw32/SHA256SUMS.part 38f31a70a630bf9db2616eb6732635d6b9e929ebe79a5e75c0179a5dfd9c076f guix-build-25e8fe70c6e6/output/x86_64-w64-mingw32/bitcoin-25e8fe70c6e6-win64-debug.zip b84591a290e8d1d246eb56f29125bedd7b0e66eeeb875dee9c377c16ba3f7029 guix-build-25e8fe70c6e6/output/x86_64-w64-mingw32/bitcoin-25e8fe70c6e6-win64-setup-unsigned.exe f3b50aee206c012c663d758d5a31d0efa7186805b70c8ec79962e1d7f977de6b guix-build-25e8fe70c6e6/output/x86_64-w64-mingw32/bitcoin-25e8fe70c6e6-win64-unsigned.tar.gz 6d7da31b00adc5005a42983c3444f44ac13a1e0028f1db7ba07d253baf40bf9e guix-build-25e8fe70c6e6/output/x86_64-w64-mingw32/bitcoin-25e8fe70c6e6-win64.zip ``` ACKs for top commit: TheCharlatan: tACK25e8fe70c6Tree-SHA512: a773d3d4454fefd37df1c05f2227e9ff66090536af3f9ff1d5373844fbcad9666ff4d199bc990ab0190f54f34059218830c1b3472a022f88d0a4971f77f82aaf
Usage
To build dependencies for the current arch+OS:
make
To build for another arch/OS:
make HOST=host-platform-triplet
For example:
make HOST=x86_64-w64-mingw32 -j4
Bitcoin Core's configure script by default will ignore the depends output. In
order for it to pick up libraries, tools, and settings from the depends build,
you must set the CONFIG_SITE environment variable to point to a config.site settings file.
In the above example, a file named depends/x86_64-w64-mingw32/share/config.site will be
created. To use it during compilation:
CONFIG_SITE=$PWD/depends/x86_64-w64-mingw32/share/config.site ./configure
The default install prefix when using config.site is --prefix=depends/<host-platform-triplet>,
so depends build outputs will be installed in that location.
Common host-platform-triplets for cross compilation are:
i686-pc-linux-gnufor Linux 32 bitx86_64-pc-linux-gnufor x86 Linuxx86_64-w64-mingw32for Win64x86_64-apple-darwinfor macOSarm64-apple-darwinfor ARM macOSarm-linux-gnueabihffor Linux ARM 32 bitaarch64-linux-gnufor Linux ARM 64 bitpowerpc64-linux-gnufor Linux POWER 64-bit (big endian)powerpc64le-linux-gnufor Linux POWER 64-bit (little endian)riscv32-linux-gnufor Linux RISC-V 32 bitriscv64-linux-gnufor Linux RISC-V 64 bits390x-linux-gnufor Linux S390Xarmv7a-linux-androidfor Android ARM 32 bitaarch64-linux-androidfor Android ARM 64 bitx86_64-linux-androidfor Android x86 64 bit
The paths are automatically configured and no other options are needed unless targeting Android.
Install the required dependencies: Ubuntu & Debian
For macOS cross compilation
sudo apt-get install curl bsdmainutils cmake libz-dev python3-setuptools libtinfo5 xorriso
Note: You must obtain the macOS SDK before proceeding with a cross-compile.
Under the depends directory, create a subdirectory named SDKs.
Then, place the extracted SDK under this new directory.
For more information, see SDK Extraction.
For Win64 cross compilation
- see build-windows.md
For linux (including i386, ARM) cross compilation
Common linux dependencies:
sudo apt-get install make automake cmake curl g++-multilib libtool binutils bsdmainutils pkg-config python3 patch bison
For linux ARM cross compilation:
sudo apt-get install g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf
For linux AARCH64 cross compilation:
sudo apt-get install g++-aarch64-linux-gnu binutils-aarch64-linux-gnu
For linux POWER 64-bit cross compilation (there are no packages for 32-bit):
sudo apt-get install g++-powerpc64-linux-gnu binutils-powerpc64-linux-gnu g++-powerpc64le-linux-gnu binutils-powerpc64le-linux-gnu
For linux RISC-V 64-bit cross compilation (there are no packages for 32-bit):
sudo apt-get install g++-riscv64-linux-gnu binutils-riscv64-linux-gnu
For linux S390X cross compilation:
sudo apt-get install g++-s390x-linux-gnu binutils-s390x-linux-gnu
Install the required dependencies: OpenBSD
pkg_add bash gtar
Dependency Options
The following can be set when running make: make FOO=bar
SOURCES_PATH: Downloaded sources will be placed hereBASE_CACHE: Built packages will be placed hereSDK_PATH: Path where SDKs can be found (used by macOS)FALLBACK_DOWNLOAD_PATH: If a source file can't be fetched, try here before giving upC_STANDARD: Set the C standard version used. Defaults toc11.CXX_STANDARD: Set the C++ standard version used. Defaults toc++17.NO_BOOST: Don't download/build/cache BoostNO_LIBEVENT: Don't download/build/cache LibeventNO_QT: Don't download/build/cache Qt and its dependenciesNO_QR: Don't download/build/cache packages needed for enabling qrencodeNO_ZMQ: Don't download/build/cache packages needed for enabling ZeroMQNO_WALLET: Don't download/build/cache libs needed to enable the walletNO_BDB: Don't download/build/cache BerkeleyDBNO_SQLITE: Don't download/build/cache SQLiteNO_UPNP: Don't download/build/cache packages needed for enabling UPnPNO_NATPMP: Don't download/build/cache packages needed for enabling NAT-PMPALLOW_HOST_PACKAGES: Packages that are missed in dependencies (due toNO_*option or build script logic) are searched for among the host system packages usingpkg-config. It allows building with packages of other (newer) versionsMULTIPROCESS: Build libmultiprocess (experimental, requires CMake)DEBUG: Disable some optimizations and enable more runtime checkingHOST_ID_SALT: Optional salt to use when generating host package idsBUILD_ID_SALT: Optional salt to use when generating build package idsFORCE_USE_SYSTEM_CLANG: (EXPERTS ONLY) When cross-compiling for macOS, use Clang found in the system's$PATHrather than the default prebuilt release of Clang from llvm.org. Clang 8 or later is requiredLOG: Use file-based logging for individual packages. During a package build its log file resides in thedependsdirectory, and the log file is printed out automatically in case of build error. After successful build log files are moved along with package archivesLTO: Use LTO when building packages.
If some packages are not built, for example make NO_WALLET=1, the appropriate
options will be passed to bitcoin's configure. In this case, --disable-wallet.
Additional targets
download: run 'make download' to fetch all sources without building them
download-osx: run 'make download-osx' to fetch all sources needed for macOS builds
download-win: run 'make download-win' to fetch all sources needed for win builds
download-linux: run 'make download-linux' to fetch all sources needed for linux builds
Other documentation
- description.md: General description of the depends system
- packages.md: Steps for adding packages