| # This file is part of Autoconf. -*- Autoconf -*- |
| # Programming languages support. |
| # Copyright (C) 2001-2012 Free Software Foundation, Inc. |
| # Copyright (C) 2015-2018 R Core Team |
| |
| # This file is part of Autoconf. This program is free |
| # software; you can redistribute it and/or modify it under the |
| # terms of the GNU General Public License as published by the |
| # Free Software Foundation, either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # Under Section 7 of GPL version 3, you are granted additional |
| # permissions described in the Autoconf Configure Script Exception, |
| # version 3.0, as published by the Free Software Foundation. |
| # |
| # You should have received a copy of the GNU General Public License |
| # and a copy of the Autoconf Configure Script Exception along with |
| # this program; see the files COPYINGv3 and COPYING.EXCEPTION |
| # respectively. If not, see <https://www.gnu.org/licenses/>. |
| |
| # Written by David MacKenzie, with help from |
| # Akim Demaille, Paul Eggert, |
| # Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor, |
| # Roland McGrath, Noah Friedman, david d zuhn, and many others. |
| |
| # [a small part, modified for clang and Intel in 2015,6, Solaris in 2017.] |
| |
| # _AC_LANG_OPENMP is a language-dependent program defined in c.m4 in |
| # the autoconf library. |
| |
| # R_OPENMP |
| # -------- |
| # Check which options need to be passed to the C compiler to support OpenMP. |
| # Set the OPENMP_CFLAGS / OPENMP_CXXFLAGS / OPENMP_FFLAGS variable to these |
| # options. |
| # The options are necessary at compile time (so the #pragmas are understood) |
| # and at link time (so the appropriate library is linked with). |
| # This macro takes care to not produce redundant options if $CC $CFLAGS already |
| # supports OpenMP. It also is careful to not pass options to compilers that |
| # misinterpret them; for example, most compilers accept "-openmp" and create |
| # an output file called 'penmp' rather than activating OpenMP support. |
| AC_DEFUN([R_OPENMP], |
| [ |
| OPENMP_[]_AC_LANG_PREFIX[]FLAGS= |
| AC_ARG_ENABLE([openmp], |
| [AS_HELP_STRING([--disable-openmp], [do not use OpenMP])]) |
| if test "$enable_openmp" != no; then |
| AC_CACHE_CHECK([for $[]_AC_CC[] option to support OpenMP], |
| [ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp], |
| [AC_LINK_IFELSE([_AC_LANG_OPENMP], |
| [ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp='none needed'], |
| [ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp='unsupported' |
| dnl Try these flags: |
| dnl GCC >= 4.2, clang >= 3.8 -fopenmp |
| dnl clang 3.7.x -fopenmp=libomp |
| dnl (-fopenmp is accepted but does not work) |
| dnl Oracle C, Fortran -xopenmp |
| dnl (also accepts -fopenmp as from 12.4, but does not work in 12.5) |
| dnl Intel C, Fortran -qopenmp |
| dnl Intel -openmp (deprecated) |
| dnl (https://software.intel.com/en-us/node/581863, |
| dnl https://software.intel.com/en-us/node/525020) |
| dnl SGI C, PGI C -mp |
| dnl Tru64 Compaq C -omp |
| dnl IBM C (AIX, Linux) -qsmp=omp |
| dnl Cray CCE -homp |
| dnl NEC SX -Popenmp |
| dnl Lahey Fortran (Linux) --openmp |
| dnl flang -mp, also -fopenmp |
| dnl If in this loop a compiler is passed an option that it doesn't |
| dnl understand or that it misinterprets, the AC_LINK_IFELSE test |
| dnl will fail (since we know that it failed without the option), |
| dnl therefore the loop will continue searching for an option, and |
| dnl no output file called 'penmp' or 'mp' is created. |
| dnl Sept 2017: Solaris needs -xopenmp before -fopenmp |
| for ac_option in -xopenmp -fopenmp -qopenmp \ |
| -openmp -mp -omp -qsmp=omp -homp \ |
| -fopenmp=libomp \ |
| -Popenmp --openmp; do |
| ac_save_[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS |
| _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $ac_option" |
| AC_LINK_IFELSE([_AC_LANG_OPENMP], |
| [ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp=$ac_option]) |
| _AC_LANG_PREFIX[]FLAGS=$ac_save_[]_AC_LANG_PREFIX[]FLAGS |
| if test "$ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp" != unsupported; then |
| break |
| fi |
| done])]) |
| case $ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp in #( |
| "none needed" | unsupported) |
| ;; #( |
| *) |
| OPENMP_[]_AC_LANG_PREFIX[]FLAGS=$ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp ;; |
| esac |
| fi |
| AC_SUBST([OPENMP_]_AC_LANG_PREFIX[FLAGS]) |
| ]) |