From 79d306c84abbe1b55ac70b966d35feb09dedf6a8 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 29 Oct 2008 16:06:47 +0000 Subject: [PATCH] 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 --- configure | 54 ++++++++++++++++++- configure.in | 10 +++- src/Makefile.global.in | 3 +- src/backend/port/Makefile | 6 +-- .../{solaris_sparc.s => sunstudio_sparc.s} | 15 ++++-- .../tas/{solaris_x86.s => sunstudio_x86.s} | 15 ++++-- src/include/storage/s_lock.h | 6 +-- src/template/linux | 25 ++++++++- src/template/solaris | 16 +++--- 9 files changed, 125 insertions(+), 25 deletions(-) rename src/backend/port/tas/{solaris_sparc.s => sunstudio_sparc.s} (67%) rename src/backend/port/tas/{solaris_x86.s => sunstudio_x86.s} (52%) diff --git a/configure b/configure index c865558857..0edb145378 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 afe9a37e86..073bfa855e 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 f5ca618400..a562cd116d 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 6a71ef3a2b..4798042656 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 similarity index 67% rename from src/backend/port/tas/solaris_sparc.s rename to src/backend/port/tas/sunstudio_sparc.s index 183cea1850..56d85f4514 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 similarity index 52% rename from src/backend/port/tas/solaris_x86.s rename to src/backend/port/tas/sunstudio_x86.s index db1dea7c29..1680ccc635 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 7d9448fb7e..e67b0ab318 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 ed800d23f1..19904bc22e 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 07efcc0bda..40e3a68c88 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 -- 2.40.0