#!/bin/bash # NOTE: Make sure you keep this file in sync with cc_platform.mk. # 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=linux-gnu # openSUSE has a custom PLATFORM if grep -iq "ID_LIKE=.*suse" /etc/os-release; then PLATFORM=suse-linux is_suse=1 fi 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 # There is no x86_64-suse-linux-gcc, so use the native one. HOST= cpu_type=i586 else HOST=x86_64-${PLATFORM} cpu_type=i686 fi CFLAGS="-m32 -march=$cpu_type ${CFLAGS[*]}" ;; amd64) if [ -n "${is_suse:-}" ]; then # There is no x86_64-suse-linux-gcc, so use the native one. HOST= else HOST=x86_64-${PLATFORM} fi ;; arm64) HOST=aarch64-${PLATFORM} ;; armel) HOST=arm-${PLATFORM}eabi GOARCH=arm GOARM=5 ;; armhf) HOST=arm-${PLATFORM}eabihf GOARCH=arm # "armhf" means ARMv7 for Debian, ARMv6 for Raspbian. # ARMv6 is chosen here for compatibility. # # https://wiki.debian.org/RaspberryPi # # > Raspberry Pi OS builds a single image for all of the Raspberry families, # > so you will get an armhf 32-bit, hard floating-point system, but built # > for the ARMv6 ISA (with VFP2), unlike Debian's ARMv7 ISA (with VFP3) # > port. GOARM=6 ;; 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 }