Palladium Core Docker Build System
This directory contains Docker-based build scripts for:
- Linux
x86_64 - Linux
aarch64 - Linux
armv7l - Windows
x86_64(.exebinaries, optional NSIS installer)
Builds are executed entirely inside containers. Only the output directory is mounted back to the host (build/...).
Prerequisites
- Docker installed and running
- Access to Docker daemon (
docker build/docker run) - Recommended free disk space: 15+ GB
- Linux host recommended (Ubuntu 20.04+)
Platform note:
- Scripts use
--platform=linux/amd64. - On
amd64hosts this runs natively. - On non-
amd64hosts, compatible emulation (qemu/binfmt) is required and builds are slower.
Quick Start (Interactive Menu)
cd docker-build
./build-menu.sh
Menu options:
1: Linuxx86_642: Linuxaarch64(ARM64)3: Linuxarmv7l(ARM 32-bit)4: Windowsx86_644a: Windowsx86_64(Installer)5: Build all targets (binaries + Windows installer)6: Build all installers0: Exit
You can select multiple entries, for example 1 4a.
Build Targets
Linux x86_64
cd docker-build
./build-linux-x86_64.sh
Output: build/linux-x86_64/
palladiumdpalladium-clipalladium-txpalladium-walletpalladium-qt
Linux aarch64
cd docker-build
./build-linux-aarch64.sh
Output: build/linux-aarch64/
palladiumdpalladium-clipalladium-txpalladium-walletpalladium-qt
Linux armv7l
cd docker-build
./build-linux-armv7l.sh
Output: build/linux-armv7l/
palladiumdpalladium-clipalladium-txpalladium-walletpalladium-qt
Windows x86_64
Binaries:
cd docker-build
./build-windows.sh
Binaries + installer:
cd docker-build
./build-windows.sh --installer
Output: build/windows/
palladiumd.exepalladium-cli.exepalladium-tx.exepalladium-wallet.exepalladium-qt.exe- Installer (if requested):
palladium-*-win64-setup.exe
Technical Build Flow
Each build script does the following:
- Builds a Docker image from the current repository (
COPY . /src). - Starts a container and runs the build in
/src. - Performs an aggressive cleanup to avoid stale host artifacts.
- Builds
dependsfor the target host triple. - Runs
autogen.sh,configure,make -j$(nproc). - Copies final binaries into
/out(host-mounted output directory). - Applies host UID/GID ownership to output files.
Key details:
- Linux targets use host triples:
x86_64-pc-linux-gnuaarch64-linux-gnuarm-linux-gnueabihf
- Windows target uses:
x86_64-w64-mingw32
- Windows installer generation uses
make deploywhen--installeris passed.
Qt Toolchain Notes
To avoid Qt tool mismatch issues, Linux scripts force Qt tools from depends:
- prepend
depends/<host>/bintoPATH - pass
--with-qt-bindir=$PWD/depends/<host>/bintoconfigure
Qt version used by depends is defined in depends/packages/qt.mk:
- currently
5.9.8
Cleanup Strategy (Stale Artifact Protection)
Scripts run cleanup inside the container before building:
make distclean(if available)- remove
depends/<host> - remove
config.cache - Windows script also cleans
univaluebuild/caches explicitly:univalue/.libsunivalue/lib/.libsunivalue/config.cacheunivalue/config.status
This prevents ABI/toolchain mixing between host-compiled and container-compiled objects.
Troubleshooting
QT_INIT_METAOBJECT errors
Symptom:
- compile errors in generated
.mocfiles
Typical cause:
mocfrom system Qt mixed with headers/libs fromdependsQt
Mitigation already in scripts:
- force
dependsQt tools (PATH+--with-qt-bindir)
Linker errors such as __isoc23_strtol or missing UniValue symbols
Examples:
__isoc23_strtolUniValue::setBool(bool)UniValue::getValues() const
Typical cause:
- stale host-built objects reused in container link stage
Mitigation already in scripts:
- pre-build cleanup, including dedicated
univaluecleanup for Windows builds
Executable bit issues
cd docker-build
chmod +x *.sh
Force a clean host-side output
Usually not required, but useful after interrupted builds:
rm -rf build/linux-* build/windows
Main Files
docker-build/build-menu.shdocker-build/build-linux-x86_64.shdocker-build/build-linux-aarch64.shdocker-build/build-linux-armv7l.shdocker-build/build-windows.shdocker-build/Dockerfile.linux-x86_64docker-build/Dockerfile.linux-aarch64docker-build/Dockerfile.linux-armv7ldocker-build/Dockerfile.windows