diff --git a/Makefile b/Makefile index d087187..e713b23 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: build test fmt install package-release publish-release bench-report bench-local bench-local-json bench-docker-ssh bench-docker-mosh fuzz-smoke fuzz-deep soak-local tui-harness +.PHONY: build test fmt install package-release package-release-linux package-release-windows publish-release bench-report bench-local bench-local-json bench-docker-ssh bench-docker-mosh fuzz-smoke fuzz-deep soak-local tui-harness build: cargo build --release @@ -15,6 +15,12 @@ install: package-release: sh scripts/package-release.sh +package-release-linux: + DOSH_PACKAGE_OS=linux DOSH_PACKAGE_ARCH=x86_64 sh scripts/package-release.sh + +package-release-windows: + DOSH_PACKAGE_OS=windows DOSH_PACKAGE_ARCH=x86_64 DOSH_PACKAGE_TARGET=x86_64-pc-windows-gnu sh scripts/package-release.sh + publish-release: sh scripts/publish-gitea-release.sh diff --git a/scripts/package-release.sh b/scripts/package-release.sh index 9de4e6e..d666cb9 100755 --- a/scripts/package-release.sh +++ b/scripts/package-release.sh @@ -26,8 +26,16 @@ normalize_arch() { esac } -os="$(normalize_os)" -arch="$(normalize_arch)" +host_os="$(normalize_os)" +os="${DOSH_PACKAGE_OS:-$host_os}" +arch="${DOSH_PACKAGE_ARCH:-$(normalize_arch)}" +target="${DOSH_PACKAGE_TARGET:-}" +if [ -z "$target" ] && [ "$os" = "windows" ] && [ "$host_os" != "windows" ]; then + case "$arch" in + x86_64) target="x86_64-pc-windows-gnu" ;; + *) echo "set DOSH_PACKAGE_TARGET for windows/$arch" >&2; exit 1 ;; + esac +fi if [ "$os" = "windows" ]; then artifact="dosh-$os-$arch.zip" versioned_artifact="dosh-$version-$os-$arch.zip" @@ -38,19 +46,33 @@ fi stage="$out_dir/stage/dosh" write_versioned="${DOSH_PACKAGE_VERSIONED:-0}" -if [ "$os" = "windows" ]; then - cargo build --release --bin dosh-client --bin dosh-bench +if [ -n "$target" ]; then + release_dir="target/$target/release" else - cargo build --release + release_dir="target/release" +fi + +if [ "$os" = "windows" ]; then + if [ -n "$target" ]; then + cargo build --release --target "$target" --bin dosh-client --bin dosh-bench + else + cargo build --release --bin dosh-client --bin dosh-bench + fi +else + if [ -n "$target" ]; then + cargo build --release --target "$target" + else + cargo build --release + fi fi rm -rf "$stage" mkdir -p "$stage/bin" "$out_dir" for bin in dosh-client dosh-server dosh-auth dosh-bench; do - if [ -f "target/release/$bin" ]; then - install -m 0755 "target/release/$bin" "$stage/bin/$bin" - elif [ -f "target/release/$bin.exe" ]; then - install -m 0755 "target/release/$bin.exe" "$stage/bin/$bin.exe" + if [ -f "$release_dir/$bin" ]; then + install -m 0755 "$release_dir/$bin" "$stage/bin/$bin" + elif [ -f "$release_dir/$bin.exe" ]; then + install -m 0755 "$release_dir/$bin.exe" "$stage/bin/$bin.exe" fi done if [ -f "$stage/bin/dosh-client.exe" ]; then