Skip to content

Multiprocess build support#16367

Merged
maflcko merged 5 commits intobitcoin:masterfrom
ryanofsky:pr/ipc-build
Apr 10, 2020
Merged

Multiprocess build support#16367
maflcko merged 5 commits intobitcoin:masterfrom
ryanofsky:pr/ipc-build

Conversation

@ryanofsky
Copy link
Contributor

@ryanofsky ryanofsky commented Jul 10, 2019

This PR is part of the process separation project.

This splits autotools, depends build, and travis changes out of #10102, so code changes and build system changes can be reviewed separately.

@DrahtBot
Copy link
Contributor

DrahtBot commented Jul 10, 2019

The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

Conflicts

Reviewers, this pull request conflicts with the following ones:

If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

@Sjors
Copy link
Member

Sjors commented Jul 11, 2019

Adding capnp probably deserves it's own PR, but at least a separate commit.

What is native_boost?

On macOS, I looks like I need to do more than just brew install cmake. See flood of errors.

@ryanofsky
Copy link
Contributor Author

On macOS, I looks like I need to do more than just brew install cmake. See flood of errors.

Thanks for the log! It looks like the error is:

#error "This code requires C++14. Either your compiler does not support it or it is not enabled."

So probably what's happening is that for whatever reason my compiler defaults to c++14, while your compiler defaults to an older c++ version. It looks like I could fix the libmultiprocess build to specify this:

https://cmake.org/cmake/help/latest/command/target_compile_features.html
https://cmake.org/cmake/help/latest/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.html#prop_gbl:CMAKE_CXX_KNOWN_FEATURES

An alternate approach might be to downgrade capnp from 0.7.0, since 0.7.0 is the first version that requires c++14, and I'm actually not relying on any 0.7.0 features.

I do need to try building and running this code again on mac soon, since I haven't tried it in a while.

@Sjors
Copy link
Member

Sjors commented Jul 11, 2019

See also #13356 for C++14 discussion. However, as long as multiprocess is optional, I think it's more future proof to use the C++14, with the latest capnp version, and fix the macOS build.

@ryanofsky ryanofsky force-pushed the pr/ipc-build branch 2 times, most recently from 5516a43 to f477167 Compare July 15, 2019 18:41
Copy link

@ariard ariard left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, I succeed to build bitcoin-gui and bitcoin-node and bitcoin-wallet on Debian 9.

Main problem I had to build first libmultiprocess as a dependency and then pass its library directory with --with-libmultiprocess to ./configure which isn't documented in the multiprocess.md. Then to run bitcoin-node and bitcoin-wallet I had to add libcapnp-rpc-0.7.0.so in runtime search path. But it succeed and both are working successfully. Don't try to run bitcoin-gui as I was lacking more dependencies.

IMO you should update doc/build-unix.md with a multiprocess section which tell you exactly what to do step by step and requirements. And we should blindly follow these sections on Debian/Fedora/Gentoo and see if it's smooth enough for a user.

But overall, super excited to go forward with multiprocess !

Copy link
Contributor Author

@ryanofsky ryanofsky left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for testing, ariard! It sounds like you encountered bugs that you worked around, but I'd like to know more specifics about what wasn't working. I'm happy to help debug anytime, or if you want to work online, you can post issues to https://github.com/chaincodelabs/libmultiprocess/issues/new (general issues, bitcoin-specific issues, and support requests all welcome there). Regarding the specific workarounds:

  • Passing a prefix directory to --with-libmultiprocess (or specifying it at all) shouldn't be necessary, and I actually removed the option to hardcode a prefix in some new changes I haven't pushed yet. The configure script should be able to locate dependencies through pkgconf. If that isn't happening please let me know the specifics or open an issue!

  • Regarding documentation, configure --help text should serve as a reference for config options, and the --enable-multiprocess error messages should provide clear guidance if anything goes wrong. If the help text isn't helpful, I'd want to open an issue to track that. multiprocess.md and libmultiprocess README.md could definitely be improved, but for install steps I would mostly want to add to the existing install steps rather than add separate instructions. So far I've only really looked at the depends instructions, not the unix/mac/windows instructions, and I need to get to those at some point.

  • The problem with library paths sounds like a bug. Rpaths should be set correctly so you shouldn't need to anything special at runtime.

@ariard
Copy link

ariard commented Jul 26, 2019

