2019-04-16 14:30:37 +02:00
|
|
|
dnl Copyright © 2009-2019 Dynare Team
|
2009-09-16 18:52:22 +02:00
|
|
|
dnl
|
|
|
|
dnl This file is part of Dynare.
|
|
|
|
dnl
|
|
|
|
dnl Dynare is free software: you can redistribute it and/or modify
|
|
|
|
dnl it under the terms of the GNU General Public License as published by
|
|
|
|
dnl the Free Software Foundation, either version 3 of the License, or
|
|
|
|
dnl (at your option) any later version.
|
|
|
|
dnl
|
|
|
|
dnl Dynare is distributed in the hope that it will be useful,
|
|
|
|
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
dnl GNU General Public License for more details.
|
|
|
|
dnl
|
|
|
|
dnl You should have received a copy of the GNU General Public License
|
|
|
|
dnl along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
AC_DEFUN([AX_MEXOPTS],
|
|
|
|
[dnl
|
|
|
|
AC_REQUIRE([AX_MEXEXT])
|
|
|
|
AC_REQUIRE([AX_MATLAB_ARCH])
|
|
|
|
AC_REQUIRE([AX_MATLAB_VERSION])
|
2009-10-01 16:17:02 +02:00
|
|
|
AC_REQUIRE([AC_PROG_SED])
|
2009-09-16 18:52:22 +02:00
|
|
|
|
2018-11-13 18:29:20 +01:00
|
|
|
AX_COMPARE_VERSION([$MATLAB_VERSION], [lt], [7.9], [AC_MSG_ERROR([Your MATLAB is too old, please upgrade to 7.9 (R2009b) at least.])])
|
2009-11-17 19:55:29 +01:00
|
|
|
|
2009-09-17 10:14:44 +02:00
|
|
|
AC_MSG_CHECKING([for options to compile MEX for MATLAB])
|
|
|
|
|
2018-10-31 18:00:31 +01:00
|
|
|
MATLAB_CPPFLAGS="-I$MATLAB/extern/include"
|
2009-09-16 18:52:22 +02:00
|
|
|
|
|
|
|
case ${MATLAB_ARCH} in
|
|
|
|
glnx86 | glnxa64)
|
2009-09-17 18:35:33 +02:00
|
|
|
MATLAB_DEFS="$MATLAB_DEFS -D_GNU_SOURCE -DNDEBUG"
|
2011-02-17 12:37:31 +01:00
|
|
|
MATLAB_CFLAGS="-fexceptions -fPIC -pthread -g -O2"
|
|
|
|
MATLAB_CXXFLAGS="-fPIC -pthread -g -O2"
|
2010-11-18 10:11:27 +01:00
|
|
|
MATLAB_FFLAGS="-fPIC -g -O2 -fexceptions"
|
2018-10-31 18:00:31 +01:00
|
|
|
MATLAB_LDFLAGS_NOMAP="-shared -Wl,--no-undefined -Wl,-rpath-link,$MATLAB/bin/${MATLAB_ARCH} -L$MATLAB/bin/${MATLAB_ARCH}"
|
|
|
|
MATLAB_LDFLAGS="$MATLAB_LDFLAGS_NOMAP -Wl,--version-script,$MATLAB/extern/lib/${MATLAB_ARCH}/mexFunction.map"
|
2014-02-03 15:51:41 +01:00
|
|
|
MATLAB_LIBS="-lmx -lmex -lmat -lm -lstdc++ -lmwlapack -lmwblas"
|
2009-09-22 10:11:46 +02:00
|
|
|
if test "${MATLAB_ARCH}" = "glnx86"; then
|
|
|
|
MATLAB_DEFS="$MATLAB_DEFS -D_FILE_OFFSET_BITS=64"
|
|
|
|
MATLAB_CFLAGS="$MATLAB_CFLAGS -m32"
|
|
|
|
MATLAB_CXXFLAGS="$MATLAB_CXXFLAGS -m32"
|
|
|
|
else # glnxa64
|
|
|
|
MATLAB_CFLAGS="$MATLAB_CFLAGS -fno-omit-frame-pointer"
|
|
|
|
MATLAB_CXXFLAGS="$MATLAB_CXXFLAGS -fno-omit-frame-pointer"
|
|
|
|
fi
|
2009-09-16 18:52:22 +02:00
|
|
|
ax_mexopts_ok="yes"
|
|
|
|
;;
|
2009-09-17 14:05:01 +02:00
|
|
|
win32 | win64)
|
|
|
|
MATLAB_CFLAGS="-fexceptions -g -O2"
|
|
|
|
MATLAB_CXXFLAGS="-g -O2"
|
2010-11-22 12:22:22 +01:00
|
|
|
MATLAB_FFLAGS="-fexceptions -g -O2 -fno-underscoring"
|
2010-08-18 16:01:16 +02:00
|
|
|
MATLAB_DEFS="$MATLAB_DEFS -DNDEBUG"
|
2010-08-18 18:55:45 +02:00
|
|
|
# Note that static-libstdc++ is only supported since GCC 4.5 (but generates no error on older versions)
|
2018-10-31 18:00:31 +01:00
|
|
|
MATLAB_LDFLAGS_NOMAP="-static-libgcc -static-libstdc++ -shared -L$MATLAB/bin/${MATLAB_ARCH}"
|
|
|
|
MATLAB_LDFLAGS="$MATLAB_LDFLAGS_NOMAP $(pwd)/$srcdir/mex.def"
|
2014-02-03 15:51:41 +01:00
|
|
|
MATLAB_LIBS="-lmex -lmx -lmat -lmwlapack -lmwblas"
|
2009-09-17 14:05:01 +02:00
|
|
|
ax_mexopts_ok="yes"
|
|
|
|
;;
|
2009-09-22 10:11:46 +02:00
|
|
|
maci | maci64)
|
2019-04-01 16:49:21 +02:00
|
|
|
MACOSX_DEPLOYMENT_TARGET='10.9'
|
2009-09-22 10:11:46 +02:00
|
|
|
MATLAB_DEFS="$MATLAB_DEFS -DNDEBUG"
|
2019-04-01 16:49:21 +02:00
|
|
|
MATLAB_CFLAGS="-fno-common -arch x86_64 -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -fexceptions"
|
|
|
|
MATLAB_CXXFLAGS="$MATLAB_CFLAGS"
|
|
|
|
MATLAB_FFLAGS="-fexceptions -fbackslash -arch x86_64"
|
|
|
|
MATLAB_LDFLAGS_NOMAP="-Wl,-twolevel_namespace -undefined error -arch x86_64 -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -bundle"
|
2018-10-31 18:00:31 +01:00
|
|
|
MATLAB_LDFLAGS="$MATLAB_LDFLAGS_NOMAP -Wl,-exported_symbols_list,$(pwd)/$srcdir/mexFunction-MacOSX.map"
|
2019-04-01 16:49:21 +02:00
|
|
|
MATLAB_LIBS="-L$MATLAB/bin/maci64 -lmx -lmex -lmat -lmwlapack -lmwblas"
|
2009-09-22 10:11:46 +02:00
|
|
|
ax_mexopts_ok="yes"
|
2009-09-16 18:52:22 +02:00
|
|
|
;;
|
|
|
|
*)
|
2009-09-22 10:11:46 +02:00
|
|
|
ax_mexopts_ok="no"
|
2009-09-16 18:52:22 +02:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2010-11-25 15:09:59 +01:00
|
|
|
# Starting from MATLAB 7.8, on 64-bit platforms, BLAS and LAPACK expect 64-bit integers, so make it the default for integers in Fortran code
|
|
|
|
if test "${MATLAB_ARCH}" = "glnxa64" -o "${MATLAB_ARCH}" = "win64" -o "${MATLAB_ARCH}" = "maci64"; then
|
|
|
|
AX_COMPARE_VERSION([$MATLAB_VERSION], [ge], [7.8], [MATLAB_FFLAGS="$MATLAB_FFLAGS -fdefault-integer-8"])
|
|
|
|
fi
|
|
|
|
|
2019-03-25 18:18:57 +01:00
|
|
|
# Kludge for incompatibility of older MATLABs (≤ R2011a) with recent gcc
|
2019-03-26 15:42:18 +01:00
|
|
|
# Include <uchar.h>, because matrix.h needs char16_t
|
|
|
|
AX_COMPARE_VERSION([$MATLAB_VERSION], [le], [7.12], [MATLAB_CFLAGS="$MATLAB_CFLAGS -include uchar.h"])
|
2019-03-25 18:18:57 +01:00
|
|
|
|
2009-10-01 16:17:02 +02:00
|
|
|
# Converts the MATLAB version number into comparable integers with only major and minor version numbers
|
|
|
|
# For example, 7.4.2 will become 0704
|
2019-03-25 16:14:36 +01:00
|
|
|
ax_matlab_ver=$(echo "$MATLAB_VERSION" | $SED -e 's/\([[0-9]]*\)\.\([[0-9]]*\).*/Z\1ZZ\2Z/' \
|
|
|
|
-e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
|
|
|
|
-e 's/[[^0-9]]//g')
|
2009-09-16 18:52:22 +02:00
|
|
|
|
2009-10-01 16:17:02 +02:00
|
|
|
MATLAB_DEFS="$MATLAB_DEFS -DMATLAB_VERSION=0x${ax_matlab_ver}"
|
2009-09-16 18:52:22 +02:00
|
|
|
|
2009-09-17 10:14:44 +02:00
|
|
|
if test "$ax_mexopts_ok" = "yes"; then
|
|
|
|
AC_MSG_RESULT([ok])
|
|
|
|
else
|
|
|
|
AC_MSG_RESULT([unknown])
|
|
|
|
fi
|
|
|
|
|
2016-01-25 08:25:10 +01:00
|
|
|
# Allow user to override default Matlab compilation flags
|
|
|
|
# Github ticket #1121
|
2019-03-25 16:14:36 +01:00
|
|
|
if test -n "$MATLAB_MEX_CPPFLAGS"; then
|
2016-01-25 08:25:10 +01:00
|
|
|
MATLAB_CPPFLAGS="$MATLAB_CPPFLAGS $MATLAB_MEX_CPPFLAGS"
|
|
|
|
fi
|
|
|
|
|
2019-03-25 16:14:36 +01:00
|
|
|
if test -n "$MATLAB_MEX_DEFS"; then
|
2016-01-25 08:25:10 +01:00
|
|
|
MATLAB_DEFS="$MATLAB_DEFS $MATLAB_MEX_DEFS"
|
|
|
|
fi
|
|
|
|
|
2019-03-25 16:14:36 +01:00
|
|
|
if test -n "$MATLAB_MEX_CFLAGS"; then
|
2016-01-25 08:25:10 +01:00
|
|
|
MATLAB_CFLAGS="$MATLAB_CFLAGS $MATLAB_MEX_CFLAGS"
|
|
|
|
fi
|
|
|
|
|
2019-03-25 16:14:36 +01:00
|
|
|
if test -n "$MATLAB_MEX_CXXFLAGS"; then
|
2016-01-25 08:25:10 +01:00
|
|
|
MATLAB_CXXFLAGS="$MATLAB_CXXFLAGS $MATLAB_MEX_CXXFLAGS"
|
|
|
|
fi
|
|
|
|
|
2019-03-25 16:14:36 +01:00
|
|
|
if test -n "$MATLAB_MEX_LDFLAGS"; then
|
2016-01-25 08:25:10 +01:00
|
|
|
MATLAB_LDFLAGS="$MATLAB_LDFLAGS $MATLAB_MEX_LDFLAGS"
|
|
|
|
fi
|
|
|
|
|
2019-03-25 16:14:36 +01:00
|
|
|
if test -n "$MATLAB_MEX_LIBS"; then
|
2016-01-25 08:25:10 +01:00
|
|
|
MATLAB_LIBS="$MATLAB_LIBS $MATLAB_MEX_LIBS"
|
|
|
|
fi
|
|
|
|
|
2009-09-16 18:52:22 +02:00
|
|
|
AC_SUBST([MATLAB_CPPFLAGS])
|
|
|
|
AC_SUBST([MATLAB_DEFS])
|
|
|
|
AC_SUBST([MATLAB_CFLAGS])
|
|
|
|
AC_SUBST([MATLAB_CXXFLAGS])
|
|
|
|
AC_SUBST([MATLAB_LDFLAGS])
|
|
|
|
AC_SUBST([MATLAB_LIBS])
|
|
|
|
])
|