>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