From ec3f9a8f33bfcb9e7204b3a4504d49e94f66600e Mon Sep 17 00:00:00 2001 From: zijiren233 Date: Sun, 11 Feb 2024 19:50:44 +0800 Subject: [PATCH] Feat: update build script --- Dockerfile | 13 +- script/build.sh | 1267 +++++++++++++++++++++++++++-------------------- 2 files changed, 725 insertions(+), 555 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0f51a33..69805e5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,8 +10,10 @@ WORKDIR /synctv COPY ./ ./ -RUN apk add --no-cache bash curl git go musl-dev g++ && \ - bash script/build.sh -Mv ${VERSION} +RUN apk add --no-cache bash curl git go g++ + +RUN bash script/build.sh -Mv ${VERSION} \ + -f "gcc -static" -F "g++ -static" From alpine:latest @@ -19,11 +21,12 @@ ENV PUID=0 PGID=0 UMASK=022 COPY --from=builder /synctv/build/synctv /usr/local/bin/synctv +RUN apk add --no-cache bash ca-certificates su-exec tzdata && \ + rm -rf /var/cache/apk/* + COPY script/entrypoint.sh /entrypoint.sh -RUN apk add --no-cache bash ca-certificates su-exec tzdata && \ - rm -rf /var/cache/apk/* && \ - chmod +x /entrypoint.sh && \ +RUN chmod +x /entrypoint.sh && \ mkdir -p /root/.synctv WORKDIR /root/.synctv diff --git a/script/build.sh b/script/build.sh index 5032b90..6fa10d3 100755 --- a/script/build.sh +++ b/script/build.sh @@ -1,22 +1,15 @@ #!/bin/bash -BIN_NAME="synctv" - -function ChToScriptFileDir() { - cd "$(dirname "$0")" - if [ $? -ne 0 ]; then - echo "cd to script file dir error" - exit 1 - fi -} +set -e function EnvHelp() { echo "SKIP_INIT_WEB" echo "WEB_VERSION set web dependency version (default: build version)" - echo "DISABLE_TRIM_PATH enable trim path (default: disable)" + echo "CGO_COMPILER_DIR set cgo compiler dir (default: ../compiler)" } function DepHelp() { + echo "-v set build version (default: dev)" echo "-w init web version (default: build version)" echo "-s skip init web" } @@ -24,19 +17,19 @@ function DepHelp() { function Help() { echo "-h get help" echo "-C disable cgo" - echo "-c force set gcc" - echo "-x force set g++" - echo "-v set build version (default: dev)" - echo "-S set source dir (default: ../)" - echo "-m set build mode (default: pie)" + echo "-S set source dir (default: $SOURCE_DIR)" + echo "-m more go cmd args" echo "-M disable build micro" - echo "-l set ldflags (default: -s -w --extldflags \"-static -fpic\")" + echo "-l set ldflags (default: \"$LDFLAGS\"" echo "-p set platform (default: host platform, support: all, linux, darwin, windows)" - echo "-P set disable trim path (default: disable)" echo "-d set build result dir (default: build)" echo "-T set tags (default: jsoniter)" echo "-t show all targets" echo "-g use github proxy mirror" + echo "-f set force gcc" + echo "-F set force g++" + echo "-c host cc" + echo "-X host cxx" echo "----" echo "Dep Help:" DepHelp @@ -47,29 +40,16 @@ function Help() { function Init() { CGO_ENABLED="1" - CGO_CFLAGS="-O2 -g0" - CGO_CXXFLAGS="-O2 -g0" + DEFAULT_CGO_FLAGS="-O2 -g0 -pipe" + CGO_CFLAGS="$DEFAULT_CGO_FLAGS" + CGO_CXXFLAGS="$DEFAULT_CGO_FLAGS" CGO_LDFLAGS="-s" - VERSION="dev" GOHOSTOS="$(go env GOHOSTOS)" GOHOSTARCH="$(go env GOHOSTARCH)" - if [ "$GOHOSTOS" == "linux" ]; then - CGO_LDFLAGS="$CGO_LDFLAGS -s" - fi - - commit="$(git log --pretty=format:"%h" -1)" - if [ $? -ne 0 ]; then - GIT_COMMIT="unknown" - else - GIT_COMMIT="$commit" - fi - BUILD_MODE="pie" - DEFAULT_LDFLAGS="-s -w --extldflags '-static -fpic'" + LDFLAGS="-s -w -linkmode external" PLATFORM="" - BUILD_DIR="../build" - TAGS="jsoniter" - SOURCH_DIR="../" + SOURCE_DIR="." OIFS="$IFS" IFS=$'\n\t, ' @@ -78,44 +58,29 @@ function Init() { } function ParseArgs() { - while getopts "hCsS:v:w:m:l:p:Pd:T:tgMc:x:" arg; do + while getopts "hCsS:v:w:l:p:d:T:tgm:Mc:x:f:F:" arg; do case $arg in h) Help exit 0 ;; - v) - VERSION="$(echo "$OPTARG" | sed 's/ //g' | sed 's/"//g' | sed 's/\n//g')" - ;; C) CGO_ENABLED="0" ;; - c) - FORCE_CC="$OPTARG" - ;; - x) - FORCE_CXX="$OPTARG" - ;; S) - SOURCH_DIR="$OPTARG" - ;; - m) - BUILD_MODE="$OPTARG" + SOURCE_DIR="$OPTARG" ;; l) - LDFLAGS="$OPTARG" + AddLDFLAGS "$OPTARG" ;; p) PLATFORM="$OPTARG" ;; - P) - DISABLE_TRIM_PATH="true" - ;; d) BUILD_DIR="$OPTARG" ;; T) - TAGS="$OPTARG" + AddTags "$OPTARG" ;; t) SHOW_TARGETS=1 @@ -123,11 +88,29 @@ function ParseArgs() { g) GH_PROXY="https://mirror.ghproxy.com/" ;; + m) + AddBuildArgs "$OPTARG" + ;; M) DISABLE_MICRO="true" ;; + c) + HOST_CC="$OPTARG" + ;; + x) + HOST_CXX="$OPTARG" + ;; + f) + FORCE_CC="$OPTARG" + ;; + F) + FORCE_CXX="$OPTARG" + ;; # ---- # dep + v) + VERSION="$OPTARG" + ;; s) SKIP_INIT_WEB="true" ;; @@ -137,7 +120,7 @@ function ParseArgs() { # ---- ?) echo "unkonw argument" - exit 1 + return 1 ;; esac done @@ -149,38 +132,26 @@ function ParseArgs() { fi } -# Comply with golang version rules -function CheckVersionFormat() { - if [ "$1" == "dev" ] || [ "$(echo "$1" | grep -oE "^v?[0-9]+\.[0-9]+\.[0-9]+(\-beta.*|\-rc.*|\-alpha.*)?$")" ]; then - return 0 - else - echo "version format error: $1" - exit 1 - fi -} - function FixArgs() { - CheckVersionFormat "$VERSION" - if [ ! "$SKIP_INIT_WEB" ] && [ ! "$WEB_VERSION" ]; then - WEB_VERSION="$VERSION" + if [ ! "$SOURCE_DIR" ]; then + echo "source dir not set" + return 1 fi - LDFLAGS="$LDFLAGS \ - -X 'github.com/synctv-org/synctv/internal/version.Version=$VERSION' \ - -X 'github.com/synctv-org/synctv/internal/version.WebVersion=$WEB_VERSION' \ - -X 'github.com/synctv-org/synctv/internal/version.GitCommit=$GIT_COMMIT'" - - if [ ! "$SOURCH_DIR" ] || [ ! -d "$SOURCH_DIR" ]; then - echo "source dir error: $SOURCH_DIR" - exit 1 + SOURCE_DIR="$(cd "$SOURCE_DIR" && pwd)" + if [ ! "$BIN_NAME" ]; then + BIN_NAME="$(basename "$SOURCE_DIR")" fi - # trim / at the end - BUILD_DIR="$(echo "$BUILD_DIR" | sed 's#/$##')" - SOURCH_DIR="$(echo "$SOURCH_DIR" | sed 's#/$##')" - echo "build source dir: $SOURCH_DIR" - if [ ! "$CGO_COMPILER_TMP_DIR" ]; then - CGO_COMPILER_TMP_DIR="$SOURCH_DIR/compiler" + if [ ! "$BUILD_DIR" ]; then + BUILD_DIR="${SOURCE_DIR}/build" else - CGO_COMPILER_TMP_DIR="$(echo "$CGO_COMPILER_TMP_DIR" | sed 's#/$##')" + BUILD_DIR="$(cd "$BUILD_DIR" && pwd)" + fi + echo "build source dir: $SOURCE_DIR" + echo "build result dir: $BUILD_DIR" + if [ ! "$CGO_COMPILER_DIR" ]; then + CGO_COMPILER_DIR="$SOURCE_DIR/compiler" + else + CGO_COMPILER_DIR="$(cd "$CGO_COMPILER_DIR" && pwd)" fi if [ "$CGO_ENABLED" == "1" ]; then echo "cgo enabled" @@ -189,29 +160,19 @@ function FixArgs() { fi } -function InitDep() { - if [ "$SKIP_INIT_WEB" ]; then - echo "skip init web" - return - fi - rm -rf "../public/dist/*" - DownloadAndUnzip "https://github.com/synctv-org/synctv-web/releases/download/${WEB_VERSION}/dist.tar.gz" "../public/dist" -} - function DownloadAndUnzip() { url="$1" file="$2" type="$3" - - mkdir -p "$file" - file="$(cd "$file" && pwd)" - echo "download: $url" - echo "to: $file" - if [ -z "$type" ]; then type="$(echo "$url" | sed 's/.*\.//g')" fi + mkdir -p "$file" + file="$(cd "$file" && pwd)" + echo "download \"$url\" to \"$file\"" + rm -rf "$file"/* + # gzip/bzip2/xz/lzma/zip if [ ! "$type" ] || [ "$type" == "tgz" ] || [ "$type" == "gz" ]; then curl -sL "$url" | tar -xf - -C "$file" --strip-components 1 -z @@ -223,20 +184,14 @@ function DownloadAndUnzip() { curl -sL "$url" | tar -xf - -C "$file" --strip-components 1 --lzma elif [ "$type" == "zip" ]; then rm -rf "$file/tmp.zip" - curl --progress-bar -sL "$url" -o "$file/tmp.zip" + curl -sL "$url" -o "$file/tmp.zip" unzip -o "$file/tmp.zip" -d "$file" -q rm -f "$file/tmp.zip" else echo "compress type: $type not support" - exit 1 - fi - - if [ $? -ne 0 ]; then - echo "download error" - exit 1 - else - echo "download success" + return 1 fi + echo "download and unzip success" } # https://go.dev/doc/install/source#environment @@ -298,6 +253,9 @@ function InitPlatforms() { LINUX_CGO_ALLOWED_PLATFORM="linux/386,linux/amd64,linux/arm,linux/arm64,linux/loong64,linux/mips,linux/mips64,linux/mips64le,linux/mipsle,linux/ppc64le,linux/riscv64,linux/s390x" DARWIN_CGO_ALLOWED_PLATFORM="" + if [ $(uname) == "Darwin" ]; then + DARWIN_CGO_ALLOWED_PLATFORM="${GOHOSTOS}/${GOHOSTARCH}" + fi WINDOWS_CGO_ALLOWED_PLATFORM="windows/386,windows/amd64" CGO_ALLOWED_PLATFORM="$LINUX_CGO_ALLOWED_PLATFORM,$DARWIN_CGO_ALLOWED_PLATFORM,$WINDOWS_CGO_ALLOWED_PLATFORM" @@ -318,11 +276,20 @@ function InitPlatforms() { } function CheckPlatform() { - for p in $ALLOWED_PLATFORM; do + for p in $CURRENT_ALLOWED_PLATFORM; do if [ "$p" == "$1" ]; then - return 0 + return fi done + if [ "$CGO_ENABLED" == "1" ]; then + for p in $ALLOWED_PLATFORM; do + if [ "$p" == "$1" ]; then + echo "platform: $1 not support for cgo" + fi + done + return 1 + fi + echo "platform: $1 not support" return 1 } @@ -339,21 +306,20 @@ function CheckAllPlatform() { continue fi CheckPlatform "$platform" - if [ $? -ne 0 ]; then - echo "platform: $platform not support" - exit 1 - fi done fi } function InitCGODeps() { + MORE_CGO_CFLAGS="" + MORE_CGO_CXXFLAGS="" + MORE_CGO_LDFLAGS="" if [ "$FORCE_CC" ] && [ ! "$FORCE_CXX" ]; then echo "FORCE_CC and FORCE_CXX must be set at the same time" - exit 1 + return 1 elif [ ! "$FORCE_CC" ] && [ "$FORCE_CXX" ]; then echo "FORCE_CC and FORCE_CXX must be set at the same time" - exit 1 + return 1 elif [ "$FORCE_CC" ] && [ "$FORCE_CXX" ]; then CC="$FORCE_CC" CXX="$FORCE_CXX" @@ -370,41 +336,36 @@ function InitCGODeps() { GOARCH="$2" MICRO="$3" - if [ "$GOOS" == "$GOHOSTOS" ] && [ "$GOARCH" == "$GOHOSTARCH" ]; then - InitHostCGODeps "$@" - return - fi - case "$GOHOSTOS" in - "linux") + "linux" | "darwin") case "$GOHOSTARCH" in - "amd64") - InitLinuxAmd64CGODeps $@ + "amd64" | "arm64" | "arm" | "ppc64le" | "riscv64" | "s390x") + InitDefaultCGODeps $@ ;; *) - echo "cgo not support for $GOHOSTOS/$GOHOSTARCH" - exit 1 + if [ "$GOOS" == "$GOHOSTOS" ] && [ "$GOARCH" == "$GOHOSTARCH" ]; then + InitHostCGODeps "$@" + else + echo "$GOOS/$GOARCH not support for cgo" + return 1 + fi ;; esac ;; *) - echo "cgo not support for $GOOS" - exit 1 + if [ "$GOOS" == "$GOHOSTOS" ] && [ "$GOARCH" == "$GOHOSTARCH" ]; then + InitHostCGODeps "$@" + else + echo "$GOOS/$GOARCH not support for cgo" + return 1 + fi ;; esac read -r CC_COMMAND arCC_OPTIONSgs <<<"$CC" CC_COMMAND="$(command -v ${CC_COMMAND})" - if [ $? -ne 0 ]; then - echo "$CC_COMMAND not found" - exit 1 - fi if [[ "$CC_COMMAND" != /* ]]; then CC="$(cd "$(dirname "$CC_COMMAND")" && pwd)/$(basename "$CC_COMMAND")" - if [ $? -ne 0 ]; then - echo "$CC_COMMAND not found" - exit 1 - fi if [ "$CC_OPTIONS" ]; then CC="$CC $CC_OPTIONS" fi @@ -414,10 +375,6 @@ function InitCGODeps() { CXX_COMMAND="$(command -v ${CXX_COMMAND})" if [[ "$CXX_COMMAND" != /* ]]; then CXX="$(cd "$(dirname "$CXX_COMMAND")" && pwd)/$(basename "$CXX_COMMAND")" - if [ $? -ne 0 ]; then - echo "$CXX_COMMAND not found" - exit 1 - fi if [ "$CXX_OPTIONS" ]; then CXX="$CXX $CXX_OPTIONS" fi @@ -425,20 +382,32 @@ function InitCGODeps() { } function InitHostCGODeps() { - GOOS="$1" - GOARCH="$2" - MICRO="$3" - - CC="gcc" - CXX="g++" + # GOOS="$1" + # GOARCH="$2" + # MICRO="$3" + if [ "$HOST_CC" ]; then + CC="$HOST_CC" + else + CC="gcc" + fi - if [ $(uname) != "Darwin" ]; then - CC="$CC -static --static" - CXX="$CXX -static --static" + if [ "$HOST_CXX" ]; then + CXX="$HOST_CXX" + else + CXX="g++" fi } -function InitLinuxAmd64CGODeps() { +function InitDefaultCGODeps() { + case "$GOHOSTARCH" in + "arm") + unamespacer="$GOHOSTOS-arm32v7" + ;; + *) + unamespacer="$GOHOSTOS-$GOHOSTARCH" + ;; + esac + DEFAULT_CGO_DEPS_VERSION="v0.4.2" GOOS="$1" GOARCH="$2" MICRO="$3" @@ -447,406 +416,514 @@ function InitLinuxAmd64CGODeps() { case "$GOARCH" in "386") # Micro: sse2 softfloat or empty (not use) - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/i686-linux-musl.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/i686-linux-musl-cross-${unamespacer}.tgz if [ ! "$CC_LINUX_386" ] && [ ! "$CXX_LINUX_386" ]; then - if command -v i686-linux-musl-gcc >/dev/null 2>&1 && command -v i686-linux-musl-g++ >/dev/null 2>&1; then + if command -v i686-linux-musl-gcc >/dev/null 2>&1 && + command -v i686-linux-musl-g++ >/dev/null 2>&1; then CC_LINUX_386="i686-linux-musl-gcc" CXX_LINUX_386="i686-linux-musl-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/i686-linux-musl/bin/i686-linux-musl-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/i686-linux-musl/bin/i686-linux-musl-g++" ]; then - CC_LINUX_386="$CGO_COMPILER_TMP_DIR/i686-linux-musl/bin/i686-linux-musl-gcc" - CXX_LINUX_386="$CGO_COMPILER_TMP_DIR/i686-linux-musl/bin/i686-linux-musl-g++" + elif [ -x "$CGO_COMPILER_DIR/i686-linux-musl-cross/bin/i686-linux-musl-gcc" ] && + [ -x "$CGO_COMPILER_DIR/i686-linux-musl-cross/bin/i686-linux-musl-g++" ]; then + CC_LINUX_386="$CGO_COMPILER_DIR/i686-linux-musl-cross/bin/i686-linux-musl-gcc" + CXX_LINUX_386="$CGO_COMPILER_DIR/i686-linux-musl-cross/bin/i686-linux-musl-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/i686-linux-musl.tgz" "$CGO_COMPILER_TMP_DIR/i686-linux-musl" - CC_LINUX_386="$CGO_COMPILER_TMP_DIR/i686-linux-musl/bin/i686-linux-musl-gcc" - CXX_LINUX_386="$CGO_COMPILER_TMP_DIR/i686-linux-musl/bin/i686-linux-musl-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/i686-linux-musl-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/i686-linux-musl-cross" + CC_LINUX_386="$CGO_COMPILER_DIR/i686-linux-musl-cross/bin/i686-linux-musl-gcc" + CXX_LINUX_386="$CGO_COMPILER_DIR/i686-linux-musl-cross/bin/i686-linux-musl-g++" fi elif [ ! "$CC_LINUX_386" ] || [ ! "$CXX_LINUX_386" ]; then echo "CC_LINUX_386 or CXX_LINUX_386 not found" - exit 1 + return 1 fi - CC="$CC_LINUX_386 -static --static" - CXX="$CXX_LINUX_386 -static --static" + CC="$CC_LINUX_386 -static" + CXX="$CXX_LINUX_386 -static" ;; "arm64") - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/aarch64-linux-musl.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/aarch64-linux-musl-cross-${unamespacer}.tgz if [ ! "$CC_LINUX_ARM64" ] && [ ! "$CXX_LINUX_ARM64" ]; then - if command -v aarch64-linux-musl-gcc >/dev/null 2>&1 && command -v aarch64-linux-musl-g++ >/dev/null 2>&1; then + if command -v aarch64-linux-musl-gcc >/dev/null 2>&1 && + command -v aarch64-linux-musl-g++ >/dev/null 2>&1; then CC_LINUX_ARM64="aarch64-linux-musl-gcc" CXX_LINUX_ARM64="aarch64-linux-musl-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/aarch64-linux-musl/bin/aarch64-linux-musl-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/aarch64-linux-musl/bin/aarch64-linux-musl-g++" ]; then - CC_LINUX_ARM64="$CGO_COMPILER_TMP_DIR/aarch64-linux-musl/bin/aarch64-linux-musl-gcc" - CXX_LINUX_ARM64="$CGO_COMPILER_TMP_DIR/aarch64-linux-musl/bin/aarch64-linux-musl-g++" + elif [ -x "$CGO_COMPILER_DIR/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc" ] && + [ -x "$CGO_COMPILER_DIR/aarch64-linux-musl-cross/bin/aarch64-linux-musl-g++" ]; then + CC_LINUX_ARM64="$CGO_COMPILER_DIR/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc" + CXX_LINUX_ARM64="$CGO_COMPILER_DIR/aarch64-linux-musl-cross/bin/aarch64-linux-musl-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/aarch64-linux-musl.tgz" "$CGO_COMPILER_TMP_DIR/aarch64-linux-musl" - CC_LINUX_ARM64="$CGO_COMPILER_TMP_DIR/aarch64-linux-musl/bin/aarch64-linux-musl-gcc" - CXX_LINUX_ARM64="$CGO_COMPILER_TMP_DIR/aarch64-linux-musl/bin/aarch64-linux-musl-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/aarch64-linux-musl-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/aarch64-linux-musl-cross" + CC_LINUX_ARM64="$CGO_COMPILER_DIR/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc" + CXX_LINUX_ARM64="$CGO_COMPILER_DIR/aarch64-linux-musl-cross/bin/aarch64-linux-musl-g++" fi elif [ ! "$CC_LINUX_ARM64" ] || [ ! "$CXX_LINUX_ARM64" ]; then echo "CC_LINUX_ARM64 or CXX_LINUX_ARM64 not found" - exit 1 + return 1 fi - CC="$CC_LINUX_ARM64 -static --static" - CXX="$CXX_LINUX_ARM64 -static --static" + CC="$CC_LINUX_ARM64 -static" + CXX="$CXX_LINUX_ARM64 -static" ;; "amd64") - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/x86_64-linux-musl.tgz - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/x86_64-linux-musl-native.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/x86_64-linux-musl-cross-${unamespacer}.tgz if [ ! "$CC_LINUX_AMD64" ] && [ ! "$CXX_LINUX_AMD64" ]; then - if command -v x86_64-linux-musl-gcc >/dev/null 2>&1 && command -v x86_64-linux-musl-g++ >/dev/null 2>&1; then + if command -v x86_64-linux-musl-gcc >/dev/null 2>&1 && + command -v x86_64-linux-musl-g++ >/dev/null 2>&1; then CC_LINUX_AMD64="x86_64-linux-musl-gcc" CXX_LINUX_AMD64="x86_64-linux-musl-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/x86_64-linux-musl/bin/x86_64-linux-musl-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/x86_64-linux-musl/bin/x86_64-linux-musl-g++" ]; then - CC_LINUX_AMD64="$CGO_COMPILER_TMP_DIR/x86_64-linux-musl/bin/x86_64-linux-musl-gcc" - CXX_LINUX_AMD64="$CGO_COMPILER_TMP_DIR/x86_64-linux-musl/bin/x86_64-linux-musl-g++" + elif [ -x "$CGO_COMPILER_DIR/x86_64-linux-musl-cross/bin/x86_64-linux-musl-gcc" ] && + [ -x "$CGO_COMPILER_DIR/x86_64-linux-musl-cross/bin/x86_64-linux-musl-g++" ]; then + CC_LINUX_AMD64="$CGO_COMPILER_DIR/x86_64-linux-musl-cross/bin/x86_64-linux-musl-gcc" + CXX_LINUX_AMD64="$CGO_COMPILER_DIR/x86_64-linux-musl-cross/bin/x86_64-linux-musl-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/x86_64-linux-musl-native.tgz" "$CGO_COMPILER_TMP_DIR/x86_64-linux-musl" - CC_LINUX_AMD64="$CGO_COMPILER_TMP_DIR/x86_64-linux-musl/bin/x86_64-linux-musl-gcc" - CXX_LINUX_AMD64="$CGO_COMPILER_TMP_DIR/x86_64-linux-musl/bin/x86_64-linux-musl-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/x86_64-linux-musl-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/x86_64-linux-musl-cross" + CC_LINUX_AMD64="$CGO_COMPILER_DIR/x86_64-linux-musl-cross/bin/x86_64-linux-musl-gcc" + CXX_LINUX_AMD64="$CGO_COMPILER_DIR/x86_64-linux-musl-cross/bin/x86_64-linux-musl-g++" fi elif [ ! "$CC_LINUX_AMD64" ] || [ ! "$CXX_LINUX_AMD64" ]; then echo "CC_LINUX_AMD64 or CXX_LINUX_AMD64 not found" - exit 1 + return 1 fi - CC="$CC_LINUX_AMD64 -static --static" - CXX="$CXX_LINUX_AMD64 -static --static" + CC="$CC_LINUX_AMD64 -static" + CXX="$CXX_LINUX_AMD64 -static" ;; "arm") - # MICRO: 5,6,7 or empty (not use) - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/arm-linux-musleabi.tgz - if [ ! "$CC_LINUX_ARM" ] && [ ! "$CXX_LINUX_ARM" ]; then - if command -v arm-linux-musleabi-gcc >/dev/null 2>&1 && command -v arm-linux-musleabi-g++ >/dev/null 2>&1; then - CC_LINUX_ARM="arm-linux-musleabi-gcc" - CXX_LINUX_ARM="arm-linux-musleabi-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/arm-linux-musleabi/bin/arm-linux-musleabi-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/arm-linux-musleabi/bin/arm-linux-musleabi-g++" ]; then - CC_LINUX_ARM="$CGO_COMPILER_TMP_DIR/arm-linux-musleabi/bin/arm-linux-musleabi-gcc" - CXX_LINUX_ARM="$CGO_COMPILER_TMP_DIR/arm-linux-musleabi/bin/arm-linux-musleabi-g++" - else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/arm-linux-musleabi.tgz" "$CGO_COMPILER_TMP_DIR/arm-linux-musleabi" - CC_LINUX_ARM="$CGO_COMPILER_TMP_DIR/arm-linux-musleabi/bin/arm-linux-musleabi-gcc" - CXX_LINUX_ARM="$CGO_COMPILER_TMP_DIR/arm-linux-musleabi/bin/arm-linux-musleabi-g++" + # MICRO: 5,6,7 or empty + if [ ! "$MICRO" ] || [ "$MICRO" == "6" ]; then + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/armv6-linux-musleabihf-cross-${unamespacer}.tgz + if [ ! "$CC_LINUX_ARMV6" ] && [ ! "$CXX_LINUX_ARMV6" ]; then + if command -v armv6-linux-musleabihf-gcc >/dev/null 2>&1 && + command -v armv6-linux-musleabihf-g++ >/dev/null 2>&1; then + CC_LINUX_ARMV6="armv6-linux-musleabihf-gcc" + CXX_LINUX_ARMV6="armv6-linux-musleabihf-g++" + elif [ -x "$CGO_COMPILER_DIR/armv6-linux-musleabihf-cross/bin/armv6-linux-musleabihf-gcc" ] && + [ -x "$CGO_COMPILER_DIR/armv6-linux-musleabihf-cross/bin/armv6-linux-musleabihf-g++" ]; then + CC_LINUX_ARMV6="$CGO_COMPILER_DIR/armv6-linux-musleabihf-cross/bin/armv6-linux-musleabihf-gcc" + CXX_LINUX_ARMV6="$CGO_COMPILER_DIR/armv6-linux-musleabihf-cross/bin/armv6-linux-musleabihf-g++" + else + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/armv6-linux-musleabihf-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/armv6-linux-musleabihf-cross" + CC_LINUX_ARMV6="$CGO_COMPILER_DIR/armv6-linux-musleabihf-cross/bin/armv6-linux-musleabihf-gcc" + CXX_LINUX_ARMV6="$CGO_COMPILER_DIR/armv6-linux-musleabihf-cross/bin/armv6-linux-musleabihf-g++" + fi + elif [ ! "$CC_LINUX_ARMV6" ] || [ ! "$CXX_LINUX_ARMV6" ]; then + echo "CC_LINUX_ARMV6 or CXX_LINUX_ARMV6 not found" + return 1 fi - elif [ ! "$CC_LINUX_ARM" ] || [ ! "$CXX_LINUX_ARM" ]; then - echo "CC_LINUX_ARM or CXX_LINUX_ARM not found" - exit 1 + + CC="$CC_LINUX_ARMV6 -static" + CXX="$CXX_LINUX_ARMV6 -static" + elif [ "$MICRO" == "7" ]; then + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/armv7-linux-musleabihf-cross-${unamespacer}.tgz + if [ ! "$CC_LINUX_ARMV7" ] && [ ! "$CXX_LINUX_ARMV7" ]; then + if command -v armv7-linux-musleabihf-gcc >/dev/null 2>&1 && + command -v armv7-linux-musleabihf-g++ >/dev/null 2>&1; then + CC_LINUX_ARMV7="armv7-linux-musleabihf-gcc" + CXX_LINUX_ARMV7="armv7-linux-musleabihf-g++" + elif [ -x "$CGO_COMPILER_DIR/armv7-linux-musleabihf-cross/bin/armv7-linux-musleabihf-gcc" ] && + [ -x "$CGO_COMPILER_DIR/armv7-linux-musleabihf-cross/bin/armv7-linux-musleabihf-g++" ]; then + CC_LINUX_ARMV7="$CGO_COMPILER_DIR/armv7-linux-musleabihf-cross/bin/armv7-linux-musleabihf-gcc" + CXX_LINUX_ARMV7="$CGO_COMPILER_DIR/armv7-linux-musleabihf-cross/bin/armv7-linux-musleabihf-g++" + else + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/armv7-linux-musleabihf-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/armv7-linux-musleabihf-cross" + CC_LINUX_ARMV7="$CGO_COMPILER_DIR/armv7-linux-musleabihf-cross/bin/armv7-linux-musleabihf-gcc" + CXX_LINUX_ARMV7="$CGO_COMPILER_DIR/armv7-linux-musleabihf-cross/bin/armv7-linux-musleabihf-g++" + fi + elif [ ! "$CC_LINUX_ARMV7" ] || [ ! "$CXX_LINUX_ARMV7" ]; then + echo "CC_LINUX_ARMV7 or CXX_LINUX_ARMV7 not found" + return 1 + fi + + CC="$CC_LINUX_ARMV7 -static" + CXX="$CXX_LINUX_ARMV7 -static" + elif [ "$MICRO" == "5" ]; then + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/armv5-linux-musleabi-cross-${unamespacer}.tgz + if [ ! "$CC_LINUX_ARMV5" ] && [ ! "$CXX_LINUX_ARMV5" ]; then + if command -v armv5-linux-musleabi-gcc >/dev/null 2>&1 && + command -v armv5-linux-musleabi-g++ >/dev/null 2>&1; then + CC_LINUX_ARMV5="armv5-linux-musleabi-gcc" + CXX_LINUX_ARMV5="armv5-linux-musleabi-g++" + elif [ -x "$CGO_COMPILER_DIR/armv5-linux-musleabi-cross/bin/armv5-linux-musleabi-gcc" ] && + [ -x "$CGO_COMPILER_DIR/armv5-linux-musleabi-cross/bin/armv5-linux-musleabi-g++" ]; then + CC_LINUX_ARMV5="$CGO_COMPILER_DIR/armv5-linux-musleabi-cross/bin/armv5-linux-musleabi-gcc" + CXX_LINUX_ARMV5="$CGO_COMPILER_DIR/armv5-linux-musleabi-cross/bin/armv5-linux-musleabi-g++" + else + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/armv5-linux-musleabi-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/armv5-linux-musleabi-cross" + CC_LINUX_ARMV5="$CGO_COMPILER_DIR/armv5-linux-musleabi-cross/bin/armv5-linux-musleabi-gcc" + CXX_LINUX_ARMV5="$CGO_COMPILER_DIR/armv5-linux-musleabi-cross/bin/armv5-linux-musleabi-g++" + fi + elif [ ! "$CC_LINUX_ARMV5" ] || [ ! "$CXX_LINUX_ARMV5" ]; then + echo "CC_LINUX_ARMV5 or CXX_LINUX_ARMV5 not found" + return 1 + fi + + CC="$CC_LINUX_ARMV5 -static" + CXX="$CXX_LINUX_ARMV5 -static" + else + echo "MICRO: $MICRO not support" + return 1 fi - CC="$CC_LINUX_ARM -static --static" - CXX="$CXX_LINUX_ARM -static --static" ;; "mips") # MICRO: hardfloat softfloat or empty if [ ! "$MICRO" ] || [ "$MICRO" == "hardfloat" ]; then - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/mips-linux-musl.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/mips-linux-musl-cross-${unamespacer}.tgz if [ ! "$CC_LINUX_MIPS" ] && [ ! "$CXX_LINUX_MIPS" ]; then - if command -v mips-linux-musl-gcc >/dev/null 2>&1 && command -v mips-linux-musl-g++ >/dev/null 2>&1; then + if command -v mips-linux-musl-gcc >/dev/null 2>&1 && + command -v mips-linux-musl-g++ >/dev/null 2>&1; then CC_LINUX_MIPS="mips-linux-musl-gcc" CXX_LINUX_MIPS="mips-linux-musl-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/mips-linux-musl/bin/mips-linux-musl-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/mips-linux-musl/bin/mips-linux-musl-g++" ]; then - CC_LINUX_MIPS="$CGO_COMPILER_TMP_DIR/mips-linux-musl/bin/mips-linux-musl-gcc" - CXX_LINUX_MIPS="$CGO_COMPILER_TMP_DIR/mips-linux-musl/bin/mips-linux-musl-g++" + elif [ -x "$CGO_COMPILER_DIR/mips-linux-musl-cross/bin/mips-linux-musl-gcc" ] && + [ -x "$CGO_COMPILER_DIR/mips-linux-musl-cross/bin/mips-linux-musl-g++" ]; then + CC_LINUX_MIPS="$CGO_COMPILER_DIR/mips-linux-musl-cross/bin/mips-linux-musl-gcc" + CXX_LINUX_MIPS="$CGO_COMPILER_DIR/mips-linux-musl-cross/bin/mips-linux-musl-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/mips-linux-musl.tgz" "$CGO_COMPILER_TMP_DIR/mips-linux-musl" - CC_LINUX_MIPS="$CGO_COMPILER_TMP_DIR/mips-linux-musl/bin/mips-linux-musl-gcc" - CXX_LINUX_MIPS="$CGO_COMPILER_TMP_DIR/mips-linux-musl/bin/mips-linux-musl-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/mips-linux-musl-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/mips-linux-musl-cross" + CC_LINUX_MIPS="$CGO_COMPILER_DIR/mips-linux-musl-cross/bin/mips-linux-musl-gcc" + CXX_LINUX_MIPS="$CGO_COMPILER_DIR/mips-linux-musl-cross/bin/mips-linux-musl-g++" fi elif [ ! "$CC_LINUX_MIPS" ] || [ ! "$CXX_LINUX_MIPS" ]; then echo "CC_LINUX_MIPS or CXX_LINUX_MIPS not found" - exit 1 + return 1 fi - CC="$CC_LINUX_MIPS -static --static" - CXX="$CXX_LINUX_MIPS -static --static" + CC="$CC_LINUX_MIPS -static" + CXX="$CXX_LINUX_MIPS -static" elif [ "$MICRO" == "softfloat" ]; then - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/mips-linux-muslsf.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/mips-linux-muslsf-cross-${unamespacer}.tgz if [ ! "$CC_LINUX_MIPS_SOFTFLOAT" ] && [ ! "$CXX_LINUX_MIPS_SOFTFLOAT" ]; then - if command -v mips-linux-muslsf-gcc >/dev/null 2>&1 && command -v mips-linux-muslsf-g++ >/dev/null 2>&1; then + if command -v mips-linux-muslsf-gcc >/dev/null 2>&1 && + command -v mips-linux-muslsf-g++ >/dev/null 2>&1; then CC_LINUX_MIPS_SOFTFLOAT="mips-linux-muslsf-gcc" CXX_LINUX_MIPS_SOFTFLOAT="mips-linux-muslsf-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/mips-linux-muslsf/bin/mips-linux-muslsf-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/mips-linux-muslsf/bin/mips-linux-muslsf-g++" ]; then - CC_LINUX_MIPS_SOFTFLOAT="$CGO_COMPILER_TMP_DIR/mips-linux-muslsf/bin/mips-linux-muslsf-gcc" - CXX_LINUX_MIPS_SOFTFLOAT="$CGO_COMPILER_TMP_DIR/mips-linux-muslsf/bin/mips-linux-muslsf-g++" + elif [ -x "$CGO_COMPILER_DIR/mips-linux-muslsf-cross/bin/mips-linux-muslsf-gcc" ] && + [ -x "$CGO_COMPILER_DIR/mips-linux-muslsf-cross/bin/mips-linux-muslsf-g++" ]; then + CC_LINUX_MIPS_SOFTFLOAT="$CGO_COMPILER_DIR/mips-linux-muslsf-cross/bin/mips-linux-muslsf-gcc" + CXX_LINUX_MIPS_SOFTFLOAT="$CGO_COMPILER_DIR/mips-linux-muslsf-cross/bin/mips-linux-muslsf-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/mips-linux-muslsf.tgz" "$CGO_COMPILER_TMP_DIR/mips-linux-muslsf" - CC_LINUX_MIPS_SOFTFLOAT="$CGO_COMPILER_TMP_DIR/mips-linux-muslsf/bin/mips-linux-muslsf-gcc" - CXX_LINUX_MIPS_SOFTFLOAT="$CGO_COMPILER_TMP_DIR/mips-linux-muslsf/bin/mips-linux-muslsf-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/mips-linux-muslsf-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/mips-linux-muslsf-cross" + CC_LINUX_MIPS_SOFTFLOAT="$CGO_COMPILER_DIR/mips-linux-muslsf-cross/bin/mips-linux-muslsf-gcc" + CXX_LINUX_MIPS_SOFTFLOAT="$CGO_COMPILER_DIR/mips-linux-muslsf-cross/bin/mips-linux-muslsf-g++" fi elif [ ! "$CC_LINUX_MIPS_SOFTFLOAT" ] || [ ! "$CXX_LINUX_MIPS_SOFTFLOAT" ]; then echo "CC_LINUX_MIPS_SOFTFLOAT or CXX_LINUX_MIPS_SOFTFLOAT not found" - exit 1 + return 1 fi - CC="$CC_LINUX_MIPS_SOFTFLOAT -static --static" - CXX="$CXX_LINUX_MIPS_SOFTFLOAT -static --static" + CC="$CC_LINUX_MIPS_SOFTFLOAT -static" + CXX="$CXX_LINUX_MIPS_SOFTFLOAT -static" else echo "MICRO: $MICRO not support" - exit 1 + return 1 fi ;; "mipsle") # MICRO: hardfloat softfloat or empty if [ ! "$MICRO" ] || [ "$MICRO" == "hardfloat" ]; then - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/mipsel-linux-musl.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/mipsel-linux-musl-cross-${unamespacer}.tgz if [ ! "$CC_LINUX_MIPSLE" ] && [ ! "$CXX_LINUX_MIPSLE" ]; then - if command -v mipsel-linux-musl-gcc >/dev/null 2>&1 && command -v mipsel-linux-musl-g++ >/dev/null 2>&1; then + if command -v mipsel-linux-musl-gcc >/dev/null 2>&1 && + command -v mipsel-linux-musl-g++ >/dev/null 2>&1; then CC_LINUX_MIPSLE="mipsel-linux-musl-gcc" CXX_LINUX_MIPSLE="mipsel-linux-musl-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/mipsel-linux-musl/bin/mipsel-linux-musl-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/mipsel-linux-musl/bin/mipsel-linux-musl-g++" ]; then - CC_LINUX_MIPSLE="$CGO_COMPILER_TMP_DIR/mipsel-linux-musl/bin/mipsel-linux-musl-gcc" - CXX_LINUX_MIPSLE="$CGO_COMPILER_TMP_DIR/mipsel-linux-musl/bin/mipsel-linux-musl-g++" + elif [ -x "$CGO_COMPILER_DIR/mipsel-linux-musl-cross/bin/mipsel-linux-musl-gcc" ] && + [ -x "$CGO_COMPILER_DIR/mipsel-linux-musl-cross/bin/mipsel-linux-musl-g++" ]; then + CC_LINUX_MIPSLE="$CGO_COMPILER_DIR/mipsel-linux-musl-cross/bin/mipsel-linux-musl-gcc" + CXX_LINUX_MIPSLE="$CGO_COMPILER_DIR/mipsel-linux-musl-cross/bin/mipsel-linux-musl-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/mipsel-linux-musl.tgz" "$CGO_COMPILER_TMP_DIR/mipsel-linux-musl" - CC_LINUX_MIPSLE="$CGO_COMPILER_TMP_DIR/mipsel-linux-musl/bin/mipsel-linux-musl-gcc" - CXX_LINUX_MIPSLE="$CGO_COMPILER_TMP_DIR/mipsel-linux-musl/bin/mipsel-linux-musl-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/mipsel-linux-musl-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/mipsel-linux-musl-cross" + CC_LINUX_MIPSLE="$CGO_COMPILER_DIR/mipsel-linux-musl-cross/bin/mipsel-linux-musl-gcc" + CXX_LINUX_MIPSLE="$CGO_COMPILER_DIR/mipsel-linux-musl-cross/bin/mipsel-linux-musl-g++" fi elif [ ! "$CC_LINUX_MIPSLE" ] || [ ! "$CXX_LINUX_MIPSLE" ]; then echo "CC_LINUX_MIPSLE or CXX_LINUX_MIPSLE not found" - exit 1 + return 1 fi - CC="$CC_LINUX_MIPSLE -static --static" - CXX="$CXX_LINUX_MIPSLE -static --static" + CC="$CC_LINUX_MIPSLE -static" + CXX="$CXX_LINUX_MIPSLE -static" elif [ "$MICRO" == "softfloat" ]; then - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/mipsel-linux-muslsf.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/mipsel-linux-muslsf-cross-${unamespacer}.tgz if [ ! "$CC_LINUX_MIPSLE_SOFTFLOAT" ] && [ ! "$CXX_LINUX_MIPSLE_SOFTFLOAT" ]; then - if command -v mipsel-linux-muslsf-gcc >/dev/null 2>&1 && command -v mipsel-linux-muslsf-g++ >/dev/null 2>&1; then + if command -v mipsel-linux-muslsf-gcc >/dev/null 2>&1 && + command -v mipsel-linux-muslsf-g++ >/dev/null 2>&1; then CC_LINUX_MIPSLE_SOFTFLOAT="mipsel-linux-muslsf-gcc" CXX_LINUX_MIPSLE_SOFTFLOAT="mipsel-linux-muslsf-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/mipsel-linux-muslsf/bin/mipsel-linux-muslsf-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/mipsel-linux-muslsf/bin/mipsel-linux-muslsf-g++" ]; then - CC_LINUX_MIPSLE_SOFTFLOAT="$CGO_COMPILER_TMP_DIR/mipsel-linux-muslsf/bin/mipsel-linux-muslsf-gcc" - CXX_LINUX_MIPSLE_SOFTFLOAT="$CGO_COMPILER_TMP_DIR/mipsel-linux-muslsf/bin/mipsel-linux-muslsf-g++" + elif [ -x "$CGO_COMPILER_DIR/mipsel-linux-muslsf-cross/bin/mipsel-linux-muslsf-gcc" ] && + [ -x "$CGO_COMPILER_DIR/mipsel-linux-muslsf-cross/bin/mipsel-linux-muslsf-g++" ]; then + CC_LINUX_MIPSLE_SOFTFLOAT="$CGO_COMPILER_DIR/mipsel-linux-muslsf-cross/bin/mipsel-linux-muslsf-gcc" + CXX_LINUX_MIPSLE_SOFTFLOAT="$CGO_COMPILER_DIR/mipsel-linux-muslsf-cross/bin/mipsel-linux-muslsf-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/mipsel-linux-muslsf.tgz" "$CGO_COMPILER_TMP_DIR/mipsel-linux-muslsf" - CC_LINUX_MIPSLE_SOFTFLOAT="$CGO_COMPILER_TMP_DIR/mipsel-linux-muslsf/bin/mipsel-linux-muslsf-gcc" - CXX_LINUX_MIPSLE_SOFTFLOAT="$CGO_COMPILER_TMP_DIR/mipsel-linux-muslsf/bin/mipsel-linux-muslsf-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/mipsel-linux-muslsf-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/mipsel-linux-muslsf-cross" + CC_LINUX_MIPSLE_SOFTFLOAT="$CGO_COMPILER_DIR/mipsel-linux-muslsf-cross/bin/mipsel-linux-muslsf-gcc" + CXX_LINUX_MIPSLE_SOFTFLOAT="$CGO_COMPILER_DIR/mipsel-linux-muslsf-cross/bin/mipsel-linux-muslsf-g++" fi elif [ ! "$CC_LINUX_MIPSLE_SOFTFLOAT" ] || [ ! "$CXX_LINUX_MIPSLE_SOFTFLOAT" ]; then echo "CC_LINUX_MIPSLE_SOFTFLOAT or CXX_LINUX_MIPSLE_SOFTFLOAT not found" - exit 1 + return 1 fi - CC="$CC_LINUX_MIPSLE_SOFTFLOAT -static --static" - CXX="$CXX_LINUX_MIPSLE_SOFTFLOAT -static --static" + CC="$CC_LINUX_MIPSLE_SOFTFLOAT -static" + CXX="$CXX_LINUX_MIPSLE_SOFTFLOAT -static" else echo "MICRO: $MICRO not support" - exit 1 + return 1 fi ;; "mips64") # MICRO: hardfloat softfloat or empty if [ ! "$MICRO" ] || [ "$MICRO" == "hardfloat" ]; then - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/mips64-linux-musl.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/mips64-linux-musl-cross-${unamespacer}.tgz if [ ! "$CC_LINUX_MIPS64" ] && [ ! "$CXX_LINUX_MIPS64" ]; then - if command -v mips64-linux-musl-gcc >/dev/null 2>&1 && command -v mips64-linux-musl-g++ >/dev/null 2>&1; then + if command -v mips64-linux-musl-gcc >/dev/null 2>&1 && + command -v mips64-linux-musl-g++ >/dev/null 2>&1; then CC_LINUX_MIPS64="mips64-linux-musl-gcc" CXX_LINUX_MIPS64="mips64-linux-musl-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/mips64-linux-musl/bin/mips64-linux-musl-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/mips64-linux-musl/bin/mips64-linux-musl-g++" ]; then - CC_LINUX_MIPS64="$CGO_COMPILER_TMP_DIR/mips64-linux-musl/bin/mips64-linux-musl-gcc" - CXX_LINUX_MIPS64="$CGO_COMPILER_TMP_DIR/mips64-linux-musl/bin/mips64-linux-musl-g++" + elif [ -x "$CGO_COMPILER_DIR/mips64-linux-musl-cross/bin/mips64-linux-musl-gcc" ] && + [ -x "$CGO_COMPILER_DIR/mips64-linux-musl-cross/bin/mips64-linux-musl-g++" ]; then + CC_LINUX_MIPS64="$CGO_COMPILER_DIR/mips64-linux-musl-cross/bin/mips64-linux-musl-gcc" + CXX_LINUX_MIPS64="$CGO_COMPILER_DIR/mips64-linux-musl-cross/bin/mips64-linux-musl-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/mips64-linux-musl.tgz" "$CGO_COMPILER_TMP_DIR/mips64-linux-musl" - CC_LINUX_MIPS64="$CGO_COMPILER_TMP_DIR/mips64-linux-musl/bin/mips64-linux-musl-gcc" - CXX_LINUX_MIPS64="$CGO_COMPILER_TMP_DIR/mips64-linux-musl/bin/mips64-linux-musl-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/mips64-linux-musl-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/mips64-linux-musl-cross" + CC_LINUX_MIPS64="$CGO_COMPILER_DIR/mips64-linux-musl-cross/bin/mips64-linux-musl-gcc" + CXX_LINUX_MIPS64="$CGO_COMPILER_DIR/mips64-linux-musl-cross/bin/mips64-linux-musl-g++" fi elif [ ! "$CC_LINUX_MIPS64" ] || [ ! "$CXX_LINUX_MIPS64" ]; then echo "CC_LINUX_MIPS64 or CXX_LINUX_MIPS64 not found" - exit 1 + return 1 fi - CC="$CC_LINUX_MIPS64 -static --static" - CXX="$CXX_LINUX_MIPS64 -static --static" + CC="$CC_LINUX_MIPS64 -static" + CXX="$CXX_LINUX_MIPS64 -static" elif [ "$MICRO" == "softfloat" ]; then - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/mips64-linux-muslsf.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/mips64-linux-muslsf-cross-${unamespacer}.tgz if [ ! "$CC_LINUX_MIPS64_SOFTFLOAT" ] && [ ! "$CXX_LINUX_MIPS64_SOFTFLOAT" ]; then - if command -v mips64-linux-muslsf-gcc >/dev/null 2>&1 && command -v mips64-linux-muslsf-g++ >/dev/null 2>&1; then + if command -v mips64-linux-muslsf-gcc >/dev/null 2>&1 && + command -v mips64-linux-muslsf-g++ >/dev/null 2>&1; then CC_LINUX_MIPS64_SOFTFLOAT="mips64-linux-muslsf-gcc" CXX_LINUX_MIPS64_SOFTFLOAT="mips64-linux-muslsf-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/mips64-linux-muslsf/bin/mips64-linux-muslsf-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/mips64-linux-muslsf/bin/mips64-linux-muslsf-g++" ]; then - CC_LINUX_MIPS64_SOFTFLOAT="$CGO_COMPILER_TMP_DIR/mips64-linux-muslsf/bin/mips64-linux-muslsf-gcc" - CXX_LINUX_MIPS64_SOFTFLOAT="$CGO_COMPILER_TMP_DIR/mips64-linux-muslsf/bin/mips64-linux-muslsf-g++" + elif [ -x "$CGO_COMPILER_DIR/mips64-linux-muslsf-cross/bin/mips64-linux-muslsf-gcc" ] && + [ -x "$CGO_COMPILER_DIR/mips64-linux-muslsf-cross/bin/mips64-linux-muslsf-g++" ]; then + CC_LINUX_MIPS64_SOFTFLOAT="$CGO_COMPILER_DIR/mips64-linux-muslsf-cross/bin/mips64-linux-muslsf-gcc" + CXX_LINUX_MIPS64_SOFTFLOAT="$CGO_COMPILER_DIR/mips64-linux-muslsf-cross/bin/mips64-linux-muslsf-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/mips64-linux-muslsf.tgz" "$CGO_COMPILER_TMP_DIR/mips64-linux-muslsf" - CC_LINUX_MIPS64_SOFTFLOAT="$CGO_COMPILER_TMP_DIR/mips64-linux-muslsf/bin/mips64-linux-muslsf-gcc" - CXX_LINUX_MIPS64_SOFTFLOAT="$CGO_COMPILER_TMP_DIR/mips64-linux-muslsf/bin/mips64-linux-muslsf-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/mips64-linux-muslsf-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/mips64-linux-muslsf-cross" + CC_LINUX_MIPS64_SOFTFLOAT="$CGO_COMPILER_DIR/mips64-linux-muslsf-cross/bin/mips64-linux-muslsf-gcc" + CXX_LINUX_MIPS64_SOFTFLOAT="$CGO_COMPILER_DIR/mips64-linux-muslsf-cross/bin/mips64-linux-muslsf-g++" fi elif [ ! "$CC_LINUX_MIPS64_SOFTFLOAT" ] || [ ! "$CXX_LINUX_MIPS64_SOFTFLOAT" ]; then echo "CC_LINUX_MIPS64_SOFTFLOAT or CXX_LINUX_MIPS64_SOFTFLOAT not found" - exit 1 + return 1 fi - CC="$CC_LINUX_MIPS64_SOFTFLOAT -static --static" - CXX="$CXX_LINUX_MIPS64_SOFTFLOAT -static --static" + CC="$CC_LINUX_MIPS64_SOFTFLOAT -static" + CXX="$CXX_LINUX_MIPS64_SOFTFLOAT -static" else echo "MICRO: $MICRO not support" - exit 1 + return 1 fi ;; "mips64le") # MICRO: hardfloat softfloat or empty if [ ! "$MICRO" ] || [ "$MICRO" == "hardfloat" ]; then - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/mips64el-linux-musl.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/mips64el-linux-musl-cross-${unamespacer}.tgz if [ ! "$CC_LINUX_MIPS64LE" ] && [ ! "$CXX_LINUX_MIPS64LE" ]; then - if command -v mips64el-linux-musl-gcc >/dev/null 2>&1 && command -v mips64el-linux-musl-g++ >/dev/null 2>&1; then + if command -v mips64el-linux-musl-gcc >/dev/null 2>&1 && + command -v mips64el-linux-musl-g++ >/dev/null 2>&1; then CC_LINUX_MIPS64LE="mips64el-linux-musl-gcc" CXX_LINUX_MIPS64LE="mips64el-linux-musl-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/mips64el-linux-musl/bin/mips64el-linux-musl-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/mips64el-linux-musl/bin/mips64el-linux-musl-g++" ]; then - CC_LINUX_MIPS64LE="$CGO_COMPILER_TMP_DIR/mips64el-linux-musl/bin/mips64el-linux-musl-gcc" - CXX_LINUX_MIPS64LE="$CGO_COMPILER_TMP_DIR/mips64el-linux-musl/bin/mips64el-linux-musl-g++" + elif [ -x "$CGO_COMPILER_DIR/mips64el-linux-musl-cross/bin/mips64el-linux-musl-gcc" ] && + [ -x "$CGO_COMPILER_DIR/mips64el-linux-musl-cross/bin/mips64el-linux-musl-g++" ]; then + CC_LINUX_MIPS64LE="$CGO_COMPILER_DIR/mips64el-linux-musl-cross/bin/mips64el-linux-musl-gcc" + CXX_LINUX_MIPS64LE="$CGO_COMPILER_DIR/mips64el-linux-musl-cross/bin/mips64el-linux-musl-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/mips64el-linux-musl.tgz" "$CGO_COMPILER_TMP_DIR/mips64el-linux-musl" - CC_LINUX_MIPS64LE="$CGO_COMPILER_TMP_DIR/mips64el-linux-musl/bin/mips64el-linux-musl-gcc" - CXX_LINUX_MIPS64LE="$CGO_COMPILER_TMP_DIR/mips64el-linux-musl/bin/mips64el-linux-musl-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/mips64el-linux-musl-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/mips64el-linux-musl-cross" + CC_LINUX_MIPS64LE="$CGO_COMPILER_DIR/mips64el-linux-musl-cross/bin/mips64el-linux-musl-gcc" + CXX_LINUX_MIPS64LE="$CGO_COMPILER_DIR/mips64el-linux-musl-cross/bin/mips64el-linux-musl-g++" fi elif [ ! "$CC_LINUX_MIPS64LE" ] || [ ! "$CXX_LINUX_MIPS64LE" ]; then echo "CC_LINUX_MIPS64LE or CXX_LINUX_MIPS64LE not found" - exit 1 + return 1 fi - CC="$CC_LINUX_MIPS64LE -static --static" - CXX="$CXX_LINUX_MIPS64LE -static --static" + CC="$CC_LINUX_MIPS64LE -static" + CXX="$CXX_LINUX_MIPS64LE -static" elif [ "$MICRO" == "softfloat" ]; then - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/mips64el-linux-muslsf.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/mips64el-linux-muslsf-cross-${unamespacer}.tgz if [ ! "$CC_LINUX_MIPS64LE_SOFTFLOAT" ] && [ ! "$CXX_LINUX_MIPS64LE_SOFTFLOAT" ]; then - if command -v mips64el-linux-muslsf-gcc >/dev/null 2>&1 && command -v mips64el-linux-muslsf-g++ >/dev/null 2>&1; then + if command -v mips64el-linux-muslsf-gcc >/dev/null 2>&1 && + command -v mips64el-linux-muslsf-g++ >/dev/null 2>&1; then CC_LINUX_MIPS64LE_SOFTFLOAT="mips64el-linux-muslsf-gcc" CXX_LINUX_MIPS64LE_SOFTFLOAT="mips64el-linux-muslsf-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/mips64el-linux-muslsf/bin/mips64el-linux-muslsf-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/mips64el-linux-muslsf/bin/mips64el-linux-muslsf-g++" ]; then - CC_LINUX_MIPS64LE_SOFTFLOAT="$CGO_COMPILER_TMP_DIR/mips64el-linux-muslsf/bin/mips64el-linux-muslsf-gcc" - CXX_LINUX_MIPS64LE_SOFTFLOAT="$CGO_COMPILER_TMP_DIR/mips64el-linux-muslsf/bin/mips64el-linux-muslsf-g++" + elif [ -x "$CGO_COMPILER_DIR/mips64el-linux-muslsf-cross/bin/mips64el-linux-muslsf-gcc" ] && + [ -x "$CGO_COMPILER_DIR/mips64el-linux-muslsf-cross/bin/mips64el-linux-muslsf-g++" ]; then + CC_LINUX_MIPS64LE_SOFTFLOAT="$CGO_COMPILER_DIR/mips64el-linux-muslsf-cross/bin/mips64el-linux-muslsf-gcc" + CXX_LINUX_MIPS64LE_SOFTFLOAT="$CGO_COMPILER_DIR/mips64el-linux-muslsf-cross/bin/mips64el-linux-muslsf-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/mips64el-linux-muslsf.tgz" "$CGO_COMPILER_TMP_DIR/mips64el-linux-muslsf" - CC_LINUX_MIPS64LE_SOFTFLOAT="$CGO_COMPILER_TMP_DIR/mips64el-linux-muslsf/bin/mips64el-linux-muslsf-gcc" - CXX_LINUX_MIPS64LE_SOFTFLOAT="$CGO_COMPILER_TMP_DIR/mips64el-linux-muslsf/bin/mips64el-linux-muslsf-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/mips64el-linux-muslsf-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/mips64el-linux-muslsf-cross" + CC_LINUX_MIPS64LE_SOFTFLOAT="$CGO_COMPILER_DIR/mips64el-linux-muslsf-cross/bin/mips64el-linux-muslsf-gcc" + CXX_LINUX_MIPS64LE_SOFTFLOAT="$CGO_COMPILER_DIR/mips64el-linux-muslsf-cross/bin/mips64el-linux-muslsf-g++" fi elif [ ! "$CC_LINUX_MIPS64LE_SOFTFLOAT" ] || [ ! "$CXX_LINUX_MIPS64LE_SOFTFLOAT" ]; then echo "CC_LINUX_MIPS64LE_SOFTFLOAT or CXX_LINUX_MIPS64LE_SOFTFLOAT not found" - exit 1 + return 1 fi - CC="$CC_LINUX_MIPS64LE_SOFTFLOAT -static --static" - CXX="$CXX_LINUX_MIPS64LE_SOFTFLOAT -static --static" + CC="$CC_LINUX_MIPS64LE_SOFTFLOAT -static" + CXX="$CXX_LINUX_MIPS64LE_SOFTFLOAT -static" else echo "MICRO: $MICRO not support" - exit 1 + return 1 fi ;; "ppc64") # MICRO: power8 power9 or empty (not use) - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/powerpc64-linux-musl.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/powerpc64-linux-musl-cross-${unamespacer}.tgz if [ ! "$CC_LINUX_PPC64" ] && [ ! "$CXX_LINUX_PPC64" ]; then - if command -v powerpc64-linux-musl-gcc >/dev/null 2>&1 && command -v powerpc64-linux-musl-g++ >/dev/null 2>&1; then + if command -v powerpc64-linux-musl-gcc >/dev/null 2>&1 && + command -v powerpc64-linux-musl-g++ >/dev/null 2>&1; then CC_LINUX_PPC64="powerpc64-linux-musl-gcc" CXX_LINUX_PPC64="powerpc64-linux-musl-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/powerpc64-linux-musl/bin/powerpc64-linux-musl-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/powerpc64-linux-musl/bin/powerpc64-linux-musl-g++" ]; then - CC_LINUX_PPC64="$CGO_COMPILER_TMP_DIR/powerpc64-linux-musl/bin/powerpc64-linux-musl-gcc" - CXX_LINUX_PPC64="$CGO_COMPILER_TMP_DIR/powerpc64-linux-musl/bin/powerpc64-linux-musl-g++" + elif [ -x "$CGO_COMPILER_DIR/powerpc64-linux-musl-cross/bin/powerpc64-linux-musl-gcc" ] && + [ -x "$CGO_COMPILER_DIR/powerpc64-linux-musl-cross/bin/powerpc64-linux-musl-g++" ]; then + CC_LINUX_PPC64="$CGO_COMPILER_DIR/powerpc64-linux-musl-cross/bin/powerpc64-linux-musl-gcc" + CXX_LINUX_PPC64="$CGO_COMPILER_DIR/powerpc64-linux-musl-cross/bin/powerpc64-linux-musl-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/powerpc64-linux-musl.tgz" "$CGO_COMPILER_TMP_DIR/powerpc64-linux-musl" - CC_LINUX_PPC64="$CGO_COMPILER_TMP_DIR/powerpc64-linux-musl/bin/powerpc64-linux-musl-gcc" - CXX_LINUX_PPC64="$CGO_COMPILER_TMP_DIR/powerpc64-linux-musl/bin/powerpc64-linux-musl-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/powerpc64-linux-musl-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/powerpc64-linux-musl-cross" + CC_LINUX_PPC64="$CGO_COMPILER_DIR/powerpc64-linux-musl-cross/bin/powerpc64-linux-musl-gcc" + CXX_LINUX_PPC64="$CGO_COMPILER_DIR/powerpc64-linux-musl-cross/bin/powerpc64-linux-musl-g++" fi elif [ ! "$CC_LINUX_PPC64" ] || [ ! "$CXX_LINUX_PPC64" ]; then echo "CC_LINUX_PPC64 or CXX_LINUX_PPC64 not found" - exit 1 + return 1 fi - CC="$CC_LINUX_PPC64 -static --static" - CXX="$CXX_LINUX_PPC64 -static --static" + CC="$CC_LINUX_PPC64 -static" + CXX="$CXX_LINUX_PPC64 -static" ;; "ppc64le") # MICRO: power8 power9 or empty (not use) - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/powerpc64le-linux-musl.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/powerpc64le-linux-musl-cross-${unamespacer}.tgz if [ ! "$CC_LINUX_PPC64LE" ] && [ ! "$CXX_LINUX_PPC64LE" ]; then - if command -v powerpc64le-linux-musl-gcc >/dev/null 2>&1 && command -v powerpc64le-linux-musl-g++ >/dev/null 2>&1; then + if command -v powerpc64le-linux-musl-gcc >/dev/null 2>&1 && + command -v powerpc64le-linux-musl-g++ >/dev/null 2>&1; then CC_LINUX_PPC64LE="powerpc64le-linux-musl-gcc" CXX_LINUX_PPC64LE="powerpc64le-linux-musl-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/powerpc64le-linux-musl/bin/powerpc64le-linux-musl-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/powerpc64le-linux-musl/bin/powerpc64le-linux-musl-g++" ]; then - CC_LINUX_PPC64LE="$CGO_COMPILER_TMP_DIR/powerpc64le-linux-musl/bin/powerpc64le-linux-musl-gcc" - CXX_LINUX_PPC64LE="$CGO_COMPILER_TMP_DIR/powerpc64le-linux-musl/bin/powerpc64le-linux-musl-g++" + elif [ -x "$CGO_COMPILER_DIR/powerpc64le-linux-musl-cross/bin/powerpc64le-linux-musl-gcc" ] && + [ -x "$CGO_COMPILER_DIR/powerpc64le-linux-musl-cross/bin/powerpc64le-linux-musl-g++" ]; then + CC_LINUX_PPC64LE="$CGO_COMPILER_DIR/powerpc64le-linux-musl-cross/bin/powerpc64le-linux-musl-gcc" + CXX_LINUX_PPC64LE="$CGO_COMPILER_DIR/powerpc64le-linux-musl-cross/bin/powerpc64le-linux-musl-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/powerpc64le-linux-musl.tgz" "$CGO_COMPILER_TMP_DIR/powerpc64le-linux-musl" - CC_LINUX_PPC64LE="$CGO_COMPILER_TMP_DIR/powerpc64le-linux-musl/bin/powerpc64le-linux-musl-gcc" - CXX_LINUX_PPC64LE="$CGO_COMPILER_TMP_DIR/powerpc64le-linux-musl/bin/powerpc64le-linux-musl-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/powerpc64le-linux-musl-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/powerpc64le-linux-musl-cross" + CC_LINUX_PPC64LE="$CGO_COMPILER_DIR/powerpc64le-linux-musl-cross/bin/powerpc64le-linux-musl-gcc" + CXX_LINUX_PPC64LE="$CGO_COMPILER_DIR/powerpc64le-linux-musl-cross/bin/powerpc64le-linux-musl-g++" fi elif [ ! "$CC_LINUX_PPC64LE" ] || [ ! "$CXX_LINUX_PPC64LE" ]; then echo "CC_LINUX_PPC64LE or CXX_LINUX_PPC64LE not found" - exit 1 + return 1 fi - CC="$CC_LINUX_PPC64LE -static --static" - CXX="$CXX_LINUX_PPC64LE -static --static" + CC="$CC_LINUX_PPC64LE -static" + CXX="$CXX_LINUX_PPC64LE -static" ;; "riscv64") - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/riscv64-linux-musl.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/riscv64-linux-musl-cross-${unamespacer}.tgz if [ ! "$CC_LINUX_RISCV64" ] && [ ! "$CXX_LINUX_RISCV64" ]; then - if command -v riscv64-linux-musl-gcc >/dev/null 2>&1 && command -v riscv64-linux-musl-g++ >/dev/null 2>&1; then + if command -v riscv64-linux-musl-gcc >/dev/null 2>&1 && + command -v riscv64-linux-musl-g++ >/dev/null 2>&1; then CC_LINUX_RISCV64="riscv64-linux-musl-gcc" CXX_LINUX_RISCV64="riscv64-linux-musl-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/riscv64-linux-musl/bin/riscv64-linux-musl-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/riscv64-linux-musl/bin/riscv64-linux-musl-g++" ]; then - CC_LINUX_RISCV64="$CGO_COMPILER_TMP_DIR/riscv64-linux-musl/bin/riscv64-linux-musl-gcc" - CXX_LINUX_RISCV64="$CGO_COMPILER_TMP_DIR/riscv64-linux-musl/bin/riscv64-linux-musl-g++" + elif [ -x "$CGO_COMPILER_DIR/riscv64-linux-musl-cross/bin/riscv64-linux-musl-gcc" ] && + [ -x "$CGO_COMPILER_DIR/riscv64-linux-musl-cross/bin/riscv64-linux-musl-g++" ]; then + CC_LINUX_RISCV64="$CGO_COMPILER_DIR/riscv64-linux-musl-cross/bin/riscv64-linux-musl-gcc" + CXX_LINUX_RISCV64="$CGO_COMPILER_DIR/riscv64-linux-musl-cross/bin/riscv64-linux-musl-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/riscv64-linux-musl.tgz" "$CGO_COMPILER_TMP_DIR/riscv64-linux-musl" - CC_LINUX_RISCV64="$CGO_COMPILER_TMP_DIR/riscv64-linux-musl/bin/riscv64-linux-musl-gcc" - CXX_LINUX_RISCV64="$CGO_COMPILER_TMP_DIR/riscv64-linux-musl/bin/riscv64-linux-musl-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/riscv64-linux-musl-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/riscv64-linux-musl-cross" + CC_LINUX_RISCV64="$CGO_COMPILER_DIR/riscv64-linux-musl-cross/bin/riscv64-linux-musl-gcc" + CXX_LINUX_RISCV64="$CGO_COMPILER_DIR/riscv64-linux-musl-cross/bin/riscv64-linux-musl-g++" fi elif [ ! "$CC_LINUX_RISCV64" ] || [ ! "$CXX_LINUX_RISCV64" ]; then echo "CC_LINUX_RISCV64 or CXX_LINUX_RISCV64 not found" - exit 1 + return 1 fi - CC="$CC_LINUX_RISCV64 -static --static" - CXX="$CXX_LINUX_RISCV64 -static --static" + CC="$CC_LINUX_RISCV64 -static" + CXX="$CXX_LINUX_RISCV64 -static" ;; "s390x") - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/s390x-linux-musl.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/s390x-linux-musl-cross-${unamespacer}.tgz if [ ! "$CC_LINUX_S390X" ] && [ ! "$CXX_LINUX_S390X" ]; then - if command -v s390x-linux-musl-gcc >/dev/null 2>&1 && command -v s390x-linux-musl-g++ >/dev/null 2>&1; then + if command -v s390x-linux-musl-gcc >/dev/null 2>&1 && + command -v s390x-linux-musl-g++ >/dev/null 2>&1; then CC_LINUX_S390X="s390x-linux-musl-gcc" CXX_LINUX_S390X="s390x-linux-musl-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/s390x-linux-musl/bin/s390x-linux-musl-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/s390x-linux-musl/bin/s390x-linux-musl-g++" ]; then - CC_LINUX_S390X="$CGO_COMPILER_TMP_DIR/s390x-linux-musl/bin/s390x-linux-musl-gcc" - CXX_LINUX_S390X="$CGO_COMPILER_TMP_DIR/s390x-linux-musl/bin/s390x-linux-musl-g++" + elif [ -x "$CGO_COMPILER_DIR/s390x-linux-musl-cross/bin/s390x-linux-musl-gcc" ] && + [ -x "$CGO_COMPILER_DIR/s390x-linux-musl-cross/bin/s390x-linux-musl-g++" ]; then + CC_LINUX_S390X="$CGO_COMPILER_DIR/s390x-linux-musl-cross/bin/s390x-linux-musl-gcc" + CXX_LINUX_S390X="$CGO_COMPILER_DIR/s390x-linux-musl-cross/bin/s390x-linux-musl-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/s390x-linux-musl.tgz" "$CGO_COMPILER_TMP_DIR/s390x-linux-musl" - CC_LINUX_S390X="$CGO_COMPILER_TMP_DIR/s390x-linux-musl/bin/s390x-linux-musl-gcc" - CXX_LINUX_S390X="$CGO_COMPILER_TMP_DIR/s390x-linux-musl/bin/s390x-linux-musl-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/s390x-linux-musl-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/s390x-linux-musl-cross" + CC_LINUX_S390X="$CGO_COMPILER_DIR/s390x-linux-musl-cross/bin/s390x-linux-musl-gcc" + CXX_LINUX_S390X="$CGO_COMPILER_DIR/s390x-linux-musl-cross/bin/s390x-linux-musl-g++" fi elif [ ! "$CC_LINUX_S390X" ] || [ ! "$CXX_LINUX_S390X" ]; then echo "CC_LINUX_S390X or CXX_LINUX_S390X not found" - exit 1 + return 1 fi - CC="$CC_LINUX_S390X -static --static" - CXX="$CXX_LINUX_S390X -static --static" + CC="$CC_LINUX_S390X -static" + CXX="$CXX_LINUX_S390X -static" ;; "loong64") - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/loongarch64-linux-musl.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/loongarch64-linux-musl-cross-${unamespacer}.tgz if [ ! "$CC_LINUX_LOONG64" ] && [ ! "$CXX_LINUX_LOONG64" ]; then - if command -v loongarch64-linux-musl-gcc >/dev/null 2>&1 && command -v loongarch64-linux-musl-g++ >/dev/null 2>&1; then + if command -v loongarch64-linux-musl-gcc >/dev/null 2>&1 && + command -v loongarch64-linux-musl-g++ >/dev/null 2>&1; then CC_LINUX_LOONG64="loongarch64-linux-musl-gcc" CXX_LINUX_LOONG64="loongarch64-linux-musl-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/loongarch64-linux-musl/bin/loongarch64-linux-musl-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/loongarch64-linux-musl/bin/loongarch64-linux-musl-g++" ]; then - CC_LINUX_LOONG64="$CGO_COMPILER_TMP_DIR/loongarch64-linux-musl/bin/loongarch64-linux-musl-gcc" - CXX_LINUX_LOONG64="$CGO_COMPILER_TMP_DIR/loongarch64-linux-musl/bin/loongarch64-linux-musl-g++" + elif [ -x "$CGO_COMPILER_DIR/loongarch64-linux-musl-cross/bin/loongarch64-linux-musl-gcc" ] && + [ -x "$CGO_COMPILER_DIR/loongarch64-linux-musl-cross/bin/loongarch64-linux-musl-g++" ]; then + CC_LINUX_LOONG64="$CGO_COMPILER_DIR/loongarch64-linux-musl-cross/bin/loongarch64-linux-musl-gcc" + CXX_LINUX_LOONG64="$CGO_COMPILER_DIR/loongarch64-linux-musl-cross/bin/loongarch64-linux-musl-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/loongarch64-linux-musl.tgz" "$CGO_COMPILER_TMP_DIR/loongarch64-linux-musl" - CC_LINUX_LOONG64="$CGO_COMPILER_TMP_DIR/loongarch64-linux-musl/bin/loongarch64-linux-musl-gcc" - CXX_LINUX_LOONG64="$CGO_COMPILER_TMP_DIR/loongarch64-linux-musl/bin/loongarch64-linux-musl-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/loongarch64-linux-musl-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/loongarch64-linux-musl-cross" + CC_LINUX_LOONG64="$CGO_COMPILER_DIR/loongarch64-linux-musl-cross/bin/loongarch64-linux-musl-gcc" + CXX_LINUX_LOONG64="$CGO_COMPILER_DIR/loongarch64-linux-musl-cross/bin/loongarch64-linux-musl-g++" fi elif [ ! "$CC_LINUX_LOONG64" ] || [ ! "$CXX_LINUX_LOONG64" ]; then echo "CC_LINUX_LOONG64 or CXX_LINUX_LOONG64 not found" - exit 1 + return 1 fi - CC="$CC_LINUX_LOONG64 -static --static" - CXX="$CXX_LINUX_LOONG64 -static --static" + CC="$CC_LINUX_LOONG64 -static" + CXX="$CXX_LINUX_LOONG64 -static" ;; *) - echo "$GOOS/$GOARCH not support for cgo" - exit 1 + if [ "$GOOS" == "$GOHOSTOS" ] && [ "$GOARCH" == "$GOHOSTARCH" ]; then + InitHostCGODeps "$@" + else + echo "$GOOS/$GOARCH not support for cgo" + return 1 + fi ;; esac ;; @@ -854,63 +931,72 @@ function InitLinuxAmd64CGODeps() { case "$GOARCH" in "386") # Micro: sse2 softfloat or empty (not use) - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/i686-w64-mingw32.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/i686-w64-mingw32-cross-${unamespacer}.tgz if [ ! "$CC_WINDOWS_386" ] && [ ! "$CXX_WINDOWS_386" ]; then - if command -v i686-w64-mingw32-gcc >/dev/null 2>&1 && command -v i686-w64-mingw32-g++ >/dev/null 2>&1; then + if command -v i686-w64-mingw32-gcc >/dev/null 2>&1 && + command -v i686-w64-mingw32-g++ >/dev/null 2>&1; then CC_WINDOWS_386="i686-w64-mingw32-gcc" CXX_WINDOWS_386="i686-w64-mingw32-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/i686-w64-mingw32/bin/i686-w64-mingw32-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/i686-w64-mingw32/bin/i686-w64-mingw32-g++" ]; then - CC_WINDOWS_386="$CGO_COMPILER_TMP_DIR/i686-w64-mingw32/bin/i686-w64-mingw32-gcc" - CXX_WINDOWS_386="$CGO_COMPILER_TMP_DIR/i686-w64-mingw32/bin/i686-w64-mingw32-g++" + elif [ -x "$CGO_COMPILER_DIR/i686-w64-mingw32-cross/bin/i686-w64-mingw32-gcc" ] && + [ -x "$CGO_COMPILER_DIR/i686-w64-mingw32-cross/bin/i686-w64-mingw32-g++" ]; then + CC_WINDOWS_386="$CGO_COMPILER_DIR/i686-w64-mingw32-cross/bin/i686-w64-mingw32-gcc" + CXX_WINDOWS_386="$CGO_COMPILER_DIR/i686-w64-mingw32-cross/bin/i686-w64-mingw32-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/i686-w64-mingw32.tgz" "$CGO_COMPILER_TMP_DIR/i686-w64-mingw32" - CC_WINDOWS_386="$CGO_COMPILER_TMP_DIR/i686-w64-mingw32/bin/i686-w64-mingw32-gcc" - CXX_WINDOWS_386="$CGO_COMPILER_TMP_DIR/i686-w64-mingw32/bin/i686-w64-mingw32-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/i686-w64-mingw32-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/i686-w64-mingw32-cross" + CC_WINDOWS_386="$CGO_COMPILER_DIR/i686-w64-mingw32-cross/bin/i686-w64-mingw32-gcc" + CXX_WINDOWS_386="$CGO_COMPILER_DIR/i686-w64-mingw32-cross/bin/i686-w64-mingw32-g++" fi elif [ ! "$CC_WINDOWS_386" ] || [ ! "$CXX_WINDOWS_386" ]; then echo "CC_WINDOWS_386 or CXX_WINDOWS_386 not found" - exit 1 + return 1 fi - CC="$CC_WINDOWS_386 -static --static" - CXX="$CXX_WINDOWS_386 -static --static" + CC="$CC_WINDOWS_386 -static" + CXX="$CXX_WINDOWS_386 -static" ;; "amd64") - # https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/x86_64-w64-mingw32.tgz + # https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/x86_64-w64-mingw32-cross-${unamespacer}.tgz if [ ! "$CC_WINDOWS_AMD64" ] && [ ! "$CXX_WINDOWS_AMD64" ]; then - if command -v x86_64-w64-mingw32-gcc >/dev/null 2>&1 && command -v x86_64-w64-mingw32-g++ >/dev/null 2>&1; then + if command -v x86_64-w64-mingw32-gcc >/dev/null 2>&1 && + command -v x86_64-w64-mingw32-g++ >/dev/null 2>&1; then CC_WINDOWS_AMD64="x86_64-w64-mingw32-gcc" CXX_WINDOWS_AMD64="x86_64-w64-mingw32-g++" - elif [ -x "$CGO_COMPILER_TMP_DIR/x86_64-w64-mingw32/bin/x86_64-w64-mingw32-gcc" ] && [ -x "$CGO_COMPILER_TMP_DIR/x86_64-w64-mingw32/bin/x86_64-w64-mingw32-g++" ]; then - CC_WINDOWS_AMD64="$CGO_COMPILER_TMP_DIR/x86_64-w64-mingw32/bin/x86_64-w64-mingw32-gcc" - CXX_WINDOWS_AMD64="$CGO_COMPILER_TMP_DIR/x86_64-w64-mingw32/bin/x86_64-w64-mingw32-g++" + elif [ -x "$CGO_COMPILER_DIR/x86_64-w64-mingw32-cross/bin/x86_64-w64-mingw32-gcc" ] && + [ -x "$CGO_COMPILER_DIR/x86_64-w64-mingw32-cross/bin/x86_64-w64-mingw32-g++" ]; then + CC_WINDOWS_AMD64="$CGO_COMPILER_DIR/x86_64-w64-mingw32-cross/bin/x86_64-w64-mingw32-gcc" + CXX_WINDOWS_AMD64="$CGO_COMPILER_DIR/x86_64-w64-mingw32-cross/bin/x86_64-w64-mingw32-g++" else - DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/v0.3.2/x86_64-w64-mingw32.tgz" "$CGO_COMPILER_TMP_DIR/x86_64-w64-mingw32" - CC_WINDOWS_AMD64="$CGO_COMPILER_TMP_DIR/x86_64-w64-mingw32/bin/x86_64-w64-mingw32-gcc" - CXX_WINDOWS_AMD64="$CGO_COMPILER_TMP_DIR/x86_64-w64-mingw32/bin/x86_64-w64-mingw32-g++" + DownloadAndUnzip "${GH_PROXY}https://github.com/zijiren233/musl-cross-make/releases/download/${DEFAULT_CGO_DEPS_VERSION}/x86_64-w64-mingw32-cross-${unamespacer}.tgz" \ + "$CGO_COMPILER_DIR/x86_64-w64-mingw32-cross" + CC_WINDOWS_AMD64="$CGO_COMPILER_DIR/x86_64-w64-mingw32-cross/bin/x86_64-w64-mingw32-gcc" + CXX_WINDOWS_AMD64="$CGO_COMPILER_DIR/x86_64-w64-mingw32-cross/bin/x86_64-w64-mingw32-g++" fi elif [ ! "$CC_WINDOWS_AMD64" ] || [ ! "$CXX_WINDOWS_AMD64" ]; then echo "CC_WINDOWS_AMD64 or CXX_WINDOWS_AMD64 not found" - exit 1 + return 1 fi - CC="$CC_WINDOWS_AMD64 -static --static" - CXX="$CXX_WINDOWS_AMD64 -static --static" - ;; - "arm") - # Micro: 5 6 7 or empty (not use) - echo "$GOOS/$GOARCH not support for cgo" - exit 1 + CC="$CC_WINDOWS_AMD64 -static" + CXX="$CXX_WINDOWS_AMD64 -static" ;; *) - echo "$GOOS/$GOARCH not support for cgo" - exit 1 + if [ "$GOOS" == "$GOHOSTOS" ] && [ "$GOARCH" == "$GOHOSTARCH" ]; then + InitHostCGODeps "$@" + else + echo "$GOOS/$GOARCH not support for cgo" + return 1 + fi ;; esac ;; *) - echo "$GOOS not support for cgo" - exit 1 + if [ "$GOOS" == "$GOHOSTOS" ] && [ "$GOARCH" == "$GOHOSTARCH" ]; then + InitHostCGODeps "$@" + else + echo "$GOOS/$GOARCH not support for cgo" + return 1 + fi ;; esac } @@ -945,41 +1031,35 @@ function Build() { TARGET_FILE="$BUILD_DIR/$TARGET_NAME" - FULL_LDFLAGS="$LDFLAGS" - - if [ "$platform" == "linux/ppc64" ] || [ "$platform" == "linux/ppc64le" ]; then - FULL_LDFLAGS="$FULL_LDFLAGS -linkmode=external" - fi + TMP_BUILD_ARGS="-tags \"$TAGS\" -ldflags \"$LDFLAGS\" -trimpath $BUILD_ARGS" - BUILD_FLAGS="-tags \"$TAGS\" -ldflags \"$FULL_LDFLAGS\"" - if [ ! "$DISABLE_TRIM_PATH" ]; then - BUILD_FLAGS="$BUILD_FLAGS -trimpath" + if [[ "$platform" != "linux/mips"* ]]; then + TMP_BUILD_ARGS="$TMP_BUILD_ARGS -buildmode=pie" fi BUILD_ENV="CGO_ENABLED=$CGO_ENABLED \ - CGO_CFGLAGS=\"$CGO_CFGLAGS\" \ - CGO_CXXFLAGS=\"$CGO_CXXFLAGS\" \ - CGO_LDFLAGS=\"$CGO_LDFLAGS\" \ GOOS=$GOOS \ GOARCH=$GOARCH" if [ "$DISABLE_MICRO" ]; then echo "building $GOOS/$GOARCH" InitCGODeps "$GOOS" "$GOARCH" - eval "$BUILD_ENV CC=\"$CC\" CXX=\"$CXX\" \ + BUILD_ENV="$BUILD_ENV \ + CC=\"$CC\" CXX=\"$CXX\" \ + CGO_CFLAGS=\"$CGO_CFLAGS $MORE_CGO_CFLAGS\" \ + CGO_CXXFLAGS=\"$CGO_CXXFLAGS $MORE_CGO_CXXFLAGS\" \ + CGO_LDFLAGS=\"$CGO_LDFLAGS $MORE_CGO_LDFLAGS\" \ GO386=sse2 \ GOARM=6 \ GOAMD64=v1 \ GOMIPS=hardfloat GOMIPS64=hardfloat \ GOPPC64=power8 \ - GOWASM= \ - go build $BUILD_FLAGS -o \"$TARGET_FILE$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH failed" - exit 1 - else - echo "build $GOOS/$GOARCH success" - fi + GOWASM=" + echo $BUILD_ENV \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE$EXT\" \"$SOURCE_DIR\" + eval $BUILD_ENV \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH success" else # https://go.dev/doc/install/source#environment case "$GOARCH" in @@ -987,217 +1067,231 @@ function Build() { # default sse2 echo "building $GOOS/$GOARCH sse2" InitCGODeps "$GOOS" "$GOARCH" - eval "$BUILD_ENV CC=\"$CC\" CXX=\"$CXX\" GO386=sse2 go build $BUILD_FLAGS -o \"$TARGET_FILE-sse2$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH failed" - exit 1 - else - echo "build $GOOS/$GOARCH success" - fi + BUILD_ENV="$BUILD_ENV \ + CC=\"$CC\" CXX=\"$CXX\" \ + CGO_CFLAGS=\"$CGO_CFLAGS $MORE_CGO_CFLAGS\" \ + CGO_CXXFLAGS=\"$CGO_CXXFLAGS $MORE_CGO_CXXFLAGS\" \ + CGO_LDFLAGS=\"$CGO_LDFLAGS $MORE_CGO_LDFLAGS\"" + echo $BUILD_ENV \ + GO386=sse2 \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-sse2$EXT\" \"$SOURCE_DIR\" + eval $BUILD_ENV \ + GO386=sse2 \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-sse2$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH success" cp "$TARGET_FILE-sse2$EXT" "$TARGET_FILE$EXT" - if [ $? -ne 0 ]; then - echo "copy $GOOS/$GOARCH sse2 to $GOOS/$GOARCH failed" - exit 1 - else - echo "copy $GOOS/$GOARCH sse2 to $GOOS/$GOARCH success" - fi + echo "copy $GOOS/$GOARCH sse2 to $GOOS/$GOARCH success" echo "building $GOOS/$GOARCH softfloat" - eval "$BUILD_ENV CC=\"$CC\" CXX=\"$CXX\" GO386=softfloat go build $BUILD_FLAGS -o \"$TARGET_FILE-softfloat$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH softfloat failed" - exit 1 - else - echo "build $GOOS/$GOARCH softfloat success" - fi + echo $BUILD_ENV \ + GO386=softfloat \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-softfloat$EXT\" \"$SOURCE_DIR\" + eval $BUILD_ENV \ + GO386=softfloat \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-softfloat$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH success" ;; "arm") # default 6 # https://go.dev/wiki/GoArm echo "building $GOOS/$GOARCH 5" InitCGODeps "$GOOS" "$GOARCH" "5" - eval "$BUILD_ENV CC=\"$CC\" CXX=\"$CXX\" GOARM=5 go build $BUILD_FLAGS -o \"$TARGET_FILE-5$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH 5 failed" - exit 1 - else - echo "build $GOOS/$GOARCH 5 success" - fi + TMP_BUILD_ENV="$BUILD_ENV \ + CC=\"$CC\" CXX=\"$CXX\" \ + CGO_CFLAGS=\"$CGO_CFLAGS $MORE_CGO_CFLAGS\" \ + CGO_CXXFLAGS=\"$CGO_CXXFLAGS $MORE_CGO_CXXFLAGS\" \ + CGO_LDFLAGS=\"$CGO_LDFLAGS $MORE_CGO_LDFLAGS\" \ + GOARM=5" + echo $TMP_BUILD_ENV \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-5$EXT\" \"$SOURCE_DIR\" + eval $TMP_BUILD_ENV \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-5$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH 5 success" echo "building $GOOS/$GOARCH 6" InitCGODeps "$GOOS" "$GOARCH" "6" - eval "$BUILD_ENV CC=\"$CC\" CXX=\"$CXX\" GOARM=6 go build $BUILD_FLAGS -o \"$TARGET_FILE-6$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH 6 failed" - exit 1 - else - echo "build $GOOS/$GOARCH 6 success" - fi + TMP_BUILD_ENV="$BUILD_ENV \ + CC=\"$CC\" CXX=\"$CXX\" \ + CGO_CFLAGS=\"$CGO_CFLAGS $MORE_CGO_CFLAGS\" \ + CGO_CXXFLAGS=\"$CGO_CXXFLAGS $MORE_CGO_CXXFLAGS\" \ + CGO_LDFLAGS=\"$CGO_LDFLAGS $MORE_CGO_LDFLAGS\" \ + GOARM=6" + echo $TMP_BUILD_ENV \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-6$EXT\" \"$SOURCE_DIR\" + eval $TMP_BUILD_ENV \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-6$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH 6 success" cp "$TARGET_FILE-6$EXT" "$TARGET_FILE$EXT" - if [ $? -ne 0 ]; then - echo "copy $GOOS/$GOARCH 6 to $GOOS/$GOARCH failed" - exit 1 - else - echo "copy $GOOS/$GOARCH 6 to $GOOS/$GOARCH success" - fi + echo "copy $GOOS/$GOARCH 6 to $GOOS/$GOARCH success" echo "building $GOOS/$GOARCH 7" InitCGODeps "$GOOS" "$GOARCH" "7" - eval "$BUILD_ENV CC=\"$CC\" CXX=\"$CXX\" GOARM=7 go build $BUILD_FLAGS -o \"$TARGET_FILE-7$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH failed" - exit 1 - else - echo "build $GOOS/$GOARCH success" - fi + TMP_BUILD_ENV="$BUILD_ENV \ + CC=\"$CC\" CXX=\"$CXX\" \ + CGO_CFLAGS=\"$CGO_CFLAGS $MORE_CGO_CFLAGS\" \ + CGO_CXXFLAGS=\"$CGO_CXXFLAGS $MORE_CGO_CXXFLAGS\" \ + CGO_LDFLAGS=\"$CGO_LDFLAGS $MORE_CGO_LDFLAGS\" \ + GOARM=7" + echo $TMP_BUILD_ENV \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-7$EXT\" \"$SOURCE_DIR\" + eval $TMP_BUILD_ENV \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-7$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH success" ;; "amd64") # default v1 # https://go.dev/wiki/MinimumRequirements#amd64 echo "building $GOOS/$GOARCH v1" InitCGODeps "$GOOS" "$GOARCH" - eval "$BUILD_ENV CC=\"$CC\" CXX=\"$CXX\" GOAMD64=v1 go build $BUILD_FLAGS -o \"$TARGET_FILE-v1$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH failed" - exit 1 - else - echo "build $GOOS/$GOARCH success" - fi + BUILD_ENV="$BUILD_ENV \ + CC=\"$CC\" CXX=\"$CXX\" \ + CGO_CFLAGS=\"$CGO_CFLAGS $MORE_CGO_CFLAGS\" \ + CGO_CXXFLAGS=\"$CGO_CXXFLAGS $MORE_CGO_CXXFLAGS\" \ + CGO_LDFLAGS=\"$CGO_LDFLAGS $MORE_CGO_LDFLAGS\"" + echo $BUILD_ENV \ + GOAMD64=v1 \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-v1$EXT\" \"$SOURCE_DIR\" + eval $BUILD_ENV \ + GOAMD64=v1 \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-v1$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH success" cp "$TARGET_FILE-v1$EXT" "$TARGET_FILE$EXT" - if [ $? -ne 0 ]; then - echo "copy $GOOS/$GOARCH v1 to $GOOS/$GOARCH failed" - exit 1 - else - echo "copy $GOOS/$GOARCH v1 to $GOOS/$GOARCH success" - fi + echo "copy $GOOS/$GOARCH v1 to $GOOS/$GOARCH success" echo "building $GOOS/$GOARCH v2" - eval "$BUILD_ENV CC=\"$CC\" CXX=\"$CXX\" GOAMD64=v2 go build $BUILD_FLAGS -o \"$TARGET_FILE-v2$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH v2 failed" - exit 1 - else - echo "build $GOOS/$GOARCH v2 success" - fi + echo $BUILD_ENV \ + GOAMD64=v2 \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-v2$EXT\" \"$SOURCE_DIR\" + eval $BUILD_ENV \ + GOAMD64=v2 \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-v2$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH v2 success" echo "building $GOOS/$GOARCH v3" - eval "$BUILD_ENV CC=\"$CC\" CXX=\"$CXX\" GOAMD64=v3 go build $BUILD_FLAGS -o \"$TARGET_FILE-v3$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH v3 failed" - exit 1 - else - echo "build $GOOS/$GOARCH v3 success" - fi + echo $BUILD_ENV \ + GOAMD64=v3 \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-v3$EXT\" \"$SOURCE_DIR\" + eval $BUILD_ENV \ + GOAMD64=v3 \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-v3$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH v3 success" echo "building $GOOS/$GOARCH v4" - eval "$BUILD_ENV CC=\"$CC\" CXX=\"$CXX\" GOAMD64=v4 go build $BUILD_FLAGS -o \"$TARGET_FILE-v4$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH v4 failed" - exit 1 - fi + echo $BUILD_ENV \ + GOAMD64=v4 \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-v4$EXT\" \"$SOURCE_DIR\" + eval $BUILD_ENV \ + GOAMD64=v4 \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-v4$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH v4 success" ;; "mips" | "mipsle" | "mips64" | "mips64le") # default hardfloat echo "building $GOOS/$GOARCH hardfloat" InitCGODeps "$GOOS" "$GOARCH" "hardfloat" - eval "$BUILD_ENV CC=\"$CC\" CXX=\"$CXX\" GOMIPS=hardfloat GOMIPS64=hardfloat go build $BUILD_FLAGS -o \"$TARGET_FILE-hardfloat$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH failed" - exit 1 - else - echo "build $GOOS/$GOARCH success" - fi + TMP_BUILD_ENV="$BUILD_ENV \ + CC=\"$CC\" CXX=\"$CXX\" \ + CGO_CFLAGS=\"$CGO_CFLAGS $MORE_CGO_CFLAGS\" \ + CGO_CXXFLAGS=\"$CGO_CXXFLAGS $MORE_CGO_CXXFLAGS\" \ + CGO_LDFLAGS=\"$CGO_LDFLAGS $MORE_CGO_LDFLAGS\" \ + GOMIPS=hardfloat GOMIPS64=hardfloat" + echo $TMP_BUILD_ENV \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-hardfloat$EXT\" \"$SOURCE_DIR\" + eval $TMP_BUILD_ENV \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-hardfloat$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH success" cp "$TARGET_FILE-hardfloat$EXT" "$TARGET_FILE$EXT" - if [ $? -ne 0 ]; then - echo "copy $GOOS/$GOARCH hardfloat to $GOOS/$GOARCH failed" - exit 1 - else - echo "copy $GOOS/$GOARCH hardfloat to $GOOS/$GOARCH success" - fi + echo "copy $GOOS/$GOARCH hardfloat to $GOOS/$GOARCH success" echo "building $GOOS/$GOARCH softfloat" InitCGODeps "$GOOS" "$GOARCH" "softfloat" - eval "$BUILD_ENV CC=\"$CC\" CXX=\"$CXX\" GOMIPS=softfloat GOMIPS64=softfloat go build $BUILD_FLAGS -o \"$TARGET_FILE-softfloat$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH softfloat failed" - exit 1 - else - echo "build $GOOS/$GOARCH softfloat success" - fi + TMP_BUILD_ENV="$BUILD_ENV \ + CC=\"$CC\" CXX=\"$CXX\" \ + CGO_CFLAGS=\"$CGO_CFLAGS $MORE_CGO_CFLAGS\" \ + CGO_CXXFLAGS=\"$CGO_CXXFLAGS $MORE_CGO_CXXFLAGS\" \ + CGO_LDFLAGS=\"$CGO_LDFLAGS $MORE_CGO_LDFLAGS\" \ + GOMIPS=softfloat GOMIPS64=softfloat" + echo $TMP_BUILD_ENV \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-softfloat$EXT\" \"$SOURCE_DIR\" + eval $TMP_BUILD_ENV \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-softfloat$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH softfloat success" ;; "ppc64" | "ppc64le") # default power8 echo "building $GOOS/$GOARCH power8" InitCGODeps "$GOOS" "$GOARCH" "power8" - eval "$BUILD_ENV CC=\"$CC\" CXX=\"$CXX\" GOPPC64=power8 go build $BUILD_FLAGS -o \"$TARGET_FILE-power8$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH failed" - exit 1 - else - echo "build $GOOS/$GOARCH success" - fi + BUILD_ENV="$BUILD_ENV \ + CC=\"$CC\" CXX=\"$CXX\" \ + CGO_CFLAGS=\"$CGO_CFLAGS $MORE_CGO_CFLAGS\" \ + CGO_CXXFLAGS=\"$CGO_CXXFLAGS $MORE_CGO_CXXFLAGS\" \ + CGO_LDFLAGS=\"$CGO_LDFLAGS $MORE_CGO_LDFLAGS\"" + echo $BUILD_ENV \ + GOPPC64=power8 \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-power8$EXT\" \"$SOURCE_DIR\" + eval $BUILD_ENV \ + GOPPC64=power8 \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-power8$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH success" cp "$TARGET_FILE-power8$EXT" "$TARGET_FILE$EXT" - if [ $? -ne 0 ]; then - echo "copy $GOOS/$GOARCH power8 to $GOOS/$GOARCH failed" - exit 1 - else - echo "copy $GOOS/$GOARCH power8 to $GOOS/$GOARCH success" - fi + echo "copy $GOOS/$GOARCH power8 to $GOOS/$GOARCH success" echo "building $GOOS/$GOARCH power9" - InitCGODeps "$GOOS" "$GOARCH" "power9" - eval "$BUILD_ENV CC=\"$CC\" CXX=\"$CXX\" GOPPC64=power9 go build $BUILD_FLAGS -o \"$TARGET_FILE-power9$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH power9 failed" - exit 1 - else - echo "build $GOOS/$GOARCH power9 success" - fi + echo $BUILD_ENV \ + GOPPC64=power9 \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-power9$EXT\" \"$SOURCE_DIR\" + eval $BUILD_ENV \ + GOPPC64=power9 \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-power9$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH power9 success" ;; "wasm") # no default echo "building $GOOS/$GOARCH" - eval "$BUILD_ENV GOWASM= go build $BUILD_FLAGS -o \"$TARGET_FILE$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH failed" - exit 1 - else - echo "build $GOOS/$GOARCH success" - fi + echo $BUILD_ENV \ + GOWASM= \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE$EXT\" \"$SOURCE_DIR\" + eval $BUILD_ENV \ + GOWASM= \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH success" echo "building $GOOS/$GOARCH satconv" - eval "$BUILD_ENV GOWASM=satconv go build $BUILD_FLAGS -o \"$TARGET_FILE-satconv$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH satconv failed" - exit 1 - else - echo "build $GOOS/$GOARCH satconv success" - fi + echo $BUILD_ENV \ + GOWASM=satconv \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-satconv$EXT\" \"$SOURCE_DIR\" + eval $BUILD_ENV \ + GOWASM=satconv \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-satconv$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH satconv success" echo "building $GOOS/$GOARCH signext" - eval "$BUILD_ENV GOWASM=signext go build $BUILD_FLAGS -o \"$TARGET_FILE-signext$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH signext failed" - exit 1 - else - echo "build $GOOS/$GOARCH signext success" - fi + echo $BUILD_ENV \ + GOWASM=signext \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-signext$EXT\" \"$SOURCE_DIR\" + eval $BUILD_ENV \ + GOWASM=signext \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE-signext$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH signext success" ;; *) echo "building $GOOS/$GOARCH" InitCGODeps "$GOOS" "$GOARCH" - eval "$BUILD_ENV CC=\"$CC\" CXX=\"$CXX\" go build $BUILD_FLAGS -o \"$TARGET_FILE$EXT\" \"$SOURCH_DIR\"" - if [ $? -ne 0 ]; then - echo "build $GOOS/$GOARCH failed" - exit 1 - else - echo "build $GOOS/$GOARCH success" - fi + BUILD_ENV="$BUILD_ENV \ + CC=\"$CC\" CXX=\"$CXX\" \ + CGO_CFLAGS=\"$CGO_CFLAGS $MORE_CGO_CFLAGS\" \ + CGO_CXXFLAGS=\"$CGO_CXXFLAGS $MORE_CGO_CXXFLAGS\" \ + CGO_LDFLAGS=\"$CGO_LDFLAGS $MORE_CGO_LDFLAGS\"" + echo $BUILD_ENV \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE$EXT\" \"$SOURCE_DIR\" + eval $BUILD_ENV \ + go build $TMP_BUILD_ARGS -o \"$TARGET_FILE$EXT\" \"$SOURCE_DIR\" + echo "build $GOOS/$GOARCH success" ;; esac fi @@ -1223,7 +1317,80 @@ function AutoBuild() { fi } -ChToScriptFileDir +function AddTags() { + if [ ! "$1" ]; then + return + fi + if [ ! "$TAGS" ]; then + TAGS="$1" + else + TAGS="$TAGS $1" + fi +} + +function AddLDFLAGS() { + if [ ! "$1" ]; then + return + fi + if [ ! "$LDFLAGS" ]; then + LDFLAGS="$1" + else + LDFLAGS="$LDFLAGS $1" + fi +} + +function AddBuildArgs() { + if [ ! "$1" ]; then + return + fi + if [ ! "$BUILD_ARGS" ]; then + BUILD_ARGS="$1" + else + BUILD_ARGS="$BUILD_ARGS $1" + fi + +} + +function InitDep() { + if [ ! "$VERSION" ]; then + VERSION="dev" + else + VERSION="$(echo "$VERSION" | sed 's/ //g' | sed 's/"//g' | sed 's/\n//g')" + fi + + # Comply with golang version rules + function CheckVersionFormat() { + if [ "$1" == "dev" ] || [ "$(echo "$1" | grep -oE "^v?[0-9]+\.[0-9]+\.[0-9]+(\-beta.*|\-rc.*|\-alpha.*)?$")" ]; then + return + else + echo "version format error: $1" + return 1 + fi + } + CheckVersionFormat "$VERSION" + + AddLDFLAGS "-X 'github.com/synctv-org/synctv/internal/version.Version=$VERSION'" + if [ ! "$SKIP_INIT_WEB" ] && [ ! "$WEB_VERSION" ]; then + WEB_VERSION="$VERSION" + fi + AddLDFLAGS "-X 'github.com/synctv-org/synctv/internal/version.WebVersion=$WEB_VERSION'" + set +e + GIT_COMMIT="$(git log --pretty=format:"%h" -1)" + if [ $? -ne 0 ]; then + GIT_COMMIT="unknown" + fi + set -e + AddLDFLAGS "-X 'github.com/synctv-org/synctv/internal/version.GitCommit=$GIT_COMMIT'" + + if [ "$SKIP_INIT_WEB" ]; then + echo "skip init web" + else + DownloadAndUnzip "https://github.com/synctv-org/synctv-web/releases/download/${WEB_VERSION}/dist.tar.gz" "$SOURCE_DIR/public/dist" + fi + + AddTags "jsoniter" +} + Init ParseArgs "$@" FixArgs