diff --git a/Makefile b/Makefile index b7cae57..7706c42 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: build test fmt clippy release-check 1.0-check reconnect-check hostile-network-check persistence-check package-check 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 +.PHONY: build test fmt clippy release-check 1.0-check reconnect-check hostile-network-check persistence-check package-check install package-release package-release-linux package-release-windows package-release-windows-arm64 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 @@ -36,9 +36,19 @@ persistence-check: package-check: $(MAKE) package-release-linux $(MAKE) package-release-windows - sh scripts/verify-release-artifacts.sh \ - target/dosh-release/dosh-linux-x86_64.tar.gz \ - target/dosh-release/dosh-windows-x86_64.zip + if command -v aarch64-w64-mingw32-clang >/dev/null 2>&1; then \ + $(MAKE) package-release-windows-arm64; \ + sh scripts/verify-release-artifacts.sh \ + target/dosh-release/dosh-linux-x86_64.tar.gz \ + target/dosh-release/dosh-windows-x86_64.zip \ + target/dosh-release/dosh-windows-aarch64.zip; \ + else \ + echo "warning: aarch64-w64-mingw32-clang not found; checking Windows ARM64 build without packaging"; \ + cargo check --target aarch64-pc-windows-gnullvm --all-targets; \ + sh scripts/verify-release-artifacts.sh \ + target/dosh-release/dosh-linux-x86_64.tar.gz \ + target/dosh-release/dosh-windows-x86_64.zip; \ + fi install: sh install.sh --from-current @@ -52,6 +62,9 @@ package-release-linux: 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 +package-release-windows-arm64: + DOSH_PACKAGE_OS=windows DOSH_PACKAGE_ARCH=aarch64 DOSH_PACKAGE_TARGET=aarch64-pc-windows-gnullvm 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 1eebd1c..e26d944 100755 --- a/scripts/package-release.sh +++ b/scripts/package-release.sh @@ -62,6 +62,24 @@ else release_dir="target/release" fi +need_target_linker() { + case "${target:-}" in + x86_64-pc-windows-gnu) + if ! command -v x86_64-w64-mingw32-gcc >/dev/null 2>&1 \ + && ! command -v x86_64-w64-mingw32-clang >/dev/null 2>&1; then + echo "windows/x86_64 packaging requires x86_64-w64-mingw32-gcc or x86_64-w64-mingw32-clang" >&2 + exit 1 + fi + ;; + aarch64-pc-windows-gnullvm) + if ! command -v aarch64-w64-mingw32-clang >/dev/null 2>&1; then + echo "windows/aarch64 packaging requires aarch64-w64-mingw32-clang" >&2 + exit 1 + fi + ;; + esac +} + if command -v git >/dev/null 2>&1 && git rev-parse --is-inside-work-tree >/dev/null 2>&1; then if [ -z "${DOSH_BUILD_GIT_HASH:-}" ]; then export DOSH_BUILD_GIT_HASH="$(git rev-parse --short=12 HEAD)" @@ -78,6 +96,8 @@ if command -v git >/dev/null 2>&1 && git rev-parse --is-inside-work-tree >/dev/n fi fi +need_target_linker + if [ "$os" = "windows" ]; then if [ -n "$target" ]; then cargo build --release --target "$target" --bin dosh-client --bin dosh-bench