build: prepare for subtree split#276
Conversation
|
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers. ReviewsSee the guideline for information on the review process.
If your review is incorrectly listed, please copy-paste ConflictsReviewers, 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. LLM Linter (✨ experimental)Possible typos and grammar issues:
2026-05-12 09:59:26 |
Move the library sources (CMakeLists.txt, cmake/, include/, pkgconfig/,
src/, test/) under a single lib/ prefix so that
git subtree split --prefix=lib -b lib
produces a 'lib' branch containing only the files needed for a full
library build and install. Downstream projects consuming libmultiprocess
as a git subtree can pull from this branch and avoid churn from changes
to CI scripts, README, doc/, examples, shell.nix and other files that
are not part of the library itself.
A new top-level CMakeLists.txt wrapper preserves 'cmake -S .' for
standalone builds; this is also the only way to build the example/
subdirectory, which lives outside lib/ since downstream subtree
consumers do not need it. See comments in CMakeLists.txt and
lib/CMakeLists.txt for details on how lib/ adapts between the two
build modes.
The bulk of this commit is a pure file move (renames only). Outside
the move itself, only minimal touch-ups were necessary in
lib/CMakeLists.txt and ci/scripts/{ci,bitcoin_core_ci}.sh.
0e96999 to
d8364e5
Compare
Bitcoin Core's cmake/libmultiprocess.cmake currently references the mpcalculator, mpprinter and mpexample targets, which no longer exist in the subtree (the example/ directory lives outside the 'lib' branch). Strip the offending line as part of replace_subtree so the bitcoin-core CI job configures cleanly. Remove this workaround once a matching Bitcoin Core PR has landed.
d8364e5 to
66d7b48
Compare
|
Concept ACK. It would be great if only needed files were imported into bitcoin core and things like ci scripts, documentation, and examples were excluded, since this could speed up review in both repositories. The approach here also seems workable although I think I'd probably still prefer the idea of moving unneeded files to a support branch as described #232 (comment) instead of using a partial subtree. That approach seems nice because it wouldn't require any changes to subtree import steps, or to the verifier, and wouldn't impact hashes, and wouldn't require any files except the support files to move. I also like the property of that approach where individual PRs only update the support branch or master branch, changes to master can't sneak in a support PR, and review effort can be focused on the right places (relatively more scrunity on master branch, and more freedom to experiment with CI improvements on the support branch). |
|
🐙 This pull request conflicts with the target branch and needs rebase. |
We can use a subtree split to export only a subset of this repository to downstream projects. The only thing we need to do is publish and maintain a branch, e.g.
lib, generated as follows:I published such a branch here: https://github.com/Sjors/libmultiprocess/commits/lib/
Commits that don't touch the prefix directory are skipped entirely. Others are stripped of content outside the prefix. This of course breaks PGP signatures, but the
libbranch commits are deterministically generated. On the Bitcoin Core side I plan to update the subtree linter to verify this.Because we can only export one directory, this PR moves the following library sources to
lib/:This leaves examples, documentation and CI outside the export. Tests could be moved out as well, but it seems useful to offer downstream projects an easy way to run these tests as part of their own CI.
A new top-level CMakeLists.txt wrapper preserves 'cmake -S .' for standalone builds; this is also the only way to build the example/ subdirectory. See comments in CMakeLists.txt and lib/CMakeLists.txt for details on how lib/ adapts between the two build modes. This can use some CMake expertise eyes. Most of the existing
CMakeList.txtcontent is simply moved, so it's best reviewed with--color-moved=dimmed-zebra.Commit 66d7b48 can be avoided if we drop examples from
cmake/libmultiprocess.cmakein Bitcoin Core in a separate PR first.Bitcoin Core side: Sjors/bitcoin#113 (will upstream later)
Fixes #232