docs: add Linux cross-build instructions for Windows x86 NSIS installer

Add Ubuntu-to-Windows build workflow using cargo-xwin for i686-pc-windows-msvc target. Update build-tunnel-helper.sh with host OS detection, target validation, and cargo-xwin support for Linux cross-compilation. Add tauri.windows.conf.json to configure NSIS-only bundle output and npm script for Linux-based Windows builds. Update client-platforms.md to document cross-compilation support and clarify that MSI packaging still requires Windows environment.
This commit is contained in:
2026-03-17 19:03:50 +01:00
parent 5242c780e4
commit 84be690a50
5 changed files with 76 additions and 3 deletions

View File

@@ -4,6 +4,7 @@ set -eu
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
HELPER_DIR="${ROOT_DIR}/tunnel-helper"
BUNDLED_DIR="${ROOT_DIR}/src-tauri/bundled"
HOST_OS="$(uname -s)"
TARGET="${1:-}"
if [ -z "${TARGET}" ]; then
@@ -26,7 +27,53 @@ case "${TARGET}" in
;;
esac
if [ "${TARGET}" = "i686-pc-windows-msvc" ]; then
case "${HOST_OS}" in
MINGW64_NT*|MSYS_NT*|CYGWIN_NT*)
;;
Linux)
if ! command -v cargo-xwin >/dev/null 2>&1; then
echo "Linux cross-builds for Windows require cargo-xwin."
echo "Install it with:"
echo " cargo install --locked cargo-xwin"
exit 1
fi
;;
*)
echo "Windows x86 helper builds are supported on Windows or on Linux with cargo-xwin."
echo "Current host: ${HOST_OS}"
echo "Install the target with:"
echo " rustup target add i686-pc-windows-msvc"
exit 1
;;
esac
fi
if [ "${TARGET}" = "aarch64-apple-darwin" ] && [ "${HOST_OS}" != "Darwin" ]; then
echo "macOS ARM helper builds must run on macOS."
echo "Current host: ${HOST_OS}"
echo "Use a Mac, then install the target with:"
echo " rustup target add aarch64-apple-darwin"
exit 1
fi
if ! command -v rustup >/dev/null 2>&1; then
echo "rustup is required to verify/install Rust targets."
exit 1
fi
if ! rustup target list --installed | grep -qx "${TARGET}"; then
echo "Rust target ${TARGET} is not installed."
echo "Install it with:"
echo " rustup target add ${TARGET}"
exit 1
fi
mkdir -p "${OUTPUT_DIR}"
cargo build --manifest-path "${HELPER_DIR}/Cargo.toml" --release --target "${TARGET}"
if [ "${HOST_OS}" = "Linux" ] && [ "${TARGET}" = "i686-pc-windows-msvc" ]; then
cargo xwin build --manifest-path "${HELPER_DIR}/Cargo.toml" --release --target "${TARGET}"
else
cargo build --manifest-path "${HELPER_DIR}/Cargo.toml" --release --target "${TARGET}"
fi
cp "${HELPER_DIR}/target/${TARGET}/release/${OUTPUT_NAME}" "${OUTPUT_DIR}/${OUTPUT_NAME}"
echo "Bundled ${OUTPUT_NAME} into ${OUTPUT_DIR}"