Browse Source

More Sun CC hacks. Contributed by Monty Taylor.

kenton@google.com 16 years ago
parent
commit
a8923cdd9a
3 changed files with 35 additions and 7 deletions
  1. 1 1
      CONTRIBUTORS.txt
  2. 1 6
      configure.ac
  3. 33 0
      m4/acx_check_suncc.m4

+ 1 - 1
CONTRIBUTORS.txt

@@ -53,7 +53,7 @@ Patch contributors:
   Vincent Choinière <Choiniere.Vincent@hydro.qc.ca>
     * Tru64 support.
   Monty Taylor <monty.taylor@gmail.com>
-    * Solaris 10 + Sun Studio fix.
+    * Solaris 10 + Sun Studio fixes.
   Alek Storm <alek.storm@gmail.com>
     * Slicing support for repeated scalar fields for the Python API.
   Oleg Smolsky <oleg.smolsky@gmail.com>

+ 1 - 6
configure.ac

@@ -31,13 +31,8 @@ AC_LANG([C++])
 ACX_USE_SYSTEM_EXTENSIONS
 AC_PROG_LIBTOOL
 AM_CONDITIONAL(GCC, test "$GCC" = yes)   # let the Makefile know if we're gcc
-AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
-
-AS_IF([test "$SUNCC" = "yes"],[
-  CFLAGS="$CFLAGS -xO4 -xlibmil -xdepend -Xa -mt -xstrconst -D_FORTEC_"
-  CXXFLAGS="$CXXFLAGS -xO4 -xlibmil -mt -D_FORTEC_ -xlang=c99 -compat=5 -library=stlport4 -template=no%extdef"
-])
 
+ACX_CHECK_SUNCC
 
 # Checks for header files.
 AC_HEADER_STDC

+ 33 - 0
m4/acx_check_suncc.m4

@@ -0,0 +1,33 @@
+dnl Check for the presence of the Sun Studio compiler.
+dnl If Sun Studio compiler is found, set appropriate flags.
+dnl Additionally, Sun Studio doesn't default to 64-bit by itself,
+dnl nor does it automatically look in standard Solaris places for
+dnl 64-bit libs, so we must add those options and paths to the search
+dnl paths.
+
+dnl TODO(kenton):  This is pretty hacky.  It sets CXXFLAGS, which the autoconf
+dnl docs say should never be overridden except by the user.  It also isn't
+dnl cross-compile safe.  We should fix these problems, but since I don't have
+dnl Sun CC at my disposal for testing, someone else will have to do it.
+
+AC_DEFUN([ACX_CHECK_SUNCC],[
+
+  AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
+
+  AS_IF([test "$SUNCC" = "yes"],[
+    isainfo_k=`isainfo -k`
+    AS_IF([test "$target_cpu" = "sparc"],[
+      MEMALIGN_FLAGS="-xmemalign=8s"
+      IS_64="-m64"
+      LDFLAGS="${LDFLAGS} -L/usr/lib/${isainfo_k} -L/usr/local/lib/${isainfo_k}"
+    ],[
+      AS_IF([test "$isainfo_k" = "amd64"],[
+        IS_64="-m64"
+        LDFLAGS="${LDFLAGS} -L/usr/lib/${isainfo_k} -L/usr/local/lib/${isainfo_k}"
+      ])
+    ])
+
+    CFLAGS="-g -xO4 -xlibmil -xdepend -Xa -mt -xstrconst ${IS_64} ${MEMALIGN_FLAGS} $CFLAGS"
+    CXXFLAGS="-g -xO4 -xlibmil -mt ${IS_64} ${MEMALIGN_FLAGS} -xlang=c99 -compat=5 -library=stlport4 -template=no%extdef $CXXFLAGS"
+  ])
+])