186 lines
5.9 KiB
Bash
186 lines
5.9 KiB
Bash
#!/usr/bin/env bash
|
|
# Copyright 1999-2023 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" \
|
|
"arm64-apple-darwinX |darwin-arm64-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=""
|
|
submachine=""
|
|
chost_machine=${CHOST%%-*}
|
|
[[ ${CC} == *clang* ]] && submachine="-clang"
|
|
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};;
|
|
arc64*b*) machine="generic64 -DB_ENDIAN";;
|
|
arc64*) machine="generic64 -DL_ENDIAN";;
|
|
arc*b*) machine="generic32 -DB_ENDIAN";;
|
|
arc*) machine="generic32 -DL_ENDIAN";;
|
|
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=x86${submachine};;
|
|
ia64*) machine=ia64;;
|
|
loongarch64*) machine="loongarch64 -DL_ENDIAN" system=linux64;;
|
|
m68*) machine="latomic -DB_ENDIAN";;
|
|
mips*el*:o32) machine="mips32 -DL_ENDIAN";;
|
|
mips*:o32) machine="mips32 -DB_ENDIAN";;
|
|
mips*el*:n32) machine="mips64 -DL_ENDIAN";;
|
|
mips*:n32) machine="mips64 -DB_ENDIAN";;
|
|
mips*el*:n64) machine="mips64 -DL_ENDIAN" system=linux64;;
|
|
mips*:n64) machine="mips64 -DB_ENDIAN" system=linux64;;
|
|
powerpc64*le*)machine=ppc64le;;
|
|
powerpc64*) machine=ppc64;;
|
|
powerpc*le*) machine="generic32 -DL_ENDIAN";;
|
|
powerpc*) machine=ppc;;
|
|
riscv32be*) machine="generic32 -DB_ENDIAN";;
|
|
riscv32*) machine="generic32 -DL_ENDIAN";;
|
|
riscv64be*) machine="riscv64 -DB_ENDIAN" system=linux64;;
|
|
riscv64*) machine="riscv64 -DL_ENDIAN" system=linux64;;
|
|
# 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${submachine};;
|
|
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;;
|
|
arm64) machine=arm64-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}
|