Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Building the bundles yourself

All release artifacts are produced by shell scripts in the repository root. You can build any single bundle, or everything at once.

Build everything: build-all.sh

./build-all.sh [OUTPUT_DIR]      # default output: ./artifacts

Runs all seven bundle scripts plus the Android release APK, then collects the resulting .tar.gz / .zip / .apk files into one directory together with a SHA256SUMS.txt manifest. Each step uses a different toolchain, so a missing toolchain fails only that step — the script always finishes and prints a PASS/FAIL summary (its exit code is the number of failed steps).

Prerequisites by target

TargetToolchain
Linux & Windows bundles (proxy and GUI)cross (cargo install cross) and a running Docker daemon. cross builds inside Docker images that carry the ALSA/X11/Wayland (Linux) or mingw-w64 (Windows) toolchains — a bare cargo build --target … from macOS fails on the C dependencies.
macOS bundlesNative cargo on a Mac (CoreAudio frameworks only exist there), plus Xcode command-line tools (lipo, codesign). Both x86_64-apple-darwin and aarch64-apple-darwin rust targets must be installed; the scripts pin MACOSX_DEPLOYMENT_TARGET=11.0 so binaries run on Big Sur and later.
Web client (inside every server bundle)rustup target add wasm32-unknown-unknown and cargo install wasm-bindgen-cli. The pipeline is cargo build --target wasm32-unknown-unknown --release + wasm-bindgen --target webnot wasm-pack.
Android APKAndroid SDK + NDK 27 (sdkmanager 'ndk;27.2.12479018'), rustup target add aarch64-linux-android. Built with Gradle (./gradlew :app:assembleRelease in crates/podsdr-android/android), which drives cargo itself.

Rust targets for the cross-compiled bundles must also be installed first, e.g.:

rustup target add aarch64-unknown-linux-gnu x86_64-unknown-linux-gnu x86_64-pc-windows-gnu

Each script checks its own prerequisites up front and exits with an installation hint if something is missing.

Individual bundle scripts

ScriptProduces
./bundle-proxy-pi.shpodsdr-proxy-pi-bundle.tar.gz (aarch64 Linux)
./bundle-proxy-x86_64.shpodsdr-proxy-x86_64-bundle.tar.gz
./bundle-proxy-macos.shpodsdr-proxy-macos-bundle.tar.gz (universal)
./bundle-proxy-windows.shpodsdr-proxy-windows-bundle.zip¹
./bundle-gui-linux.shpodsdr-gui-linux-x86_64.tar.gz
./bundle-gui-macos.shpodsdr-gui-macos-universal.tar.gz
./bundle-gui-windows.shpodsdr-gui-windows-x86_64.zip¹

¹ Falls back to .tar.gz when zip isn’t available on the build host.

Every server bundle script builds the WASM web client, cross-compiles podsdr-proxy and podsdr-emu in one invocation, and writes the launchers, service unit and README.txt described in Downloads.

Development runs (no bundle)

For working directly from a source checkout:

./run-web.sh [port]              # build WASM + serve it via a locally built proxy (plain HTTP, default port 8080)
./run-proxy-cloud.sh [name]      # build + run the proxy against the public cloud broker
./run-digimodes-web.sh [port]    # standalone FT8/FT4 web decoder
cargo run --release -p podsdr-gui              # desktop GUI
cargo run --release -p podsdr-emu -- --radio hermeslite   # emulator