blob: 568274f1c37bd4549d85c8b8393765fc9e883aee [file] [log] [blame] [raw]
#! /bin/sh
if [ ! -f netinet/done ] ; then
echo "Do NOT run this script directly, do 'make solaris'!"
exit 1
fi
# $Id$
:
rev=`uname -r | sed -e 's/^\([^\.]*\)\..*/\1/'`
if [ -d /usr/ccs/bin ] ; then
PATH=/usr/ccs/bin:${PATH}
export PATH
fi
testcc()
{
echo "test $1"
echo '' | $1 -E -
if echo '' | $1 -E - >/dev/null 2>&1 ; then
CC=$1
return 0
fi
echo "$1 fail"
return 1
}
if [ -f /usr/include/sys/neti.h ] ; then
INST='-DINSTANCES=1'
fi
if [ $rev = 5 ] ; then
if [ ! -f /usr/include/sys/neti.h -a ! -d ../pfil ] ; then
cat << __EOF__
pfil directory in .. missing, please download pfil package and extract that
into the parent directory.
See INSTALL.Sol2 for more instructions.
__EOF__
exit 1
fi
#
# /usr/ucb/cc will not work
#
PATH=`echo $PATH | sed -e s:/usr/ucb::g -e s/::/:/g`
export PATH
cpu=`uname -p`
cpudir=${cpu}-`uname -r`
solrev=`uname -r | sh -c 'IFS=. read j n x; echo $n'`
if [ ! -d SunOS5/${cpudir} -a ! -h SunOS5/${cpudir} ] ; then
mkdir -p SunOS5/${cpudir}
fi
/bin/rm -f SunOS5/${cpudir}/Makefile
/bin/rm -f SunOS5/${cpudir}/Makefile.ipsend
ln -s `pwd`/SunOS5/Makefile SunOS5/${cpudir}/Makefile
ln -s `pwd`/SunOS5/Makefile.ipsend SunOS5/${cpudir}/Makefile.ipsend
#
# Default C compiler is "cc", override on make commandline
#
if [ "x$CC" = "x" ] ; then
testcc cc
if [ $? -ne 0 ] ; then
testcc gcc
if [ $? -ne 0 ] ; then
echo 'No working compiler found'
exit 1
fi
fi
else
echo "CC=$CC"
testcc $CC
if [ $? -ne 0 ] ; then
case $CC in
*gcc*)
echo 'No working compiler found'
exit 1
;;
*)
testcc gcc
if [ $? -ne 0 ] ; then
echo 'No working compiler found'
exit 1
fi
;;
esac
fi
fi
v=`echo '__GNUC__' | 2>&1 ${CC} -E - | 2>&1 sed -ne '/^[0-9]* *$/p'`
if [ x$v != x ] ; then
CC=gcc
fi
case "$CC" in
*gcc*) # gcc
XARCH32_i386=""
XARCH32_sparc="-fno-dwarf2-indirect-strings"
XARCH64_sparc="-m64 -mcmodel=medlow -fno-dwarf2-indirect-strings"
XARCH64_i386="-m64 -mcmodel=kernel -mno-red-zone -ffreestanding"
;;
*) # Sun C
XARCH32_i386="-Xa -xildoff"
XARCH32_sparc="-g -Xa -xildoff -xarch=v8 -xmemalign=8s"
XARCH64_sparc="-g -Xa -xildoff -xarch=v9 -xchip=ultra -xmemalign=8s -xcode=abs32 -Wc,-Qiselect-regsym=0 -xO3 -D_ASM_INLINES -Xa -xspace -W0,-Lt -errtags=yes -g -Wc,-Qiselect-T1 -xc99=%all -W0,-noglobal -xdebugformat=stabs -xc99=%all -Wd,-xsafe=unboundsym -Wc,-Qassembler-ounrefsym=0 -W2,-xwrap_int -W0,-xglobalstatic -xregs=no%float -xstrconst"
# XARCH64_i386="$XARCH32 -xarch=amd64 -xcode=abs32"
XARCH64_i386="$XARCH32 -m64 -xmodel=kernel"
;;
esac
XARCH32="`eval echo '$XARCH32_'$cpu`"
XARCH64="`eval echo '$XARCH64_'$cpu`"
OBJ32_sparc=sparcv7
OBJ64_sparc=sparcv9
OBJ32_i386=i86
OBJ64_i386=amd64
export CC
ISABITS=32
OBJ32=`eval echo '$OBJ32_'$cpu`
OBJ64=`eval echo '$OBJ64_'$cpu`
ARCHINC32=
ARCHINC64_sparc="-I/usr/include/v9"
ARCHINC64_i386=""
ARCHINC64="`eval echo '$ARCHINC_'$cpu`"
if [ $solrev -ge 10 ] && /bin/optisa sparcv8plus amd64 > /dev/null
then
# Introducing amd64
BUILDBOTH=true
elif [ $solrev -ge 7 ] && /bin/optisa sparcv8plus > /dev/null
then
# We run Solaris 7+ on 64 bit capable hardware.
BUILDBOTH=true
else
BUILDBOTH=false
OBJ32=.
fi
if $BUILDBOTH
then
echo Testing compiler $CC for 64 bit object file generation.
t=conftest$$.c
trap 'rm -f $t 32.out 64.out; exit 1' 0 1 2 3 15
cat > $t <<-EOF
#include <stdio.h>
int main(void)
{
printf("%ld\n", (long) sizeof(long));
return(0);
}
EOF
# Is it perhaps a 64 bit only compiler?
if $CC $XARCH32 $t -o 32.out >/dev/null 2>&1 &&
[ "`./32.out`" = 4 ]
then :; else
echo $CC $XARCH32 cannot create 32 bit executables. 1>&2
exit 1
fi
echo "$CC $XARCH64 $t"
$CC $XARCH64 $t
file 64.out
if $CC $XARCH64 $t -o 64.out >/dev/null 2>&1 &&
{ out64=`./64.out 2>/dev/null` ;
[ "$out64" = 8 -o "`isainfo -b`" = 32 -a "$out64" = "" ]
}
then
echo "found 32/64 bit compiler" 1>&2
CC64=true
else
CC64=false
fi
rm -f $t 32.out 64.out
trap 0 1 2 3 15
fi
# If we're running 64 bit, we *must* build 64 bit.
if ([ "`isainfo -b`" = 64 ]) 2>/dev/null ; then
echo "CC64=${CC64}"
if $CC64 ; then :; else
echo "No 64 bit capable compiler was found" 1>&2
exit 1
fi
ISABITS="32 64"
elif $BUILDBOTH && $CC64
then
ISABITS="32 64"
else
OBJ32=.
fi
else
cpu=`uname -m`
cpudir=${cpu}-`uname -r`
fi
# Default $MAKE to make
: ${MAKE:=make}
if [ $cpu = i386 -a $solrev -lt 10 ] ; then
if [ -n "$BPFILTER" ] ; then
BPF="BPFILTER=./$BPFILTER"
fi
$MAKE $MAKEFLAGS ${1+"$@"} sunos5 SOLARIS2="-DSOLARIS2=$solrev" CPU= CPUDIR=${cpudir} CC="$CC $XARCH32" XARCH="$XARCH32" ARCHINC="$ARCHINC32" BITS=32 OBJ=. $BPF
exit $?
fi
if [ x$solrev = x ] ; then
make ${1+"$@"} sunos$rev "TOP=.." "ARCH=`uname -m`"
exit $?
fi
for b in $ISABITS
do
echo build $b bit binaries.
for v in OBJ ARCHINC XARCH
do
eval $v=\"\$$v$b\"
done
if [ -n "$BPFILTER" ] ; then
BPF="BPFILTER=$OBJ/$BPFILTER"
fi
$MAKE $MAKEFLAGS ${1+"$@"} sunos$rev SOLARIS2="-DSOLARIS2=$solrev" CPU= CPUDIR=${cpudir} CC="$CC $XARCH" XARCH="$XARCH" INSTANCE="$INST" ARCHINC="$ARCHINC" BITS=$b OBJ=$OBJ $BPF || exit $?
done