aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2008-10-29 16:06:47 +0000
committerPeter Eisentraut <peter_e@gmx.net>2008-10-29 16:06:47 +0000
commit79d306c84abbe1b55ac70b966d35feb09dedf6a8 (patch)
tree54ae7a5bfb9f5dab44cd751e6740fff2a8bc6aa1
parent32765998049a41e334a3344517cb2528f6f82678 (diff)
downloadpostgresql-79d306c84abbe1b55ac70b966d35feb09dedf6a8.tar.gz
postgresql-79d306c84abbe1b55ac70b966d35feb09dedf6a8.zip
Support for Sun Studio compiler on Linux
This basically takes some build system code that was previously labeled "Solaris" and ties it to the compiler rather than the operating system. Author: Julius Stroffek <Julius.Stroffek@Sun.COM>
-rwxr-xr-xconfigure54
-rw-r--r--configure.in10
-rw-r--r--src/Makefile.global.in3
-rw-r--r--src/backend/port/Makefile6
-rw-r--r--src/backend/port/tas/sunstudio_sparc.s (renamed from src/backend/port/tas/solaris_sparc.s)15
-rw-r--r--src/backend/port/tas/sunstudio_x86.s (renamed from src/backend/port/tas/solaris_x86.s)15
-rw-r--r--src/include/storage/s_lock.h6
-rw-r--r--src/template/linux25
-rw-r--r--src/template/solaris16
9 files changed, 125 insertions, 25 deletions
diff --git a/configure b/configure
index c8655588573..0edb145378f 100755
--- a/configure
+++ b/configure
@@ -686,6 +686,7 @@ CPPFLAGS
ac_ct_CC
EXEEXT
OBJEXT
+SUN_STUDIO_CC
CPP
GCC
TAS
@@ -3758,6 +3759,54 @@ fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Check if it's Sun Studio compiler. We assume that
+# __SUNPRO_C will be defined for Sun Studio compilers
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __SUNPRO_C
+choke me
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ SUN_STUDIO_CC=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ SUN_STUDIO_CC=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
unset CFLAGS
#
@@ -26726,6 +26775,7 @@ CPPFLAGS!$CPPFLAGS$ac_delim
ac_ct_CC!$ac_ct_CC$ac_delim
EXEEXT!$EXEEXT$ac_delim
OBJEXT!$OBJEXT$ac_delim
+SUN_STUDIO_CC!$SUN_STUDIO_CC$ac_delim
CPP!$CPP$ac_delim
GCC!$GCC$ac_delim
TAS!$TAS$ac_delim
@@ -26754,7 +26804,6 @@ ELF_SYS!$ELF_SYS$ac_delim
LDFLAGS_SL!$LDFLAGS_SL$ac_delim
LD!$LD$ac_delim
with_gnu_ld!$with_gnu_ld$ac_delim
-ld_R_works!$ld_R_works$ac_delim
_ACEOF
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
@@ -26796,6 +26845,7 @@ _ACEOF
ac_delim='%!_!# '
for ac_last_try in false false false false false :; do
cat >conf$$subs.sed <<_ACEOF
+ld_R_works!$ld_R_works$ac_delim
RANLIB!$RANLIB$ac_delim
STRIP!$STRIP$ac_delim
STRIP_STATIC_LIB!$STRIP_STATIC_LIB$ac_delim
@@ -26850,7 +26900,7 @@ vpath_build!$vpath_build$ac_delim
LTLIBOBJS!$LTLIBOBJS$ac_delim
_ACEOF
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 52; then
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 53; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
diff --git a/configure.in b/configure.in
index afe9a37e865..073bfa855e9 100644
--- a/configure.in
+++ b/configure.in
@@ -1,5 +1,5 @@
dnl Process this file with autoconf to produce a configure script.
-dnl $PostgreSQL: pgsql/configure.in,v 1.568 2008/10/29 09:27:24 petere Exp $
+dnl $PostgreSQL: pgsql/configure.in,v 1.569 2008/10/29 16:06:46 petere Exp $
dnl
dnl Developers, please strive to achieve this order:
dnl
@@ -379,6 +379,14 @@ AC_TRY_COMPILE([], [@%:@ifndef __INTEL_COMPILER
choke me
@%:@endif], [ICC=[yes]], [ICC=[no]])
+# Check if it's Sun Studio compiler. We assume that
+# __SUNPRO_C will be defined for Sun Studio compilers
+AC_TRY_COMPILE([], [@%:@ifndef __SUNPRO_C
+choke me
+@%:@endif], [SUN_STUDIO_CC=yes], [SUN_STUDIO_CC=no])
+
+AC_SUBST(SUN_STUDIO_CC)
+
unset CFLAGS
#
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index f5ca618400a..a562cd116dd 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -1,5 +1,5 @@
# -*-makefile-*-
-# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.244 2008/10/03 15:35:17 petere Exp $
+# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.245 2008/10/29 16:06:46 petere Exp $
#------------------------------------------------------------------------------
# All PostgreSQL makefiles include this file and use the variables it sets,
@@ -213,6 +213,7 @@ endif # not PGXS
CC = @CC@
GCC = @GCC@
+SUN_STUDIO_CC = @SUN_STUDIO_CC@
CFLAGS = @CFLAGS@
# Kind-of compilers
diff --git a/src/backend/port/Makefile b/src/backend/port/Makefile
index 6a71ef3a2b5..47980426564 100644
--- a/src/backend/port/Makefile
+++ b/src/backend/port/Makefile
@@ -13,7 +13,7 @@
# be converted to Method 2.
#
# IDENTIFICATION
-# $PostgreSQL: pgsql/src/backend/port/Makefile,v 1.26 2008/02/19 15:29:58 petere Exp $
+# $PostgreSQL: pgsql/src/backend/port/Makefile,v 1.27 2008/10/29 16:06:46 petere Exp $
#
#-------------------------------------------------------------------------
@@ -33,8 +33,8 @@ endif
include $(top_srcdir)/src/backend/common.mk
tas.o: tas.s
-ifeq ($(PORTNAME), solaris)
-# preprocess assembler file with cpp, used by x86
+ifeq ($(SUN_STUDIO_CC), yes)
+# preprocess assembler file with cpp
$(CC) $(CFLAGS) -c -P $<
mv $*.i $*_cpp.s
$(CC) $(CFLAGS) -c $*_cpp.s -o $@
diff --git a/src/backend/port/tas/solaris_sparc.s b/src/backend/port/tas/sunstudio_sparc.s
index 183cea18504..56d85f4514f 100644
--- a/src/backend/port/tas/solaris_sparc.s
+++ b/src/backend/port/tas/sunstudio_sparc.s
@@ -1,6 +1,15 @@
-!=======================================================================
-! solaris_sparc.s -- compare and swap for solaris_sparc
-!=======================================================================
+!-------------------------------------------------------------------------
+!
+! sunstudio_sparc.s
+! compare and swap for Sun Studio on Sparc
+!
+! Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
+! Portions Copyright (c) 1994, Regents of the University of California
+!
+! IDENTIFICATION
+! $PostgreSQL: pgsql/src/backend/port/tas/sunstudio_sparc.s,v 1.1 2008/10/29 16:06:47 petere Exp $
+!
+!-------------------------------------------------------------------------
! Fortunately the Sun compiler can process cpp conditionals with -P
diff --git a/src/backend/port/tas/solaris_x86.s b/src/backend/port/tas/sunstudio_x86.s
index db1dea7c291..1680ccc6358 100644
--- a/src/backend/port/tas/solaris_x86.s
+++ b/src/backend/port/tas/sunstudio_x86.s
@@ -1,6 +1,15 @@
-/=======================================================================
-/ solaris_i386.s -- compare and swap for solaris_i386
-/=======================================================================
+/-------------------------------------------------------------------------
+/
+/ sunstudio_x86.s
+/ compare and swap for Sun Studio on x86
+/
+/ Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
+/ Portions Copyright (c) 1994, Regents of the University of California
+/
+/ IDENTIFICATION
+/ $PostgreSQL: pgsql/src/backend/port/tas/sunstudio_x86.s,v 1.1 2008/10/29 16:06:47 petere Exp $
+/
+/-------------------------------------------------------------------------
/ Fortunately the Sun compiler can process cpp conditionals with -P
diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h
index 7d9448fb7e4..e67b0ab3185 100644
--- a/src/include/storage/s_lock.h
+++ b/src/include/storage/s_lock.h
@@ -66,7 +66,7 @@
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/storage/s_lock.h,v 1.164 2008/01/01 19:45:59 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/storage/s_lock.h,v 1.165 2008/10/29 16:06:47 petere Exp $
*
*-------------------------------------------------------------------------
*/
@@ -578,7 +578,7 @@ typedef unsigned char slock_t;
#endif
-#endif /* __GNUC__ */
+#endif /* defined(__GNUC__) || defined(__INTEL_COMPILER) */
@@ -782,7 +782,7 @@ typedef unsigned char slock_t;
#endif
-#if defined(__sun) && (defined(__i386) || defined(__x86_64__) || defined(__sparc__) || defined(__sparc))
+#if defined(__SUNPRO_C) && (defined(__i386) || defined(__x86_64__) || defined(__sparc__) || defined(__sparc))
#define HAS_TEST_AND_SET
#if defined(__i386) || defined(__x86_64__) || defined(__sparcv9) || defined(__sparcv8plus)
diff --git a/src/template/linux b/src/template/linux
index ed800d23f12..19904bc22e1 100644
--- a/src/template/linux
+++ b/src/template/linux
@@ -1,7 +1,30 @@
-# $PostgreSQL: pgsql/src/template/linux,v 1.30 2007/09/21 02:33:46 tgl Exp $
+# $PostgreSQL: pgsql/src/template/linux,v 1.31 2008/10/29 16:06:47 petere Exp $
# Force _GNU_SOURCE on; plperl is broken with Perl 5.8.0 otherwise
CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
# If --enable-profiling is specified, we need -DLINUX_PROFILE
PLATFORM_PROFILE_FLAGS="-DLINUX_PROFILE"
+
+if test "$SUN_STUDIO_CC" = "yes" ; then
+ CC="$CC -Xa" # relaxed ISO C mode
+ CFLAGS="-v" # -v is like gcc -Wall
+ if test "$enable_debug" != yes; then
+ CFLAGS="$CFLAGS -O" # any optimization breaks debug
+ fi
+
+ # Pick the right test-and-set (TAS) code for the Sun compiler.
+ # We would like to use in-line assembler, but the compiler
+ # requires *.il files to be on every compile line, making
+ # the build system too fragile.
+ case $host_cpu in
+ sparc)
+ need_tas=yes
+ tas_file=sunstudio_sparc.s
+ ;;
+ i?86|x86_64)
+ need_tas=yes
+ tas_file=sunstudio_x86.s
+ ;;
+ esac
+fi
diff --git a/src/template/solaris b/src/template/solaris
index 07efcc0bda4..40e3a68c88e 100644
--- a/src/template/solaris
+++ b/src/template/solaris
@@ -1,22 +1,22 @@
-if test "$GCC" != yes ; then
+if test "$SUN_STUDIO_CC" = yes ; then
CC="$CC -Xa" # relaxed ISO C mode
- CFLAGS="-v -DSUNOS4_CC" # -v is like gcc -Wall
+ CFLAGS="-v" # -v is like gcc -Wall
if test "$enable_debug" != yes; then
CFLAGS="$CFLAGS -O" # any optimization breaks debug
fi
# Pick the right test-and-set (TAS) code for the Sun compiler.
# We would like to use in-line assembler, but the compiler
- # requires *.il files to be on every compile line, making
+ # requires *.il files to be on every compile line, making
# the build system too fragile.
- case $host in
- sparc-*-solaris*)
+ case $host_cpu in
+ sparc)
need_tas=yes
- tas_file=solaris_sparc.s
+ tas_file=sunstudio_sparc.s
;;
- i?86-*-solaris*)
+ i?86|x86_64)
need_tas=yes
- tas_file=solaris_x86.s
+ tas_file=sunstudio_x86.s
;;
esac
fi