build(scripts): add per-artifact build scripts staging into dist/
One script per main artifact, all staging into dist/ (overridable via
--dist or VOICECAT_DIST_DIR):
- build-server.sh server-release preset -> dist/server/
- build-windows-client.sh windows-client DLL + dotnet publish -> dist/windows-client/
- build-macos-client.sh XCFramework + xcodebuild VoiceCatMac.app -> dist/macos-client/
- build-libs.sh libvoicecat per platform -> dist/lib/{macos,ios*,windows}/
+ dist/lib/VoiceCatCore.xcframework/
- build-all.sh orchestrator (host-applicable artifacts only)
- common.sh shared helpers: dist/VCPKG_ROOT resolution, platform
guards, logging, --help from header comments
Host-platform guards prevent running the wrong script on the wrong OS.
build-libs.sh and build-macos-client.sh drive the existing validated
clients/apple/scripts/build-xcframework.sh rather than duplicating it.
dist/ added to .gitignore.
This commit is contained in:
73
scripts/build-windows-client.sh
Executable file
73
scripts/build-windows-client.sh
Executable file
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# build-windows-client.sh — build the Windows WinForms client and stage a
|
||||
# runnable folder into dist/windows-client/.
|
||||
#
|
||||
# Two steps:
|
||||
# 1. Build the native voicecat.dll via the `windows-client` CMake preset
|
||||
# (MinGW, static runtime — no libgcc_s_seh-1.dll / libstdc++-6.dll deps).
|
||||
# 2. `dotnet publish` the C# app (clients/windows/VoiceCat.App). The app's
|
||||
# Directory.Build.props copies voicecat.dll into the output automatically.
|
||||
#
|
||||
# The staged folder contains VoiceCat.App.exe + voicecat.dll + all .NET deps,
|
||||
# ready to run. By default it is framework-dependent (needs the .NET 10 runtime
|
||||
# installed); pass --self-contained for a folder that runs without .NET.
|
||||
#
|
||||
# Usage:
|
||||
# scripts/build-windows-client.sh # build + stage into ./dist/windows-client
|
||||
# scripts/build-windows-client.sh --dist /out
|
||||
# scripts/build-windows-client.sh --no-configure # skip cmake configure (DLL step)
|
||||
# scripts/build-windows-client.sh --self-contained
|
||||
# scripts/build-windows-client.sh -h|--help
|
||||
#
|
||||
# Windows only (MSYS2/MinGW). Requires VCPKG_ROOT and the .NET 10 SDK.
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
VC_SCRIPT_NAME="build-windows-client"
|
||||
source "$SCRIPT_DIR/common.sh"
|
||||
|
||||
DO_CONFIGURE=true
|
||||
SELF_CONTAINED=false
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--dist) vc_set_dist "$2"; shift 2 ;;
|
||||
--no-configure) DO_CONFIGURE=false; shift ;;
|
||||
--self-contained) SELF_CONTAINED=true; shift ;;
|
||||
-h|--help) vc_print_help "$0"; exit 0 ;;
|
||||
*) vc_die "unknown arg: $1 (try --help)" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
vc_require_windows
|
||||
vc_log "dist dir: $VC_DIST_DIR"
|
||||
vc_resolve_vcpkg_root windows-client
|
||||
|
||||
vc_step "build native DLL (preset: windows-client)"
|
||||
if $DO_CONFIGURE; then
|
||||
cmake --preset windows-client
|
||||
fi
|
||||
cmake --build --preset windows-client
|
||||
DLL="$VC_REPO_ROOT/build/windows-client/bin/voicecat.dll"
|
||||
[[ -f "$DLL" ]] || vc_die "expected output not found: $DLL"
|
||||
vc_ok "voicecat.dll -> $DLL ($(vc_file_size "$DLL") bytes)"
|
||||
|
||||
vc_step "publish C# app (dotnet publish)"
|
||||
APP_PROJ="$VC_REPO_ROOT/clients/windows/VoiceCat.App/VoiceCat.App.csproj"
|
||||
PUBLISH_DIR="$VC_REPO_ROOT/build/windows-client/publish"
|
||||
rm -rf "$PUBLISH_DIR"
|
||||
mkdir -p "$PUBLISH_DIR"
|
||||
|
||||
PUBLISH_ARGS=(dotnet publish "$APP_PROJ" -c Release -o "$PUBLISH_DIR")
|
||||
if $SELF_CONTAINED; then
|
||||
PUBLISH_ARGS+=( -r win-x64 --self-contained true )
|
||||
fi
|
||||
"${PUBLISH_ARGS[@]}"
|
||||
APP_EXE="$PUBLISH_DIR/VoiceCat.App.exe"
|
||||
[[ -f "$APP_EXE" ]] || vc_die "publish output missing VoiceCat.App.exe in $PUBLISH_DIR"
|
||||
|
||||
vc_step "stage -> $VC_DIST_DIR/windows-client"
|
||||
STAGE="$(vc_dist_subdir windows-client)"
|
||||
cp -R "$PUBLISH_DIR/." "$STAGE/"
|
||||
vc_ok "VoiceCat.App.exe + deps -> $STAGE (voicecat.dll included)"
|
||||
vc_ok "done -> $STAGE"
|
||||
Reference in New Issue
Block a user