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:
17
README.md
17
README.md
@@ -59,6 +59,23 @@ npm run helper:windows-x86
|
|||||||
npm run helper:macos-arm64
|
npm run helper:macos-arm64
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Ubuntu-to-Windows `Setup.exe` build:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd desktop-client
|
||||||
|
cargo install --locked cargo-xwin
|
||||||
|
rustup target add i686-pc-windows-msvc
|
||||||
|
npm install
|
||||||
|
npm run helper:windows-x86
|
||||||
|
npm run tauri:build:windows-x86:linux
|
||||||
|
```
|
||||||
|
|
||||||
|
The resulting NSIS installer is written to:
|
||||||
|
|
||||||
|
- `desktop-client/src-tauri/target/i686-pc-windows-msvc/release/bundle/nsis/`
|
||||||
|
|
||||||
|
This Linux cross-build path is intended for NSIS `Setup.exe` output. Native MSI packaging and final Windows code signing should still be done on Windows.
|
||||||
|
|
||||||
Gateway utility scripts:
|
Gateway utility scripts:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -9,7 +9,8 @@
|
|||||||
"tauri:dev": "tauri dev",
|
"tauri:dev": "tauri dev",
|
||||||
"tauri:build": "tauri build",
|
"tauri:build": "tauri build",
|
||||||
"helper:windows-x86": "bash ./scripts/build-tunnel-helper.sh i686-pc-windows-msvc",
|
"helper:windows-x86": "bash ./scripts/build-tunnel-helper.sh i686-pc-windows-msvc",
|
||||||
"helper:macos-arm64": "bash ./scripts/build-tunnel-helper.sh aarch64-apple-darwin"
|
"helper:macos-arm64": "bash ./scripts/build-tunnel-helper.sh aarch64-apple-darwin",
|
||||||
|
"tauri:build:windows-x86:linux": "tauri build --runner cargo-xwin --target i686-pc-windows-msvc --config src-tauri/tauri.windows.conf.json"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tauri-apps/api": "^2.3.0",
|
"@tauri-apps/api": "^2.3.0",
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ set -eu
|
|||||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||||
HELPER_DIR="${ROOT_DIR}/tunnel-helper"
|
HELPER_DIR="${ROOT_DIR}/tunnel-helper"
|
||||||
BUNDLED_DIR="${ROOT_DIR}/src-tauri/bundled"
|
BUNDLED_DIR="${ROOT_DIR}/src-tauri/bundled"
|
||||||
|
HOST_OS="$(uname -s)"
|
||||||
|
|
||||||
TARGET="${1:-}"
|
TARGET="${1:-}"
|
||||||
if [ -z "${TARGET}" ]; then
|
if [ -z "${TARGET}" ]; then
|
||||||
@@ -26,7 +27,53 @@ case "${TARGET}" in
|
|||||||
;;
|
;;
|
||||||
esac
|
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}"
|
mkdir -p "${OUTPUT_DIR}"
|
||||||
|
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}"
|
cargo build --manifest-path "${HELPER_DIR}/Cargo.toml" --release --target "${TARGET}"
|
||||||
|
fi
|
||||||
cp "${HELPER_DIR}/target/${TARGET}/release/${OUTPUT_NAME}" "${OUTPUT_DIR}/${OUTPUT_NAME}"
|
cp "${HELPER_DIR}/target/${TARGET}/release/${OUTPUT_NAME}" "${OUTPUT_DIR}/${OUTPUT_NAME}"
|
||||||
echo "Bundled ${OUTPUT_NAME} into ${OUTPUT_DIR}"
|
echo "Bundled ${OUTPUT_NAME} into ${OUTPUT_DIR}"
|
||||||
|
|||||||
6
desktop-client/src-tauri/tauri.windows.conf.json
Normal file
6
desktop-client/src-tauri/tauri.windows.conf.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://schema.tauri.app/config/2",
|
||||||
|
"bundle": {
|
||||||
|
"targets": ["nsis"]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,6 +13,8 @@ Repository status:
|
|||||||
|
|
||||||
- the NexaVPN tunnel helper CLI is now included in `desktop-client/tunnel-helper/`
|
- the NexaVPN tunnel helper CLI is now included in `desktop-client/tunnel-helper/`
|
||||||
- the Windows x86 build can be bundled into `src-tauri/bundled/windows-x86/`
|
- the Windows x86 build can be bundled into `src-tauri/bundled/windows-x86/`
|
||||||
|
- Ubuntu server builds can cross-compile the Windows x86 helper and Tauri app with `cargo-xwin`
|
||||||
|
- the Linux-based Windows packaging path targets NSIS `Setup.exe`; MSI packaging still requires a Windows environment
|
||||||
|
|
||||||
## macOS ARM
|
## macOS ARM
|
||||||
|
|
||||||
@@ -33,4 +35,4 @@ Repository status:
|
|||||||
- Client private keys are generated and stored locally.
|
- Client private keys are generated and stored locally.
|
||||||
- Admin debug profile downloads intentionally contain a private-key placeholder.
|
- Admin debug profile downloads intentionally contain a private-key placeholder.
|
||||||
- Desktop secure-secret storage is not yet production-grade keychain integration.
|
- Desktop secure-secret storage is not yet production-grade keychain integration.
|
||||||
- The repository now includes the helper source and bundling paths, but platform builds and signing still need to be performed in the right target environments.
|
- The repository now includes the helper source and bundling paths, but final signing still needs to be performed in the right target environments.
|
||||||
|
|||||||
Reference in New Issue
Block a user