mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-09 11:27:28 -03:00
Merge #16367: Multiprocess build support
b919efadff
depends: Use default macos clang compiler (Russell Yanofsky)d54f64c6c7
Add multiprocess travis configuration (Russell Yanofsky)787f40668d
Set LD_LIBRARY_PATH consistently in travis tests (Russell Yanofsky)d630646662
libmultiprocess depends build (Russell Yanofsky)e6e44eedd5
Multiprocess build changes (Russell Yanofsky) Pull request description: This PR is part of the [process separation project](https://github.com/bitcoin/bitcoin/projects/10). This splits autotools, depends build, and travis changes out of #10102, so code changes and build system changes can be reviewed separately. ACKs for top commit: hebasto: re-ACKb919efadff
, rebased only since my [previous](https://github.com/bitcoin/bitcoin/pull/16367#issuecomment-605514556) review. Tree-SHA512: ebc5e403cc99a0d9629ed7fe1595e01d57e6d1255cbf03968a3196ff6f528f734c78060fdc065724ee1f923bcc5aa2b29470fcb36a7f15957eb57c76d58178a4
This commit is contained in:
commit
1b30761360
20 changed files with 287 additions and 45 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -5,6 +5,8 @@
|
|||
src/bitcoin
|
||||
src/bitcoind
|
||||
src/bitcoin-cli
|
||||
src/bitcoin-gui
|
||||
src/bitcoin-node
|
||||
src/bitcoin-tx
|
||||
src/bitcoin-wallet
|
||||
src/test/fuzz
|
||||
|
|
|
@ -158,6 +158,11 @@ jobs:
|
|||
env: >-
|
||||
FILE_ENV="./ci/test/00_setup_env_native_fuzz_with_valgrind.sh"
|
||||
|
||||
- stage: test
|
||||
name: 'x86_64 Linux [GOAL: install] [bionic] [multiprocess]'
|
||||
env: >-
|
||||
FILE_ENV="./ci/test/00_setup_env_native_multiprocess.sh"
|
||||
|
||||
- stage: test
|
||||
name: 'x86_64 Linux [GOAL: install] [bionic] [no wallet]'
|
||||
env: >-
|
||||
|
|
14
ci/test/00_setup_env_native_multiprocess.sh
Normal file
14
ci/test/00_setup_env_native_multiprocess.sh
Normal file
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2020 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
export CONTAINER_NAME=ci_native_multiprocess
|
||||
export PACKAGES="cmake python3"
|
||||
export DEP_OPTS="MULTIPROCESS=1"
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG=""
|
||||
export TEST_RUNNER_ENV="BITCOIND=bitcoin-node"
|
|
@ -37,12 +37,12 @@ fi
|
|||
|
||||
if [ "$RUN_FUNCTIONAL_TESTS" = "true" ]; then
|
||||
BEGIN_FOLD functional-tests
|
||||
DOCKER_EXEC test/functional/test_runner.py --ci $MAKEJOBS --tmpdirprefix "${BASE_SCRATCH_DIR}/test_runner/" --ansi --combinedlogslen=4000 ${TEST_RUNNER_EXTRA} --quiet --failfast
|
||||
DOCKER_EXEC LD_LIBRARY_PATH=$DEPENDS_DIR/$HOST/lib ${TEST_RUNNER_ENV} test/functional/test_runner.py --ci $MAKEJOBS --tmpdirprefix "${BASE_SCRATCH_DIR}/test_runner/" --ansi --combinedlogslen=4000 ${TEST_RUNNER_EXTRA} --quiet --failfast
|
||||
END_FOLD
|
||||
fi
|
||||
|
||||
if [ "$RUN_FUZZ_TESTS" = "true" ]; then
|
||||
BEGIN_FOLD fuzz-tests
|
||||
DOCKER_EXEC test/fuzz/test_runner.py ${FUZZ_TESTS_CONFIG} -l DEBUG ${DIR_FUZZ_IN}
|
||||
DOCKER_EXEC LD_LIBRARY_PATH=$DEPENDS_DIR/$HOST/lib test/fuzz/test_runner.py ${FUZZ_TESTS_CONFIG} -l DEBUG ${DIR_FUZZ_IN}
|
||||
END_FOLD
|
||||
fi
|
||||
|
|
63
configure.ac
63
configure.ac
|
@ -230,6 +230,24 @@ if test x$enable_bip70 != xno; then
|
|||
AC_MSG_ERROR([BIP70 is no longer supported!])
|
||||
fi
|
||||
|
||||
AC_ARG_WITH([libmultiprocess],
|
||||
[AS_HELP_STRING([--with-libmultiprocess=yes|no|auto],
|
||||
[Build with libmultiprocess library. (default: auto, i.e. detect with pkg-config)])],
|
||||
[with_libmultiprocess=$withval],
|
||||
[with_libmultiprocess=auto])
|
||||
|
||||
AC_ARG_WITH([mpgen],
|
||||
[AS_HELP_STRING([--with-mpgen=yes|no|auto|PREFIX],
|
||||
[Build with libmultiprocess codegen tool. Useful to specify different libmultiprocess host system library and build system codegen tool prefixes when cross-compiling (default is host system libmultiprocess prefix)])],
|
||||
[with_mpgen=$withval],
|
||||
[with_mpgen=auto])
|
||||
|
||||
AC_ARG_ENABLE([multiprocess],
|
||||
[AS_HELP_STRING([--enable-multiprocess],
|
||||
[build multiprocess bitcoin-node, bitcoin-wallet, and bitcoin-gui executables in addition to monolithic bitcoind and bitcoin-qt executables. Requires libmultiprocess library. Experimental (default is no)])],
|
||||
[enable_multiprocess=$enableval],
|
||||
[enable_multiprocess=no])
|
||||
|
||||
AC_ARG_ENABLE(man,
|
||||
[AS_HELP_STRING([--disable-man],
|
||||
[do not install man pages (default is to install)])],,
|
||||
|
@ -1369,6 +1387,50 @@ AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
|
|||
AC_SUBST(UNIVALUE_CFLAGS)
|
||||
AC_SUBST(UNIVALUE_LIBS)
|
||||
|
||||
dnl libmultiprocess library check
|
||||
|
||||
libmultiprocess_found=no
|
||||
if test "x$with_libmultiprocess" = xyes || test "x$with_libmultiprocess" = xauto; then
|
||||
if test "x$use_pkgconfig" = xyes; then
|
||||
m4_ifdef([PKG_CHECK_MODULES], [PKG_CHECK_MODULES([LIBMULTIPROCESS], [libmultiprocess], [
|
||||
libmultiprocess_found=yes;
|
||||
libmultiprocess_prefix=`$PKG_CONFIG --variable=prefix libmultiprocess`;
|
||||
], [true])])
|
||||
fi
|
||||
elif test "x$with_libmultiprocess" != xno; then
|
||||
AC_MSG_ERROR([--with-libmultiprocess=$with_libmultiprocess value is not yes, auto, or no])
|
||||
fi
|
||||
AC_SUBST(LIBMULTIPROCESS_CFLAGS)
|
||||
AC_SUBST(LIBMULTIPROCESS_LIBS)
|
||||
|
||||
dnl Enable multiprocess check
|
||||
|
||||
if test "x$enable_multiprocess" = xyes; then
|
||||
if test "x$libmultiprocess_found" != xyes; then
|
||||
AC_MSG_ERROR([--enable-multiprocess=yes option specified but libmultiprocess library was not found. May need to install libmultiprocess library, or specify install path with PKG_CONFIG_PATH environment variable. Running 'pkg-config --debug libmultiprocess' may be helpful for debugging.])
|
||||
fi
|
||||
build_multiprocess=yes
|
||||
elif test "x$enable_multiprocess" = xauto; then
|
||||
build_multiprocess=$libmultiprocess_found
|
||||
else
|
||||
build_multiprocess=no
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL([BUILD_MULTIPROCESS],[test "x$build_multiprocess" = xyes])
|
||||
AM_CONDITIONAL([BUILD_BITCOIN_NODE], [test "x$build_multiprocess" = xyes])
|
||||
AM_CONDITIONAL([BUILD_BITCOIN_GUI], [test "x$build_multiprocess" = xyes])
|
||||
|
||||
dnl codegen tools check
|
||||
|
||||
if test x$build_multiprocess != xno; then
|
||||
if test "x$with_mpgen" = xyes || test "x$with_mpgen" = xauto; then
|
||||
MPGEN_PREFIX="$libmultiprocess_prefix"
|
||||
elif test "x$with_mpgen" != xno; then
|
||||
MPGEN_PREFIX="$with_mpgen";
|
||||
fi
|
||||
AC_SUBST(MPGEN_PREFIX)
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([whether to build bitcoind])
|
||||
AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
|
||||
AC_MSG_RESULT($build_bitcoind)
|
||||
|
@ -1650,6 +1712,7 @@ esac
|
|||
|
||||
echo
|
||||
echo "Options used to compile and link:"
|
||||
echo " multiprocess = $build_multiprocess"
|
||||
echo " with wallet = $enable_wallet"
|
||||
echo " with gui / qt = $bitcoin_enable_qt"
|
||||
if test x$bitcoin_enable_qt != xno; then
|
||||
|
|
|
@ -13,6 +13,7 @@ NO_QR ?=
|
|||
NO_WALLET ?=
|
||||
NO_ZMQ ?=
|
||||
NO_UPNP ?=
|
||||
MULTIPROCESS ?=
|
||||
FALLBACK_DOWNLOAD_PATH ?= https://bitcoincore.org/depends-sources
|
||||
|
||||
BUILD = $(shell ./config.guess)
|
||||
|
@ -107,6 +108,7 @@ qt_packages_$(NO_QT) = $(qt_packages) $(qt_$(host_os)_packages) $(qt_$(host_arch
|
|||
wallet_packages_$(NO_WALLET) = $(wallet_packages)
|
||||
upnp_packages_$(NO_UPNP) = $(upnp_packages)
|
||||
zmq_packages_$(NO_ZMQ) = $(zmq_packages)
|
||||
multiprocess_packages_$(MULTIPROCESS) = $(multiprocess_packages)
|
||||
|
||||
packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(qt_packages_) $(wallet_packages_) $(upnp_packages_)
|
||||
native_packages += $($(host_arch)_$(host_os)_native_packages) $($(host_os)_native_packages)
|
||||
|
@ -115,6 +117,11 @@ ifneq ($(zmq_packages_),)
|
|||
packages += $(zmq_packages)
|
||||
endif
|
||||
|
||||
ifeq ($(multiprocess_packages_),)
|
||||
packages += $(multiprocess_packages)
|
||||
native_packages += $(multiprocess_native_packages)
|
||||
endif
|
||||
|
||||
all_packages = $(packages) $(native_packages)
|
||||
|
||||
meta_depends = Makefile funcs.mk builders/default.mk hosts/default.mk hosts/$(host_os).mk builders/$(build_os).mk
|
||||
|
@ -155,6 +162,7 @@ $(host_prefix)/share/config.site : config.site.in $(host_prefix)/.stamp_$(final_
|
|||
-e 's|@no_zmq@|$(NO_ZMQ)|' \
|
||||
-e 's|@no_wallet@|$(NO_WALLET)|' \
|
||||
-e 's|@no_upnp@|$(NO_UPNP)|' \
|
||||
-e 's|@multiprocess@|$(MULTIPROCESS)|' \
|
||||
-e 's|@debug@|$(DEBUG)|' \
|
||||
$< > $@
|
||||
$(AT)touch $@
|
||||
|
|
|
@ -91,6 +91,7 @@ The following can be set when running make: make FOO=bar
|
|||
NO_ZMQ: Don't download/build/cache packages needed for enabling zeromq
|
||||
NO_WALLET: Don't download/build/cache libs needed to enable the wallet
|
||||
NO_UPNP: Don't download/build/cache packages needed for enabling upnp
|
||||
MULTIPROCESS: build libmultiprocess (experimental, requires cmake)
|
||||
DEBUG: disable some optimizations and enable more runtime checking
|
||||
HOST_ID_SALT: Optional salt to use when generating host package ids
|
||||
BUILD_ID_SALT: Optional salt to use when generating build package ids
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
build_darwin_CC:=$(shell xcrun -f clang)
|
||||
build_darwin_CXX:=$(shell xcrun -f clang++)
|
||||
build_darwin_CC:=clang
|
||||
build_darwin_CXX:=clang++
|
||||
build_darwin_AR:=$(shell xcrun -f ar)
|
||||
build_darwin_RANLIB:=$(shell xcrun -f ranlib)
|
||||
build_darwin_STRIP:=$(shell xcrun -f strip)
|
||||
|
|
|
@ -16,6 +16,9 @@ fi
|
|||
if test -z $with_qt_bindir && test -z "@no_qt@"; then
|
||||
with_qt_bindir=$depends_prefix/native/bin
|
||||
fi
|
||||
if test -z $with_mpgen && test -n "@multiprocess@"; then
|
||||
with_mpgen=$depends_prefix/native
|
||||
fi
|
||||
|
||||
if test -z $with_qrencode && test -n "@no_qr@"; then
|
||||
with_qrencode=no
|
||||
|
@ -25,6 +28,10 @@ if test -z $enable_wallet && test -n "@no_wallet@"; then
|
|||
enable_wallet=no
|
||||
fi
|
||||
|
||||
if test -z $enable_multiprocess && test -n "@multiprocess@"; then
|
||||
enable_multiprocess=yes
|
||||
fi
|
||||
|
||||
if test -z $with_miniupnpc && test -n "@no_upnp@"; then
|
||||
with_miniupnpc=no
|
||||
fi
|
||||
|
|
|
@ -130,6 +130,7 @@ $(1)_config_env+=$($(1)_config_env_$(host_arch)_$(host_os)) $($(1)_config_env_$(
|
|||
|
||||
$(1)_config_env+=PKG_CONFIG_LIBDIR=$($($(1)_type)_prefix)/lib/pkgconfig
|
||||
$(1)_config_env+=PKG_CONFIG_PATH=$($($(1)_type)_prefix)/share/pkgconfig
|
||||
$(1)_config_env+=CMAKE_MODULE_PATH=$($($(1)_type)_prefix)/lib/cmake
|
||||
$(1)_config_env+=PATH=$(build_prefix)/bin:$(PATH)
|
||||
$(1)_build_env+=PATH=$(build_prefix)/bin:$(PATH)
|
||||
$(1)_stage_env+=PATH=$(build_prefix)/bin:$(PATH)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package=boost
|
||||
$(package)_version=1_70_0
|
||||
$(package)_download_path=https://dl.bintray.com/boostorg/release/1.70.0/source/
|
||||
$(package)_file_name=$(package)_$($(package)_version).tar.bz2
|
||||
$(package)_file_name=boost_$($(package)_version).tar.bz2
|
||||
$(package)_sha256_hash=430ae8354789de4fd19ee52f3b1f739e1fba576f0aded0897c3c2bc00fb38778
|
||||
|
||||
define $(package)_set_vars
|
||||
|
|
17
depends/packages/capnp.mk
Normal file
17
depends/packages/capnp.mk
Normal file
|
@ -0,0 +1,17 @@
|
|||
package=capnp
|
||||
$(package)_version=$(native_$(package)_version)
|
||||
$(package)_download_path=$(native_$(package)_download_path)
|
||||
$(package)_file_name=$(native_$(package)_file_name)
|
||||
$(package)_sha256_hash=$(native_$(package)_sha256_hash)
|
||||
|
||||
define $(package)_config_cmds
|
||||
$($(package)_autoconf)
|
||||
endef
|
||||
|
||||
define $(package)_build_cmds
|
||||
$(MAKE)
|
||||
endef
|
||||
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||
endef
|
18
depends/packages/libmultiprocess.mk
Normal file
18
depends/packages/libmultiprocess.mk
Normal file
|
@ -0,0 +1,18 @@
|
|||
package=libmultiprocess
|
||||
$(package)_version=$(native_$(package)_version)
|
||||
$(package)_download_path=$(native_$(package)_download_path)
|
||||
$(package)_file_name=$(native_$(package)_file_name)
|
||||
$(package)_sha256_hash=$(native_$(package)_sha256_hash)
|
||||
$(package)_dependencies=native_$(package) boost capnp
|
||||
|
||||
define $(package)_config_cmds
|
||||
cmake -DCMAKE_INSTALL_PREFIX=$($($(package)_type)_prefix)
|
||||
endef
|
||||
|
||||
define $(package)_build_cmds
|
||||
$(MAKE)
|
||||
endef
|
||||
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||
endef
|
13
depends/packages/native_boost.mk
Normal file
13
depends/packages/native_boost.mk
Normal file
|
@ -0,0 +1,13 @@
|
|||
package=native_boost
|
||||
$(package)_version=$(boost_version)
|
||||
$(package)_download_path=$(boost_download_path)
|
||||
$(package)_file_name=$(boost_file_name)
|
||||
$(package)_sha256_hash=$(boost_sha256_hash)
|
||||
|
||||
define $(package)_config_cmds
|
||||
./bootstrap.sh --prefix=$($($(package)_type)_prefix) --with-libraries=headers
|
||||
endef
|
||||
|
||||
define $(package)_stage_cmds
|
||||
./b2 -d0 --prefix=$($(package)_staging_prefix_dir) install
|
||||
endef
|
18
depends/packages/native_capnp.mk
Normal file
18
depends/packages/native_capnp.mk
Normal file
|
@ -0,0 +1,18 @@
|
|||
package=native_capnp
|
||||
$(package)_version=0.7.0
|
||||
$(package)_download_path=https://capnproto.org/
|
||||
$(package)_download_file=capnproto-c++-$($(package)_version).tar.gz
|
||||
$(package)_file_name=capnproto-cxx-$($(package)_version).tar.gz
|
||||
$(package)_sha256_hash=c9a4c0bd88123064d483ab46ecee777f14d933359e23bff6fb4f4dbd28b4cd41
|
||||
|
||||
define $(package)_config_cmds
|
||||
$($(package)_autoconf)
|
||||
endef
|
||||
|
||||
define $(package)_build_cmds
|
||||
$(MAKE)
|
||||
endef
|
||||
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||
endef
|
18
depends/packages/native_libmultiprocess.mk
Normal file
18
depends/packages/native_libmultiprocess.mk
Normal file
|
@ -0,0 +1,18 @@
|
|||
package=native_libmultiprocess
|
||||
$(package)_version=1d630f536d43d1fdba028f2cfccf49bc27da92db
|
||||
$(package)_download_path=https://github.com/chaincodelabs/libmultiprocess/archive
|
||||
$(package)_file_name=$($(package)_version).tar.gz
|
||||
$(package)_sha256_hash=f43183ccf59fa7596d113e56518563673f5823a721974b4058d8778ef53bd476
|
||||
$(package)_dependencies=native_boost native_capnp
|
||||
|
||||
define $(package)_config_cmds
|
||||
cmake -DCMAKE_INSTALL_PREFIX=$($($(package)_type)_prefix)
|
||||
endef
|
||||
|
||||
define $(package)_build_cmds
|
||||
$(MAKE)
|
||||
endef
|
||||
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
||||
endef
|
|
@ -16,6 +16,9 @@ zmq_packages=zeromq
|
|||
|
||||
upnp_packages=miniupnpc
|
||||
|
||||
multiprocess_packages = libmultiprocess capnp
|
||||
multiprocess_native_packages = native_libmultiprocess native_boost native_capnp
|
||||
|
||||
darwin_native_packages = native_biplist native_ds_store native_mac_alias
|
||||
|
||||
ifneq ($(build_os),darwin)
|
||||
|
|
34
doc/multiprocess.md
Normal file
34
doc/multiprocess.md
Normal file
|
@ -0,0 +1,34 @@
|
|||
# Multiprocess Bitcoin
|
||||
|
||||
On unix systems, the `--enable-multiprocess` build option can be passed to `./configure` to build new `bitcoin-node`, `bitcoin-wallet`, and `bitcoin-gui` executables alongside existing `bitcoind` and `bitcoin-qt` executables.
|
||||
|
||||
`bitcoin-node` is a drop-in replacement for `bitcoind`, and `bitcoin-gui` is a drop-in replacement for `bitcoin-qt`, and there are no differences in use or external behavior between the new and old executables. But internally (after [#10102](https://github.com/bitcoin/bitcoin/pull/10102)), `bitcoin-gui` will spawn a `bitcoin-node` process to run P2P and RPC code, communicating with it across a socket pair, and `bitcoin-node` will spawn `bitcoin-wallet` to run wallet code, also communicating over a socket pair. This will let node, wallet, and GUI code run in separate address spaces for better isolation, and allow future improvements like being able to start and stop components independently on different machines and environments.
|
||||
|
||||
## Next steps
|
||||
|
||||
Specific next steps after [#10102](https://github.com/bitcoin/bitcoin/pull/10102) will be:
|
||||
|
||||
- [ ] Adding `-ipcbind` and `-ipcconnect` options to `bitcoin-node`, `bitcoin-wallet`, and `bitcoin-gui` executables so they can listen and connect to TCP ports and unix socket paths. This will allow separate processes to be started and stopped any time and connect to each other.
|
||||
- [ ] Adding `-server` and `-rpcbind` options to the `bitcoin-wallet` executable so wallet processes can handle RPC requests directly without going through the node.
|
||||
- [ ] Supporting windows, not just unix systems. The existing socket code is already cross-platform, so the only windows-specific code that needs to be written is code spawning a process and passing a socket descriptor. This can be implemented with `CreateProcess` and `WSADuplicateSocket`. Example: https://memset.wordpress.com/2010/10/13/win32-api-passing-socket-with-ipc-method/.
|
||||
- [ ] Adding sandbox features, restricting subprocess access to resources and data. See [https://eklitzke.org/multiprocess-bitcoin](https://eklitzke.org/multiprocess-bitcoin).
|
||||
|
||||
## Debugging
|
||||
|
||||
After [#10102](https://github.com/bitcoin/bitcoin/pull/10102), the `-debug=ipc` command line option can be used to see requests and responses between processes.
|
||||
|
||||
## Installation
|
||||
|
||||
The multiprocess feature requires [Cap'n Proto](https://capnproto.org/) and [libmultiprocess](https://github.com/chaincodelabs/libmultiprocess) as dependencies. A simple way to get starting using it without installing these dependencies manually is to use the [depends system](../depends) with the `MULTIPROCESS=1` [dependency option](../depends#dependency-options) passed to make:
|
||||
|
||||
```
|
||||
cd <BITCOIN_SOURCE_DIRECTORY>
|
||||
make -C depends NO_QT=1 MULTIPROCESS=1
|
||||
./configure --prefix=$PWD/depends/x86_64-pc-linux-gnu
|
||||
make
|
||||
src/bitcoin-node -regtest -printtoconsole -debug=ipc
|
||||
```
|
||||
|
||||
The configure script will pick up settings and library locations from the depends directory, so there is no need to pass `--enable-multiprocess` as a separate flag when using the depends system (it's controlled by the `MULTIPROCESS=1` option).
|
||||
|
||||
Alternately, you can install [Cap'n Proto](https://capnproto.org/) and [libmultiprocess](https://github.com/chaincodelabs/libmultiprocess) packages on your system, and just run `./configure --enable-multiprocess` without using the depends system. The configure script will be able to locate the installed packages via [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/). See [Installation](https://github.com/chaincodelabs/libmultiprocess#installation) section of the libmultiprocess readme for install steps. See [build-unix.md](build-unix.md) and [build-osx.md](build-osx.md) for information about installing dependencies in general.
|
|
@ -85,6 +85,10 @@ if BUILD_BITCOIND
|
|||
bin_PROGRAMS += bitcoind
|
||||
endif
|
||||
|
||||
if BUILD_BITCOIN_NODE
|
||||
bin_PROGRAMS += bitcoin-node
|
||||
endif
|
||||
|
||||
if BUILD_BITCOIN_CLI
|
||||
bin_PROGRAMS += bitcoin-cli
|
||||
endif
|
||||
|
@ -546,22 +550,22 @@ libbitcoin_cli_a_SOURCES = \
|
|||
nodist_libbitcoin_util_a_SOURCES = $(srcdir)/obj/build.h
|
||||
#
|
||||
|
||||
# bitcoind binary #
|
||||
bitcoind_SOURCES = bitcoind.cpp
|
||||
bitcoind_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
|
||||
bitcoind_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||
bitcoind_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
|
||||
# bitcoind & bitcoin-node binaries #
|
||||
bitcoin_common_sources = bitcoind.cpp
|
||||
bitcoin_common_cppflags = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
|
||||
bitcoin_common_cxxflags = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||
bitcoin_common_ldflags = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
|
||||
|
||||
if TARGET_WINDOWS
|
||||
bitcoind_SOURCES += bitcoind-res.rc
|
||||
bitcoin_common_sources += bitcoind-res.rc
|
||||
endif
|
||||
|
||||
bitcoind_LDADD = \
|
||||
bitcoin_common_ldadd = \
|
||||
$(LIBBITCOIN_SERVER) \
|
||||
$(LIBBITCOIN_WALLET) \
|
||||
$(LIBBITCOIN_COMMON) \
|
||||
$(LIBUNIVALUE) \
|
||||
$(LIBBITCOIN_UTIL) \
|
||||
$(LIBUNIVALUE) \
|
||||
$(LIBBITCOIN_ZMQ) \
|
||||
$(LIBBITCOIN_CONSENSUS) \
|
||||
$(LIBBITCOIN_CRYPTO) \
|
||||
|
@ -570,7 +574,19 @@ bitcoind_LDADD = \
|
|||
$(LIBMEMENV) \
|
||||
$(LIBSECP256K1)
|
||||
|
||||
bitcoind_LDADD += $(BOOST_LIBS) $(BDB_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(ZMQ_LIBS)
|
||||
bitcoin_common_ldadd += $(BOOST_LIBS) $(BDB_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(ZMQ_LIBS)
|
||||
|
||||
bitcoind_SOURCES = $(bitcoin_common_sources)
|
||||
bitcoind_CPPFLAGS = $(bitcoin_common_cppflags)
|
||||
bitcoind_CXXFLAGS = $(bitcoin_common_cxxflags)
|
||||
bitcoind_LDFLAGS = $(bitcoin_common_ldflags)
|
||||
bitcoind_LDADD = $(bitcoin_common_ldadd)
|
||||
|
||||
bitcoin_node_SOURCES = $(bitcoin_common_sources)
|
||||
bitcoin_node_CPPFLAGS = $(bitcoin_common_cppflags)
|
||||
bitcoin_node_CXXFLAGS = $(bitcoin_common_cxxflags)
|
||||
bitcoin_node_LDFLAGS = $(bitcoin_common_ldflags)
|
||||
bitcoin_node_LDADD = $(bitcoin_common_ldadd)
|
||||
|
||||
# bitcoin-cli binary #
|
||||
bitcoin_cli_SOURCES = bitcoin-cli.cpp
|
||||
|
@ -614,29 +630,14 @@ bitcoin_tx_LDADD += $(BOOST_LIBS)
|
|||
|
||||
# bitcoin-wallet binary #
|
||||
bitcoin_wallet_SOURCES = bitcoin-wallet.cpp
|
||||
bitcoin_wallet_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
|
||||
bitcoin_wallet_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||
bitcoin_wallet_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
|
||||
bitcoin_wallet_CPPFLAGS = $(bitcoin_common_cppflags)
|
||||
bitcoin_wallet_CXXFLAGS = $(bitcoin_common_cxxflags)
|
||||
bitcoin_wallet_LDFLAGS = $(bitcoin_common_ldflags)
|
||||
bitcoin_wallet_LDADD = $(LIBBITCOIN_WALLET_TOOL) $(bitcoin_common_ldadd)
|
||||
|
||||
if TARGET_WINDOWS
|
||||
bitcoin_wallet_SOURCES += bitcoin-wallet-res.rc
|
||||
endif
|
||||
|
||||
bitcoin_wallet_LDADD = \
|
||||
$(LIBBITCOIN_WALLET_TOOL) \
|
||||
$(LIBBITCOIN_WALLET) \
|
||||
$(LIBBITCOIN_COMMON) \
|
||||
$(LIBBITCOIN_CONSENSUS) \
|
||||
$(LIBBITCOIN_UTIL) \
|
||||
$(LIBBITCOIN_CRYPTO) \
|
||||
$(LIBBITCOIN_ZMQ) \
|
||||
$(LIBLEVELDB) \
|
||||
$(LIBLEVELDB_SSE42) \
|
||||
$(LIBMEMENV) \
|
||||
$(LIBSECP256K1) \
|
||||
$(LIBUNIVALUE)
|
||||
|
||||
bitcoin_wallet_LDADD += $(BOOST_LIBS) $(BDB_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(MINIUPNPC_LIBS) $(ZMQ_LIBS)
|
||||
#
|
||||
|
||||
# bitcoinconsensus library #
|
||||
|
|
|
@ -3,6 +3,11 @@
|
|||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
bin_PROGRAMS += qt/bitcoin-qt
|
||||
|
||||
if BUILD_BITCOIN_GUI
|
||||
bin_PROGRAMS += bitcoin-gui
|
||||
endif
|
||||
|
||||
EXTRA_LIBRARIES += qt/libbitcoinqt.a
|
||||
|
||||
# bitcoin qt core #
|
||||
|
@ -294,29 +299,43 @@ QT_FORMS_H=$(join $(dir $(QT_FORMS_UI)),$(addprefix ui_, $(notdir $(QT_FORMS_UI:
|
|||
# Most files will depend on the forms and moc files as includes. Generate them
|
||||
# before anything else.
|
||||
$(QT_MOC): $(QT_FORMS_H)
|
||||
$(qt_libbitcoinqt_a_OBJECTS) $(qt_bitcoin_qt_OBJECTS) : | $(QT_MOC)
|
||||
$(qt_libbitcoinqt_a_OBJECTS) $(qt_bitcoin_qt_OBJECTS) $(bitcoin_gui_OBJECTS) : | $(QT_MOC)
|
||||
|
||||
# bitcoin-qt binary #
|
||||
qt_bitcoin_qt_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) \
|
||||
# bitcoin-qt and bitcoin-gui binaries #
|
||||
bitcoin_qt_common_cppflags = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) \
|
||||
$(QT_INCLUDES) $(QR_CFLAGS)
|
||||
qt_bitcoin_qt_CXXFLAGS = $(AM_CXXFLAGS) $(QT_PIE_FLAGS)
|
||||
bitcoin_qt_common_cxxflags = $(AM_CXXFLAGS) $(QT_PIE_FLAGS)
|
||||
|
||||
qt_bitcoin_qt_SOURCES = qt/main.cpp
|
||||
bitcoin_qt_common_sources = qt/main.cpp
|
||||
if TARGET_WINDOWS
|
||||
qt_bitcoin_qt_SOURCES += $(BITCOIN_RC)
|
||||
bitcoin_qt_common_sources += $(BITCOIN_RC)
|
||||
endif
|
||||
qt_bitcoin_qt_LDADD = qt/libbitcoinqt.a $(LIBBITCOIN_SERVER)
|
||||
bitcoin_qt_common_ldadd = qt/libbitcoinqt.a $(LIBBITCOIN_SERVER)
|
||||
if ENABLE_WALLET
|
||||
qt_bitcoin_qt_LDADD += $(LIBBITCOIN_UTIL) $(LIBBITCOIN_WALLET)
|
||||
bitcoin_qt_common_ldadd += $(LIBBITCOIN_UTIL) $(LIBBITCOIN_WALLET)
|
||||
endif
|
||||
if ENABLE_ZMQ
|
||||
qt_bitcoin_qt_LDADD += $(LIBBITCOIN_ZMQ) $(ZMQ_LIBS)
|
||||
bitcoin_qt_common_ldadd += $(LIBBITCOIN_ZMQ) $(ZMQ_LIBS)
|
||||
endif
|
||||
qt_bitcoin_qt_LDADD += $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CONSENSUS) $(LIBBITCOIN_CRYPTO) $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBMEMENV) \
|
||||
bitcoin_qt_common_ldadd += $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CONSENSUS) $(LIBBITCOIN_CRYPTO) $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBMEMENV) \
|
||||
$(BOOST_LIBS) $(QT_LIBS) $(QT_DBUS_LIBS) $(QR_LIBS) $(BDB_LIBS) $(MINIUPNPC_LIBS) $(LIBSECP256K1) \
|
||||
$(EVENT_PTHREADS_LIBS) $(EVENT_LIBS)
|
||||
qt_bitcoin_qt_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
|
||||
qt_bitcoin_qt_LIBTOOLFLAGS = $(AM_LIBTOOLFLAGS) --tag CXX
|
||||
bitcoin_qt_common_ldflags = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
|
||||
bitcoin_qt_common_libtoolflags = $(AM_LIBTOOLFLAGS) --tag CXX
|
||||
|
||||
qt_bitcoin_qt_CPPFLAGS = $(bitcoin_qt_common_cppflags)
|
||||
qt_bitcoin_qt_CXXFLAGS = $(bitcoin_qt_common_cxxflags)
|
||||
qt_bitcoin_qt_SOURCES = $(bitcoin_qt_common_sources)
|
||||
qt_bitcoin_qt_LDADD = $(bitcoin_qt_common_ldadd)
|
||||
qt_bitcoin_qt_LDFLAGS = $(bitcoin_qt_common_ldflags)
|
||||
qt_bitcoin_qt_LIBTOOLFLAGS = $(bitcoin_qt_common_libtoolflags)
|
||||
|
||||
bitcoin_gui_CPPFLAGS = $(bitcoin_qt_common_cppflags)
|
||||
bitcoin_gui_CXXFLAGS = $(bitcoin_qt_common_cxxflags)
|
||||
bitcoin_gui_SOURCES = $(bitcoin_qt_common_sources)
|
||||
bitcoin_gui_LDADD = $(bitcoin_qt_common_ldadd)
|
||||
bitcoin_gui_LDFLAGS = $(bitcoin_qt_common_ldflags)
|
||||
bitcoin_gui_LIBTOOLFLAGS = $(bitcoin_qt_common_libtoolflags)
|
||||
|
||||
#locale/foo.ts -> locale/foo.qm
|
||||
QT_QM=$(QT_TS:.ts=.qm)
|
||||
|
|
Loading…
Reference in a new issue