# Copyright (c) 2011 FFLAS-FFPACK # written by Brice Boyer (briceboyer) # adapted from LinBox configuration # # ========LICENCE======== # This file is part of the library FFLAS-FFPACK. # # FFLAS-FFPACK is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== #/ AC_PREREQ([2.67]) AC_INIT([FFLAS-FFPACK], [2.3.1],[ffpack-devel@googlegroups.com],[fflas-ffpack], [https://github.com/linbox-team/fflas-ffpack]) AC_CONFIG_MACRO_DIR([macros]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_HEADERS([config.h]) AC_CANONICAL_TARGET AM_INIT_AUTOMAKE([1.10 -Wall -Wno-portability foreign]) AX_PREFIX_CONFIG_H(fflas-ffpack/config.h, __FFLASFFPACK) AC_LANG([C++]) echo "-----------------------------------------------" AC_DEBUG AC_PROFILE AC_WARNINGS echo "-----------------------------------------------" # CFLAGS=${CFLAGS:-$DEFAULT_CFLAGS} # CXXFLAGS=${CXXFLAGS:-$DEFAULT_CXXFLAGS} ###################################################### # Try and pass different flags according to compiler # ###################################################### # disable default -g -O2 CXXFLAGS : ${CXXFLAGS=""} #set CXX AC_PROG_CXX AC_COMPILER_NAME # We need a C++11 compiler now - AB 2014-12-12 # clang-3.8 does not support __float128 without explicitly passing it -std=c++11 if test "x${CCNAM}" = "xclang38" ; then AX_CXX_COMPILE_STDCXX_11([noext],[mandatory]) else AX_CXX_COMPILE_STDCXX_11([ext],[mandatory]) fi # appending CXX11FLAGS for the remaining checks, to avoid clang __float128 undefined bug # duplicates will be removed later on CXXFLAGS="$CXXFLAGS $CXX11FLAGS" REQUIRED_FLAGS="$CXX11FLAGS" DEBUG_CFLAGS="-g" DEFAULT_CFLAGS="" WARN_CFLAGS="-Wall" #TODO use -fast for icc, -ipa for eko... if test "x$USE_DEBUG" = "xyes" ; then DEFAULT_CFLAGS="-O0 ${DEFAULT_CFLAGS} ${DEBUG_CFLAGS}" #those are CXXFLAGS else DEFAULT_CFLAGS="-O2 ${DEFAULT_CFLAGS}" fi if test "x$PROF" = "xyes" ; then DEFAULT_CFLAGS="${DEFAULT_CFLAGS} -pg" fi if test "x$WARN" = "xyes" -o "x$WARN" = "xfull" ; then case x${CCNAM} in xicc) WARN_CFLAGS="${WARN_CFLAGS} -Wcheck" WARN_CFLAGS="${WARN_CFLAGS} -Wall -Wno-unused-parameter -Wuninitialized -Wconversion -Wcast-qual -pedantic -Wshadow -Wpointer-arith -Wwrite-strings -Wno-long-long" WARN_CFLAGS="${WARN_CFLAGS} -Wextra -ansi" ;; xeko) WARN_CFLAGS="${WARN_CFLAGS} -Wno-unused-parameter" ;; xgcc|xgcc44) WARN_CFLAGS="${WARN_CFLAGS} -Wextra -Wno-unused-parameter" if test "x${WARN}" = "xfull" ; then WARN_CFLAGS="${WARN_CFLAGS} -Wuninitialized -Wconversion -Wcast-qual -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wno-long-long -Wno-variadic-macros -Wno-vla" fi if test "x${HAVE_CXX11}" = "x0" ; then WARN_CFLAGS="${WARN_CFLAGS} -ansi" fi ;; xgcc48) WARN_CFLAGS="${WARN_CFLAGS} -Wextra -Wno-unused-parameter" if test "x${WARN}" = "xfull" ; then WARN_CFLAGS="${WARN_CFLAGS} -Wuninitialized -Wconversion -Wcast-qual -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wno-long-long -Wno-variadic-macros -Wno-vla" # WARN_CFLAGS="${WARN_CFLAGS} -fsanitize=address" fi if test "x${HAVE_CXX11}" = "x0" ; then WARN_CFLAGS="${WARN_CFLAGS} -ansi" fi ;; xclang) WARN_CFLAGS="${WARN_CFLAGS} -Wextra -Wno-unused-parameter" if test "x${WARN}" = "xfull" ; then 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" WARN_CFLAGS="${WARN_CFLAGS} -D__STRICT_ANSI__" fi ;; xclang38) WARN_CFLAGS="${WARN_CFLAGS} -Wextra -Wno-unused-parameter" if test "x${WARN}" = "xfull" ; then 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" WARN_CFLAGS="${WARN_CFLAGS} -D__STRICT_ANSI__" # WARN_CFLAGS="${WARN_CFLAGS} -fsanitize=address" fi ;; *) echo echo "*******************************************************" echo "unsupported compiler ($CCNAM). Please file a bug." echo "*******************************************************" echo WARN_CFLAGS="${WARN_CFLAGS}" esac fi DEFAULT_CFLAGS="${DEFAULT_CFLAGS} ${WARN_CFLAGS} ${DEBUG_CFLAGS}" AC_SUBST([DEFAULT_CFLAGS]) AC_HEADER_STDC AC_PROG_LIBTOOL AC_PROG_EGREP AC_PROG_SED # newer libtool... LT_PREREQ([2.4.2]) LT_INIT echo "DEFAULT_CFLAGS=${DEFAULT_CFLAGS}" echo "DEBUG_CFLAGS=${DEBIG_CFLAGS}" echo "TESTS_CFLAGS=${TESTS_CFLAGS}" echo "-----------------------------------------------" echo " START FFLAS-FFPACK CONFIG " echo "-----------------------------------------------" FF_CHECK_OMP # Checks which SIMD optimization flags to use and set SIMD_CFLAGS accordingly INSTR_SET AC_SUBST(SIMD_FLAGS) dnl gcc-4.9.2 bug See https://trac.sagemath.org/ticket/17635#comment:178 AS_IF([ test "x$CCNAM" = "xgcc492" ],[CXXFLAGS="${CXXFLAGS} -fpermissive"],[]) dnl With GCC's default ABI version, a __m128 or __m256 are the same types and therefore we cannot dnl have overloads for both types without linking error. AS_IF([test "x$CCNAM" = "xgcc"],[REQUIRED_FLAGS="${REQUIRED_FLAGS} -fabi-version=6"],[]) AC_SUBST(REQUIRED_FLAGS) PARFLAGS="${OMPFLAGS}" PARLIBS="${OMPFLAGS}" AC_SUBST(PARFLAGS) AC_SUBST(PARLIBS) echo "-----------------------------------------------" # Machine characteristics AC_CHECK_SIZEOF(char, 8) AC_CHECK_SIZEOF(short, 16) AC_CHECK_SIZEOF(int, 32) AC_CHECK_SIZEOF(long, 32) AC_CHECK_SIZEOF(long long, 64) AC_CHECK_SIZEOF(__int64, 64) # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([float.h limits.h stddef.h stdlib.h string.h sys/time.h stdint.h pthread.h]) # check endianness of the architecture AC_C_BIGENDIAN( [AC_DEFINE(HAVE_BIG_ENDIAN, 1, [Define that architecture uses big endian storage])], [AC_DEFINE(HAVE_LITTLE_ENDIAN, 1, [Define that architecture uses little endian storage])], []) # Create some useful data types of fixed, known lengths # AC_DEFINE_UNQUOTED(INT8, $LINBOX_INT8, Canonical 8-bit data type) # AC_DEFINE_UNQUOTED(INT16, $LINBOX_INT16, Canonical 16-bit data type) # AC_DEFINE_UNQUOTED(INT32, $LINBOX_INT32, Canonical 32-bit data type) # AC_DEFINE_UNQUOTED(INT64, $LINBOX_INT64, Canonical 64-bit data type) echo "-----------------------------------------------" # Feature checks FF_MISC AC_LANG([C++]) echo "-----------------------------------------------" # Getting GMP from Givaro - AB 2014-12-12 #FF_CHECK_GMP PKG_CHECK_MODULES([GIVARO],[givaro]) dnl FF_CHECK_GIVARO(,,[ dnl echo '*******************************************************************************' dnl echo ' WARNING: GIVARO not found!' dnl echo dnl echo ' GIVARO library is required for some tests in this library.' dnl echo ' Please make sure GIVARO is installed and specify its location with the' dnl echo ' option --with-givaro= when running configure.' dnl echo ' Do not forget to set/export LD_LIBRARY_PATH if necessary.' dnl echo '*******************************************************************************' dnl exit 1 dnl ]) BLAS_FOUND=false FF_CHECK_BLAS_CFLAGS FF_CHECK_BLAS_LIBS FF_CHECK_MKL FF_CHECK_USER_BLAS FF_CHECK_USER_LAPACK FF_OPENBLAS_NUM_THREADS # FF_CHECK_BLAS # FF_CHECK_GOTOBLAS # FF_CHECK_GSL # if test "$BLAS_FOUND" = "false" ; then # FF_CHECK_CBLAS # fi # if test "$BLAS_FOUND" = "false" ; then # FF_CHECK_OTHERBLAS # fi # FF_CHECK_LAPACK # if test "$BLAS_FOUND" = "false" ; then # FF_CHECK_BLAS2 # fi # BLAS_LIBS="${BLAS_LIBS}" # BLAS_LIBS="-L/${BLAS_PATH} ${LAPACK_LIBS} ${BLAS_LIBS}" # AC_SUBST(BLAS_LIBS) # FF_CHECK_CUDA # AM_CONDITIONAL(FFLASFFPACK_HAVE_BLAS, test "x$BLAS_FOUND" != "xfalse") # FF_BENCH FF_DOC # if test ! -d ./benchmarks/data ; then # echo "Creating data dir in benchmark" ; # mkdir ./benchmarks/data ; # fi CXXFLAGS="${CXXFLAGS} ${REQUIRED_FLAGS}" CXXFLAGS="${CXXFLAGS} ${SIMD_CFLAGS}" CXXFLAGS="${CXXFLAGS} ${GIVARO_CFLAGS}" CXXFLAGS="${CXXFLAGS} ${CBLAS_FLAG}" CXXFLAGS="${CXXFLAGS} ${CUDA_CFLAGS}" CXXFLAGS="${CXXFLAGS} ${PARFLAGS}" #removing possible duplicates of -std=gnu++11 and -fabi-version=6 CXXFLAGS=`echo "${CXXFLAGS}" |xargs -n1 | sort -u|xargs` AC_SUBST(CXXFLAGS) FF_PRECOMPILE echo "-----------------------------------------------" echo " END FFLAS-FFPACK CONFIG " echo "-----------------------------------------------" AC_CONFIG_FILES([ Makefile macros/Makefile macros/CodeChunk/Makefile fflas-ffpack-config fflas-ffpack/Makefile fflas-ffpack/fflas/Makefile fflas-ffpack/fflas/fflas_fgemm/Makefile fflas-ffpack/fflas/fflas_sparse/Makefile fflas-ffpack/fflas/fflas_sparse/coo/Makefile fflas-ffpack/fflas/fflas_sparse/csr/Makefile fflas-ffpack/fflas/fflas_sparse/ell/Makefile fflas-ffpack/fflas/fflas_sparse/ell_simd/Makefile fflas-ffpack/fflas/fflas_sparse/csr_hyb/Makefile fflas-ffpack/fflas/fflas_sparse/sell/Makefile fflas-ffpack/fflas/fflas_sparse/hyb_zo/Makefile fflas-ffpack/fflas/fflas_igemm/Makefile fflas-ffpack/fflas/fflas_simd/Makefile fflas-ffpack/ffpack/Makefile fflas-ffpack/field/Makefile fflas-ffpack/utils/Makefile fflas-ffpack/paladin/Makefile fflas-ffpack/interfaces/Makefile fflas-ffpack/interfaces/libs/Makefile fflas-ffpack/checkers/Makefile autotune/Makefile doc/Makefile tests/Makefile tests/data/Makefile benchmarks/Makefile examples/Makefile tutorials/Makefile fflas-ffpack.pc ],[chmod +x fflas-ffpack-config]) AC_OUTPUT echo "" > fflas-ffpack/fflas-ffpack-thresholds.h