acx_prog_cc_optim.m4 5.27 KB
Newer Older
Emmanuel Bertin's avatar
Emmanuel Bertin committed
1
dnl
2
3
4
5
6
7
8
9
dnl				acx_prog_cc_optim.m4
dnl
dnl Enable a reasonable set of optimization flags for the C compiler. 
dnl
dnl %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dnl
dnl	This file part of:	AstrOmatic software
dnl
Emmanuel Bertin's avatar
Emmanuel Bertin committed
10
dnl	Copyright:		(C) 2002-2010 Emmanuel Bertin -- IAP/CNRS/UPMC
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
dnl				(C) 2002 Ville Lauriki (original version)
dnl
dnl	Licenses:		GPL (this version)
dnl				MIT AllPermissive (original script)
dnl
dnl	AstrOmatic software is free software: you can redistribute it and/or
dnl	modify it under the terms of the GNU General Public License as
dnl	published by the Free Software Foundation, either version 3 of the
dnl	License, or (at your option) any later version.
dnl	AstrOmatic software is distributed in the hope that it will be useful,
dnl	but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dnl	GNU General Public License for more details.
dnl	You should have received a copy of the GNU General Public License
dnl	along with AstrOmatic software.
dnl	If not, see <http://www.gnu.org/licenses/>.
dnl
dnl	Last modified:		09/10/2010
dnl
dnl %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dnl
dnl @synopsis ACX_PROG_CC_OPTIM
Emmanuel Bertin's avatar
Emmanuel Bertin committed
33
34
35
36
37
38
39
40
dnl
dnl Currently this macro knows about GCC, Solaris C compiler,
dnl Digital Unix C compiler, C for AIX Compiler, HP-UX C compiler,
dnl IRIX C compiler, NEC SX-5 (Super-UX 10) C compiler, and Cray J90
dnl (Unicos 10.0.0.8) C compiler.
dnl
dnl This macro is a modification of Ville Laurikari's VL_PROG_CC_WARNINGS
dnl
41

