Added support for x64 (AMD Opteron/Athlon and Intel EM64T) on Solaris
authorJames Carlson <carlsonj@workingcode.com>
Sun, 26 Jun 2005 23:53:17 +0000 (23:53 +0000)
committerJames Carlson <carlsonj@workingcode.com>
Sun, 26 Jun 2005 23:53:17 +0000 (23:53 +0000)
using Sun WorkShop or gcc.

configure
solaris/Makefile.sol2-64x [new file with mode: 0644]
solaris/Makefile.sol2gcc-64x [new file with mode: 0644]

index 8be841c0347cd008bab253d8778089fb77c75deb..2a658dbf6d936547ee10db6ef9b0a9f9570f80e4 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #!/bin/sh
-# $Id: configure,v 1.36 2005/06/26 19:34:41 carlsonj Exp $
+# $Id: configure,v 1.37 2005/06/26 23:53:17 carlsonj Exp $
 
 # Where to install stuff by default
 DESTDIR=/usr/local
@@ -20,27 +20,47 @@ case $system in
     ksrc="linux";
     state="known";;
   SunOS)
+    karch=`/usr/bin/isainfo -k`
     case $release in
 #      [0-3]*) state="ancient";;
 #      4*)     state="known"; ksrc="sunos4"; makext="sunos4";;
-      5.[7-9]*|5.[1-9][0-9])   state="known"; ksrc="solaris"; makext="sol2";
-              case "`/usr/bin/isainfo -k`" in
+      5.[7-9]*|5.[1-9][0-9]*)  state="known"; ksrc="solaris"; makext="sol2";
+              case "$karch" in
+               amd64)          archvariant='-64x';;
                sparcv9)        archvariant='-64';;
                *)      ;;
              esac;;
       5.[1-6]*)        state="known"; ksrc="solaris"; makext="sol2";;
     esac
-    if [ -x /opt/SUNWspro/bin/cc -a "$1" != "gcc" ] &&
+    if [ "$1" = gcc ]; then
+       shift
+       usegcc=gcc
+    fi
+    if [ "$1" = 32 ]; then
+       shift
+       archvariant=
+    fi
+    if [ -x /opt/SUNWspro/bin/cc -a "$usegcc" != gcc ] &&
        /opt/SUNWspro/bin/cc -flags >/dev/null 2>&1; then
-      : # use Sun WorkShop compiler
+      if [ "$archvariant" = "-64x" ]; then
+        ( cd /tmp; echo "int x;" > ppp$$.c
+         /opt/SUNWspro/bin/cc -c -errwarn -xchip=opteron -xarch=amd64 ppp$$.c >/dev/null 2>&1 || (
+           echo "WorkShop C is unable to make 64 bit modules, and your $karch system needs"
+           echo "them.  Consider upgrading cc on this machine."
+           rm -f ppp$$.c
+           exit 1
+         ) || exit 1
+         rm -f ppp$$.c ppp$$.o
+        ) || exit 1
+      fi
     elif gcc --version >/dev/null 2>&1; then
       archvariant=gcc$archvariant
       compiletype=.gcc
