acx_prog_cc_optim.m4 4.17 KB
Newer Older
Emmanuel Bertin's avatar
Emmanuel Bertin committed
1
2
3
4
5
6
7
8
9
10
dnl @synopsis ACX_PROG_CC_OPTIM
dnl
dnl Enables a reasonable set of optimization flags for the C compiler. 
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
11
dnl @version 1.4 (2009-09-08)
Emmanuel Bertin's avatar
Emmanuel Bertin committed
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
dnl @authors Emmanuel Bertin <bertin@iap.fr> Ville Laurikari <vl@iki.fi>
dnl
AC_DEFUN([ACX_PROG_CC_OPTIM], [
  msg="for C compiler optimization flags"
  AC_CACHE_CHECK($msg, prog_cc_optim_flags, [
    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
31
32
33
34
      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
35
        prog_cc_optim_flags="-O3 -axSSE3,SSE4.1,SSE4.2 -ip -no-prec-div -unroll"
Emmanuel Bertin's avatar
Emmanuel Bertin committed
36
37
38
39
40
41
        prog_ld_optim_flags="-static-intel"

      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
42
        prog_cc_optim_flags="-O3 -axSSE2,SSE3,SSE4.1,SSE4.2 -ip -no-prec-div -unroll"
Emmanuel Bertin's avatar
Emmanuel Bertin committed
43
44
45
46
47
48
49
        prog_ld_optim_flags="-static-intel"

      dnl GCC
      elif test "$GCC" = "yes"; then
        prog_cc_optim_flags="-O3 -g -funroll-loops -fomit-frame-pointer -Wall"
        prog_ld_optim_flags=""

Emmanuel Bertin's avatar
Emmanuel Bertin committed
50
51
52
53
54
      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
        prog_cc_optim_flags="-O"
Emmanuel Bertin's avatar
Emmanuel Bertin committed
55
        prog_ld_optim_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
56
57
58
59
60
61

      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
Emmanuel Bertin's avatar
Emmanuel Bertin committed
62
63
        prog_cc_optim_flags="-fast -tune host"
        prog_ld_optim_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
64
65
66
67
68
69

      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
        prog_cc_optim_flags="-O2"
Emmanuel Bertin's avatar
Emmanuel Bertin committed
70
        prog_ld_optim_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
71
72
73
74
75
76

      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
        prog_cc_optim_flags="-O3"
Emmanuel Bertin's avatar
Emmanuel Bertin committed
77
        prog_ld_optim_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
78
79
80
81
82
83

      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
        prog_cc_optim_flags="+O3"
Emmanuel Bertin's avatar
Emmanuel Bertin committed
84
        prog_ld_optim_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
85
86
87
88
89
90

      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
        prog_cc_optim_flags="-O"
Emmanuel Bertin's avatar
Emmanuel Bertin committed
91
        prog_ld_optim_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
92
93
94
95
96
97

      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
        prog_cc_optim_flags="-O3"
Emmanuel Bertin's avatar
Emmanuel Bertin committed
98
        prog_ld_optim_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
99
100
101
102
103

      fi
      rm -f conftest.*
    fi
    if test -n "$prog_cc_optim_flags"; then
104
105
      AM_CFLAGS="$CFLAGS $prog_cc_optim_flags"
      AM_LDFLAGS="$LDFLAGS $prog_ld_optim_flags"
Emmanuel Bertin's avatar
Emmanuel Bertin committed
106
    else
Emmanuel Bertin's avatar
Emmanuel Bertin committed
107
108
      prog_cc_optim_flags=""
      prog_ld_optim_flags=""
Emmanuel Bertin's avatar
Emmanuel Bertin committed
109
110
111
    fi
  ])
])dnl
Emmanuel Bertin's avatar
Emmanuel Bertin committed
112