dynare/m4/ax_mexopts.m4

102 lines
3.5 KiB
Plaintext
Raw Normal View History

dnl Copyright (C) 2009 Dynare Team
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])
AC_REQUIRE([AC_CANONICAL_HOST])
AC_MSG_CHECKING([for options to compile MEX for MATLAB])
MATLAB_CPPFLAGS="-I$MATLAB/extern/include"
MATLAB_CC="$CC"
MATLAB_CXX="$CXX"
case ${MATLAB_ARCH} in
glnx86 | glnxa64)
MATLAB_DEFS="$MATLAB_DEFS -D_GNU_SOURCE -DNDEBUG"
MATLAB_CFLAGS="-ansi -fexceptions -fPIC -pthread -g -O2"
MATLAB_CXXFLAGS="-ansi -fPIC -pthread -g -O2"
MATLAB_LDFLAGS="-shared -Wl,--version-script,$MATLAB/extern/lib/${MATLAB_ARCH}/mexFunction.map -Wl,--no-undefined -Wl,-rpath-link,$MATLAB/bin/${MATLAB_ARCH} -L$MATLAB/bin/${MATLAB_ARCH}"
MATLAB_LIBS="-lmx -lmex -lmat -lm -lstdc++ -lmwlapack"
# Starting from MATLAB 7.5, BLAS and LAPACK are in distinct libraries
AX_COMPARE_VERSION([$MATLAB_VERSION], [ge], [7.5], [MATLAB_LIBS="${MATLAB_LIBS} -lmwblas"])
ax_mexopts_ok="yes"
;;
win32 | win64)
MATLAB_CFLAGS="-fexceptions -g -O2"
MATLAB_CXXFLAGS="-g -O2"
LIBLOC="$MATLAB/extern/lib/${MATLAB_ARCH}/microsoft"
MATLAB_LDFLAGS="-shared \$(top_srcdir)/mex/build/mex.def"
MATLAB_LIBS="$LIBLOC/libmex.lib $LIBLOC/libmx.lib $LIBLOC/libmwlapack.lib -lstdc++"
# Starting from MATLAB 7.5, BLAS and LAPACK are in distinct libraries
AX_COMPARE_VERSION([$MATLAB_VERSION], [ge], [7.5], [MATLAB_LIBS="${MATLAB_LIBS} $LIBLOC/libmwblas.lib"])
case ${host_os} in
*cygwin*)
# MATLAB can't use native Cygwin DLLs
MATLAB_CFLAGS="$MATLAB_CFLAGS -mno-cygwin"
MATLAB_CXXFLAGS="$MATLAB_CXXFLAGS -mno-cygwin"
;;
esac
ax_mexopts_ok="yes"
;;
*)
ax_mexopts_ok="no"
;;
esac
case ${MATLAB_ARCH} in
glnx86)
MATLAB_DEFS="$MATLAB_DEFS -D_FILE_OFFSET_BITS=64"
MATLAB_CFLAGS="$MATLAB_CFLAGS -m32"
MATLAB_CXXFLAGS="$MATLAB_CXXFLAGS -m32"
;;
glnxa64)
MATLAB_CFLAGS="$MATLAB_CFLAGS -fno-omit-frame-pointer"
MATLAB_CXXFLAGS="$MATLAB_CXXFLAGS -fno-omit-frame-pointer"
;;
*)
;;
esac
# mwSize, mwIndex and mwSignedIndex appeared in MATLAB 7.3
AX_COMPARE_VERSION([$MATLAB_VERSION], [lt], [7.3], [MATLAB_DEFS="$MATLAB_DEFS -DMWTYPES_NOT_DEFINED"])
# MATLAB Lapack expects mwSignedIndex arguments only starting with MATLAB 7.8
AX_COMPARE_VERSION([$MATLAB_VERSION], [ge], [7.8], [MATLAB_DEFS="$MATLAB_DEFS -DLAPACK_USE_MWSIGNEDINDEX"])
# blas.h and lapack.h appeared in MATLAB 7.5
AX_COMPARE_VERSION([$MATLAB_VERSION], [lt], [7.5], [MATLAB_DEFS="$MATLAB_DEFS -DNO_BLAS_H -DNO_LAPACK_H"])
if test "$ax_mexopts_ok" = "yes"; then
AC_MSG_RESULT([ok])
else
AC_MSG_RESULT([unknown])
fi
AC_SUBST([MATLAB_CPPFLAGS])
AC_SUBST([MATLAB_DEFS])
AC_SUBST([MATLAB_CC])
AC_SUBST([MATLAB_CFLAGS])
AC_SUBST([MATLAB_CXX])
AC_SUBST([MATLAB_CXXFLAGS])
AC_SUBST([MATLAB_LDFLAGS])
AC_SUBST([MATLAB_LIBS])
])