Skip to content
Bitcoin Roots

v31.1-roots.1 · Commit 1: [PATCH 01/17] build(roots): establish v31 portability foundation

doc/roots-build-portability.md

Before: /dev/null · After: doc/roots-build-portability.md

File metadata
new file mode 100644
index 0000000000000000000000000000000000000000..7c1834c902b5934f599ec991095c6172905cac0f

Download original patch · Release notes

Diff rows 1–53 of 53. Line numbers refer to the original before/after files.

+ Added− RemovedUnmarked lines are context.

Scroll the code area horizontally to read long lines. The two line-number columns refer to before and after.

doc/roots-build-portability.md ADDED
@@ -0,0 +1,53 @@
1
+ # Roots v31 build portability
2
+
3
+ This foundation preserves build selection on the authenticated Core v31.1
4
+ base. It does not implement the deferred runtime contracts in the
5
+ [catalog](roots-features.md). Use the existing [Unix build guide](build-unix.md)
6
+ and [dependency list](dependencies.md) for the underlying Core prerequisites.
7
+
8
+ | Selection | Default | Requirement or limitation |
9
+ | --- | --- | --- |
10
+ | `BUILD_GUI` | OFF | ON requires a real Qt SDK; QR is enabled by default and requires QRencode. |
11
+ | `WITH_QT_VERSION` | 6 | Exactly 5 or 6; Qt 5 >= 5.11.3 or Qt 6 >= 6.2. Static Qt 5 requires the plugin-import CMake command introduced in 5.14. |
12
+ | `WITH_SYSTEM_LEVELDB` | OFF | ON requires LevelDB headers, MemEnv headers and a linkable `NewMemEnv`, either in LevelDB or a separate helper library. |
13
+ | `WITH_SYSTEM_LIBSECP256K1` | OFF | ON requires pkg-config metadata and the recovery, extrakeys, schnorrsig, ellswift and MuSig APIs used by v31, including `secp256k1_musig_pubkey_get`. |
14
+ | `WITH_MINIUPNPC` | OFF | Dependency discovery only, API >= 17. UPnP runtime and depends recipe integration are deferred to the peer theme. |
15
+ | `ENABLE_WALLET` / `BUILD_TESTS` | ON | Descriptor wallets use SQLite; no Berkeley DB option is restored. |
16
+ | `ENABLE_EXTERNAL_SIGNER` | ON | Retains the v31 external signer boundary; sweep extensions are deferred. |
17
+ | `ENABLE_IPC` | ON except Windows | May be explicitly disabled. IPC needs Cap'n Proto and the upstream libmultiprocess build prerequisites. |
18
+ | `WITH_QRENCODE` / `WITH_DBUS` | Conditional | Inherit v31 GUI/platform conditions. QR-to-PNG extensions are deferred. |
19
+
20
+ The embedded LevelDB fork remains the default. System LevelDB is an explicit
21
+ operator choice and does not contain the embedded fork's changes. Its finder
22
+ checks actual MemEnv linkage instead of assuming library presence proves
23
+ usability. Finder fixture tests check integrated helpers, split helpers,
24
+ missing-helper rejection and rejection of a broken Debug configuration despite
25
+ a usable Release library. Repeated integrated/split cache reconfiguration also
26
+ checks helper rediscovery and consumer linkage; these fixtures do not certify a
27
+ real distribution package.
28
+
29
+ Native SHA acceleration remains attached to the v31 crypto targets and source
30
+ files, using their compiler/architecture probes. No global architecture flag
31
+ is added and no cryptographic primitive or consensus rule is changed.
32
+
33
+ Example headless configuration (choose an available generator):
34
+
35
+ ```sh
36
+ cmake -S . -B build-headless -G Ninja -DBUILD_GUI=OFF -DENABLE_IPC=OFF
37
+ cmake --build build-headless -j2
38
+ ctest --test-dir build-headless --output-on-failure -j2
39
+ ```
40
+
41
+ For an installed Qt SDK, configure a separate directory with `-DBUILD_GUI=ON`
42
+ and `-DWITH_QT_VERSION=5` or `6`. Keep QR enabled for the full GUI profile;
43
+ `-DWITH_QRENCODE=OFF` is a deliberate reduced profile and cannot prove QR
44
+ coverage. Run the registered Qt tests with an available display or the
45
+ supported offscreen platform plugin. An unsuccessful dependency discovery is
46
+ an unresolved build gate, not a passing GUI test.
47
+
48
+ Unsupported or deferred switches are not silently treated as runtime
49
+ features. MiniUPnPc runtime and depends integration are owned by the peer theme;
50
+ Windows taskbar progress is owned by desktop integration. The old dedicated
51
+ Tor-subprocess declaration has no implementation at the pinned source.
52
+ No package installation or generated third-party compatibility shim is
53
+ part of this foundation.