129 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			129 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | 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 | ||
|  | ]) |