mirror of
https://github.com/cedar2025/hysteria.git
synced 2025-06-28 15:30:03 +00:00
Merge pull request #530 from apernet/wip-build-script
ci: update build scripts to handle microarchitectures
This commit is contained in:
commit
4c8871070c
58
build.ps1
58
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
|
||||
}
|
||||
}
|
||||
|
116
build.sh
116
build.sh
@ -8,36 +8,113 @@ set -e
|
||||
# - HY_APP_COMMIT: App commit hash
|
||||
# - HY_APP_PLATFORMS: Platforms to build for (e.g. "windows/amd64,linux/amd64,darwin/amd64")
|
||||
|
||||
if ! [ -x "$(command -v go)" ]; then
|
||||
export LC_ALL=C
|
||||
export LC_DATE=C
|
||||
|
||||
has_command() {
|
||||
local cmd="$1"
|
||||
type -P "$cmd" > /dev/null 2>&1
|
||||
}
|
||||
|
||||
if ! has_command go; then
|
||||
echo 'Error: go is not installed.' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -x "$(command -v git)" ]; then
|
||||
if ! has_command git; then
|
||||
echo 'Error: git is not installed.' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||
echo 'Error: not in a git repository.' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ldflags="-s -w -X 'main.appDate=$(date -u '+%F %T')'"
|
||||
if [ -n "$HY_APP_VERSION" ]; then
|
||||
ldflags="$ldflags -X 'main.appVersion=$HY_APP_VERSION'"
|
||||
else
|
||||
ldflags="$ldflags -X 'main.appVersion=$(git describe --tags --always)'"
|
||||
fi
|
||||
if [ -n "$HY_APP_COMMIT" ]; then
|
||||
ldflags="$ldflags -X 'main.appCommit=$HY_APP_COMMIT'"
|
||||
else
|
||||
ldflags="$ldflags -X 'main.appCommit=$(git rev-parse HEAD)'"
|
||||
fi
|
||||
|
||||
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"
|
||||
}
|
||||
|
||||
make_ldflags() {
|
||||
local ldflags="-s -w -X 'main.appDate=$(date -u '+%F %T')'"
|
||||
if [ -n "$HY_APP_VERSION" ]; then
|
||||
ldflags="$ldflags -X 'main.appVersion=$HY_APP_VERSION'"
|
||||
else
|
||||
ldflags="$ldflags -X 'main.appVersion=$(git describe --tags --always --match 'v*')'"
|
||||
fi
|
||||
if [ -n "$HY_APP_COMMIT" ]; then
|
||||
ldflags="$ldflags -X 'main.appCommit=$HY_APP_COMMIT'"
|
||||
else
|
||||
ldflags="$ldflags -X 'main.appCommit=$(git rev-parse HEAD)'"
|
||||
fi
|
||||
echo "$ldflags"
|
||||
}
|
||||
|
||||
build_for_platform() {
|
||||
local platform="$1"
|
||||
local ldflags="$2"
|
||||
|
||||
local GOOS="${platform%/*}"
|
||||
local GOARCH="${platform#*/}"
|
||||
if [[ -z "$GOOS" || -z "$GOARCH" ]]; then
|
||||
echo "Invalid platform $platform" >&2
|
||||
return 1
|
||||
fi
|
||||
echo "Building $GOOS/$GOARCH"
|
||||
local output="build/hysteria-$GOOS-$GOARCH"
|
||||
if [[ "$GOOS" = "windows" ]]; then
|
||||
output="$output.exe"
|
||||
fi
|
||||
local envs="$(platform_to_env "$GOOS" "$GOARCH")"
|
||||
local exit_val=0
|
||||
env $envs go build -o "$output" -tags=gpl -ldflags "$ldflags" -trimpath ./app/cmd/ || exit_val=$?
|
||||
if [[ "$exit_val" -ne 0 ]]; then
|
||||
echo "Error: failed to build $GOOS/$GOARCH" >&2
|
||||
return $exit_val
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
if [ -z "$HY_APP_PLATFORMS" ]; then
|
||||
HY_APP_PLATFORMS="$(go env GOOS)/$(go env GOARCH)"
|
||||
fi
|
||||
platforms=(${HY_APP_PLATFORMS//,/ })
|
||||
ldflags="$(make_ldflags)"
|
||||
|
||||
mkdir -p build
|
||||
rm -rf build/*
|
||||
@ -45,18 +122,7 @@ rm -rf build/*
|
||||
echo "Starting build..."
|
||||
|
||||
for platform in "${platforms[@]}"; do
|
||||
GOOS=${platform%/*}
|
||||
GOARCH=${platform#*/}
|
||||
echo "Building $GOOS/$GOARCH"
|
||||
output="build/hysteria-$GOOS-$GOARCH"
|
||||
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/
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: failed to build $GOOS/$GOARCH"
|
||||
exit 1
|
||||
fi
|
||||
build_for_platform "$platform" "$ldflags"
|
||||
done
|
||||
|
||||
echo "Build complete."
|
||||
|
Loading…
x
Reference in New Issue
Block a user