Emmanuel Bertin's avatar
Emmanuel Bertin committed
42
43
AC_DEFUN([ACX_PROG_CC_OPTIM], [
  msg="for C compiler optimization flags"
44
  AC_CACHE_CHECK($msg, prog_cc_optim_cv_flags, [
Emmanuel Bertin's avatar
Emmanuel Bertin committed
45
46
47
48
49
50
51
52
53
54
55
56
57
58
    if test -n "$CC"; then
      cat > conftest.c <<EOF
int main(int argc, char **argv) { return 0; }
EOF

      dnl Most compilers print some kind of a version string with some command
      dnl line options (often "-V").  The version string should be checked
      dnl before doing a test compilation run with compiler-specific flags.
      dnl This is because some compilers (like the Cray compiler) only
      dnl produce a warning message for unknown flags instead of returning
      dnl an error, resulting in a false positive.  Also, compilers may do
      dnl erratic things when invoked with flags meant for a different
      dnl compiler.

Emmanuel Bertin's avatar
Emmanuel Bertin committed
59
60
61
62
      dnl INTEL C 64bits compiler
      if $CC -V 2>&1 | grep -i "Intel(R) 64" > /dev/null 2>&1 &&
           $CC -c -O conftest.c > /dev/null 2>&1 &&
           test -f conftest.o; then
63
64
        prog_cc_optim_cv_flags="-O3 -axSSE3,SSE4.1,SSE4.2 -ip -no-prec-div -unroll"
        prog_ld_optim_cv_flags="-static-intel"
Emmanuel Bertin's avatar
Emmanuel Bertin committed
65
66
67
68
69

      dnl INTEL C 32bits compiler
      elif $CC -V 2>&1 | grep -i "Intel(R)" > /dev/null 2>&1 &&
           $CC -c -O conftest.c > /dev/null 2>&1 &&
           test -f conftest.o; then
70
71
        prog_cc_optim_cv_flags="-O3 -axSSE2,SSE3,SSE4.1,SSE4.2 -ip -no-prec-div -unroll"
        prog_ld_optim_cv_flags="-static-intel"
Emmanuel Bertin's avatar
Emmanuel Bertin committed
72
73
74

      dnl GCC
      elif test "$GCC" = "yes"; then
75
76
        prog_cc_optim_cv_flags="-O3 -g -funroll-loops -fomit-frame-pointer -Wall"
        prog_ld_optim_cv_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
77

Emmanuel Bertin's avatar
Emmanuel Bertin committed
78
79
80
81
      dnl Solaris C compiler
      elif $CC -V 2>&1 | grep -i "WorkShop" > /dev/null 2>&1 &&
           $CC -c -O conftest.c > /dev/null 2>&1 &&
           test -f conftest.o; then
82
83
        prog_cc_optim_cv_flags="-O"
        prog_ld_optim_cv_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
84
85
86
87
88
89

      dnl Digital Unix/Compaq C compiler
      elif ($CC -V 2>&1 | grep -i "Digital UNIX Compiler"> /dev/null 2>&1 ||
	   $CC -V 2>&1 | grep -i "Compaq C"> /dev/null 2>&1) &&
           $CC -c -fast conftest.c > /dev/null 2>&1 &&
           test -f conftest.o; then
90
91
        prog_cc_optim_cv_flags="-fast -tune host"
        prog_ld_optim_cv_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
92
93
94
95
96

      dnl C for AIX Compiler
      elif $CC 2>&1 | grep -i "C for AIX Compiler" > /dev/null 2>&1 &&
           $CC -c -qinfo=all -O2 conftest.c > /dev/null 2>&1 &&
           test -f conftest.o; then
97
98
        prog_cc_optim_cv_flags="-O2"
        prog_ld_optim_cv_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
99
100
101
102
103

      dnl IRIX C compiler
      elif $CC -version 2>&1 | grep -i "MIPSpro Compilers" > /dev/null 2>&1 &&
           $CC -c -fullwarn -O3 conftest.c > /dev/null 2>&1 &&
           test -f conftest.o; then
104
105
        prog_cc_optim_cv_flags="-O3"
        prog_ld_optim_cv_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
106
107
108
109
110

      dnl HP-UX C compiler
      elif what $CC 2>&1 | grep -i "HP C Compiler" > /dev/null 2>&1 &&
           $CC -c -Aa +O3 conftest.c > /dev/null 2>&1 &&
           test -f conftest.o; then
111
112
        prog_cc_optim_cv_flags="+O3"
        prog_ld_optim_cv_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
113
114
115
116
117

      dnl The NEC SX-5 (Super-UX 10) C compiler
      elif $CC -V 2>&1 | grep "/SX" > /dev/null 2>&1 &&
           $CC -c -Xc -O conftest.c > /dev/null 2>&1 &&
           test -f conftest.o; then
118
119
        prog_cc_optim_cv_flags="-O"
        prog_ld_optim_cv_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
120
121
122
123
124

      dnl The Cray C compiler (Unicos)
      elif $CC -V 2>&1 | grep -i "Cray" > /dev/null 2>&1 &&
           $CC -c -h conform -O3 conftest.c > /dev/null 2>&1 &&
           test -f conftest.o; then
125
126
        prog_cc_optim_cv_flags="-O3"
        prog_ld_optim_cv_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
127
128
129
130

      fi
      rm -f conftest.*
    fi
131
132
133
    if test -n "$prog_cc_optim_cv_flags"; then
      AM_CFLAGS="$CFLAGS $prog_cc_optim_cv_flags"
      AM_LDFLAGS="$LDFLAGS $prog_ld_optim_cv_flags"
Emmanuel Bertin's avatar
Emmanuel Bertin committed
134
    else
135
136
      prog_cc_optim_cv_flags=""
      prog_ld_optim_cv_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
137
138
139
    fi
  ])
])dnl
Emmanuel Bertin's avatar
Emmanuel Bertin committed
140