Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

build: tighter Univalue integration, remove --with-system-univalue #22646

Merged
merged 3 commits into from
Oct 20, 2021

Conversation

fanquake
Copy link
Member

@fanquake fanquake commented Aug 6, 2021

This PR more tightly integrates building Univalue into our build system. This follows the same approach we use for LevelDB, (Makefile.leveldb.include), and CRC32C (Makefile.crc32c.include), and will be the same approach we use for minisketch; see #23114.

This approach yields a number of benefits, including:

  • Faster configuration due to one less subconfigure being run during ./configure i.e 22s with this PR vs 26s
  • Faster autoconf i.e 13s with this PR vs 17s
  • Improved caching
  • No more issues with compiler flags i.e build: compile univalue as c++11 #12467
  • More direct control means we can build exactly the objects we want

There might be one argument against making this change, which is that builders should have the option to use "proper shared/system libraries". However, I think that falls down for a few reasons. The first being that we already don't support building with a number of system libraries (secp256k1, leveldb, crc32c); some for good reason. Univalue is really the odd one out at the moment.

Note that the only fork of Core I'm aware of, that actively patches in support for using system libs, also explicitly marks them as "DANGEROUS" and "NOT SUPPORTED". So it would seem they exist more to satisfy a distro requirement, as opposed to something that anyone should, or would actually use in practice.

PRs like #22412 highlight the "issue" with us operating with our own Univalue fork, where we actively fix bugs, and make improvements, when upstream (https://github.com/jgarzik/univalue) may not be taking those improvements, and by all accounts, is not currently actively maintained. Bitcoin Core should not be hamstrung into not being able to fix bugs in a library, and/or have to litter our source with "workarounds", i.e #22412, for bugs we've already fixed, based on the fact that an upstream project is not actively being maintained. Allowing builders to use system libs is really only exacerbating this problem, with little benefit to our project. Bitcoin Core is not quite like your average piece of distro packaged software.

There is the potential for us to give the same treatment to libsecp256k1, however it seems doing that is currently less straightforward.

@DrahtBot
Copy link
Contributor

DrahtBot commented Aug 6, 2021

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

Conflicts

Reviewers, this pull request conflicts with the following ones:

  • #23114 (Add minisketch subtree and integrate into build/test by fanquake)
  • #23049 ([WIP] net: implement a StratumV2 Template Provider in core by Fi3)
  • #20201 (build: pkg-config related cleanup by hebasto)

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.

@jnewbery
Copy link
Contributor

jnewbery commented Aug 6, 2021

Strong concept ACK!

As well as the technical benefits listed in the PR description, a strong reason to go in this direction is to lower our maintenance and testing burden. Being able to build with a system univalue library really doesn't provide any benefit to users, but results in issues like #22412 which suck up reviewer and maintainer time. Maintaining support for different versions of univalue also expands the matrix of different build/configuration combinations which we really should (but don't) test if we claim support.

@ryanofsky
Copy link
Contributor

I know that the forking process already began before this PR, and I think that forking in open source can be very good. But I also think that when you fork, it is better practically and ethically to rename the fork. In the case of a library, this doesn't need to involve renaming functions and classes in the library, but the forked library should at least have different library filenames (libunivalue.a) and include filenames (in this case just univalue.h) so it is not a nightmare if downstream projects have code requiring both libraries as dependencies. Also it would be good to rename the source directory src/univalue/ and update the readme documentation src/univalue/README.md to explicity say the library has been forked, the forks are incompatible, problems and discussions about the fork should be directed at the new issue tracker / mailing list / irc channel / whatever, not at the original project.

The idea is that by renaming a directory and two files, you can make things less ambiguous, confusing, and potentially painful for downstream developers, while also being kinder to the author of the original library and letting the name he chose for his project refer unambiguously to his own project instead of a collection of forks.

As for what name to substitute, for an internal fork it could be nonsense like xyzlkq for all it matters, or something like unibtc to be coherent, or something ike jsonvalue to be descriptive, or something like univalue-- to be cheeky, whatever.

Please ignore this suggestion if it's too cumbersome. Just wanted to describe a possible way to make forking less confusing and contentious.

@Rspigler
Copy link
Contributor

Rspigler commented Aug 6, 2021

Concept ACK. More control over our build is better.

@practicalswift
Copy link
Contributor

Concept ACK for the reasons @jnewbery gave in #22646 (comment)

@laanwj
Copy link
Member

laanwj commented Aug 16, 2021

Concept ACK.

Please ignore this suggestion if it's too cumbersome. Just wanted to de scribe a possible way to make forking less confusing and contentious.

Not sure about this. As said in the OP, we have done a similar thing for the leveldb and crc32c libraries with regard to maintaining our own fork without renaming them. The subsequent repositories have a mention in their github description that they are not the upstream project, this may be enough. To be clear, it is not the intent that other projects use our fork of the library, it is for our subtree use only. Nor is it intended for them to be packaged (e.g. in Linux distributions). Renaming the project might give a false signal that it's an independent project for general use, somehow.