-      if [ "$archvariant" = "gcc-64" ]; then
+      if [ "$archvariant" = "gcc-64" -o"$archvariant" = "gcc-64x" ]; then
         ( cd /tmp; touch ppp$$.c
          gcc -c -m64 ppp$$.c >/dev/null 2>&1 || (
-           echo "gcc is unable to make 64 bit modules, and your $arch system needs them."
-           echo "consider upgrading gcc on this machine, or switching to Sun WorkShop."
+           echo "gcc is unable to make 64 bit modules, and your $karch system needs them."
+           echo "Consider upgrading gcc on this machine, or switching to Sun WorkShop."
            rm -f ppp$$.c
            exit 1
          ) || exit 1
diff --git a/solaris/Makefile.sol2-64x b/solaris/Makefile.sol2-64x
new file mode 100644 (file)
index 0000000..83f59ad
--- /dev/null
@@ -0,0 +1,89 @@
+#
+# Makefile for 64-bit STREAMS modules for Solaris 2 on x64
+#
+# $Id: Makefile.sol2-64x,v 1.1 2005/06/26 23:53:17 carlsonj Exp $
+#
+
+include Makedefs.sol2
+
+# Sun's cc flag for LP64 compilation / linkage
+COPTS          += -errwarn -xtarget=opteron -xarch=amd64 -xmodel=kernel \
+                  -Ui386 -U__i386 -D__amd64 -xO2
+
+# subdirectory where 64-bit objects / binaries will be placed
+LP64DIR                = amd64
+
+# Name of legacy Makefile (for 32-bit binaries)
+STD_MAKE       = Makefile.sol2
+
+COMP_OBJS      = $(LP64DIR)/ppp_comp.o $(LP64DIR)/bsd-comp.o \
+               $(LP64DIR)/deflate.o $(LP64DIR)/zlib.o $(LP64DIR)/vjcompress.o \
+               $(LP64DIR)/ppp_comp_mod.o
+
+all:   std_objs $(LP64DIR) ppp ppp_ahdl ppp_comp
+
+std_objs:
+       $(MAKE) -f $(STD_MAKE) all
+
+ppp:   $(LP64DIR)/ppp.o $(LP64DIR)/ppp_mod.o
+       $(LD) -r -o $(LP64DIR)/$@ $(LP64DIR)/ppp.o $(LP64DIR)/ppp_mod.o
+       chmod +x $(LP64DIR)/$@
+
+ppp_ahdl: $(LP64DIR)/ppp_ahdlc.o $(LP64DIR)/ppp_ahdlc_mod.o
+       $(LD) -r -o $(LP64DIR)/$@ $(LP64DIR)/ppp_ahdlc.o \
+               $(LP64DIR)/ppp_ahdlc_mod.o
+       chmod +x $(LP64DIR)/$@
+
+ppp_comp: $(COMP_OBJS)
+       $(LD) -r -o $(LP64DIR)/$@ $(COMP_OBJS)
+       chmod +x $(LP64DIR)/$@
+
+$(LP64DIR)/bsd-comp.o: ../modules/bsd-comp.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/deflate.o: ../modules/deflate.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp.o:      ppp.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp_mod.o:  ppp_mod.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp_ahdlc_mod.o: ppp_ahdlc_mod.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp_ahdlc.o: ppp_ahdlc.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp_comp.o: ppp_comp.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp_comp_mod.o: ppp_comp_mod.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/vjcompress.o: ../modules/vjcompress.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/zlib.o:     ../common/zlib.c
+       $(CC) $(CFLAGS) -c $? -o $@
+
+$(LP64DIR):
+       mkdir -m 755 -p $@
+
+install:
+       /usr/sbin/modunload -i 0
+       cp ppp ppp.conf /kernel/drv
+       cp ppp_comp ppp_ahdl /kernel/strmod
+       cp $(LP64DIR)/ppp /kernel/drv/$(LP64DIR)
+       cp $(LP64DIR)/ppp_comp $(LP64DIR)/ppp_ahdl /kernel/strmod/$(LP64DIR)
+       if grep clone:ppp /etc/minor_perm; then :; else \
+         echo clone:ppp 0644 root sys >>/etc/minor_perm; fi
+       /usr/sbin/rem_drv ppp 2>/dev/null || true
+       /usr/sbin/modunload -i 0
+       /usr/sbin/add_drv ppp
+
+SRCS   = ppp.c ppp_mod.c ppp_ahdlc.c ppp_ahdlc_mod.c \
+       ppp_comp.c ../modules/bsd-comp.c ../modules/deflate.c \
+       ../common/zlib.c ../modules/vjcompress.c ppp_comp_mod.c
+
+lint:
+       $(LINT64) $(SRCS)
+
+lint-32:
+       $(LINT32) $(SRCS)
+
+clean:
+       $(MAKE) -f $(STD_MAKE) clean
+       rm -f $(LP64DIR)/ppp $(LP64DIR)/ppp_comp $(LP64DIR)/ppp_ahdl $(LP64DIR)/*.o $(LP64DIR)/*~ $(LP64DIR)/core
diff --git a/solaris/Makefile.sol2gcc-64x b/solaris/Makefile.sol2gcc-64x
new file mode 100644 (file)
index 0000000..0eaef7d
--- /dev/null
@@ -0,0 +1,94 @@
+#
+# Makefile for 64-bit STREAMS modules for Solaris 2 on x64 with gcc.
+#
+# $Id: Makefile.sol2gcc-64x,v 1.1 2005/06/26 23:53:17 carlsonj Exp $
+#
+
+include Makedefs.sol2
+
+# gcc flags for LP64 compilation / linkage
+COPTS           += -finline -fno-inline-functions -fno-builtin -fno-asm \
+                  -nodefaultlibs -D__sun -m64 -mtune=opteron -Ui386 \
+                  -U__i386 -fno-strict-aliasing -fno-unit-at-a-time \
+                  -fno-optimize-sibling-calls -O2 -D_ASM_INLINES \
+                  -ffreestanding -mcmodel=kernel -mno-red-zone -gdwarf-2 \
+                  -std=gnu89 -D_KERNEL -D_SYSCALL32 -D_SYSCALL32_IMPL \
+                  -D_ELF64 -Dsun -D__sun -D__SVR4
+
+# subdirectory where 64-bit objects / binaries will be placed
+LP64DIR                = amd64
+
+# Name of legacy Makefile (for 32-bit binaries)
+STD_MAKE       = Makefile.sol2gcc
+
+COMP_OBJS      = $(LP64DIR)/ppp_comp.o $(LP64DIR)/bsd-comp.o \
+               $(LP64DIR)/deflate.o $(LP64DIR)/zlib.o $(LP64DIR)/vjcompress.o \
+               $(LP64DIR)/ppp_comp_mod.o
+
+all:   std_objs $(LP64DIR) ppp ppp_ahdl ppp_comp
+
+std_objs:
+       $(MAKE) -f $(STD_MAKE) all
+
+ppp:   $(LP64DIR)/ppp.o $(LP64DIR)/ppp_mod.o
+       $(LD) -r -o $(LP64DIR)/$@ $(LP64DIR)/ppp.o $(LP64DIR)/ppp_mod.o
+       chmod +x $(LP64DIR)/$@
+
+ppp_ahdl: $(LP64DIR)/ppp_ahdlc.o $(LP64DIR)/ppp_ahdlc_mod.o
+       $(LD) -r -o $(LP64DIR)/$@ $(LP64DIR)/ppp_ahdlc.o \
+               $(LP64DIR)/ppp_ahdlc_mod.o
+       chmod +x $(LP64DIR)/$@
+
+ppp_comp: $(COMP_OBJS)
+       $(LD) -r -o $(LP64DIR)/$@ $(COMP_OBJS)
+       chmod +x $(LP64DIR)/$@
+
+$(LP64DIR)/bsd-comp.o: ../modules/bsd-comp.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/deflate.o: ../modules/deflate.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp.o:      ppp.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp_mod.o:  ppp_mod.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp_ahdlc_mod.o: ppp_ahdlc_mod.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp_ahdlc.o: ppp_ahdlc.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp_comp.o: ppp_comp.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/ppp_comp_mod.o: ppp_comp_mod.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/vjcompress.o: ../modules/vjcompress.c
+       $(CC) $(CFLAGS) -c $? -o $@
+$(LP64DIR)/zlib.o:     ../common/zlib.c
+       $(CC) $(CFLAGS) -c $? -o $@
+
+$(LP64DIR):
+       mkdir -m 755 -p $@
+
+install:
+       /usr/sbin/modunload -i 0
+       cp ppp ppp.conf /kernel/drv
+       cp ppp_comp ppp_ahdl /kernel/strmod
+       cp $(LP64DIR)/ppp /kernel/drv/$(LP64DIR)
+       cp $(LP64DIR)/ppp_comp $(LP64DIR)/ppp_ahdl /kernel/strmod/$(LP64DIR)
+       if grep clone:ppp /etc/minor_perm; then :; else \
+         echo clone:ppp 0644 root sys >>/etc/minor_perm; fi
+       /usr/sbin/rem_drv ppp 2>/dev/null || true
+       /usr/sbin/modunload -i 0
+       /usr/sbin/add_drv ppp
+
+SRCS   = ppp.c ppp_mod.c ppp_ahdlc.c ppp_ahdlc_mod.c \
+       ppp_comp.c ../modules/bsd-comp.c ../modules/deflate.c \
+       ../common/zlib.c ../modules/vjcompress.c ppp_comp_mod.c
+
+lint:
+       $(LINT64) $(SRCS)
+
+lint-32:
+       $(LINT32) $(SRCS)
+
+clean:
+       $(MAKE) -f $(STD_MAKE) clean
+       rm -f $(LP64DIR)/ppp $(LP64DIR)/ppp_comp $(LP64DIR)/ppp_ahdl $(LP64DIR)/*.o $(LP64DIR)/*~ $(LP64DIR)/core