From de1749f9b66dbb9cb1ebe83fc7d53a9668664592 Mon Sep 17 00:00:00 2001 From: marjune Date: Thu, 4 Aug 2022 22:31:52 +0800 Subject: [PATCH] chore: add extra AMD64-level target See also: https://github.com/golang/go/issues/45453 https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels https://developers.redhat.com/blog/2021/01/05/building-red-hat-enterprise-linux-9-for-the-x86-64-v2-microarchitecture-level#background_of_the_x86_64_microarchitecture_levels --- build/build-all.inc.sh | 4 ++-- build/build-current.sh | 8 +++++++- build/build-docker-image-dockerfile | 2 +- build/build.inc.sh | 4 +++- build/build.sh | 17 +++++++++++++---- src/version/main.go | 7 ++++--- 6 files changed, 30 insertions(+), 12 deletions(-) diff --git a/build/build-all.inc.sh b/build/build-all.inc.sh index 64542616..810353b5 100755 --- a/build/build-all.inc.sh +++ b/build/build-all.inc.sh @@ -1,5 +1,5 @@ -builds=('linux 386' 'linux amd64' 'linux arm' 'linux arm64' 'linux riscv64' 'linux loong64') -builds=("${builds[@]}" 'windows 386' 'windows amd64' 'windows arm' 'windows arm64') +builds=('linux 386' 'linux amd64' 'linux amd64,v2' 'linux amd64,v3' 'linux arm' 'linux arm64' 'linux riscv64' 'linux loong64') +builds=("${builds[@]}" 'windows 386' 'windows amd64' 'windows amd64,v2' 'windows amd64,v3' 'windows arm' 'windows arm64') builds=("${builds[@]}" 'darwin amd64' 'darwin arm64') builds=("${builds[@]}" 'freebsd 386' 'freebsd amd64' 'freebsd arm' 'freebsd arm64') builds=("${builds[@]}" 'openbsd 386' 'openbsd amd64' 'openbsd arm' 'openbsd arm64') diff --git a/build/build-current.sh b/build/build-current.sh index cf506ae3..2b1ae97e 100755 --- a/build/build-current.sh +++ b/build/build-current.sh @@ -3,4 +3,10 @@ cd $(dirname "$0") rm -rf ../output/ -bash ./build.sh "$(go env GOOS) $(go env GOARCH)" +GOARCH=$(go env GOARCH) +ARCH_OPT_NAME=$(echo "GO$GOARCH" | tr 'a-z' 'A-Z') +if [ -n "${!ARCH_OPT_NAME}" ]; then + ARCH_OPT=",${!ARCH_OPT_NAME}" +fi + +bash ./build.sh "$(go env GOOS) ${GOARCH}${ARCH_OPT}" diff --git a/build/build-docker-image-dockerfile b/build/build-docker-image-dockerfile index 73e594d7..5a0ef5f3 100644 --- a/build/build-docker-image-dockerfile +++ b/build/build-docker-image-dockerfile @@ -3,7 +3,7 @@ ENV GO111MODULE=auto COPY .git/ /mnt/ghfs/.git/ COPY src/ /mnt/ghfs/src/ COPY build/ /mnt/ghfs/build/ -RUN ["/bin/bash", "-c", "cd /mnt/ghfs/build/; source ./build.inc.sh; go build -ldflags \"$LDFLAGS\" -o /tmp/ghfs /mnt/ghfs/src/main.go"] +RUN ["/bin/bash", "-c", "cd /mnt/ghfs/build/; source ./build.inc.sh; go build -ldflags \"$(getLdFlags)\" -o /tmp/ghfs /mnt/ghfs/src/main.go"] RUN mkdir -p /output/usr/local/bin/; cp /tmp/ghfs /output/usr/local/bin/; COPY conf/docker-image/ /output/ diff --git a/build/build.inc.sh b/build/build.inc.sh index 4d3d3314..955d27b5 100755 --- a/build/build.inc.sh +++ b/build/build.inc.sh @@ -3,5 +3,7 @@ OUTDIR='../output' MAINNAME='ghfs' MOD=$(go list ../src/) source ./build.inc.version.sh -LDFLAGS="-s -w -X $MOD/version.appVer=$VERSION" LICENSE='../LICENSE' +getLdFlags() { + echo "-s -w -X $MOD/version.appVer=$VERSION -X $MOD/version.appArch=${ARCH:-$(go env GOARCH)}" +} diff --git a/build/build.sh b/build/build.sh index b9cf4fd8..5c73d2d2 100755 --- a/build/build.sh +++ b/build/build.sh @@ -10,14 +10,23 @@ mkdir -p "$OUTDIR" for build in "$@"; do arg=($build) export GOOS="${arg[0]}" - export GOARCH="${arg[1]}" + ARCH="${arg[1]}" # e.g. "amd64" or "amd64,v2" + GOARCH=${ARCH%,*} + if [ "$ARCH" != "$GOARCH" ]; then + # e.g. "GOAMD64=v2" + ARCH_OPT="${ARCH#*,}" + declare -x $(echo GO$GOARCH | tr 'a-z' 'A-Z')="$ARCH_OPT" + else + ARCH_OPT='' + unset $(echo "GO$GOARCH" | tr 'a-z' 'A-Z') + fi OS_SUFFIX="${arg[2]}" BIN="$TMP/$MAINNAME$(go env GOEXE)" rm -f "$BIN" - echo "Building: $GOOS$OS_SUFFIX $GOARCH" - go build -ldflags "$LDFLAGS" -o "$BIN" ../src/main.go + echo "Building: $GOOS$OS_SUFFIX $ARCH" + go build -ldflags "$(getLdFlags)" -o "$BIN" ../src/main.go - OUT="$OUTDIR/$MAINNAME-$VERSION-$GOOS$OS_SUFFIX-$GOARCH".zip + OUT="$OUTDIR/$MAINNAME-$VERSION-$GOOS$OS_SUFFIX-$GOARCH$ARCH_OPT".zip zip -j "$OUT" "$BIN" "$LICENSE" done diff --git a/src/version/main.go b/src/version/main.go index 40b121a9..58d0cc13 100644 --- a/src/version/main.go +++ b/src/version/main.go @@ -5,14 +5,15 @@ import ( "runtime" ) -var appVer = "dev" - const entryFormat = "%-8s %s\n" +var appVer = "dev" +var appArch = runtime.GOARCH + func PrintVersion() { fmt.Println("GHFS: Go HTTP File Server") fmt.Printf(entryFormat, "Version:", appVer) fmt.Printf(entryFormat, "SDK:", runtime.Version()) fmt.Printf(entryFormat, "OS:", runtime.GOOS) - fmt.Printf(entryFormat, "ARCH:", runtime.GOARCH) + fmt.Printf(entryFormat, "ARCH:", appArch) }