@echo off setlocal enabledelayedexpansion REM ============================================================ REM Cross-compile script: Windows / Linux, x86 / ARM REM Binaries are output to dist\ (static, CGO_ENABLED=0) REM ============================================================ set APPNAME=data_send_service set OUTDIR=dist REM Each target is "os-arch-GOARM"; use "none" when GOARM is unused. REM x86 32-bit=386, x86 64-bit=amd64, ARM 32-bit=arm(GOARM=7), ARM 64-bit=arm64 set TARGETS=windows-amd64-none windows-386-none windows-arm64-none linux-amd64-none linux-386-none linux-arm64-none linux-arm-7 if not exist %OUTDIR% mkdir %OUTDIR% set CGO_ENABLED=0 echo ======================================== echo Start cross-compiling %APPNAME% echo Output directory: %OUTDIR% echo ======================================== for %%T in (%TARGETS%) do ( for /f "tokens=1,2,3 delims=-" %%a in ("%%T") do ( set "GOOS=%%a" set "GOARCH=%%b" set "EXTRA=%%c" set "GOARM=" if not "!EXTRA!"=="none" set "GOARM=!EXTRA!" if "!GOARCH!"=="arm" ( set "ARCHNAME=armv!GOARM!" ) else ( set "ARCHNAME=!GOARCH!" ) set "EXESUF=" if "!GOOS!"=="windows" set "EXESUF=.exe" set "OUTFILE=%OUTDIR%\%APPNAME%_!GOOS!_!ARCHNAME!!EXESUF!" echo. echo [build] !GOOS! / !ARCHNAME! -^> !OUTFILE! go build -trimpath -ldflags "-s -w" -o "!OUTFILE!" . if errorlevel 1 ( echo [error] build failed: !GOOS! / !ARCHNAME! goto :fail ) ) ) echo. echo ======================================== echo All builds succeeded. Artifacts: echo ======================================== dir /b %OUTDIR% goto :eof :fail echo. echo Build aborted due to errors. exit /b 1