>So far, the Makefiles and prototype{,32,64} of pfil and ipf for Solaris
>(64 bit) distinguish sparcv7 and sparcv9. However, in Solaris 10_x86 with AMD
>64 bit support, the corresponding terms should be i86 and amd64, respectively.


Yes, that isn't very generic.

Please try the following patch for size.

Not well tested, "compiles".

--- ip_fil4.1.8/SunOS5/prototype_amd64.org      Thu Mar 31 10:46:27 2005
+++ ip_fil4.1.8/SunOS5/prototype_amd64  Thu Mar 31 10:46:55 2005
@@ -0,0 +1,16 @@
+i pkginfo
+i copyright=../copyright
+!default 0755 root root
+d none /usr ? ? ?
+d none /usr/kernel ? ? ?
+d none /usr/kernel/drv ? ? ?
+d none /usr/kernel/drv/amd64 ? ? ?
+f none /usr/kernel/drv/amd64/ipf=root/usr/kernel/drv/amd64/ipf
+d none /usr/sbin ? ? ?
+d none /usr/sbin/amd64 ? ? ?
+f none /usr/sbin/amd64/ipfstat=root/sbin/amd64/ipfstat
+f none /usr/sbin/amd64/ipf=root/sbin/amd64/ipf
+f none /usr/sbin/amd64/ipfs=root/sbin/amd64/ipfs
+f none /usr/sbin/amd64/ipnat=root/sbin/amd64/ipnat
+f none /usr/sbin/amd64/ippool=root/sbin/amd64/ippool
+f none /usr/sbin/amd64/ipmon=root/opt/ipf/bin/amd64/ipmon
--- ip_fil4.1.8/SunOS5/prototype_ia32.org       Thu Mar 31 10:47:30 2005
+++ ip_fil4.1.8/SunOS5/prototype_ia32   Thu Mar 31 10:55:12 2005
@@ -0,0 +1,111 @@
+i pkginfo
+i copyright=../copyright
+i postinstall=../postinstall
+i depend=../depend
+!default 0755 root root
+#i preinstall=../preinstall
+i preremove=../preremove
+i postremove=../postremove
+d none /opt ? ? ?
+d none /opt/ipf
+d none /opt/ipf/man
+d none /opt/ipf/man/man1
+d none /opt/ipf/man/man1m
+d none /opt/ipf/man/man4
+d none /opt/ipf/man/man5
+d none /opt/ipf/man/man8
+d none /opt/ipf/bin
+# Moved so we can hardlink against isaexec
+s none /opt/ipf/bin/ipmon=../../../usr/sbin/ipmon
+f none /opt/ipf/bin/ipftest=root/opt/ipf/bin/i86/ipftest
+f none /opt/ipf/bin/ipsend=root/opt/ipf/bin/i86/ipsend
+f none /opt/ipf/bin/ipresend=root/opt/ipf/bin/i86/ipresend
+f none /opt/ipf/bin/mkfilters=root/opt/ipf/bin/i86/mkfilters
+d none /opt/ipf/examples
+d none /var ? ? ?
+d none /var/db 700 root sys
+d none /var/db/ipf 700 root sys
+d none /usr ? ? ?
+d none /usr/include ? ? ?
+d none /usr/include/ipfilter 755 root bin
+d none /usr/kernel ? ? ?
+d none /usr/kernel/drv ? ? ?
+f none /usr/kernel/drv/ipf=root/usr/kernel/drv/i86/ipf
+d none /sbin ? ? ?
+# Moved so we can hardlink against isaexec
+s none /sbin/ipfs=../usr/sbin/ipfs
+s none /sbin/ipfstat=../usr/sbin/ipfstat
+s none /sbin/ipf=../usr/sbin/ipf
+s none /sbin/ipnat=../usr/sbin/ipnat
+s none /sbin/ippool=../usr/sbin/ippool
+l none /usr/sbin/ipfs=../../usr/lib/isaexec
+l none /usr/sbin/ipfstat=../../usr/lib/isaexec
+l none /usr/sbin/ipf=../../usr/lib/isaexec
+l none /usr/sbin/ipnat=../../usr/lib/isaexec
+l none /usr/sbin/ippool=../../usr/lib/isaexec
+l none /usr/sbin/ipmon=../../usr/lib/isaexec
+d none /usr/sbin ? ? ?
+d none /usr/sbin/i86 ? ? ?
+f none /usr/sbin/i86/ipfs=root/sbin/i86/ipfs
+f none /usr/sbin/i86/ipfstat=root/sbin/i86/ipfstat
+f none /usr/sbin/i86/ipf=root/sbin/i86/ipf
+f none /usr/sbin/i86/ipnat=root/sbin/i86/ipnat
+f none /usr/sbin/i86/ippool=root/sbin/i86/ippool
+f none /usr/sbin/i86/ipmon=root/opt/ipf/bin/i86/ipmon
+d none /etc ? ? ?
+d none /etc/init.d ? ? ?
+f none /etc/init.d/ipfboot=root/etc/init.d/ipfboot
+d none /etc/rc2.d ? ? ?
+l none /etc/rc2.d/S65ipfboot=/etc/init.d/ipfboot
+d none /etc/opt ? ? ?
+d none /etc/opt/ipf 755 root sys
+!default 0444 root root
+f none /opt/ipf/man/man8/ipfstat.8=root/opt/ipf/man/man8/ipfstat.8
+f none /opt/ipf/man/man8/ipmon.8=root/opt/ipf/man/man8/ipmon.8
+f none /opt/ipf/man/man8/ipf.8=root/opt/ipf/man/man8/ipf.8
+f none /opt/ipf/man/man8/ipfs.8=root/opt/ipf/man/man8/ipfs.8
+f none /opt/ipf/man/man8/ipnat.8=root/opt/ipf/man/man8/ipnat.8
+f none /opt/ipf/man/man8/ippool.8=root/opt/ipf/man/man8/ippool.8
+f none /opt/ipf/man/man1/ipftest.1=root/opt/ipf/man/man1/ipftest.1
+f none /opt/ipf/man/man1/mkfilters.1=root/opt/ipf/man/man1/mkfilters.1
+f none /opt/ipf/man/man4/ipf.4=root/opt/ipf/man/man4/ipf.4
+f none /opt/ipf/man/man4/ipl.4=root/opt/ipf/man/man4/ipl.4
+f none /opt/ipf/man/man4/ipnat.4=root/opt/ipf/man/man4/ipnat.4
+f none /opt/ipf/man/man5/ipf.5=root/opt/ipf/man/man5/ipf.5
+f none /opt/ipf/man/man5/ipnat.5=root/opt/ipf/man/man5/ipnat.5
+f none /opt/ipf/man/man5/ippool.5=root/opt/ipf/man/man5/ippool.5
+f none /usr/kernel/drv/ipf.conf=root/usr/kernel/drv/ipf.conf
+f none /usr/include/ipfilter/ip_fil.h=root/usr/include/ipfilter/ip_fil.h
+f none /usr/include/ipfilter/ip_auth.h=root/usr/include/ipfilter/ip_auth.h
+f none /usr/include/ipfilter/ip_compat.h=root/usr/include/ipfilter/ip_compat.h
+f none /usr/include/ipfilter/ip_frag.h=root/usr/include/ipfilter/ip_frag.h
+f none /usr/include/ipfilter/ip_htable.h=root/usr/include/ipfilter/ip_htable.h
+f none /usr/include/ipfilter/ip_lookup.h=root/usr/include/ipfilter/ip_lookup.h
+f none /usr/include/ipfilter/ip_nat.h=root/usr/include/ipfilter/ip_nat.h
+f none /usr/include/ipfilter/ip_pool.h=root/usr/include/ipfilter/ip_pool.h
+f none /usr/include/ipfilter/ip_proxy.h=root/usr/include/ipfilter/ip_proxy.h
+f none /usr/include/ipfilter/ip_state.h=root/usr/include/ipfilter/ip_state.h
+f none /opt/ipf/examples/example.1=root/opt/ipf/examples/example.1
+f none /opt/ipf/examples/example.2=root/opt/ipf/examples/example.2
+f none /opt/ipf/examples/example.3=root/opt/ipf/examples/example.3
+f none /opt/ipf/examples/example.4=root/opt/ipf/examples/example.4
+f none /opt/ipf/examples/example.5=root/opt/ipf/examples/example.5
+f none /opt/ipf/examples/example.6=root/opt/ipf/examples/example.6
+f none /opt/ipf/examples/example.7=root/opt/ipf/examples/example.7
+f none /opt/ipf/examples/example.8=root/opt/ipf/examples/example.8
+f none /opt/ipf/examples/example.9=root/opt/ipf/examples/example.9
+f none /opt/ipf/examples/example.10=root/opt/ipf/examples/example.10
+f none /opt/ipf/examples/example.11=root/opt/ipf/examples/example.11
+f none /opt/ipf/examples/example.12=root/opt/ipf/examples/example.12
+f none /opt/ipf/examples/example.13=root/opt/ipf/examples/example.13
+f none /opt/ipf/examples/example.sr=root/opt/ipf/examples/example.sr
+f none /opt/ipf/examples/nat.eg=root/opt/ipf/examples/nat.eg
+f none /opt/ipf/examples/server=root/opt/ipf/examples/server
+f none /opt/ipf/examples/tcpstate=root/opt/ipf/examples/tcpstate
+f none /opt/ipf/examples/BASIC.NAT=root/opt/ipf/examples/BASIC.NAT
+f none /opt/ipf/examples/BASIC_1.FW=root/opt/ipf/examples/BASIC_1.FW
+f none /opt/ipf/examples/BASIC_2.FW=root/opt/ipf/examples/BASIC_2.FW
+f none /opt/ipf/examples/firewall=root/opt/ipf/examples/firewall
+f none /opt/ipf/examples/ftp-proxy=root/opt/ipf/examples/ftp-proxy
+f none /opt/ipf/examples/ftppxy=root/opt/ipf/examples/ftppxy
+f none /opt/ipf/examples/nat-setup=root/opt/ipf/examples/nat-setup
--- ip_fil4.1.8/SunOS5/Makefile.org     Tue Jul  6 13:20:18 2004
+++ ip_fil4.1.8/SunOS5/Makefile Thu Mar 31 11:47:10 2005
@@ -23,7 +23,24 @@
 #CPU:sh=uname -p
 #REV:sh=uname -r
 HERE=SunOS5/$(CPUDIR)
