| #! /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 |