(Also AFAIK we do still intend to follow upstream changes, and contributing changes upstream, even though they only get merged intermittently if at all, I think it's better regarded as a patch stack on top than a completely separate project)

@maflcko
Copy link
Member

maflcko commented Aug 17, 2021

Maybe the GitHub projects could be renamed to bitcoin-core/${upstream-name}-subtree to clarify this is a repo only used for bitcoin-core internal subtrees? I agree that renaming the project name itself (in the code) is too much and might even send the wrong impression that this is maintained for someone other than bitcoin-core itself.

@luke-jr
Copy link
Member

luke-jr commented Sep 2, 2021

Concept NACK.

UniValue is not comparable to secp256k1 and LevelDB - the latter are used in consensus-critical code, and so it's important to be careful about which bugs get fixed in them. Using the system UniValue isn't and shouldn't not be dangerous nor unsupported.

There is basically no reason to embed a copy of UniValue at all. If upstream support is lacking, we should just release our fork as a proper fork of the library or not require things upstream has decided not to do. The embedded copy should ideally be removed, and only ever build against the system install.

Other disagree with removing the embedded copy, however. Keeping support for both system and an embedded copy was a reasonable compromise. If we're not going to support both, however, the direction to go is removing the embedded copy, not dropping support for the correct configuration (system library).

@maflcko
Copy link
Member

maflcko commented Sep 2, 2021

Concept ACK.

Surely, in a world with enough maintenance resources, univalue could be released and integrated as a separate library. As there are evidently neither resources to maintain it as a separate library, nor maintain the integration of an external univalue, this seems like a good move.

@luke-jr
Copy link
Member

luke-jr commented Sep 2, 2021

It's literally less effort to maintain it properly.

All the work to integrate it is already done. The bugs recently introduced, have also been fixed aside from gatekeepers blocking the fixes from being merged.

@laanwj
Copy link
Member

laanwj commented Sep 16, 2021

Maybe the GitHub projects could be renamed to bitcoin-core/${upstream-name}-subtree to clarify this is a repo only used for bitcoin-core internal subtrees?

Sure, sounds good to me.

Edit: ok, i've renamed:

  • bitcoin-core/univaluebitcoin-core/univalue-subtree
  • bitcoin-core/leveldbbitcoin-core/leveldb-subtree
  • bitcoin-core/crc32cbitcoin-core/crc32c-subtree

The "Subtrees" section in the developer notes likely needs some updates after this.

fanquake added a commit to bitcoin-core/gui that referenced this pull request Sep 30, 2021
…enaming

2b90eae doc: update developer docs for subtree renaming (fanquake)

Pull request description:

  Update the developer docs after the [recent subtree renaming](bitcoin/bitcoin#22646 (comment)).

ACKs for top commit:
  hebasto:
    ACK 2b90eae

Tree-SHA512: ed0eec8db888e60595c07f4fad0a506673e4b10345fb2dd6d1a98d785da22bddf1fe8896aa52fd67f5e1688e3c91c6b642739e08646f1b920f50f0d35037d961
@jnewbery
Copy link
Contributor

jnewbery commented Oct 4, 2021

bitcoin-core/univalue-subtree#19 is merged. Does this need rebasing?

@fanquake fanquake changed the title [POC] Tighter Univalue integration, remove --with-system-univalue build: tighter Univalue integration, remove --with-system-univalue Oct 4, 2021
@fanquake fanquake force-pushed the tighter_univalue_integration branch from 140a473 to d39b49a Compare October 4, 2021 11:35
@fanquake
Copy link
Member Author

fanquake commented Oct 4, 2021

bitcoin-core/univalue-subtree#19 is merged. Does this need rebasing?

I've rebased on master and dropped the cherry-picks in favour of a subtree update. I've also fixed up the integration commit so that make dist is working properly, and made some other minor changes. Also updated the PR description.

@maflcko
Copy link
Member

maflcko commented Oct 4, 2021

The changes without the last commit will break building with git-bisect? If yes, the changes should probably be squashed into the previous merge commit (git reset --soft HEAD~ && git commit --amend).

@fanquake fanquake force-pushed the tighter_univalue_integration branch from ff2fb53 to 9aa3257 Compare October 4, 2021 23:33
@fanquake
Copy link
Member Author

fanquake commented Oct 4, 2021

Pushed a fix for the CI failures. The fail*.json sources were missing from the dist tarball, which was causing unitester to fail.

The changes without the last commit will break building with git-bisect?

They shouldn't do. After the subtree pull, univalue is still buildable using autotools. We atomically swap from building univalue using autotools, to integrating univalue into our build in the last commit.


LIBUNIVALUE = libunivalue.la
noinst_LTLIBRARIES += $(LIBUNIVALUE)
libunivalue_la_SOURCES = $(UNIVALUE_LIB_SOURCES_INT) $(UNIVALUE_DIST_HEADERS_INT) $(UNIVALUE_LIB_HEADERS_INT) $(UNIVALUE_TEST_FILES_INT)
Copy link
Contributor

Choose a reason for hiding this comment

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

Would it be appropriate to split this into other Automake primaries like DATA, HEADERS, etc?

Copy link
Member

@theuni theuni Oct 19, 2021

Choose a reason for hiding this comment

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

Wouldn't hurt, but it doesn't matter a ton for now since it's all noinst_.

I suspect we will end up needing to make a distinction between headers and source files when we get to c++20 and modules, though.

Copy link
Member Author

Choose a reason for hiding this comment

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

I'm going to save this for a followup.

@dongcarl
Copy link
Contributor

dongcarl commented Oct 12, 2021

ACK 0f95247 less my comment above, always nice to have an include-able sources.mk which makes integration easier.

@DrahtBot
Copy link
Contributor

Guix builds

File commit 6419bdf
(master)
commit adc9284
(master and this pull)
SHA256SUMS.part 57430d4cfea534e7... 90eacc0a4d12e195...
*-aarch64-linux-gnu-debug.tar.gz 9ac5c89fbf2e958a... 0c7a67a6165fd738...
*-aarch64-linux-gnu.tar.gz fb6ed9d3e3a06da1... 0b7e9c4dc94df909...
*-arm-linux-gnueabihf-debug.tar.gz bcfe755361d4f4a0... 1d91aea5d456f9bc...
*-arm-linux-gnueabihf.tar.gz 7ae3be5da7e23338... d0330582b15eb013...
*-osx-unsigned.dmg e52e0699c7d05349... e85d267e1ff01bad...
*-osx-unsigned.tar.gz 209f2f2ac192db09... d130e76ed4560675...
*-osx64.tar.gz 43cc4669c131c052... 3ec532ea9fde0a4b...
*-powerpc64-linux-gnu-debug.tar.gz 31273cba71ae7a63... b3a0128e22d8bacc...
*-powerpc64-linux-gnu.tar.gz 8459fb85502d8ca1... bcbdfc167eb9d0e1...
*-powerpc64le-linux-gnu-debug.tar.gz b15379f1d540d808... 542bee347777c6a6...
*-powerpc64le-linux-gnu.tar.gz 1f8bc012eb1c68ac... 9c375c743824b5e1...
*-riscv64-linux-gnu-debug.tar.gz 13b101bd639bbcb5... 265f85d5ab827cc6...
*-riscv64-linux-gnu.tar.gz 48d281ceade35519... 189f1f62af262a96...
*-win-unsigned.tar.gz ef39a755917cf4a8... 36e5cd05ece06895...
*-win64-debug.zip 1a513a2f3564f9d7... 0e3d1088b6840df3...
*-win64-setup-unsigned.exe 2da290f0d9af8e78... e9b1b65c0a143b3f...
*-win64.zip 7405c69d9e088c0a... c7055eff4e4abd34...
*-x86_64-linux-gnu-debug.tar.gz 67c96b9fe3f5c21e... 4ff19d3d73c6fe7e...
*-x86_64-linux-gnu.tar.gz bfaa676a253b1279... 91ab2e11b97f90dd...
*.tar.gz 9362f69e52311e85... aba92a8bd6ece6ca...
guix_build.log 0cd4e97f279ba8fb... bd39fcce35f4505e...
guix_build.log.diff e1226a5b02123413...

Copy link
Member

@theuni theuni left a comment

Choose a reason for hiding this comment

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

ACK 0f95247. Thanks fanquake for keeping this going.

There is the potential for us to give the same treatment to libsecp256k1, however it seems doing that is currently less straightforward.

After some discussion in #secp256k1, this probably isn't going to happen. It would require us to essentially copy/paste secp256k1's configure since it deals with c as opposed to c++. I proposed wrapping secp256k1 in a .cpp, but that idea was NACK'd quickly by the upstream maintainers. So I think that subconfigure will probably stay as-is.


LIBUNIVALUE = libunivalue.la
noinst_LTLIBRARIES += $(LIBUNIVALUE)
libunivalue_la_SOURCES = $(UNIVALUE_LIB_SOURCES_INT) $(UNIVALUE_DIST_HEADERS_INT) $(UNIVALUE_LIB_HEADERS_INT) $(UNIVALUE_TEST_FILES_INT)
Copy link
Member

@theuni theuni Oct 19, 2021

Choose a reason for hiding this comment

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

Wouldn't hurt, but it doesn't matter a ton for now since it's all noinst_.

I suspect we will end up needing to make a distinction between headers and source files when we get to c++20 and modules, though.

@fanquake
Copy link
Member Author

fanquake commented Oct 20, 2021

I'm going to go ahead and merge this. In regards to the comments earlier in this PR, we've done some work to make it more clear that our fork is an internal (for our use only) subtree, by renaming the repository, and I've also opened a PR to adjust the README to mention that our API has diverged from upstream: bitcoin-core/univalue-subtree#30.

After some discussion in #secp256k1, this probably isn't going to happen.

That is slightly disappointing, but at least now we'll be down to only a single extra configure invocation.

Edit: @theuni note that I modified your comment to remove my @ mention so that it wouldn't be included in the merge message.

@fanquake fanquake merged commit a7f28af into bitcoin:master Oct 20, 2021
@fanquake fanquake deleted the tighter_univalue_integration branch October 20, 2021 03:02
sidhujag pushed a commit to syscoin/syscoin that referenced this pull request Oct 20, 2021
@jnewbery
Copy link
Contributor

post-merge ACK 0f95247

I've tested the changes and confirmed that the subconfigure isn't run (and that it's slightly faster). I'm not an autotools expert so can only lightly review the diff, but it all looks reasonable to me.

fanquake added a commit to fanquake/bitcoin that referenced this pull request Nov 8, 2021
fanquake added a commit that referenced this pull request Nov 8, 2021
78e3670 doc: remove mention of system univalue (fanquake)

Pull request description:

  Should have been part of #22646.

ACKs for top commit:
  hebasto:
    ACK 78e3670

Tree-SHA512: a5d54d73526033825ce4467cc3c57c26064739eef546556975a4c6f1f5bea84004640acd426734f90f98bc7a76ec837d716aa31167f2bdce7ee3887ad92e3152
sidhujag pushed a commit to syscoin/syscoin that referenced this pull request Nov 8, 2021
…d-unix.md

78e3670 doc: remove mention of system univalue (fanquake)

Pull request description:

  Should have been part of bitcoin#22646.

ACKs for top commit:
  hebasto:
    ACK 78e3670

Tree-SHA512: a5d54d73526033825ce4467cc3c57c26064739eef546556975a4c6f1f5bea84004640acd426734f90f98bc7a76ec837d716aa31167f2bdce7ee3887ad92e3152
@hebasto
Copy link
Member

hebasto commented Nov 21, 2021

This PR breaks builds with depends for HOST=x86_64-w64-mingw32 DEBUG=1 due to massive errors like that:

/usr/bin/x86_64-w64-mingw32-ld: ./.libs/libunivalue.a(libunivalue_la-univalue.o):univalue.cpp:(.text+0x890): undefined reference to `__imp_pthread_mutex_lock'
/usr/bin/x86_64-w64-mingw32-ld: ./.libs/libunivalue.a(libunivalue_la-univalue.o):univalue.cpp:(.text+0x8b0): undefined reference to `__imp_pthread_mutex_unlock'

during linking univalue/test/object.exe, univalue/test/unitester.exe and univalue/test/no_nul.exe.

@fanquake
Copy link
Member Author

This PR breaks builds with depends for HOST=x86_64-w64-mingw32 DEBUG=1 due to massive errors like that:

This is the same as #19772.

@hebasto
Copy link
Member

hebasto commented Nov 27, 2021

This PR breaks builds with depends for HOST=x86_64-w64-mingw32 DEBUG=1 due to massive errors like that:

This is the same as #19772.

The fix has been suggested on #23612.

kwvg added a commit to kwvg/dash that referenced this pull request May 1, 2022
PastaPastaPasta pushed a commit to dashpay/dash that referenced this pull request May 2, 2022
…tem-univalue` (#4823)

* merge bitcoin#22646: tighter Univalue integration, remove `--with-system-univalue`

* masternode: add missing header in meta.cpp
martinus pushed a commit to martinus/univalue that referenced this pull request May 9, 2022
See discussion in bitcoin/bitcoin#22646.

Co-authored-by: MarcoFalke <falke.marco@gmail.com>
@fanquake fanquake mentioned this pull request Jun 14, 2022
maflcko pushed a commit to bitcoin-core/gui that referenced this pull request Jun 16, 2022
d873ff9 refactor: cleanups post unsubtree'ing univalue (fanquake)
e2aa704 refactor: un-subtree univalue (fanquake)

Pull request description:

  At this point, maintaining Univalue as a subtree doesn’t serve much purpose, other than being an inconvenience for making changes to the code (along with polluting our repo with a number of files we don’t use). Our [Univalue fork](https://github.com/bitcoin-core/univalue-subtree) currently deviates from the [upstream API](https://github.com/jgarzik/univalue), and for some time has been marked as not-maintained for use by other projects (I'm not aware of any that use it). The upstream Univalue is not maintained, and has not been for some time. There are no new releases, bugs remain unfixed, and PR's we've upstreamed, https://github.com/jgarzik/univalue/pulls, are not being commented on/merged.

  Another substantial benefit of no-longer maintaining a subtree is removing the rather awkward work-flow currently required to make changes to the Univalue code, particularly breaking changes / introducing new features, e.g. bitcoin-core/univalue-subtree#27. We need to dance around and merge changes to our fork, with a flag, then pull them down here, then switch to using the new code, then go back to our Univalue repo, and remove the old code / flag, then pull the repo down here again, and remove our usage of the flag. Quite the overcomplicated mess.

  With this PR I'm proposing we stop treating Univalue like a subtree, or upstream project/fork, and going forward, treat it as part of this codebase, which we can refactor directly (with pulls to this repo. Ideally, after this is merged, our univalue subtree repo could be marked as "archived". In this repo, I think there is a good chance that the Univalue code will ultimately be refactored away into "modern" C++, i.e using `std::variant` (at least one person has played around with doing this).

  Univalue history:
  - Subtree first introduced: bitcoin/bitcoin#6637
  - `--system-univalue` option introduced: bitcoin/bitcoin#7349
    Suggestion was to use system Univalue by default.
    This was pushed back on by contributors, as well as the [upstream Univalue](https://github.com/jgarzik/univalue) maintainer (jgarzik).
  - Our fork's README was updated to say `It is not maintained for usage by other projects. Notably, the API may break in non-backward-compatible ways.` : bitcoin-core/univalue-subtree#17
  - Our fork README additionally updated to say `the API is broken in non-backward-compatible ways.` : bitcoin-core/univalue-subtree#30
  - `--system-univalue` option removed: bitcoin/bitcoin#22646
  - Univalue "subtree" removed: This PR.

  Guix Build (x86_64):
  ```bash
  06748985a9a386457d10a411b5afe1d59536e5653ec9c5bc8ac8410cd715d073  guix-build-d873ff96e51a/output/aarch64-linux-gnu/SHA256SUMS.part
  57d81891f6d4ae417dd3bcbfc90839600e103da9c7d7b09dbebb82f0119241f3  guix-build-d873ff96e51a/output/aarch64-linux-gnu/bitcoin-d873ff96e51a-aarch64-linux-gnu-debug.tar.gz
  7bb70d3b67253f5e8e5af8158bbf1b4b3e25e782f951d3defb7976534ae67d62  guix-build-d873ff96e51a/output/aarch64-linux-gnu/bitcoin-d873ff96e51a-aarch64-linux-gnu.tar.gz
  b1acb90877d6e3b8d4bd2d57103889e0474263e4153f302eba8cb304fd1aecd7  guix-build-d873ff96e51a/output/arm-linux-gnueabihf/SHA256SUMS.part
  91f9f65aebc131522cae5b523359c62e402a2c929670e1cca19d6a2760d29e04  guix-build-d873ff96e51a/output/arm-linux-gnueabihf/bitcoin-d873ff96e51a-arm-linux-gnueabihf-debug.tar.gz
  1fc3ed39bfc95592503b8dd11f468240deca4fb757f9adb08a0f07f5c0690837  guix-build-d873ff96e51a/output/arm-linux-gnueabihf/bitcoin-d873ff96e51a-arm-linux-gnueabihf.tar.gz
  a5cf5bd0ee0de92fb03f6bca91cfa6667ed77885112e71dd92a82bbd8670141e  guix-build-d873ff96e51a/output/arm64-apple-darwin/SHA256SUMS.part
  f6715399cebb5ac0a09f190fe805146c13d1e8eba57401541d0628da3badc588  guix-build-d873ff96e51a/output/arm64-apple-darwin/bitcoin-d873ff96e51a-arm64-apple-darwin-unsigned.dmg
  07cf82cab4e459ed4e862fc3a2903e49ac750adc6b6fe0534ec165f00e666230  guix-build-d873ff96e51a/output/arm64-apple-darwin/bitcoin-d873ff96e51a-arm64-apple-darwin-unsigned.tar.gz
  81bc076aa415183109e2848fa3cc0265b34f6af3e75b76bcbc6cff524db76a0f  guix-build-d873ff96e51a/output/arm64-apple-darwin/bitcoin-d873ff96e51a-arm64-apple-darwin.tar.gz
  8751b05a3395d668e31217c92cbce9c131aa3566b3784a7e3544adf34fc89fe8  guix-build-d873ff96e51a/output/dist-archive/bitcoin-d873ff96e51a.tar.gz
  526b7780a16a3de3c6006606d3d7a8c2ca565ef28669e2f6f303349a252e4977  guix-build-d873ff96e51a/output/powerpc64-linux-gnu/SHA256SUMS.part
  ff917a50d2b20d41a5954e1ba1e8fb39498a9c8867828483af3f501573148ede  guix-build-d873ff96e51a/output/powerpc64-linux-gnu/bitcoin-d873ff96e51a-powerpc64-linux-gnu-debug.tar.gz
  0311455c821ad392013fc3999a2b2d027fdb5c28e7eb6c3fea9cec29f3730d2d  guix-build-d873ff96e51a/output/powerpc64-linux-gnu/bitcoin-d873ff96e51a-powerpc64-linux-gnu.tar.gz
  983c2553990eb7cebb26e1a0a3e5a9308259dea60d0b64ab6782892d02a7abc1  guix-build-d873ff96e51a/output/powerpc64le-linux-gnu/SHA256SUMS.part
  aba604827d969348671ec3f36dbf37469292715d3f756a7f44a0a5243dbe02f3  guix-build-d873ff96e51a/output/powerpc64le-linux-gnu/bitcoin-d873ff96e51a-powerpc64le-linux-gnu-debug.tar.gz
  e450bd82020d5086f3bb0a23181263315cc05eaf6e5809d0a2115bff4e7ddb2e  guix-build-d873ff96e51a/output/powerpc64le-linux-gnu/bitcoin-d873ff96e51a-powerpc64le-linux-gnu.tar.gz
  476e8e2c80498b241af154abd9112bd2767110c0d6d7e9fa11761de716cb760f  guix-build-d873ff96e51a/output/riscv64-linux-gnu/SHA256SUMS.part
  a76435b3492efcd9af47ad652170605fad50691fd5aff2b46bce0bd08014879e  guix-build-d873ff96e51a/output/riscv64-linux-gnu/bitcoin-d873ff96e51a-riscv64-linux-gnu-debug.tar.gz
  83985d409cd90bf7120cf7902ee442595d28a1469b7c600b666ef901981e5190  guix-build-d873ff96e51a/output/riscv64-linux-gnu/bitcoin-d873ff96e51a-riscv64-linux-gnu.tar.gz
  61c89850244ddf5813ff80c242eff89925d30bccadfa5cb63e968c3af49eb964  guix-build-d873ff96e51a/output/x86_64-apple-darwin/SHA256SUMS.part
  cd219fab8918b061a342357d298aca0c044feb34c6d50a7851d5d3bf18cec267  guix-build-d873ff96e51a/output/x86_64-apple-darwin/bitcoin-d873ff96e51a-x86_64-apple-darwin-unsigned.dmg
  1170d3fdb199fbfca2c20b2a77cc81a6fe24b7e4973543a4461e887f14ac68e9  guix-build-d873ff96e51a/output/x86_64-apple-darwin/bitcoin-d873ff96e51a-x86_64-apple-darwin-unsigned.tar.gz
  71e93297ed8c581a7ed32a6948ef7b1ea2e7c43cb054181de3b5f604f7a2c28b  guix-build-d873ff96e51a/output/x86_64-apple-darwin/bitcoin-d873ff96e51a-x86_64-apple-darwin.tar.gz
  fc8b7b670de9d175775e73df47dc855581c873a9be4adf1d81a4dbb2831d5348  guix-build-d873ff96e51a/output/x86_64-linux-gnu/SHA256SUMS.part
  5703b02c2647f9997aa5ca12514d6a54b1eb2e29046223ca062383326b95894f  guix-build-d873ff96e51a/output/x86_64-linux-gnu/bitcoin-d873ff96e51a-x86_64-linux-gnu-debug.tar.gz
  bab4b932b83476cf6fc2e0b5bf0d2203287f7fd0d1a968e325f2edd5b1d8415b  guix-build-d873ff96e51a/output/x86_64-linux-gnu/bitcoin-d873ff96e51a-x86_64-linux-gnu.tar.gz
  5d180b0415fa8e825d46928c168cb1ae6e27016841b2ff8e190bf13879a5545c  guix-build-d873ff96e51a/output/x86_64-w64-mingw32/SHA256SUMS.part
  d469695a32f6414b25fef7b5fdfda4d854071450ba25148a1dce468114fa9057  guix-build-d873ff96e51a/output/x86_64-w64-mingw32/bitcoin-d873ff96e51a-win64-debug.zip
  2e7d4e533a5998863c115c586c61b75b4039cd329e12ed24cff78b7f16b6ea57  guix-build-d873ff96e51a/output/x86_64-w64-mingw32/bitcoin-d873ff96e51a-win64-setup-unsigned.exe
  3dabbd627b532beef57c3d4b5bd30c93c5ea74c492918484cf24685aca8d7bc4  guix-build-d873ff96e51a/output/x86_64-w64-mingw32/bitcoin-d873ff96e51a-win64-unsigned.tar.gz
  3a40660fba08f7632efd1f73c198f8298db33eab6ef5eaca88b997d95fc31f29  guix-build-d873ff96e51a/output/x86_64-w64-mingw32/bitcoin-d873ff96e51a-win64.zip
  ```

  Guix Build (arm64):
  ```bash
  0e764679199358fc321dcfcb58c6302e6518f55b3fd27bdd47f2da2a826ba16a  guix-build-d873ff96e51a/output/arm-linux-gnueabihf/SHA256SUMS.part
  5955d28e6d56e5a3297dab723b8478f1b0bb7f5b86476c581339122f34cc7f14  guix-build-d873ff96e51a/output/arm-linux-gnueabihf/bitcoin-d873ff96e51a-arm-linux-gnueabihf-debug.tar.gz
  49c68bc0066f709be68f1e5731425d51fb3cb8062a24aa9fa599987165759cad  guix-build-d873ff96e51a/output/arm-linux-gnueabihf/bitcoin-d873ff96e51a-arm-linux-gnueabihf.tar.gz
  ca678d4eb27c9fa3c527211c0ccb145322a15f327545b5c82f1d1b8d3c310e5a  guix-build-d873ff96e51a/output/arm64-apple-darwin/SHA256SUMS.part
  38366d7fbd769b426f1097e966abe39f01a7ce743f6af1cd0f228b1801d3c87f  guix-build-d873ff96e51a/output/arm64-apple-darwin/bitcoin-d873ff96e51a-arm64-apple-darwin-unsigned.dmg
  0c05dc9c17f5d8237b3e003c2e4c715455c3868bd4cd014e2a15ceb152b27b9c  guix-build-d873ff96e51a/output/arm64-apple-darwin/bitcoin-d873ff96e51a-arm64-apple-darwin-unsigned.tar.gz
  32676e1f9f07f3f77143f8b6038c943da6ba93b081232ec52c2ff940f9f7cc88  guix-build-d873ff96e51a/output/arm64-apple-darwin/bitcoin-d873ff96e51a-arm64-apple-darwin.tar.gz
  8751b05a3395d668e31217c92cbce9c131aa3566b3784a7e3544adf34fc89fe8  guix-build-d873ff96e51a/output/dist-archive/bitcoin-d873ff96e51a.tar.gz
  bdae66515060cab0b362784f0b2019b77da0435f1732d3c91fabcfb5e8c675f6  guix-build-d873ff96e51a/output/powerpc64-linux-gnu/SHA256SUMS.part
  8d837391310b4cdec2296a6e78a9f9b3ea2b3da7870881a5cedf86a3429c08c6  guix-build-d873ff96e51a/output/powerpc64-linux-gnu/bitcoin-d873ff96e51a-powerpc64-linux-gnu-debug.tar.gz
  efe825d6f36338bd4c0b427901b72d666f819858fb241a4211f03bbb738f6961  guix-build-d873ff96e51a/output/powerpc64-linux-gnu/bitcoin-d873ff96e51a-powerpc64-linux-gnu.tar.gz
  7494cf8c5f384ca3205b3ed44dd4c0edebcb9e0a6bf9c8e649fc6d99cc5a10b2  guix-build-d873ff96e51a/output/powerpc64le-linux-gnu/SHA256SUMS.part
  8ceeb21d7fce9e164dbb47b35d0551b59819075fc44dcea39603132340f80c41  guix-build-d873ff96e51a/output/powerpc64le-linux-gnu/bitcoin-d873ff96e51a-powerpc64le-linux-gnu-debug.tar.gz
  bfbbb20dc4e7b30444a52f5f57b5789b5d1edee80abdc8066129b48c59ee65c9  guix-build-d873ff96e51a/output/powerpc64le-linux-gnu/bitcoin-d873ff96e51a-powerpc64le-linux-gnu.tar.gz
  65d578b81b00a1032039362dc6be1a71368f390188e0f948829afd03b8858ed2  guix-build-d873ff96e51a/output/riscv64-linux-gnu/SHA256SUMS.part
  e5233d7e7a8832893ff414c78eb3d4bca3ae30d1a1f789a23419c6739b203022  guix-build-d873ff96e51a/output/riscv64-linux-gnu/bitcoin-d873ff96e51a-riscv64-linux-gnu-debug.tar.gz
  fb6d9f5a063dc7752fcc2acc95a0052322d7c8c86d2c6373e0ceb949dcf22f49  guix-build-d873ff96e51a/output/riscv64-linux-gnu/bitcoin-d873ff96e51a-riscv64-linux-gnu.tar.gz
  61c89850244ddf5813ff80c242eff89925d30bccadfa5cb63e968c3af49eb964  guix-build-d873ff96e51a/output/x86_64-apple-darwin/SHA256SUMS.part
  cd219fab8918b061a342357d298aca0c044feb34c6d50a7851d5d3bf18cec267  guix-build-d873ff96e51a/output/x86_64-apple-darwin/bitcoin-d873ff96e51a-x86_64-apple-darwin-unsigned.dmg
  1170d3fdb199fbfca2c20b2a77cc81a6fe24b7e4973543a4461e887f14ac68e9  guix-build-d873ff96e51a/output/x86_64-apple-darwin/bitcoin-d873ff96e51a-x86_64-apple-darwin-unsigned.tar.gz
  71e93297ed8c581a7ed32a6948ef7b1ea2e7c43cb054181de3b5f604f7a2c28b  guix-build-d873ff96e51a/output/x86_64-apple-darwin/bitcoin-d873ff96e51a-x86_64-apple-darwin.tar.gz
  46e9b067ec385ee14642aebc5ec09d7d2382e0204eeb17dc64587013eddd5dff  guix-build-d873ff96e51a/output/x86_64-linux-gnu/SHA256SUMS.part
  23278b19daac51e7df65b817b79fc93562d0f4eb193ef87472456f4bed1464d7  guix-build-d873ff96e51a/output/x86_64-linux-gnu/bitcoin-d873ff96e51a-x86_64-linux-gnu-debug.tar.gz
  4d5e5e23f089a59185f62faf367d8ca86476e406e6b7bbc9e8950cd89d94534d  guix-build-d873ff96e51a/output/x86_64-linux-gnu/bitcoin-d873ff96e51a-x86_64-linux-gnu.tar.gz
  eec8ab97ee9aceef8cb4e7cb5026225ffc5c7b8e8a6d376e8348020000e5af88  guix-build-d873ff96e51a/output/x86_64-w64-mingw32/SHA256SUMS.part
  a31819e67c373f30eafce8dbcb3d6d0c61d1dcf59c51023aa79321934f8a7d2a  guix-build-d873ff96e51a/output/x86_64-w64-mingw32/bitcoin-d873ff96e51a-win64-debug.zip
  2e7d4e533a5998863c115c586c61b75b4039cd329e12ed24cff78b7f16b6ea57  guix-build-d873ff96e51a/output/x86_64-w64-mingw32/bitcoin-d873ff96e51a-win64-setup-unsigned.exe
  3dabbd627b532beef57c3d4b5bd30c93c5ea74c492918484cf24685aca8d7bc4  guix-build-d873ff96e51a/output/x86_64-w64-mingw32/bitcoin-d873ff96e51a-win64-unsigned.tar.gz
  ec438531b4694913dbbf7c91920dcbd957354b164f807867c16a001898edf669  guix-build-d873ff96e51a/output/x86_64-w64-mingw32/bitcoin-d873ff96e51a-win64.zip
  ```

ACKs for top commit:
  laanwj:
    Code review ACK d873ff9
  MarcoFalke:
    re-ACK d873ff9 only changes: 📼

Tree-SHA512: fc7d781e8cc0fc0a0080eb4b5019e91c55275e087149ed3b5abc6b691170b0ab76f1dd3ce9bb8846eef023897a89123e14751ce8facf2a170829858199904bff
dekm pushed a commit to unigrid-project/daemon that referenced this pull request Oct 27, 2022
…ith-system-univalue`

0f95247 Integrate univalue into our buildsystem (Cory Fields)
9b49ed6 Squashed 'src/univalue/' changes from 98fadc0909..a44caf65fe (fanquake)

Pull request description:

  This PR more tightly integrates building Univalue into our build system. This follows the same approach we use for [LevelDB](https://github.com/bitcoin-core/leveldb/), ([`Makefile.leveldb.include`](https://github.com/bitcoin/bitcoin/blob/master/src/Makefile.leveldb.include)), and [CRC32C](https://github.com/bitcoin-core/crc32c) ([`Makefile.crc32c.include`](https://github.com/bitcoin/bitcoin/blob/master/src/Makefile.crc32c.include)), and will be the same approach we use for [minisketch](https://github.com/sipa/minisketch); see bitcoin#23114.

  This approach yields a number of benefits, including:
  * Faster configuration due to one less subconfigure being run during `./configure` i.e 22s with this PR vs 26s
  * Faster autoconf i.e 13s with this PR vs 17s
  * Improved caching
  * No more issues with compiler flags i.e bitcoin#12467
  * More direct control means we can build exactly the objects we want

  There might be one argument against making this change, which is that builders should have the option to use "proper shared/system libraries". However, I think that falls down for a few reasons. The first being that we already don't support building with a number of system libraries (secp256k1, leveldb, crc32c); some for good reason. Univalue is really the odd one out at the moment.

  Note that the only fork of Core I'm aware of, that actively patches in support for using system libs, also explicitly marks them as ["DANGEROUS"](https://github.com/bitcoinknots/bitcoin/blob/a886811721ce66eb586871706b3f5dd27518ac3e/configure.ac#L1430) and ["NOT SUPPORTED"](https://github.com/bitcoinknots/bitcoin/blob/a886811721ce66eb586871706b3f5dd27518ac3e/configure.ac#L1312). So it would seem they exist more to satisfy a distro requirement, as opposed to something that anyone should, or would actually use in practice.

  PRs like bitcoin#22412 highlight the "issue" with us operating with our own Univalue fork, where we actively fix bugs, and make improvements, when upstream (https://github.com/jgarzik/univalue) may not be taking those improvements, and by all accounts, is not currently actively maintained. Bitcoin Core should not be hamstrung into not being able to fix bugs in a library, and/or have to litter our source with "workarounds", i.e bitcoin#22412, for bugs we've already fixed, based on the fact that an upstream project is not actively being maintained. Allowing builders to use system libs is really only exacerbating this problem, with little benefit to our project. Bitcoin Core is not quite like your average piece of distro packaged software.

  There is the potential for us to give the same treatment to libsecp256k1, however it seems doing that is currently less straightforward.

ACKs for top commit:
  dongcarl:
    ACK 0f95247 less my comment above, always nice to have an include-able `sources.mk` which makes integration easier.
  theuni:
    ACK 0f95247. Thanks fanquake for keeping this going.

Tree-SHA512: a7f2e41ee7cba06ae72388638e86b264eca1b9a8b81c15d1d7b45df960c88c3b91578b4ade020f8cc61d75cf8d16914575f9a78fa4cef9c12be63504ed804b99
@bitcoin bitcoin locked and limited conversation to collaborators Nov 27, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.