-BITS:sh=if optisa sparcv9 >/dev/null 2>&1; then echo "64"; else echo "32"; fi
+BITS:sh=if optisa amd64 sparcv9 >/dev/null 2>&1; then echo "64"; else echo 
"32"; fi
+
+ARCH:sh=uname -p
+
+OBJ32_i386=i86
+OBJ64_i386=amd64
+OBJ32_sparc=sparcv7
+OBJ64_sparc=sparcv9
+OBJ32=$(OBJ32_$(ARCH))
+OBJ64=$(OBJ64_$(ARCH))
+
+PROTO32_i386=prototype_ia32
+PROTO64_i386=prototype_amd64
+PROTO32_sparc=prototype32
+PROTO64_sparc=prototype64
+PROTO32=$(PROTO32_$(ARCH))
+PROTO64=$(PROTO64_$(ARCH))
+
 CC=gcc -Wall
 DEBUG=-g
 LIBS=-lsocket -lnsl -lelf -L$(OBJ) -lipf $(LIBBPF)
@@ -112,7 +129,7 @@
 $(OBJ)/ipf.exe: $(IPF) $(OBJ)/libipf.a
        $(CC) $(CCARGS) $(IPF) -o $@ $(LIBS) -ll $(LIBBPF)
 
-# Magic dependency on ipf.exe creates the $(TOP)/sparcv{7,9} directories.
+# Magic dependency on ipf.exe creates the $(TOP)/$(OBJ{32,64}) directories.
 $(OBJ)/ipftest: $(IPT) $(OBJ)/ipf.exe $(OBJ)/libipf.a
        $(CC) $(CCARGS) $(IPT) -o $@ $(LIBS) -ll $(LIBBPF)
 