For others reviewers, after talking with Russ, my mistake was not to use depends prefix as described in depends/README.md. Will give it another try after updates.

ryanofsky added a commit to ryanofsky/libmultiprocess that referenced this pull request Aug 6, 2019
This simplifies multiprocess build code somewhat
(bitcoin/bitcoin#16367) so it only has to invoke one
code generator instead of two, and is probably a little more future proof in
that is should make it possible to change capnp options without any requiring
changes outside libmultiprocess.
ryanofsky added a commit to bitcoin-core/libmultiprocess that referenced this pull request Aug 6, 2019
f89e4b3 Invoke capnp compile from mpgen (Russell Yanofsky)

Pull request description:

  This simplifies multiprocess build code somewhat (bitcoin/bitcoin#16367) so it only has to invoke one code generator instead of two, and is probably a little more future proof in that is should make it possible to change capnp options without any requiring changes outside libmultiprocess.

Top commit has no ACKs.

Tree-SHA512: 64534ec8d020eaf6a2dd351e4e48bf3a7a9897c126db1585c259950070b513aa9a416204e64ad1ab16717f41c534b9aafced4844039ed1f9037550946533445e
@ryanofsky ryanofsky force-pushed the pr/ipc-build branch 3 times, most recently from d8ad7a2 to 3b48de7 Compare August 6, 2019 21:48
@ryanofsky
Copy link
Contributor Author

re: http://gnusha.org/bitcoin-builds/2019-08-16.log

<dongcarl> cfields: I think the boostrap part of boost is actually "native", as in, should be moved to a boost_native package like the native part of protobuf was... Does that ring somewhat true to you?

@dongcarl this PR adds a native_boost package, but there should be no need for a native package just to use the bootstrap tool, unless you need to use the bootstrap tool from other packages, and not just use it internally in the boost package.

@fanquake
Copy link
Member

fanquake commented Aug 23, 2019

I depends built, compiled and played around with this (macOS). Going to re-read all the discussion in #10102.

I'm also going to extract 7149b1a and a295b9d into a separate PR. They are clear improvements, and will likely clear up some confusion here and in other depends related PRs.

@theuni
Copy link
Member

theuni commented Apr 10, 2020

Uh, was this actually ready to go in? Have we determined for sure that this is the approach we want? Has libmultiprocess been well-reviewed?

Maybe I missed the discussion, but I thought this was still at the RFC stage.

@ryanofsky
Copy link
Contributor Author

Uh, was this actually ready to go in? Have we determined for sure that this is the approach we want? Has libmultiprocess been well-reviewed?

Definitely not reviewed enough to be turned on. This PR is just adding options to build with it which are off by default and marked experimental.

@maflcko
Copy link
Member

maflcko commented Apr 10, 2020

Have we determined for sure that this is the approach we want?

@theuni No, we haven't. Multiprocess is experimental and turned off by default. We have 6 months to come up with a better solution or revert it before the 0.21.0 release.

@theuni
Copy link
Member

theuni commented Apr 10, 2020

@MarcoFalke Well it requires c++17, so it won't fit into 0.21.0 with the schedule we've come up with iirc.

@maflcko
Copy link
Member

maflcko commented Apr 10, 2020

0.21.0 releases are planned to be built with C++17, and the multiprocess build is disabled by default. Not to mention that this doesn't include a user-visible feature, so there is nothing to ship in either case.

The changes here add a build skeleton for the eventual multiprocess goal and some ci files to have it run on travis.

Some more context from IRC for archival purposes:

[18:40] <MarcoFalke> cfields: Are you assuming that multiprocess was merged for 0.20.0rc1?
[18:40] <cfields> MarcoFalke: no. It's an enormous change even for master.
[18:40] <fanquake> No. We are just confused why it was merged at all
[18:40] <cfields> afaik we've never merged a half-decided feature?
[18:41] <fanquake> Regardless of the questions Cory posted. Having a single ACK for what is the basis of a major architectural change for a project seems a bit weak.
[18:41] <MarcoFalke> I have reviewed the changes as well (not libmultiprocess)
[18:42] <MarcoFalke> If it is controversial, it should be reverted 
[18:42] <cfields> to be clear: I don't have a problem with this way forward afaik. I just think it deserves way more discussion.
[18:42] <cfields> Rather, I don't know if I have a problem. I assume anything ryanofsky comes up with is reasonable :)
[18:43] <MarcoFalke> It was not clear from the discussion in the pull request that this was not ready
[18:44] <cfields> MarcoFalke: I don't see how it can be ready unless the overall approach is agreed upon.
[18:45] <MarcoFalke> multiprocess has been discussed for three years as an idea to split the gui from the node (or even longer). I must have missed the discussions that multiprocess is unwanted.
[18:47] <MarcoFalke> Or controversial
[18:47] <fanquake> As Cory has just mentioned, we can't do it in 0.21.0 anyways, if it requires c++17 ?
[18:48] <MarcoFalke> Ok, so the goal is to revert and then schedule for 0.22, together with C++17?
[18:48] <fanquake> Given the discussion in #16684
[18:48] <gribble> https://github.com/bitcoin/bitcoin/issues/16684 | Discussion: upgrading to C++17 · Issue #16684 · bitcoin/bitcoin · GitHub
[18:48] <cfields> MarcoFalke: again, I'm not arguing against the idea. I just don't think the the specifics have been discussed.
[18:49] <MarcoFalke> Though, it doesn't require C++17, if the user doesn't ask for it
[18:50] <fanquake> MarcoFalke: can you clarify https://github.com/chaincodelabs/libmultiprocess/blob/master/CMakeLists.txt#L84 ?
[18:50] <MarcoFalke> fanquake: If you opt out of multiprocess, which is the default, you can go with C++11
[18:51] <cfields> So we've merged something we can't build?
[18:51] <fanquake> Sure, but that means we can't actually use multiprocess until after c++17 is a requirement for the project.
[18:51] <MarcoFalke> cfields: Gitian could use it
[18:52] <MarcoFalke> Aren't we building releases for 0.21.0 with C++17?
[18:52] <MarcoFalke> The project stays at C++11
[18:53] <MarcoFalke> Ok, to sum up: People like multiprocess as a concept, but the current implementation was not agree upon?
[18:53] <MarcoFalke> *agreed
[18:53] <ryanofsky> cfields, just to make sure there's no confusion, you know the whole multiprocess feature is implemented to be an optional add-on?
[18:54] <ryanofsky> it's not like there's a switch from single process to multiprocess, it's an option to build a new set of binaries alongside existing ones
[18:57] <MarcoFalke> ryanofsky: I think the disagreement is mostly about the additions to the depends/bitcoind Makefile and general concerns about libmultiprocess being ready
[18:58] <ryanofsky> right but this doesn't seem that different than the build change that added support for rapidcheck
[18:58] <ryanofsky> just an optional thing turned off by default that we had build/depends support for
[18:59] <cfields> ryanofsky: yes, but again, I thought that approach was at the RFC stage. When I reviewed it, I reviewed it on-merit, without arguing potential alternatives yet.
[19:00] <cfields> ryanofsky: I really really don't want to discourage this, that's not my aim. But I doubt I'm alone in being caught off-guard by the merge.
[19:00] <ryanofsky> sure, i'm just making sure there isn't some misunderstanding about the change
[19:02] <ryanofsky> whatever people think the next steps should be is fine with me
[19:07] <MarcoFalke> It is more invasive than rapidcheck, but to me it felt like the same concept: Merge it early when the code has received review, but mark it experimental so that it can be pulled out and reverted quickly if needed.
[19:09] <cfields> MarcoFalke: yeah, I see that now. To me, the merge implied a commitment to eventual default-ness because afaik that's the path we've always taken for things like this (thinking of univalue/secp256k1, at least).
[19:10] <fanquake> I think it would still be good for someone to outline how they expect this integration to play out. When does it get turned on by default? When do Cores build requirements change? When is review of the libmultiprocess lib/repo happening etc
[19:11] <cfields> ^^ +1
[19:11] <MarcoFalke> All of this must happen before it is taken out of experimental

@ryanofsky
Copy link
Contributor Author

@MarcoFalke Well it requires c++17, so it won't fit into 0.21.0 with the schedule we've come up with iirc.

I'm little confused about this comment. What's the issue with c++17? Requirements to build bitcoin aren't changed by this PR. This PR adds a new --enable-multiprocess configure option and new MULTIPROCESS=1 depends option. Only these new options which didn't exist before require c++17, so this is fully backwards compatible. Also the switch to c++17 from c++14 in libmultiprocess was done very recently in bitcoin-core/libmultiprocess#25 to be able to use std::optional. It would be possible to have c++11 support if neccessary, too

@maflcko
Copy link
Member

maflcko commented Apr 10, 2020

It would be possible to have c++11 support if neccessary, too

C++17 will most likely be in Bitcoin Core before multiprocess is enabled by default, so I don't think effort should be put into C++11 support.

@maflcko
Copy link
Member

maflcko commented Apr 10, 2020

Further discussion about reverting the changes now:

[19:18] <MarcoFalke> Is there anything to do before next weeks meeting? Right now it would be a clean git revert and I think everyone would be ok with reverting it until at least next week's meeting.
[19:19] <cfields> MarcoFalke: up to you. I feel heard either way :)
[19:20] <ryanofsky> either way's fine with me too
[19:20] <MarcoFalke> fanquake: Mind flipping a coin?
[19:21] <fanquake> I don't mind leaving it in, looking forward to thrashing all this out in some discussion

maflcko pushed a commit to maflcko/bitcoin-core that referenced this pull request Apr 10, 2020
This reverts the changes made in merge commit
1b30761:

This reverts commit b919efa.
This reverts commit d54f64c.
This reverts commit 787f406.
This reverts commit d630646.
This reverts commit e6e44ee.
maflcko pushed a commit that referenced this pull request Apr 11, 2020
f29bd54 Revert "Merge #16367: Multiprocess build support" (MarcoFalke)

Pull request description:

  Reverting the changes temporarily is going to help with the following:

  * Discussion about the next steps for the multiprocess concept and the experimental libmultiprocess library without having code already commited in the master branch, potentially influencing the discussion
  * Allowing for more conceptual as well as code review ACKs to accumulate, since the pull only had one ACK (two if I count mine, which didn't make it to GitHub)

  Can be reviewed with `git diff HEAD HEAD~2 | wc` or `git diff 1b30761~ | wc` (should be all zeros)

  Context here: #16367 (comment)

ACKs for top commit:
  ryanofsky:
    Code review ACK f29bd54. Confirmed revert with
  fanquake:
    ACK f29bd54

Tree-SHA512: 3ce06c30de23c81c2d69cfb3ada20b3458c48efda1a5ba96aee678e946c499f701bc83e9eae91580f0156c0f30a90e5d015ef8b1806ad611d433c482fa55723e
@jnewbery
Copy link
Contributor

Some more context from IRC for archival purposes:

Further discussion about reverting the changes now:

Where is all this discussion taking place? I can't find it in my local #bitcoin-core-dev log, and I don't see it in http://www.erisian.com.au/bitcoin-core-dev/ either

@fanquake
Copy link
Member

fanquake commented Apr 12, 2020

Where is all this discussion taking place?

@jnewbery It's happening in the #bitcoin-builds channel. Logs available here: http://gnusha.org/bitcoin-builds/.

sidhujag pushed a commit to syscoin/syscoin that referenced this pull request Apr 13, 2020
b919efa depends: Use default macos clang compiler (Russell Yanofsky)
d54f64c Add multiprocess travis configuration (Russell Yanofsky)
787f406 Set LD_LIBRARY_PATH consistently in travis tests (Russell Yanofsky)
d630646 libmultiprocess depends build (Russell Yanofsky)
e6e44ee 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 bitcoin#10102, so code changes and build system changes can be reviewed separately.

ACKs for top commit:
  hebasto:
    re-ACK b919efa, rebased only since my [previous](bitcoin#16367 (comment)) review.

Tree-SHA512: ebc5e403cc99a0d9629ed7fe1595e01d57e6d1255cbf03968a3196ff6f528f734c78060fdc065724ee1f923bcc5aa2b29470fcb36a7f15957eb57c76d58178a4
sidhujag pushed a commit to syscoin/syscoin that referenced this pull request Apr 13, 2020
ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Apr 15, 2020
Suggested by Cory Fields <cory-nospam-@coryfields.com>
bitcoin#16367 (comment)
as alternate workaround for problem described
bitcoin#16367 (comment)
ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Apr 15, 2020
depends: Use default macos clang compiler

Suggested by Cory Fields <cory-nospam-@coryfields.com>
bitcoin#16367 (comment)
as alternate workaround for problem described
bitcoin#16367 (comment)
@ryanofsky
Copy link
Contributor Author

This PR, which was reverted in #18588, is a proposed meeting topic. Background in https://github.com/bitcoin-core/bitcoin-devwiki/wiki/Process-Separation

Topic could be broad, but two questions I'd like to get input on are:

  1. What should steps and requirements be for moving chaincodelabs/libmultiprocess to bitcoin-core/, assuming this would be a better home for the library.

  2. What should review requirements be for this PR, which adds --enable-multiprocess autoconf option (disabled by default and labeled experimental), and a travis build, and a depends definition to build libmultiprocess (also disabled by default and labeled experimental)?

ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Apr 16, 2020
Suggested by Cory Fields <cory-nospam-@coryfields.com>
bitcoin#16367 (comment)
as alternate workaround for problem described
bitcoin#16367 (comment)
ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Apr 20, 2020
Suggested by Cory Fields <cory-nospam-@coryfields.com>
bitcoin#16367 (comment)
as alternate workaround for problem described
bitcoin#16367 (comment)
ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Apr 22, 2020
Catalina SDK clang stopped automatically searching the SDK include paths when
invoked without --sysroot:

bitcoin#16367 (comment)
Homebrew/homebrew-core#45061

This hasn't been a problem for current native depends packages because are
passing their own --sysroot values, and hasn't been a problem for current host
packages because they use `darwin_` commands instead of `build_darwin_`
commands.  But the current `build_darwin_CC` and `build_darwin_CXX` commands
are still unnecessarily fragile, and incompatible with new native depends
packages added in bitcoin#18677.

Cory Fields <cory-nospam-@coryfields.com> suggested in
bitcoin#16367 (comment) switching
compiler from SDK clang to native clang (from $PATH) to avoid this problem.
This is easy and makes a certain amount of sense for building native packages,
as opposed to host packages. But fanquake <fanquake@gmail.com> pointed out in
bitcoin#18677 (comment) that it
would be inconsistent use switch to non-SDK compilers while still using other
SDK tools like ranlib and install_name_tool. So simplest, minimal fix seems to
be just adding the missing --sysroot option.
ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Apr 22, 2020
Suggested by Cory Fields <cory-nospam-@coryfields.com>
bitcoin#16367 (comment)
as alternate workaround for problem described
bitcoin#16367 (comment)
ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request May 1, 2020
depends: Add --sysroot option to mac os native compile flags

Catalina SDK clang stopped automatically searching the SDK include paths when
invoked without --sysroot:

bitcoin#16367 (comment)
Homebrew/homebrew-core#45061

This hasn't been a problem for current native depends packages because are
passing their own --sysroot values, and hasn't been a problem for current host
packages because they use `darwin_` commands instead of `build_darwin_`
commands.  But the current `build_darwin_CC` and `build_darwin_CXX` commands
are still unnecessarily fragile, and incompatible with new native depends
packages added in bitcoin#18677.

Cory Fields <cory-nospam-@coryfields.com> suggested in
bitcoin#16367 (comment) switching
compiler from SDK clang to native clang (from $PATH) to avoid this problem.
This is easy and makes a certain amount of sense for building native packages,
as opposed to host packages. But fanquake <fanquake@gmail.com> pointed out in
bitcoin#18677 (comment) that it
would be inconsistent use switch to non-SDK compilers while still using other
SDK tools like ranlib and install_name_tool. So simplest, minimal fix seems to
be just adding the missing --sysroot option.
fanquake added a commit that referenced this pull request May 7, 2020
…flags

1e94a2b depends: Add --sysroot option to mac os native compile flags (Russell Yanofsky)

Pull request description:

  Catalina SDK clang stopped automatically searching the SDK include paths when invoked without `--sysroot`:

  - #16367 (comment)
  - Homebrew/homebrew-core#45061

  This hasn't been a problem for current native depends packages because are passing their own `--sysroot` values, and hasn't been a problem for current host packages because they use `darwin_` commands instead of `build_darwin_` commands.  But the current `build_darwin_CC` and `build_darwin_CXX` commands are still unnecessarily fragile, and incompatible with new native depends packages added in #18677.

  Cory Fields (theuni) suggested in #16367 (comment) switching compiler from SDK clang to native clang (from $PATH) to avoid this problem. This is easy and makes a certain amount of sense for building native packages, as opposed to host packages. But Michael (fanquake) pointed out in #18677 (comment) that it would be inconsistent to switch to non-SDK compilers while still using other SDK tools like `ranlib` and `install_name_tool`. So simplest, minimal fix seems to be just adding the missing `--sysroot` option.

ACKs for top commit:
  ryanofsky:
    > ACK [1e94a2b](1e94a2b) - I think this change is ok, and I prefer it to the previous patch.
  fanquake:
    ACK 1e94a2b - I think this change is ok, and I prefer it to the previous patch. Thanks for the summary in the PR description. I played around with Xcode and the CLT; I think previously I didn't fully grok the slight differences between the two.

Tree-SHA512: 4d4bbb7f49acb76d934a872a15b4e14f36290b508cb9e728815f959767ec174bcfb6d2ca7dcd995cc550d86980d64d4247ea5ecfca2301f0953006e50744fdb4
sidhujag pushed a commit to syscoin/syscoin that referenced this pull request May 12, 2020
…ompile flags

1e94a2b depends: Add --sysroot option to mac os native compile flags (Russell Yanofsky)

Pull request description:

  Catalina SDK clang stopped automatically searching the SDK include paths when invoked without `--sysroot`:

  - bitcoin#16367 (comment)
  - Homebrew/homebrew-core#45061

  This hasn't been a problem for current native depends packages because are passing their own `--sysroot` values, and hasn't been a problem for current host packages because they use `darwin_` commands instead of `build_darwin_` commands.  But the current `build_darwin_CC` and `build_darwin_CXX` commands are still unnecessarily fragile, and incompatible with new native depends packages added in bitcoin#18677.

  Cory Fields (theuni) suggested in bitcoin#16367 (comment) switching compiler from SDK clang to native clang (from $PATH) to avoid this problem. This is easy and makes a certain amount of sense for building native packages, as opposed to host packages. But Michael (fanquake) pointed out in bitcoin#18677 (comment) that it would be inconsistent to switch to non-SDK compilers while still using other SDK tools like `ranlib` and `install_name_tool`. So simplest, minimal fix seems to be just adding the missing `--sysroot` option.

ACKs for top commit:
  ryanofsky:
    > ACK [1e94a2b](bitcoin@1e94a2b) - I think this change is ok, and I prefer it to the previous patch.
  fanquake:
    ACK 1e94a2b - I think this change is ok, and I prefer it to the previous patch. Thanks for the summary in the PR description. I played around with Xcode and the CLT; I think previously I didn't fully grok the slight differences between the two.

Tree-SHA512: 4d4bbb7f49acb76d934a872a15b4e14f36290b508cb9e728815f959767ec174bcfb6d2ca7dcd995cc550d86980d64d4247ea5ecfca2301f0953006e50744fdb4
fanquake added a commit that referenced this pull request May 21, 2020
e2bab2a multiprocess: add multiprocess travis configuration (Russell Yanofsky)
603fd6a depends: add MULTIPROCESS depends option (Russell Yanofsky)
5d1377b build: multiprocess autotools changes (Russell Yanofsky)

Pull request description:

  This PR is part of the [process separation project](https://github.com/bitcoin/bitcoin/projects/10).

  ---

  This PR consists of build changes only. It adds an `--enable-multiprocess` autoconf option (off by default and marked experimental), that builds new `bitcoin-node` and `bitcoin-gui` binaries. These currently function the same as existing `bitcoind` and `bitcoin-qt` binaries, but are extended in #10102 with IPC features to execute node, wallet, and gui functions in separate processes.

  In addition to adding the `--enable-multiprocess` config flag, it also adds a depends package and autoconf rules to build with the [libmultiprocess](https://github.com/chaincodelabs/libmultiprocess) library, and it adds new travis configuration to exercise the build code and run functional tests with the new binaries.

  The changes in this PR were originally part of #10102 but were moved into #16367 to be able to develop and review the multiprocess build changes independently of the code changes. #16367 was briefly merged and then reverted in #18588. Only change since #16367 has been dropping the `native_boost.mk` depends package which was pointed out to be no longer necessary in #16367 (comment) and #18588 (review)

ACKs for top commit:
  practicalswift:
    ACK e2bab2a
  Sjors:
    tACK e2bab2a on macOS 10.15.4
  hebasto:
    ACK e2bab2a, tested on Linux Mint 19.3 (x86_64):

Tree-SHA512: b5a76eab5abf63d9d8b6d628cbdff4cc1888eef15cafa0a5d56369e2f9d02595fed623f4b74b2cf2830c42c05a774f0943e700f9c768a82d9d348cad199e135c
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

Development

Successfully merging this pull request may close these issues.

10 participants