1# Copyright (c) 2011 FFLAS-FFPACK 2# written by Brice Boyer (briceboyer) <boyer.brice@gmail.com> 3# adapted from LinBox configuration 4# 5# ========LICENCE======== 6# This file is part of the library FFLAS-FFPACK. 7# 8# FFLAS-FFPACK is free software: you can redistribute it and/or modify 9# it under the terms of the GNU Lesser General Public 10# License as published by the Free Software Foundation; either 11# version 2.1 of the License, or (at your option) any later version. 12# 13# This library is distributed in the hope that it will be useful, 14# but WITHOUT ANY WARRANTY; without even the implied warranty of 15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16# Lesser General Public License for more details. 17# 18# You should have received a copy of the GNU Lesser General Public 19# License along with this library; if not, write to the Free Software 20# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21# ========LICENCE======== 22#/ 23 24AC_PREREQ([2.67]) 25 26 27AC_INIT([FFLAS-FFPACK], [2.4.3],[ffpack-devel@googlegroups.com],[fflas-ffpack], 28 [https://github.com/linbox-team/fflas-ffpack]) 29 30 31AC_CONFIG_MACRO_DIR([macros]) 32AC_CONFIG_AUX_DIR([build-aux]) 33AC_CONFIG_HEADERS([config.h]) 34 35AC_CANONICAL_TARGET 36 37AM_INIT_AUTOMAKE([1.10 -Wall -Wno-portability foreign]) 38AX_PREFIX_CONFIG_H(fflas-ffpack/config.h, __FFLASFFPACK) 39 40AC_LANG([C++]) 41 42echo "-----------------------------------------------" 43 44AC_DEBUG 45AC_PROFILE 46AC_WARNINGS 47 48echo "-----------------------------------------------" 49 50# CFLAGS=${CFLAGS:-$DEFAULT_CFLAGS} 51# CXXFLAGS=${CXXFLAGS:-$DEFAULT_CXXFLAGS} 52 53###################################################### 54# Try and pass different flags according to compiler # 55###################################################### 56 57 58# disable default -g -O2 CXXFLAGS 59: ${CXXFLAGS=""} 60 61#set CXX 62AC_PROG_CXX 63 64AC_COMPILER_NAME 65 66# We need a C++11 compiler now - AB 2014-12-12 67# clang-3.8 does not support __float128 without explicitly passing it -std=c++11 68if test "x${CCNAM}" = "xclang38" ; then 69 AX_CXX_COMPILE_STDCXX_11([noext],[mandatory]) 70else 71 AX_CXX_COMPILE_STDCXX_11([ext],[mandatory]) 72fi 73# appending CXX11FLAGS for the remaining checks, to avoid clang __float128 undefined bug 74# duplicates will be removed later on 75CXXFLAGS="$CXXFLAGS $CXX11FLAGS" 76 77REQUIRED_FLAGS="$CXX11FLAGS" 78 79 80DEBUG_CFLAGS="-g" 81DEFAULT_CFLAGS="" 82WARN_CFLAGS="-Wall" 83 84#TODO use -fast for icc, -ipa for eko... 85if test "x$USE_DEBUG" = "xyes" ; then 86 DEFAULT_CFLAGS="-O0 ${DEFAULT_CFLAGS} ${DEBUG_CFLAGS}" #those are CXXFLAGS 87else 88 DEFAULT_CFLAGS="-O2 ${DEFAULT_CFLAGS}" 89fi 90 91if test "x$PROF" = "xyes" ; then 92 DEFAULT_CFLAGS="${DEFAULT_CFLAGS} -pg" 93fi 94 95if test "x$WARN" = "xyes" -o "x$WARN" = "xfull" ; then 96 case x${CCNAM} in 97 xicc) 98 WARN_CFLAGS="${WARN_CFLAGS} -Wcheck" 99 WARN_CFLAGS="${WARN_CFLAGS} -Wall -Wno-unused-parameter -Wuninitialized -Wconversion -Wcast-qual -pedantic -Wshadow -Wpointer-arith -Wwrite-strings -Wno-long-long" 100 WARN_CFLAGS="${WARN_CFLAGS} -Wextra -ansi" 101 ;; 102 xeko) 103 WARN_CFLAGS="${WARN_CFLAGS} -Wno-unused-parameter" 104 ;; 105 xgcc|xgcc44) 106 WARN_CFLAGS="${WARN_CFLAGS} -Wextra -Wno-unused-parameter" 107 if test "x${WARN}" = "xfull" ; then 108 WARN_CFLAGS="${WARN_CFLAGS} -Wuninitialized -Wconversion -Wcast-qual -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wno-long-long -Wno-variadic-macros -Wno-vla" 109 fi 110 if test "x${HAVE_CXX11}" = "x0" ; then 111 WARN_CFLAGS="${WARN_CFLAGS} -ansi" 112 fi 113 ;; 114 xgcc48) 115 WARN_CFLAGS="${WARN_CFLAGS} -Wextra -Wno-unused-parameter" 116 if test "x${WARN}" = "xfull" ; then 117 WARN_CFLAGS="${WARN_CFLAGS} -Wuninitialized -Wconversion -Wcast-qual -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wno-long-long -Wno-variadic-macros -Wno-vla" 118 # WARN_CFLAGS="${WARN_CFLAGS} -fsanitize=address" 119 fi 120 if test "x${HAVE_CXX11}" = "x0" ; then 121 WARN_CFLAGS="${WARN_CFLAGS} -ansi" 122 fi 123 124 ;; 125 126 xclang) 127 WARN_CFLAGS="${WARN_CFLAGS} -Wextra -Wno-unused-parameter" 128 if test "x${WARN}" = "xfull" ; then 129 WARN_CFLAGS="${WARN_CFLAGS} -Wuninitialized -Wconversion -Wcast-qual -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wno-long-long -Wno-vla-extension -Wno-variadic-macros" 130 WARN_CFLAGS="${WARN_CFLAGS} -D__STRICT_ANSI__" 131 fi 132 ;; 133 xclang38) 134 WARN_CFLAGS="${WARN_CFLAGS} -Wextra -Wno-unused-parameter" 135 if test "x${WARN}" = "xfull" ; then 136 WARN_CFLAGS="${WARN_CFLAGS} -Wuninitialized -Wconversion -Wcast-qual -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wno-long-long -g -Wno-vla-extension -Wno-variadic-macros" 137 WARN_CFLAGS="${WARN_CFLAGS} -D__STRICT_ANSI__" 138 # WARN_CFLAGS="${WARN_CFLAGS} -fsanitize=address" 139 fi 140 ;; 141 142 *) 143 echo 144 echo "*******************************************************" 145 echo "unsupported compiler ($CCNAM). Please file a bug." 146 echo "*******************************************************" 147 echo 148 WARN_CFLAGS="${WARN_CFLAGS}" 149 esac 150fi 151 152 153DEFAULT_CFLAGS="${DEFAULT_CFLAGS} ${WARN_CFLAGS} ${DEBUG_CFLAGS}" 154AC_SUBST([DEFAULT_CFLAGS]) 155 156AC_HEADER_STDC 157AC_PROG_LIBTOOL 158AC_PROG_EGREP 159AC_PROG_SED 160# newer libtool... 161LT_PREREQ([2.4.3]) 162LT_INIT 163 164 165echo "DEFAULT_CFLAGS=${DEFAULT_CFLAGS}" 166echo "DEBUG_CFLAGS=${DEBUG_CFLAGS}" 167echo "TESTS_CFLAGS=${TESTS_CFLAGS}" 168echo "-----------------------------------------------" 169echo " START FFLAS-FFPACK CONFIG " 170echo "-----------------------------------------------" 171 172FF_CHECK_OMP 173 174 175# Checks which SIMD optimization flags to use and set SIMD_CFLAGS accordingly 176INSTR_SET 177AC_SUBST(SIMD_FLAGS) 178 179dnl gcc-4.9.2 bug See https://trac.sagemath.org/ticket/17635#comment:178 180AS_IF([ test "x$CCNAM" = "xgcc492" ],[REQUIRED_FLAGS="${REQUIRED_FLAGS} -fpermissive"],[]) 181 182dnl With GCC's default ABI version, a __m128 or __m256 are the same types and therefore we cannot 183dnl have overloads for both types without linking error. 184AS_IF([test "x$CCNAM" = "xgcc"],[REQUIRED_FLAGS="${REQUIRED_FLAGS} -fabi-version=6"],[]) 185 186AC_SUBST(REQUIRED_FLAGS) 187 188PARFLAGS="${OMPFLAGS}" 189PARLIBS="${OMPFLAGS}" 190 191AC_SUBST(PARFLAGS) 192AC_SUBST(PARLIBS) 193 194echo "-----------------------------------------------" 195 196# Machine characteristics 197 198AC_CHECK_SIZEOF(char, 8) 199AC_CHECK_SIZEOF(short, 16) 200AC_CHECK_SIZEOF(int, 32) 201AC_CHECK_SIZEOF(long, 32) 202AC_CHECK_SIZEOF(long long, 64) 203AC_CHECK_SIZEOF(__int64, 64) 204 205AC_CHECK_TYPE([__int128_t], [AC_DEFINE(HAVE_INT128, 1, [Define that compiler allows int128_t types])]) 206 207# Checks for header files. 208AC_HEADER_STDC 209AC_CHECK_HEADERS([float.h limits.h stddef.h stdlib.h string.h sys/time.h stdint.h pthread.h]) 210 211 212# check endianness of the architecture 213AC_C_BIGENDIAN( 214 [AC_DEFINE(HAVE_BIG_ENDIAN, 1, [Define that architecture uses big endian storage])], 215 [AC_DEFINE(HAVE_LITTLE_ENDIAN, 1, [Define that architecture uses little endian storage])], 216 []) 217 218# Create some useful data types of fixed, known lengths 219 220 221# AC_DEFINE_UNQUOTED(INT8, $LINBOX_INT8, Canonical 8-bit data type) 222# AC_DEFINE_UNQUOTED(INT16, $LINBOX_INT16, Canonical 16-bit data type) 223# AC_DEFINE_UNQUOTED(INT32, $LINBOX_INT32, Canonical 32-bit data type) 224# AC_DEFINE_UNQUOTED(INT64, $LINBOX_INT64, Canonical 64-bit data type) 225 226echo "-----------------------------------------------" 227# Feature checks 228FF_MISC 229 230AC_LANG([C++]) 231 232 233echo "-----------------------------------------------" 234 235# Getting GMP from Givaro - AB 2014-12-12 236#FF_CHECK_GMP 237 238PKG_CHECK_MODULES([GIVARO],[givaro >= 4.1.0]) 239FF_CHECK_GIVARO_USABILITY() 240 241 242dnl FF_CHECK_GIVARO(,,[ 243dnl echo '*******************************************************************************' 244dnl echo ' WARNING: GIVARO not found!' 245dnl echo 246dnl echo ' GIVARO library is required for some tests in this library.' 247dnl echo ' Please make sure GIVARO is installed and specify its location with the' 248dnl echo ' option --with-givaro=<prefix> when running configure.' 249dnl echo ' Do not forget to set/export LD_LIBRARY_PATH if necessary.' 250dnl echo '*******************************************************************************' 251dnl exit 1 252dnl ]) 253 254BLAS_FOUND=false 255 256FF_CHECK_BLAS_CFLAGS 257FF_CHECK_BLAS_LIBS 258FF_CHECK_MKL 259FF_CHECK_USER_BLAS 260FF_CHECK_USER_LAPACK 261 262FF_OPENBLAS_NUM_THREADS 263 264# FF_CHECK_BLAS 265 266# FF_CHECK_GOTOBLAS 267 268# FF_CHECK_GSL 269 270# if test "$BLAS_FOUND" = "false" ; then 271 # FF_CHECK_CBLAS 272# fi 273 274# if test "$BLAS_FOUND" = "false" ; then 275 # FF_CHECK_OTHERBLAS 276# fi 277 278# FF_CHECK_LAPACK 279 280# if test "$BLAS_FOUND" = "false" ; then 281 # FF_CHECK_BLAS2 282# fi 283 284 285 286# BLAS_LIBS="${BLAS_LIBS}" 287# BLAS_LIBS="-L/${BLAS_PATH} ${LAPACK_LIBS} ${BLAS_LIBS}" 288# AC_SUBST(BLAS_LIBS) 289 290# FF_CHECK_CUDA 291 292# AM_CONDITIONAL(FFLASFFPACK_HAVE_BLAS, test "x$BLAS_FOUND" != "xfalse") 293 294 295# FF_BENCH 296 297 298FF_DOC 299 300 301# if test ! -d ./benchmarks/data ; then 302 # echo "Creating data dir in benchmark" ; 303 # mkdir ./benchmarks/data ; 304# fi 305 306CXXFLAGS="${CXXFLAGS} ${REQUIRED_FLAGS}" 307CXXFLAGS="${CXXFLAGS} ${SIMD_CFLAGS}" 308CXXFLAGS="${CXXFLAGS} ${GIVARO_CFLAGS}" 309CXXFLAGS="${CXXFLAGS} ${BLAS_CFLAGS}" 310CXXFLAGS="${CXXFLAGS} ${CUDA_CFLAGS}" 311CXXFLAGS="${CXXFLAGS} ${PARFLAGS}" 312 313AC_SUBST(CXXFLAGS) 314 315FF_PRECOMPILE 316 317echo "-----------------------------------------------" 318echo " END FFLAS-FFPACK CONFIG " 319echo "-----------------------------------------------" 320 321AC_CONFIG_FILES([ 322Makefile 323macros/Makefile 324macros/CodeChunk/Makefile 325fflas-ffpack-config 326fflas-ffpack/Makefile 327fflas-ffpack/fflas/Makefile 328fflas-ffpack/fflas/fflas_fgemm/Makefile 329fflas-ffpack/fflas/fflas_sparse/Makefile 330fflas-ffpack/fflas/fflas_sparse/coo/Makefile 331fflas-ffpack/fflas/fflas_sparse/csr/Makefile 332fflas-ffpack/fflas/fflas_sparse/ell/Makefile 333fflas-ffpack/fflas/fflas_sparse/ell_simd/Makefile 334fflas-ffpack/fflas/fflas_sparse/csr_hyb/Makefile 335fflas-ffpack/fflas/fflas_sparse/sell/Makefile 336fflas-ffpack/fflas/fflas_sparse/hyb_zo/Makefile 337fflas-ffpack/fflas/fflas_igemm/Makefile 338fflas-ffpack/fflas/fflas_simd/Makefile 339fflas-ffpack/ffpack/Makefile 340fflas-ffpack/field/Makefile 341fflas-ffpack/utils/Makefile 342fflas-ffpack/paladin/Makefile 343fflas-ffpack/interfaces/Makefile 344fflas-ffpack/interfaces/libs/Makefile 345fflas-ffpack/checkers/Makefile 346autotune/Makefile 347doc/Makefile 348tests/Makefile 349tests/data/Makefile 350benchmarks/Makefile 351examples/Makefile 352tutorials/Makefile 353fflas-ffpack.pc 354],[chmod +x fflas-ffpack-config]) 355AC_OUTPUT 356 357echo "" > fflas-ffpack/fflas-ffpack-thresholds.h 358