acx_prog_cc_optim.m4 5.25 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-2022 Emmanuel Bertin -- IAP/CNRS/SorbonneU
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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
Emmanuel Bertin's avatar
Emmanuel Bertin committed
28
dnl	Last modified:		07/09/2022
29
30
31
32
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
Emmanuel Bertin's avatar
Emmanuel Bertin committed
63
        prog_cc_optim_cv_flags="-O3 -axSSSE3,SSE4.1,SSE4.2,AVX,CORE-AVX2,CORE-AVX-I"
64
        prog_ld_optim_cv_flags=""
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
Emmanuel Bertin's avatar
Emmanuel Bertin committed
70
        prog_cc_optim_cv_flags="-O3 -axSSE2,SSE3,SSE4.1,SSE4.2,AVX,CORE-AVX2,CORE-AVX-I"
71
        prog_ld_optim_cv_flags=""
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
    if test -n "$prog_cc_optim_cv_flags"; then
132
133
      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