diff --git a/INSTALL b/INSTALL index d8a9f6ad..7cd55a66 100644 --- a/INSTALL +++ b/INSTALL @@ -16,6 +16,11 @@ For a manual build, build depends first and configure against its config.site: CONFIG_SITE=$PWD/depends/x86_64-pc-linux-gnu/share/config.site ./configure make +The current native Qt wallet depends baseline includes Qt 6.8.3, OpenSSL 3.5.6, +Boost 1.91.0, Expat 2.8.0, FreeType 2.13.3, protobuf, Berkeley DB, libevent, +and GMP. Prefer the helper scripts in `contrib/` for repeatable fresh-host +builds. + Always verify source checksums and release signatures when building a release. See doc/build-*.md for instructions on building agrariand, diff --git a/README.md b/README.md index 740c74f9..db1d4225 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,8 @@ sudo apt install -y mingw-w64 The preferred build path uses the deterministic `depends/` system instead of mixing system libraries. The current native Ubuntu wallet path builds Qt 6.8.3, -OpenSSL 3.5.6, Boost 1.91.0, protobuf, Berkeley DB, and supporting libraries -inside `depends//`. +OpenSSL 3.5.6, Boost 1.91.0, Expat 2.8.0, FreeType 2.13.3, protobuf, +Berkeley DB, and supporting libraries inside `depends//`. All dependency builds are executed from within the `depends/` directory or via the helper scripts in `contrib/`. @@ -46,14 +46,13 @@ the helper scripts in `contrib/`. ```bash cd depends -make -j"$(nproc)" +make HOST=x86_64-pc-linux-gnu NO_QT=0 -j"$(nproc)" ``` ### Windows Cross-Compile (64-bit) ```bash -cd depends -make HOST=x86_64-w64-mingw32 -j"$(nproc)" +JOBS=1 ./contrib/build-win64-wallet.sh ``` ### Windows Cross-Compile (32-bit) diff --git a/depends/README.md b/depends/README.md index 2935ef8c..910c9366 100644 --- a/depends/README.md +++ b/depends/README.md @@ -2,7 +2,7 @@ To build dependencies for the current arch+OS: - make + make HOST=x86_64-pc-linux-gnu NO_QT=0 To build for another arch/OS: @@ -10,7 +10,7 @@ To build for another arch/OS: For example: - make HOST=x86_64-w64-mingw32 -j4 + make HOST=x86_64-w64-mingw32 NO_QT=0 -j1 A prefix will be generated that's suitable for plugging into Agrarian's configure. In the above example, a dir named x86_64-w64-mingw32 will be @@ -30,6 +30,17 @@ Common `host-platform-triplets` for cross compilation are: No other options are needed, the paths are automatically configured. +For the current Agrarian 2.0 branch, the preferred user-facing build entry +points are the helpers in `contrib/`: + +- `contrib/build-linux.sh` +- `contrib/build-linux-wallet.sh` +- `contrib/build-win64-wallet.sh` +- `contrib/agrarian-build-menu.sh` + +Those helpers set the correct Qt, host-tool, and protobuf paths around the +depends prefix. + ### Install the required dependencies: Ubuntu & Debian #### For macOS cross compilation @@ -44,7 +55,21 @@ No other options are needed, the paths are automatically configured. Common linux dependencies: - sudo apt-get install make automake cmake curl g++-multilib libtool binutils-gold bsdmainutils pkg-config python3 patch + sudo apt-get install make automake cmake curl git g++-multilib libtool binutils-gold bsdmainutils pkg-config python3 patch bzip2 xz-utils + +Native Linux Qt wallet builds also need the desktop development headers used by +Qt's xcb/font stack: + + sudo apt-get install libfontconfig1-dev libfreetype-dev libharfbuzz-dev \ + libbrotli-dev libbz2-dev libexpat1-dev libglib2.0-dev \ + libgraphite2-dev libpng-dev zlib1g-dev libx11-xcb-dev \ + libxcb1-dev libxcb-cursor-dev libxcb-icccm4-dev libxcb-image0-dev \ + libxcb-keysyms1-dev libxcb-randr0-dev libxcb-render0-dev \ + libxcb-render-util0-dev libxcb-shape0-dev libxcb-shm0-dev \ + libxcb-sync-dev libxcb-util-dev libxcb-xfixes0-dev \ + libxcb-xinerama0-dev libxcb-xkb-dev libxau-dev libxdmcp-dev \ + libxext-dev libxi-dev libxrender-dev libxkbcommon-dev \ + libxkbcommon-x11-dev For linux ARM cross compilation: diff --git a/doc/build-menu.md b/doc/build-menu.md index 52238200..8cf5b831 100644 --- a/doc/build-menu.md +++ b/doc/build-menu.md @@ -52,10 +52,11 @@ instead of being required as Ubuntu system development packages. The Linux Qt wallet option also installs Ubuntu desktop development headers needed by Qt's xcb platform plugin, including fontconfig, freetype, xcb, and -xkbcommon packages. The wallet helper uses the matching `protoc` built by -`depends/`, so a system protobuf compiler is not required. It also clears stale -Qt work directories before rebuilding, because failed CMake feature checks can -otherwise be cached between attempts. +xkbcommon packages. Expat 2.8.0 and FreeType 2.13.3 are built through +`depends/` for the Linux Qt/font stack. The wallet helper uses the matching +`protoc` built by `depends/`, so a system protobuf compiler is not required. It +also clears stale Qt work directories before rebuilding, because failed CMake +feature checks can otherwise be cached between attempts. Defaults -------- diff --git a/doc/build-ubuntu-24.md b/doc/build-ubuntu-24.md index c9f8982b..1eb3aa0f 100644 --- a/doc/build-ubuntu-24.md +++ b/doc/build-ubuntu-24.md @@ -23,12 +23,21 @@ Install the native daemon build dependencies: sudo apt-get update sudo apt-get install -y \ build-essential pkg-config autoconf automake libtool bsdmainutils \ - cmake ninja-build python3 curl git + cmake ninja-build python3 curl git make tar patch bzip2 xz-utils -For a headless Qt wallet smoke test, also install: +For a native Qt wallet build and headless Qt smoke test, also install: sudo apt-get install -y \ - xvfb + xvfb libfontconfig1-dev libfreetype-dev libharfbuzz-dev \ + libbrotli-dev libbz2-dev libexpat1-dev libglib2.0-dev \ + libgraphite2-dev libpng-dev zlib1g-dev libx11-xcb-dev \ + libxcb1-dev libxcb-cursor-dev libxcb-icccm4-dev \ + libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev \ + libxcb-render0-dev libxcb-render-util0-dev libxcb-shape0-dev \ + libxcb-shm0-dev libxcb-sync-dev libxcb-util-dev \ + libxcb-xfixes0-dev libxcb-xinerama0-dev libxcb-xkb-dev \ + libxau-dev libxdmcp-dev libxext-dev libxi-dev libxrender-dev \ + libxkbcommon-dev libxkbcommon-x11-dev Daemon build ------------ @@ -49,8 +58,9 @@ For the desktop wallet, use: JOBS=1 ./contrib/build-linux-wallet.sh The wallet helper builds/restores the native depends prefix first, including -Qt 6.8.3, OpenSSL 3.5.6, and Boost 1.91.0. It then configures the project with -the generated depends `config.site` and builds the Ubuntu Qt wallet. +Qt 6.8.3, OpenSSL 3.5.6, Boost 1.91.0, Expat 2.8.0, FreeType 2.13.3, and the +Linux Qt font/xcb support libraries. It then configures the project with the +generated depends `config.site` and builds the Ubuntu Qt wallet. Defaults: @@ -83,6 +93,13 @@ OpenSSL 3 The deterministic depends build currently uses OpenSSL 3.5.6. +Expat and FreeType +------------------ + +The native Ubuntu Qt wallet path uses Expat 2.8.0 through fontconfig and +FreeType 2.13.3 for Qt 6 static font support. Keep those in the deterministic +depends graph; do not satisfy them with ad hoc system-library fallbacks. + Berkeley DB ----------- diff --git a/doc/build-unix.md b/doc/build-unix.md index 26a566f2..0782823b 100644 --- a/doc/build-unix.md +++ b/doc/build-unix.md @@ -27,7 +27,8 @@ STANDARD BUILD WITH DEPENDS make install (optional) The native depends wallet path currently builds Qt 6.8.3, OpenSSL 3.5.6, -Boost 1.91.0, protobuf, Berkeley DB, and supporting libraries. +Boost 1.91.0, Expat 2.8.0, FreeType 2.13.3, protobuf, Berkeley DB, and +supporting libraries. For a daemon-only build: diff --git a/doc/build-wallets.md b/doc/build-wallets.md index 7f67a908..7770d6c2 100644 --- a/doc/build-wallets.md +++ b/doc/build-wallets.md @@ -33,7 +33,16 @@ Ubuntu package baseline For the native Ubuntu wallet: sudo apt-get install -y \ - cmake ninja-build xvfb + cmake ninja-build xvfb libfontconfig1-dev libfreetype-dev \ + libharfbuzz-dev libbrotli-dev libbz2-dev libexpat1-dev \ + libglib2.0-dev libgraphite2-dev libpng-dev zlib1g-dev \ + libx11-xcb-dev libxcb1-dev libxcb-cursor-dev libxcb-icccm4-dev \ + libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev \ + libxcb-render0-dev libxcb-render-util0-dev libxcb-shape0-dev \ + libxcb-shm0-dev libxcb-sync-dev libxcb-util-dev \ + libxcb-xfixes0-dev libxcb-xinerama0-dev libxcb-xkb-dev \ + libxau-dev libxdmcp-dev libxext-dev libxi-dev libxrender-dev \ + libxkbcommon-dev libxkbcommon-x11-dev For the Windows wallet: @@ -50,8 +59,8 @@ Why the helpers exist The wallet build is sensitive to tool version mismatches: -* Native Ubuntu uses the deterministic depends Qt6, OpenSSL, Boost, protobuf, - and supporting libraries. +* Native Ubuntu uses the deterministic depends Qt6, OpenSSL, Boost, Expat, + FreeType, protobuf, and supporting libraries. * Windows cross-target wallets use the deterministic depends Qt6 path and matching Qt host tools staged by depends. diff --git a/doc/build-windows.md b/doc/build-windows.md index 4d2005fb..ef3c84dc 100644 --- a/doc/build-windows.md +++ b/doc/build-windows.md @@ -153,13 +153,18 @@ Manual equivalent: --with-qt-libdir=$PWD/depends/x86_64-w64-mingw32/lib \ --with-qt-plugindir=$PWD/depends/x86_64-w64-mingw32/plugins \ --with-qt-translationdir=$PWD/depends/x86_64-w64-mingw32/translations \ - --with-qt-bindir=$PWD/depends/x86_64-w64-mingw32/native/bin + --with-qt-bindir=$PWD/depends/build/x86_64-pc-linux-gnu/bin \ + --with-protoc-bindir=$PWD/depends/build/x86_64-pc-linux-gnu/bin make ============================================================ BUILDING FOR 32-BIT WINDOWS ============================================================ +The current verified 2.0 Windows path is x86_64. The 32-bit instructions below +are retained as a legacy cross-build reference and should be revalidated before +release use. + Install toolchain: sudo apt install g++-mingw-w64-i686 mingw-w64-i686-dev @@ -234,6 +239,16 @@ The Windows cross-build helper targets the Qt 6.8 LTS depends path. Keep the helper's Qt host tools (`moc`, `uic`, `rcc`) staged from the matching depends build to avoid mixing host Qt tools with target Qt libraries. +============================================================ +DEPENDS BASELINE NOTE +============================================================ + +The 2.0 branch currently verifies Windows x86_64 builds against the same +modernized core dependency baseline as Linux: OpenSSL 3.5.6, Boost 1.91.0, +Qt 6.8.3, Berkeley DB 4.8.30, protobuf 2.6.1, libevent 2.1.8-stable, and GMP +6.1.2. Expat 2.8.0 and FreeType 2.13.3 are part of the Linux Qt/font depends +path and are documented in `doc/dependencies.md`. + ============================================================ END OF DOCUMENT ============================================================ diff --git a/doc/installer.md b/doc/installer.md index 828274d8..970ea5ec 100644 --- a/doc/installer.md +++ b/doc/installer.md @@ -1,6 +1,17 @@ Installer (Ubuntu) ================== +Status +--------------------- +The preferred fresh-host workflow for the 2.0 branch is currently +`contrib/agrarian-build-menu.sh`, with the direct helper scripts +`contrib/build-linux.sh`, `contrib/build-linux-wallet.sh`, and +`contrib/build-win64-wallet.sh` used for repeatable scripted builds. This +installer document is retained for the older `installer/agrarian-installer.sh` +CLI and should be treated as secondary until that installer is revalidated +against the current Qt 6.8.3/OpenSSL 3.5.6/Boost 1.91.0/Expat 2.8.0/FreeType +2.13.3 depends baseline. + Overview --------------------- The Agrarian installer is `installer/agrarian-installer.sh`. It automates the Ubuntu build steps by: @@ -110,14 +121,14 @@ Troubleshooting --------------------- Boost library naming/layout (the `-mt` suffix) -- Depends builds may produce Boost libs with suffixes like `libboost_thread-gcc-mt-1_64.a`. +- Depends builds may produce Boost libs with suffixes like `libboost_thread-gcc-mt-1_91.a`. - The installer checks for `libboost_thread*.a` and `libboost_system*.a`, so it tolerates `-mt` and versioned names. - If you are configuring manually, keep `--with-boost=` (the installer sets this for you) to avoid system Boost fallback. `config.site` and PATH pitfalls - The installer configures with `CONFIG_SITE=depends//share/config.site`. -- That `config.site` prepends `depends//native/bin` to `PATH`. Do not overwrite `PATH` with a minimal value; ensure `/usr/bin` and other system paths remain available. +- Current helper builds use native host tools from `depends/build//bin`. Do not overwrite `PATH` with a minimal value; ensure `/usr/bin` and other system paths remain available. - If `config.site` is missing, rebuild depends: ```bash @@ -153,7 +164,7 @@ Qt Cross-Compilation Packages (Ubuntu/Debian) Install the common Linux build tools (from `depends/README.md`): ```bash -sudo apt-get install make automake cmake curl g++-multilib libtool binutils-gold bsdmainutils pkg-config python3 patch +sudo apt-get install make automake cmake curl git g++-multilib libtool binutils-gold bsdmainutils pkg-config python3 patch bzip2 xz-utils ``` Then install toolchains per target: diff --git a/doc/modernization.md b/doc/modernization.md index 97eb85b3..cf803abc 100644 --- a/doc/modernization.md +++ b/doc/modernization.md @@ -14,6 +14,8 @@ The current deterministic `depends/` baseline is: - Qt 6.8.3 LTS - OpenSSL 3.5.6 LTS - Boost 1.91.0 +- Expat 2.8.0 for the Linux Qt/font stack +- FreeType 2.13.3 for Qt 6 static font support - Berkeley DB 4.8.30 for portable legacy wallet compatibility - protobuf 2.6.1 for the existing Qt payment request sources - libevent 2.1.8-stable diff --git a/docs/installer.md b/docs/installer.md index 59d3a865..caeaa2f2 100644 --- a/docs/installer.md +++ b/docs/installer.md @@ -4,6 +4,11 @@ actions. The current modernization baseline is Ubuntu 24.04 with deterministic `depends/`; see `doc/modernization.md` for the verified dependency set. +For fresh Ubuntu hosts, prefer `contrib/agrarian-build-menu.sh` first. The menu +script installs target-specific packages, updates the selected branch, builds +the deterministic depends tree, and can install/start the daemon for the current +user. This installer CLI is retained as a lower-level build tool. + ## Usage ```bash @@ -36,7 +41,9 @@ If wallet is enabled (default), installer preflight checks require: For the current native Ubuntu Qt wallet path, depends should also provide Qt6 pkg-config files such as `Qt6Core.pc`, `Qt6Gui.pc`, `Qt6Network.pc`, and -`Qt6Widgets.pc`. The Windows cross-build path also uses the Qt6 depends target. +`Qt6Widgets.pc`. The Linux Qt/font path also builds Expat 2.8.0 and FreeType +2.13.3 through depends. The Windows cross-build path also uses the Qt6 depends +target. When missing, the installer exits early and prints the exact missing path(s) plus the `make -C depends ...` command to fix them.