#!/usr/bin/env bash # Copyright 1999-2020 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # # Openssl doesn't play along nicely with cross-compiling # like autotools based projects, so let's teach it new tricks. # # Review the bundled 'config' script to see why kind of targets # we can pass to the 'Configure' script. # Testing routines if [[ $1 == "test" ]] ; then for c in \ "arm-gentoo-linux-uclibc |linux-generic32 -DL_ENDIAN" \ "armv5b-linux-gnu |linux-armv4 -DB_ENDIAN" \ "x86_64-pc-linux-gnu |linux-x86_64" \ "alpha-linux-gnu |linux-alpha-gcc" \ "alphaev56-unknown-linux-gnu |linux-alpha+bwx-gcc" \ "i686-pc-linux-gnu |linux-elf" \ "whatever-gentoo-freebsdX.Y |BSD-generic32" \ "i686-gentoo-freebsdX.Y |BSD-x86-elf" \ "sparc64-alpha-freebsdX.Y |BSD-sparc64" \ "ia64-gentoo-freebsd5.99234 |BSD-ia64" \ "x86_64-gentoo-freebsdX.Y |BSD-x86_64" \ "hppa64-aldsF-linux-gnu5.3 |linux-generic32 -DB_ENDIAN" \ "powerpc-gentOO-linux-uclibc |linux-ppc" \ "powerpc64-unk-linux-gnu |linux-ppc64" \ "powerpc64le-linux-gnu |linux-ppc64le" \ "x86_64-apple-darwinX |darwin64-x86_64-cc" \ "powerpc64-apple-darwinX |darwin64-ppc-cc" \ "i686-apple-darwinX |darwin-i386-cc" \ "i386-apple-darwinX |darwin-i386-cc" \ "powerpc-apple-darwinX |darwin-ppc-cc" \ "i586-pc-winnt |winnt-parity" \ "s390-ibm-linux-gnu |linux-generic32 -DB_ENDIAN" \ "s390x-linux-gnu |linux64-s390x" \ ;do CHOST=${c/|*} ret_want=${c/*|} ret_got=$(CHOST=${CHOST} "$0") if [[ ${ret_want} == "${ret_got}" ]] ; then echo "PASS: ${CHOST}" else echo "FAIL: ${CHOST}" echo -e "\twanted: ${ret_want}" echo -e "\twe got: ${ret_got}" fi done exit 0 fi [[ -z ${CHOST} && -n $1 ]] && CHOST=$1 # Detect the operating system case ${CHOST} in *-aix*) system="aix";; *-darwin*) system="darwin";; *-freebsd*) system="BSD";; *-hpux*) system="hpux";; *-linux*) system="linux";; *-solaris*) system="solaris";; *-winnt*) system="winnt";; x86_64-*-mingw*) system="mingw64";; *mingw*) system="mingw";; *) exit 0;; esac # Compiler munging compiler="gcc" if [[ ${CC} == "ccc" ]] ; then compiler=${CC} fi # Detect target arch machine="" chost_machine=${CHOST%%-*} case ${system} in linux) case ${chost_machine}:${ABI} in aarch64*be*) machine="aarch64 -DB_ENDIAN";; aarch64*) machine="aarch64 -DL_ENDIAN";; alphaev56*|\ alphaev[678]*)machine=alpha+bwx-${compiler};; alpha*) machine=alpha-${compiler};; armv[4-9]*b*) machine="armv4 -DB_ENDIAN";; armv[4-9]*) machine="armv4 -DL_ENDIAN";; arm*b*) machine="generic32 -DB_ENDIAN";; arm*) machine="generic32 -DL_ENDIAN";; avr*) machine="generic32 -DL_ENDIAN";; bfin*) machine="generic32 -DL_ENDIAN";; # hppa64*) machine=parisc64;; hppa*) machine="generic32 -DB_ENDIAN";; i[0-9]86*|\ x86_64*:x86) machine=elf;; ia64*) machine=ia64;; loongarch64*) machine="generic64 -DL_ENDIAN";; m68*) machine="generic32 -DB_ENDIAN";; mips*el*) machine="generic32 -DL_ENDIAN";; mips*) machine="generic32 -DB_ENDIAN";; powerpc64*le*)machine=ppc64le;; powerpc64*) machine=ppc64;; powerpc*le*) machine="generic32 -DL_ENDIAN";; powerpc*) machine=ppc;; riscv32*) machine="generic32 -DL_ENDIAN";; riscv64*) machine="generic64 -DL_ENDIAN";; # sh64*) machine=elf;; sh*b*) machine="generic32 -DB_ENDIAN";; sh*) machine="generic32 -DL_ENDIAN";; # TODO: Might want to do -mcpu probing like glibc to determine a # better default for sparc-linux-gnu targets. This logic will # break v7 and older systems when they use it. sparc*v7*) machine="generic32 -DB_ENDIAN";; sparc64*) machine=sparcv9 system=linux64;; sparc*v9*) machine=sparcv9;; sparc*v8*) machine=sparcv8;; sparc*) machine=sparcv8;; s390x*) machine=s390x system=linux64;; s390*) machine="generic32 -DB_ENDIAN";; x86_64*:x32) machine=x32;; x86_64*) machine=x86_64;; esac ;; BSD) case ${chost_machine} in alpha*) machine=generic64;; i[6-9]86*) machine=x86-elf;; ia64*) machine=ia64;; sparc64*) machine=sparc64;; x86_64*) machine=x86_64;; *) machine=generic32;; esac ;; aix) machine=${compiler} ;; darwin) case ${chost_machine} in powerpc64) machine=ppc-cc; system=${system}64;; powerpc) machine=ppc-cc;; i?86*) machine=i386-cc;; x86_64) machine=x86_64-cc; system=${system}64;; esac ;; hpux) case ${chost_machine} in ia64) machine=ia64-${compiler} ;; esac ;; solaris) case ${chost_machine} in i386) machine=x86-${compiler} ;; x86_64*) machine=x86_64-${compiler}; system=${system}64;; sparcv9*) machine=sparcv9-${compiler}; system=${system}64;; sparc*) machine=sparcv8-${compiler};; esac ;; winnt) machine=parity ;; mingw*) # special case ... no xxx-yyy style name echo ${system} ;; esac # If we have something, show it [[ -n ${machine} ]] && echo ${system}-${machine}