From 455f36734cd1d075bc02957701c2e4d91e426580 Mon Sep 17 00:00:00 2001 From: tobyxdd Date: Fri, 9 Dec 2022 13:44:35 -0800 Subject: [PATCH] ci: update build scripts to handle microarchitectures --- build.ps1 | 58 +++++++++++++++++++++++++++++++++++++++++++++++-------- build.sh | 41 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 90 insertions(+), 9 deletions(-) diff --git a/build.ps1 b/build.ps1 index e97014c..aa7c3a9 100644 --- a/build.ps1 +++ b/build.ps1 @@ -5,6 +5,49 @@ # - HY_APP_COMMIT: App commit hash # - HY_APP_PLATFORMS: Platforms to build for (e.g. "windows/amd64,linux/amd64,darwin/amd64") +function PlatformToEnv($os, $arch) { + $env:CGO_ENABLED = 0 + $env:GOOS = $os + $env:GOARCH = $arch + + switch -Regex ($arch) { + "arm" { + $env:GOARM = "7" + } + "armv5" { + $env:GOARM = "5" + $env:GOARCH = "arm" + } + "armv6" { + $env:GOARM = "6" + $env:GOARCH = "arm" + } + "armv7" { + $env:GOARM = "7" + $env:GOARCH = "arm" + } + "mips(le)?" { + $env:GOMIPS = "" + } + "mips-sf" { + $env:GOMIPS = "softfloat" + $env:GOARCH = "mips" + } + "mipsle-sf" { + $env:GOMIPS = "softfloat" + $env:GOARCH = "mipsle" + } + "amd64" { + $env:GOAMD64 = "" + $env:GOARCH = "amd64" + } + "amd64-avx" { + $env:GOAMD64 = "v3" + $env:GOARCH = "amd64" + } + } +} + if (!(Get-Command go -ErrorAction SilentlyContinue)) { Write-Host "Error: go is not installed." -ForegroundColor Red exit 1 @@ -49,19 +92,18 @@ New-Item -ItemType Directory -Force -Path build Write-Host "Starting build..." -ForegroundColor Green -$env:CGO_ENABLED = 0 - foreach ($platform in $platforms) { - $env:GOOS = $platform.Split("/")[0] - $env:GOARCH = $platform.Split("/")[1] - Write-Host "Building $env:GOOS/$env:GOARCH" -ForegroundColor Green - $output = "build/hysteria-$env:GOOS-$env:GOARCH" - if ($env:GOOS -eq "windows") { + $os = $platform.Split("/")[0] + $arch = $platform.Split("/")[1] + PlatformToEnv $os $arch + Write-Host "Building $os/$arch" -ForegroundColor Green + $output = "build/hysteria-$os-$arch" + if ($os -eq "windows") { $output = "$output.exe" } go build -o $output -tags=gpl -ldflags $ldflags -trimpath ./app/cmd/ if ($LastExitCode -ne 0) { - Write-Host "Error: failed to build $env:GOOS/$env:GOARCH" -ForegroundColor Red + Write-Host "Error: failed to build $os/$arch" -ForegroundColor Red exit 1 } } diff --git a/build.sh b/build.sh index 1a4f5fa..ac33c6e 100755 --- a/build.sh +++ b/build.sh @@ -8,6 +8,44 @@ set -e # - HY_APP_COMMIT: App commit hash # - HY_APP_PLATFORMS: Platforms to build for (e.g. "windows/amd64,linux/amd64,darwin/amd64") +platform_to_env() { + local os=$1 + local arch=$2 + local env="GOOS=$os GOARCH=$arch CGO_ENABLED=0" + + case $arch in + arm) + env+=" GOARM= GOARCH=arm" + ;; + armv5) + env+=" GOARM=5 GOARCH=arm" + ;; + armv6) + env+=" GOARM=6 GOARCH=arm" + ;; + armv7) + env+=" GOARM=7 GOARCH=arm" + ;; + mips | mipsle) + env+=" GOMIPS=" + ;; + mips-sf) + env+=" GOMIPS=softfloat GOARCH=mips" + ;; + mipsle-sf) + env+=" GOMIPS=softfloat GOARCH=mipsle" + ;; + amd64) + env+=" GOAMD64= GOARCH=amd64" + ;; + amd64-avx) + env+=" GOAMD64=v3 GOARCH=amd64" + ;; + esac + + echo $env +} + if ! [ -x "$(command -v go)" ]; then echo 'Error: go is not installed.' >&2 exit 1 @@ -52,7 +90,8 @@ for platform in "${platforms[@]}"; do if [ $GOOS = "windows" ]; then output="$output.exe" fi - env GOOS=$GOOS GOARCH=$GOARCH CGO_ENABLED=0 go build -o $output -tags=gpl -ldflags "$ldflags" -trimpath ./app/cmd/ + envs=$(platform_to_env $GOOS $GOARCH) + env $envs go build -o $output -tags=gpl -ldflags "$ldflags" -trimpath ./app/cmd/ if [ $? -ne 0 ]; then echo "Error: failed to build $GOOS/$GOARCH" exit 1