@@ -424,7 +441,7 @@
                ${RM} -f ipmon_y.c ipmon_y.h ipmon_l.c ipmon_l.h; \
                ${RM} -f ipsyncm ipsyncs ipfs; \
        fi
-       /bin/rm -rf */root ipf.pkg* sparcv7 sparcv9
+       /bin/rm -rf */root ipf.pkg* $(OBJ32) $(OBJ64)
        make -f Makefile.ipsend clean "TOP=${TOP}"
        -(for i in *; do \
                if [ -d $${i} -a -h $${i}/Makefile ] ; then \
@@ -435,10 +452,10 @@
         done)
 
 $(CPUDIR)/ipf.pkg: $(CPUDIR)/ipf.pkg.common
-       if [ -d $(CPUDIR)/sparcv7 ]; then \
-               $(MAKE) PROTO=prototype32 PKG=ipf OBJ=sparcv7 \
+       if [ -d $(CPUDIR)/$(OBJ32) ]; then \
+               $(MAKE) PROTO=$(PROTO32) PKG=ipf OBJ=$(OBJ32) \
                 BITS=32 TOP=$(TOP) ipf.pkg.bin; \
-               $(MAKE) PROTO=prototype64 PKG=ipfx OBJ=sparcv9 \
+               $(MAKE) PROTO=$(PROTO64) PKG=ipfx OBJ=$(OBJ64) \
                 BITS=64 TOP=$(TOP) ipf.pkg.bin; \
        else \
                ($(MAKE) PROTO=prototype OBJ=. BITS=${BITS} \
@@ -513,7 +530,7 @@
        -sed -e 's/ipf/$(PKG)/' -e "s/NAME=.*/&$(BITTYPE)/" \
             -e "s/ARCH=.*/ARCH=`uname -p` (${BITS}-bit)/" \
                < pkginfo > $(CPUDIR)/pkginfo
-       -if [ "$(BITS)" = 64 ]; then echo 'SUNW_ISA=sparcv9' >> 
$(CPUDIR)/pkginfo; fi
+       -if [ "$(BITS)" = 64 ]; then echo 'SUNW_ISA=$(OBJ64)' >> 
$(CPUDIR)/pkginfo; fi
        (cd $(CPUDIR); pkgmk -a `uname -p` -o -d $(TMP))
 
 
@@ -525,5 +542,5 @@
                exit 1; \
        fi
        # Must add ipfx before ipf or driver attach fails.
-       -[ -d $(CPUDIR)/sparcv9 ] && pkgadd -d ipf.pkg ipfx
+       -[ -d $(CPUDIR)/$(OBJ64) ] && pkgadd -d ipf.pkg ipfx
        -pkgadd -d ipf.pkg ipf
--- ip_fil4.1.8/buildsunos.org  Sat Feb  7 19:08:46 2004
+++ ip_fil4.1.8/buildsunos      Thu Mar 31 11:29:52 2005
@@ -61,27 +61,40 @@
        case "$CC" in
        *gcc*)  # gcc
                XARCH32=""
