diff --git a/build_msvc/bitcoin-qt/bitcoin-qt.vcxproj b/build_msvc/bitcoin-qt/bitcoin-qt.vcxproj index 724dae1969..2800a42767 100644 --- a/build_msvc/bitcoin-qt/bitcoin-qt.vcxproj +++ b/build_msvc/bitcoin-qt/bitcoin-qt.vcxproj @@ -9,7 +9,7 @@ - + diff --git a/build_msvc/bitcoin-wallet/bitcoin-wallet.vcxproj b/build_msvc/bitcoin-wallet/bitcoin-wallet.vcxproj index 40c5db5522..affb60425b 100644 --- a/build_msvc/bitcoin-wallet/bitcoin-wallet.vcxproj +++ b/build_msvc/bitcoin-wallet/bitcoin-wallet.vcxproj @@ -10,6 +10,9 @@ + + $(IntDir)init_bitcoin-wallet.obj + diff --git a/build_msvc/test_bitcoin-qt/test_bitcoin-qt.vcxproj b/build_msvc/test_bitcoin-qt/test_bitcoin-qt.vcxproj index 08b12bdd85..f9948b6f13 100644 --- a/build_msvc/test_bitcoin-qt/test_bitcoin-qt.vcxproj +++ b/build_msvc/test_bitcoin-qt/test_bitcoin-qt.vcxproj @@ -8,7 +8,7 @@ $(SolutionDir)$(Platform)\$(Configuration)\ - + diff --git a/src/Makefile.am b/src/Makefile.am index ce4408cf18..f45e2348bd 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -745,6 +745,7 @@ elements_tx_LDADD += $(BOOST_LIBS) # bitcoin-wallet binary # elements_wallet_SOURCES = bitcoin-wallet.cpp +elements_wallet_SOURCES += init/bitcoin-wallet.cpp elements_wallet_CPPFLAGS = $(elements_bin_cppflags) elements_wallet_CXXFLAGS = $(elements_bin_cxxflags) elements_wallet_LDFLAGS = $(elements_bin_ldflags) diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index 402aad2284..1e57559c4d 100644 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -336,15 +336,15 @@ elements_qt_libtoolflags = $(AM_LIBTOOLFLAGS) --tag CXX qt_elements_qt_CPPFLAGS = $(elements_qt_cppflags) qt_elements_qt_CXXFLAGS = $(elements_qt_cxxflags) -qt_elements_qt_SOURCES = $(elements_qt_sources) init/bitcoind.cpp +qt_elements_qt_SOURCES = $(elements_qt_sources) init/bitcoin-qt.cpp qt_elements_qt_LDADD = $(elements_qt_ldadd) qt_elements_qt_LDFLAGS = $(elements_qt_ldflags) qt_elements_qt_LIBTOOLFLAGS = $(elements_qt_libtoolflags) elements_gui_CPPFLAGS = $(elements_qt_cppflags) elements_gui_CXXFLAGS = $(elements_qt_cxxflags) -elements_gui_SOURCES = $(elements_qt_sources) init/bitcoind.cpp -elements_gui_LDADD = $(elements_qt_ldadd) +elements_gui_SOURCES = $(elements_qt_sources) init/bitcoin-gui.cpp +elements_gui_LDADD = $(elements_qt_ldadd) $(LIBBITCOIN_IPC) $(LIBBITCOIN_UTIL) $(LIBMULTIPROCESS_LIBS) elements_gui_LDFLAGS = $(elements_qt_ldflags) elements_gui_LIBTOOLFLAGS = $(elements_qt_libtoolflags) diff --git a/src/Makefile.qttest.include b/src/Makefile.qttest.include index 95acee35d9..e7ccf411ee 100644 --- a/src/Makefile.qttest.include +++ b/src/Makefile.qttest.include @@ -28,7 +28,7 @@ qt_test_test_elements_qt_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BITCOIN $(QT_INCLUDES) $(QT_TEST_INCLUDES) qt_test_test_elements_qt_SOURCES = \ - init/bitcoind.cpp \ + init/bitcoin-qt.cpp \ qt/test/apptests.cpp \ qt/test/rpcnestedtests.cpp \ qt/test/test_main.cpp \ diff --git a/src/bitcoin-wallet.cpp b/src/bitcoin-wallet.cpp index bb4d43c36a..003f20d442 100644 --- a/src/bitcoin-wallet.cpp +++ b/src/bitcoin-wallet.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -84,6 +85,13 @@ int main(int argc, char* argv[]) util::WinCmdLineArgs winArgs; std::tie(argc, argv) = winArgs.get(); #endif + + int exit_status; + std::unique_ptr init = interfaces::MakeWalletInit(argc, argv, exit_status); + if (!init) { + return exit_status; + } + SetupEnvironment(); RandomInit(); try { diff --git a/src/init/bitcoin-gui.cpp b/src/init/bitcoin-gui.cpp new file mode 100644 index 0000000000..c549ed3cc0 --- /dev/null +++ b/src/init/bitcoin-gui.cpp @@ -0,0 +1,47 @@ +// Copyright (c) 2021 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace init { +namespace { +const char* EXE_NAME = "bitcoin-gui"; + +class BitcoinGuiInit : public interfaces::Init +{ +public: + BitcoinGuiInit(const char* arg0) : m_ipc(interfaces::MakeIpc(EXE_NAME, arg0, *this)) + { + m_node.args = &gArgs; + m_node.init = this; + } + std::unique_ptr makeNode() override { return interfaces::MakeNode(m_node); } + std::unique_ptr makeChain() override { return interfaces::MakeChain(m_node); } + std::unique_ptr makeWalletClient(interfaces::Chain& chain) override + { + return MakeWalletClient(chain, *Assert(m_node.args)); + } + std::unique_ptr makeEcho() override { return interfaces::MakeEcho(); } + interfaces::Ipc* ipc() override { return m_ipc.get(); } + NodeContext m_node; + std::unique_ptr m_ipc; +}; +} // namespace +} // namespace init + +namespace interfaces { +std::unique_ptr MakeGuiInit(int argc, char* argv[]) +{ + return std::make_unique(argc > 0 ? argv[0] : ""); +} +} // namespace interfaces diff --git a/src/init/bitcoin-qt.cpp b/src/init/bitcoin-qt.cpp new file mode 100644 index 0000000000..d71177e885 --- /dev/null +++ b/src/init/bitcoin-qt.cpp @@ -0,0 +1,42 @@ +// Copyright (c) 2021 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace init { +namespace { +class BitcoinQtInit : public interfaces::Init +{ +public: + BitcoinQtInit() + { + m_node.args = &gArgs; + m_node.init = this; + } + std::unique_ptr makeNode() override { return interfaces::MakeNode(m_node); } + std::unique_ptr makeChain() override { return interfaces::MakeChain(m_node); } + std::unique_ptr makeWalletClient(interfaces::Chain& chain) override + { + return MakeWalletClient(chain, *Assert(m_node.args)); + } + std::unique_ptr makeEcho() override { return interfaces::MakeEcho(); } + NodeContext m_node; +}; +} // namespace +} // namespace init + +namespace interfaces { +std::unique_ptr MakeGuiInit(int argc, char* argv[]) +{ + return std::make_unique(); +} +} // namespace interfaces diff --git a/src/init/bitcoin-wallet.cpp b/src/init/bitcoin-wallet.cpp new file mode 100644 index 0000000000..e9dcde72fe --- /dev/null +++ b/src/init/bitcoin-wallet.cpp @@ -0,0 +1,12 @@ +// Copyright (c) 2021 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include + +namespace interfaces { +std::unique_ptr MakeWalletInit(int argc, char* argv[], int& exit_status) +{ + return std::make_unique(); +} +} // namespace interfaces diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index e5e92e73ec..f658d187fb 100644 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include @@ -441,9 +440,7 @@ int GuiMain(int argc, char* argv[]) std::tie(argc, argv) = winArgs.get(); #endif - NodeContext node_context; - int unused_exit_status; - std::unique_ptr init = interfaces::MakeNodeInit(node_context, argc, argv, unused_exit_status); + std::unique_ptr init = interfaces::MakeGuiInit(argc, argv); SetupEnvironment(); util::ThreadSetInternalName("main"); diff --git a/src/qt/test/test_main.cpp b/src/qt/test/test_main.cpp index c133b3ebd5..45518ded40 100644 --- a/src/qt/test/test_main.cpp +++ b/src/qt/test/test_main.cpp @@ -52,9 +52,7 @@ int main(int argc, char* argv[]) BasicTestingSetup dummy{CBaseChainParams::REGTEST}; } - NodeContext node_context; - int unused_exit_status; - std::unique_ptr init = interfaces::MakeNodeInit(node_context, argc, argv, unused_exit_status); + std::unique_ptr init = interfaces::MakeGuiInit(argc, argv); gArgs.ForceSetArg("-listen", "0"); gArgs.ForceSetArg("-listenonion", "0"); gArgs.ForceSetArg("-discover", "0");