diff src/fftw-3.3.8/m4/ax_cc_maxopt.m4 @ 82:d0c2a83c1364

Add FFTW 3.3.8 source, and a Linux build
author Chris Cannam
date Tue, 19 Nov 2019 14:52:55 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/fftw-3.3.8/m4/ax_cc_maxopt.m4	Tue Nov 19 14:52:55 2019 +0000
@@ -0,0 +1,128 @@
+dnl @synopsis AX_CC_MAXOPT
+dnl @summary turn on optimization flags for the C compiler
+dnl @category C
+dnl
+dnl Try to turn on "good" C optimization flags for various compilers
+dnl and architectures, for some definition of "good".  (In our case,
+dnl good for FFTW and hopefully for other scientific codes.  Modify 
+dnl as needed.)
+dnl
+dnl The user can override the flags by setting the CFLAGS environment
+dnl variable.  
+dnl
+dnl Note also that the flags assume that ANSI C aliasing rules are
+dnl followed by the code (e.g. for gcc's -fstrict-aliasing), and that
+dnl floating-point computations can be re-ordered as needed.
+dnl
+dnl Requires macros: AX_CHECK_COMPILER_FLAGS, AX_COMPILER_VENDOR,
+dnl
+dnl @version 2011-06-22
+dnl @license GPLWithACException
+dnl @author Steven G. Johnson <stevenj@alum.mit.edu> and Matteo Frigo.
+AC_DEFUN([AX_CC_MAXOPT],
+[
+AC_REQUIRE([AC_PROG_CC])
+AC_REQUIRE([AX_COMPILER_VENDOR])
+AC_REQUIRE([AC_CANONICAL_HOST])
+
+# Try to determine "good" native compiler flags if none specified via CFLAGS
+if test "$ac_test_CFLAGS" != "set"; then
+  CFLAGS=""
+  case $ax_cv_c_compiler_vendor in
+    dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host"
+    	 ;;
+
+    sun) CFLAGS="-native -fast -xO5 -dalign"
+    	 ;;
+
+    hp)  CFLAGS="+Oall +Optrs_ansi +DSnative"
+    	 ;;
+
+    ibm) xlc_opt="-qarch=auto -qtune=auto"
+         AX_CHECK_COMPILER_FLAGS($xlc_opt,
+         	CFLAGS="-O3 -qalias=ansi -w $xlc_opt",
+               [CFLAGS="-O3 -qalias=ansi -w"])
+         ;;
+
+    intel) CFLAGS="-O3"
+        # Intel seems to have changed the spelling of this flag recently
+        icc_ansi_alias="unknown"
+	for flag in -ansi-alias -ansi_alias; do
+	  AX_CHECK_COMPILER_FLAGS($flag, [icc_ansi_alias=$flag; break])
+	done
+ 	if test "x$icc_ansi_alias" != xunknown; then
+            CFLAGS="$CFLAGS $icc_ansi_alias"
+        fi
+	AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double")
+	# We used to check for architecture flags here, e.g. -xHost etc.,
+	# but these flags are problematic.  On icc-12.0.0, "-mavx -xHost"
+	# overrides -mavx with -xHost, generating SSE2 code instead of AVX
+	# code.  ICC does not seem to support -mtune=host or equivalent
+	# non-ABI changing flag.
+	;;
+    
+    clang)
+        CFLAGS="-O3 -fomit-frame-pointer"
+        AX_CHECK_COMPILER_FLAGS(-mtune=native, CFLAGS="$CFLAGS -mtune=native")
+        AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing,CFLAGS="$CFLAGS -fstrict-aliasing")
+        ;;
+
+    gnu) 
+     # Default optimization flags for gcc on all systems.
+     # Somehow -O3 does not imply -fomit-frame-pointer on ia32
+     CFLAGS="-O3 -fomit-frame-pointer"
+
+     # tune for the host by default
+     AX_CHECK_COMPILER_FLAGS(-mtune=native, CFLAGS="$CFLAGS -mtune=native")
+
+     # -malign-double for x86 systems
+     AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double")
+
+     #  -fstrict-aliasing for gcc-2.95+
+     AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing,
+	CFLAGS="$CFLAGS -fstrict-aliasing")
+
+     # -fno-schedule-insns is pretty much required on all risc
+     # processors.
+     # 
+     # gcc performs one pass of instruction scheduling, then a pass of
+     # register allocation, then another pass of instruction
+     # scheduling.  The first pass reorders instructions in a way that
+     # is pretty much the worst possible for the purposes of register
+     # allocation.  We disable the first pass.
+     AX_CHECK_COMPILER_FLAGS(-fno-schedule-insns, CFLAGS="$CFLAGS -fno-schedule-insns")
+
+     # flags to enable power ISA 2.07 instructions with gcc (always true with vsx)
+     if test "$have_vsx" = "yes"; then
+         AX_CHECK_COMPILER_FLAGS(-mcpu=power8, CFLAGS="$CFLAGS -mcpu=power8")
+         AX_CHECK_COMPILER_FLAGS(-mpower8-fusion, CFLAGS="$CFLAGS -mpower8-fusion")
+         AX_CHECK_COMPILER_FLAGS(-mpower8-vector, CFLAGS="$CFLAGS -mpower8-vector")
+         AX_CHECK_COMPILER_FLAGS(-mdirect-move, CFLAGS="$CFLAGS -mdirect-move")
+     fi
+     ;;
+  esac
+
+  if test -z "$CFLAGS"; then
+	echo ""
+	echo "********************************************************"
+        echo "* WARNING: Don't know the best CFLAGS for this system  *"
+        echo "* Use ./configure CFLAGS=... to specify your own flags *"
+	echo "* (otherwise, a default of CFLAGS=-O3 will be used)    *"
+	echo "********************************************************"
+	echo ""
+        CFLAGS="-O3"
+  fi
+
+  AX_CHECK_COMPILER_FLAGS($CFLAGS, [], [
+	echo ""
+        echo "********************************************************"
+        echo "* WARNING: The guessed CFLAGS don't seem to work with  *"
+        echo "* your compiler.                                       *"
+        echo "* Use ./configure CFLAGS=... to specify your own flags *"
+        echo "********************************************************"
+        echo ""
+        CFLAGS=""
+  ])
+
+fi
+])