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 . 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"]) 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 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" ;; maci | maci64) MATLAB_CC="gcc-4.0" SDKROOT='/Developer/SDKs/MacOSX10.5.sdk' MACOSX_DEPLOYMENT_TARGET='10.5' if test "${MATLAB_ARCH}" = "maci"; then ARCHS='i386' else ARCHS='x86_64' fi MATLAB_DEFS="$MATLAB_DEFS -DNDEBUG" MATLAB_CFLAGS="-fno-common -no-cpp-precomp -arch $ARCHS -isysroot $SDKROOT -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -fexceptions -O2" MATLAB_LDFLAGS="-L$MATLAB/bin/${MATLAB_ARCH} -Wl,-twolevel_namespace -undefined error -arch $ARCHS -Wl,-syslibroot,$SDKROOT -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -bundle -Wl,-exported_symbols_list,$MATLAB/extern/lib/${MATLAB_ARCH}/mexFunction.map" MATLAB_LIBS="-lmx -lmex -lmat -lsdtc++ -lmwlapack" MATLAB_CXX="g++-4.0" MATLAB_CXXFLAGS="-fno-common -no-cpp-precomp -fexceptions -arch $ARCHS -isysroot $SDKROOT -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -O2" # 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" ;; *) ax_mexopts_ok="no" ;; 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]) ])