| #!/bin/bash |
| |
| # get_platform computes the platform section of target triples on this OS. |
| function get_platform() { |
| # Fedora doesn't have ID_LIKE and only has ID=fedora, so we need to |
| # construct a fake ID_LIKE to treat AlmaLinux and Fedora the same way. |
| local ID_LIKE |
| # shellcheck source=/etc/os-release disable=SC1091 # outside our sources |
| ID_LIKE="$( |
| source /etc/os-release |
| echo "${ID:-} ${ID_LIKE:-}" |
| )" |
| |
| local PLATFORM |
| case "$ID_LIKE" in |
| *suse*) |
| PLATFORM=suse-linux |
| ;; |
| *rhel* | *fedora* | *centos*) |
| PLATFORM=redhat-linux |
| ;; |
| *) |
| PLATFORM=linux-gnu |
| ;; |
| esac |
| echo "$PLATFORM" |
| } |
| |
| # set_cross_vars sets a few environment variables used for cross-compiling, |
| # based on the architecture specified in $1. |
| function set_cross_vars() { |
| GOARCH="$1" # default, may be overridden below |
| unset GOARM |
| |
| PLATFORM="$(get_platform)" |
| [[ "$PLATFORM" == *suse* ]] && is_suse=1 |
| |
| case "$1" in |
| 386) |
| # Always use the 64-bit compiler to build the 386 binary, which works |
| # for the more common cross-build method for x86 (namely, the |
| # equivalent of dpkg --add-architecture). |
| local cpu_type |
| if [ -v is_suse ]; then |
| cpu_type=i586 |
| else |
| cpu_type=i686 |
| fi |
| HOST=x86_64-${PLATFORM} |
| CFLAGS="-m32 -march=$cpu_type ${CFLAGS[*]}" |
| ;; |
| amd64) |
| HOST=x86_64-${PLATFORM} |
| ;; |
| arm64) |
| HOST=aarch64-${PLATFORM} |
| ;; |
| armel) |
| HOST=arm-${PLATFORM}eabi |
| GOARCH=arm |
| GOARM=5 |
| ;; |
| armhf) |
| HOST=arm-${PLATFORM}eabihf |
| GOARCH=arm |
| GOARM=7 |
| ;; |
| ppc64le) |
| HOST=powerpc64le-${PLATFORM} |
| ;; |
| riscv64) |
| HOST=riscv64-${PLATFORM} |
| ;; |
| s390x) |
| HOST=s390x-${PLATFORM} |
| ;; |
| *) |
| echo "set_cross_vars: unsupported architecture: $1" >&2 |
| exit 1 |
| ;; |
| esac |
| |
| CC="${HOST:+$HOST-}gcc" |
| STRIP="${HOST:+$HOST-}strip" |
| |
| export HOST CFLAGS GOARM GOARCH CC STRIP |
| } |