From: James Carlson Date: Sun, 26 Jun 2005 23:53:17 +0000 (+0000) Subject: Added support for x64 (AMD Opteron/Athlon and Intel EM64T) on Solaris X-Git-Tag: ppp-2.4.7~154 X-Git-Url: http://git.ozlabs.org/?p=ppp.git;a=commitdiff_plain;h=b993076434daff2202734f5ab4eb4f06dcbbe6b3 Added support for x64 (AMD Opteron/Athlon and Intel EM64T) on Solaris using Sun WorkShop or gcc. --- diff --git a/configure b/configure index 8be841c..2a658db 100755 --- 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 index 0000000..83f59ad --- /dev/null +++ b/solaris/Makefile.sol2-64x @@ -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 index 0000000..0eaef7d --- /dev/null +++ b/solaris/Makefile.sol2gcc-64x @@ -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