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