ax_blas.m4 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. # ===========================================================================
  2. # http://www.gnu.org/software/autoconf-archive/ax_blas.html
  3. # ===========================================================================
  4. #
  5. # SYNOPSIS
  6. #
  7. # AX_BLAS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
  8. #
  9. # DESCRIPTION
  10. #
  11. # This macro looks for a library that implements the BLAS linear-algebra
  12. # interface (see http://www.netlib.org/blas/). On success, it sets the
  13. # BLAS_LIBS output variable to hold the requisite library linkages.
  14. #
  15. # To link with BLAS, you should link with:
  16. #
  17. # $BLAS_LIBS $LIBS $FLIBS
  18. #
  19. # in that order. FLIBS is the output variable of the
  20. # AC_F77_LIBRARY_LDFLAGS macro (called if necessary by AX_BLAS), and is
  21. # sometimes necessary in order to link with F77 libraries. Users will also
  22. # need to use AC_F77_DUMMY_MAIN (see the autoconf manual), for the same
  23. # reason.
  24. #
  25. # Many libraries are searched for, from ATLAS to CXML to ESSL. The user
  26. # may also use --with-blas=<lib> in order to use some specific BLAS
  27. # library <lib>. In order to link successfully, however, be aware that you
  28. # will probably need to use the same Fortran compiler (which can be set
  29. # via the F77 env. var.) as was used to compile the BLAS library.
  30. #
  31. # ACTION-IF-FOUND is a list of shell commands to run if a BLAS library is
  32. # found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is
  33. # not found. If ACTION-IF-FOUND is not specified, the default action will
  34. # define HAVE_BLAS.
  35. #
  36. # LICENSE
  37. #
  38. # Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
  39. #
  40. # This program is free software: you can redistribute it and/or modify it
  41. # under the terms of the GNU General Public License as published by the
  42. # Free Software Foundation, either version 3 of the License, or (at your
  43. # option) any later version.
  44. #
  45. # This program is distributed in the hope that it will be useful, but
  46. # WITHOUT ANY WARRANTY; without even the implied warranty of
  47. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
  48. # Public License for more details.
  49. #
  50. # You should have received a copy of the GNU General Public License along
  51. # with this program. If not, see <http://www.gnu.org/licenses/>.
  52. #
  53. # As a special exception, the respective Autoconf Macro's copyright owner
  54. # gives unlimited permission to copy, distribute and modify the configure
  55. # scripts that are the output of Autoconf when processing the Macro. You
  56. # need not follow the terms of the GNU General Public License when using
  57. # or distributing such scripts, even though portions of the text of the
  58. # Macro appear in them. The GNU General Public License (GPL) does govern
  59. # all other use of the material that constitutes the Autoconf Macro.
  60. #
  61. # This special exception to the GPL applies to versions of the Autoconf
  62. # Macro released by the Autoconf Archive. When you make and distribute a
  63. # modified version of the Autoconf Macro, you may extend this special
  64. # exception to the GPL to apply to your modified version as well.
  65. #serial 14
  66. AU_ALIAS([ACX_BLAS], [AX_BLAS])
  67. AC_DEFUN([AX_BLAS], [
  68. AC_PREREQ(2.50)
  69. AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
  70. AC_REQUIRE([AC_CANONICAL_HOST])
  71. ax_blas_ok=no
  72. AC_ARG_WITH(blas,
  73. [AS_HELP_STRING([--with-blas=<lib>], [use BLAS library <lib>])])
  74. case $with_blas in
  75. yes | "") ;;
  76. no) ax_blas_ok=disable ;;
  77. -* | */* | *.a | *.so | *.so.* | *.o) BLAS_LIBS="$with_blas" ;;
  78. *) BLAS_LIBS="-l$with_blas" ;;
  79. esac
  80. # Get fortran linker names of BLAS functions to check for.
  81. AC_F77_FUNC(sgemm)
  82. AC_F77_FUNC(dgemm)
  83. ax_blas_save_LIBS="$LIBS"
  84. LIBS="$LIBS $FLIBS"
  85. # First, check BLAS_LIBS environment variable
  86. if test $ax_blas_ok = no; then
  87. if test "x$BLAS_LIBS" != x; then
  88. save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS"
  89. AC_MSG_CHECKING([for $sgemm in $BLAS_LIBS])
  90. AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes], [BLAS_LIBS=""])
  91. AC_MSG_RESULT($ax_blas_ok)
  92. LIBS="$save_LIBS"
  93. fi
  94. fi
  95. # BLAS linked to by default? (happens on some supercomputers)
  96. if test $ax_blas_ok = no; then
  97. save_LIBS="$LIBS"; LIBS="$LIBS"
  98. AC_MSG_CHECKING([if $sgemm is being linked in already])
  99. AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes])
  100. AC_MSG_RESULT($ax_blas_ok)
  101. LIBS="$save_LIBS"
  102. fi
  103. # BLAS in OpenBLAS library? (http://xianyi.github.com/OpenBLAS/)
  104. if test $ax_blas_ok = no; then
  105. AC_CHECK_LIB(openblas, $sgemm, [ax_blas_ok=yes
  106. BLAS_LIBS="-lopenblas"])
  107. fi
  108. # BLAS in ATLAS library? (http://math-atlas.sourceforge.net/)
  109. if test $ax_blas_ok = no; then
  110. AC_CHECK_LIB(atlas, ATL_xerbla,
  111. [AC_CHECK_LIB(f77blas, $sgemm,
  112. [AC_CHECK_LIB(cblas, cblas_dgemm,
  113. [ax_blas_ok=yes
  114. BLAS_LIBS="-lcblas -lf77blas -latlas"],
  115. [], [-lf77blas -latlas])],
  116. [], [-latlas])])
  117. fi
  118. # BLAS in PhiPACK libraries? (requires generic BLAS lib, too)
  119. if test $ax_blas_ok = no; then
  120. AC_CHECK_LIB(blas, $sgemm,
  121. [AC_CHECK_LIB(dgemm, $dgemm,
  122. [AC_CHECK_LIB(sgemm, $sgemm,
  123. [ax_blas_ok=yes; BLAS_LIBS="-lsgemm -ldgemm -lblas"],
  124. [], [-lblas])],
  125. [], [-lblas])])
  126. fi
  127. # BLAS in Intel MKL library?
  128. # New MKL link flag
  129. if test $ax_blas_ok = no; then
  130. AC_CHECK_LIB(, $sgemm,
  131. [ax_blas_ok=yes;BLAS_LIBS="-mkl"],,
  132. [-mkl])
  133. fi
  134. if test $ax_blas_ok = no; then
  135. # MKL for gfortran
  136. if test x"$ac_cv_fc_compiler_gnu" = xyes; then
  137. # 64 bit
  138. if test $host_cpu = x86_64; then
  139. AC_CHECK_LIB(mkl_gf_lp64, $sgemm,
  140. [ax_blas_ok=yes;BLAS_LIBS="-lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lpthread"],,
  141. [-lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lpthread])
  142. # 32 bit
  143. elif test $host_cpu = i686; then
  144. AC_CHECK_LIB(mkl_gf, $sgemm,
  145. [ax_blas_ok=yes;BLAS_LIBS="-lmkl_gf -lmkl_sequential -lmkl_core -lpthread"],,
  146. [-lmkl_gf -lmkl_sequential -lmkl_core -lpthread])
  147. fi
  148. # MKL for other compilers (Intel, PGI, ...?)
  149. else
  150. # 64-bit
  151. if test $host_cpu = x86_64; then
  152. AC_CHECK_LIB(mkl_intel_lp64, $sgemm,
  153. [ax_blas_ok=yes;BLAS_LIBS="-lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread"],,
  154. [-lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread])
  155. # 32-bit
  156. elif test $host_cpu = i686; then
  157. AC_CHECK_LIB(mkl_intel, $sgemm,
  158. [ax_blas_ok=yes;BLAS_LIBS="-lmkl_intel -lmkl_sequential -lmkl_core -lpthread"],,
  159. [-lmkl_intel -lmkl_sequential -lmkl_core -lpthread])
  160. fi
  161. fi
  162. fi
  163. # Old versions of MKL
  164. if test $ax_blas_ok = no; then
  165. AC_CHECK_LIB(mkl, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl -lguide -lpthread"],,[-lguide -lpthread])
  166. fi
  167. # BLAS in Apple vecLib library?
  168. if test $ax_blas_ok = no; then
  169. save_LIBS="$LIBS"; LIBS="-framework vecLib $LIBS"
  170. AC_MSG_CHECKING([for $sgemm in -framework vecLib])
  171. AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes;BLAS_LIBS="-framework vecLib"])
  172. AC_MSG_RESULT($ax_blas_ok)
  173. LIBS="$save_LIBS"
  174. fi
  175. # BLAS in Alpha CXML library?
  176. if test $ax_blas_ok = no; then
  177. AC_CHECK_LIB(cxml, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lcxml"])
  178. fi
  179. # BLAS in Alpha DXML library? (now called CXML, see above)
  180. if test $ax_blas_ok = no; then
  181. AC_CHECK_LIB(dxml, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-ldxml"])
  182. fi
  183. # BLAS in Sun Performance library?
  184. if test $ax_blas_ok = no; then
  185. if test "x$GCC" != xyes; then # only works with Sun CC
  186. AC_CHECK_LIB(sunmath, acosp,
  187. [AC_CHECK_LIB(sunperf, $sgemm,
  188. [BLAS_LIBS="-xlic_lib=sunperf -lsunmath"
  189. ax_blas_ok=yes],[],[-lsunmath])])
  190. fi
  191. fi
  192. # BLAS in SCSL library? (SGI/Cray Scientific Library)
  193. if test $ax_blas_ok = no; then
  194. AC_CHECK_LIB(scs, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lscs"])
  195. fi
  196. # BLAS in SGIMATH library?
  197. if test $ax_blas_ok = no; then
  198. AC_CHECK_LIB(complib.sgimath, $sgemm,
  199. [ax_blas_ok=yes; BLAS_LIBS="-lcomplib.sgimath"])
  200. fi
  201. # BLAS in IBM ESSL library? (requires generic BLAS lib, too)
  202. if test $ax_blas_ok = no; then
  203. AC_CHECK_LIB(blas, $sgemm,
  204. [AC_CHECK_LIB(essl, $sgemm,
  205. [ax_blas_ok=yes; BLAS_LIBS="-lessl -lblas"],
  206. [], [-lblas $FLIBS])])
  207. fi
  208. # Generic BLAS library?
  209. if test $ax_blas_ok = no; then
  210. AC_CHECK_LIB(blas, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lblas"])
  211. fi
  212. AC_SUBST(BLAS_LIBS)
  213. LIBS="$ax_blas_save_LIBS"
  214. # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
  215. if test x"$ax_blas_ok" = xyes; then
  216. ifelse([$1],,AC_DEFINE(HAVE_BLAS,1,[Define if you have a BLAS library.]),[$1])
  217. :
  218. else
  219. ax_blas_ok=no
  220. $2
  221. fi
  222. ])dnl AX_BLAS