-               XARCH64="-m64 -mcmodel=medlow"
+               XARCH64_sparc="-m64 -mcmodel=medlow"
+               XARCH64_i386="-m64 -mcmodel=kernel -mno-red-zone -ffreestanding"
                ;;
        *)      # Sun C
                XARCH32="-Xa -xildoff"
-               XARCH64="$XARCH32 -xarch=v9 -xchip=ultra -dalign -xcode=abs32"
+               XARCH64_sparc="$XARCH32 -xarch=v9 -xchip=ultra -dalign 
-xcode=abs32"
+               XARCH64_i386="$XARCH32 -xarch=amd64 -xcode=abs32"
                ;;
        esac
+       XARCH64="`eval echo '$XARCH64_'$cpu`"
+       OBJ32_sparc=sparcv7
+       OBJ64_sparc=sparcv9
+       OBJ32_i386=i86
+       OBJ64_i386=amd64
 
        export CC
 
        ISABITS=32
 
-       OBJ32=sparcv7
+       OBJ32=`eval echo '$OBJ32_'$cpu`
+       OBJ64=`eval echo '$OBJ64_'$cpu`
        ARCHINC32=
-       OBJ64=sparcv9
-       ARCHINC64="-I/usr/include/v9"
+       ARCHINC64_sparc="-I/usr/include/v9"
+       ARCHINC64_i386=""
+       ARCHINC64="`eval echo '$ARCHINC_'$cpu`"
 
        if [ $solrev -ge 7 ] && /bin/optisa sparcv8plus > /dev/null
        then
                # We run Solaris 7+ on 64 bit capable hardware.
                BUILDBOTH=true
+       elif [ $solrev -ge 10 ]
+       then
+               # Introducing amd64
+               BUILDBOTH=true
        else
                BUILDBOTH=false
                OBJ32=.
@@ -143,7 +156,7 @@
 # Default $MAKE to make
 : ${MAKE:=make}
 
-if [ $cpu = i386 ] ; then
+if [ $cpu = i386 -a $solrev -lt 10 ] ; then
        if [ -n "$BPFILTER" ] ; then
                BPF="BPFILTER=./$BPFILTER"
        fi

Reply via email to