function dyn_mex(win_compiler,basename,force) % Compile Dynare model dlls when model option use_dll is used % if C file is fresher than mex file % % INPUTS % o win_compiler str compiler used under Windows (unused under Linux or OSX): % 'msvc' (MS Visual C) % 'cygwin' % o basename str filenames base % o force bool recompile if 1 % % OUTPUTS % none % % Copyright (C) 2015 Dynare Team % % This file is part of Dynare. % % Dynare is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % Dynare 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 General Public License for more details. % % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . Dc = dir([basename '_dynamic.c']); Dmex = dir([basename '_dynamic.' mexext]); % compile only if date of C file is greater than date of mex file % and force is not True if ~isempty(Dmex) if (Dmex.datenum > Dc.datenum) && ~force disp('Mex files are newer than the source: not recompiled') return end end if ~exist('OCTAVE_VERSION') % Some mex commands are enclosed in an eval(), because otherwise it will make Octave fail if ispc if strcmp(win_compiler,'msvc') % MATLAB/Windows + Microsoft Visual C++ eval(['mex -O LINKFLAGS="$LINKFLAGS /export:Dynamic" ' basename '_dynamic.c ' basename '_dynamic_mex.c']) eval(['mex -O LINKFLAGS="$LINKFLAGS /export:Static" ' basename '_static.c ' basename '_static_mex.c']) elseif strcmp(win_compiler,'cygwin') % MATLAB/Windows + Cygwin g++ eval(['mex -O PRELINK_CMDS1="echo EXPORTS > mex.def & echo ' ... 'mexFunction >> mex.def & echo Dynamic >> mex.def" ' ... basename '_dynamic.c ' basename '_dynamic_mex.c']) eval(['mex -O PRELINK_CMDS1="echo EXPORTS > mex.def & echo ' ... 'mexFunction >> mex.def & echo Dynamic >> mex.def" ' ... basename '_static.c ' basename '_static_mex.c']) else error(['When using the USE_DLL option, you must give either ' ... '''cygwin'' or ''msvc'' option to the ''dynare'' command']) end elseif isunix % MATLAB/Linux if matlab_ver_less_than('8.3') eval(['mex -O LDFLAGS=''-pthread -shared -Wl,--no-undefined'' ' ... basename '_dynamic.c ' basename '_dynamic_mex.c']) eval(['mex -O LDFLAGS=''-pthread -shared -Wl,--no-undefined'' ' ... basename '_static.c ' basename '_static_mex.c']) else eval(['mex -O LINKEXPORT='''' ' basename '_dynamic.c ' basename '_dynamic_mex.c']) eval(['mex -O LINKEXPORT='''' ' basename '_static.c ' basename '_static_mex.c']) end elseif ismac % MATLAB/MacOS if matlab_ver_less_than('8.3') if matlab_ver_less_than('8.1') eval(['mex -O LDFLAGS=''-Wl,-twolevel_namespace -undefined ' ... 'error -arch $ARCHS -Wl,-syslibroot,$SDKROOT ' ... '-mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -bundle'' ' ... basename '_dynamic.c ' basename '_dynamic_mex.c']) eval(['mex -O LDFLAGS=''-Wl,-twolevel_namespace -undefined ' ... 'error -arch $ARCHS -Wl,-syslibroot,$SDKROOT ' ... '-mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -bundle'' ' ... basename '_static.c ' basename '_static_mex.c']) else eval(['mex -O LDFLAGS=''-Wl,-twolevel_namespace -undefined ' ... 'error -arch $ARCHS -Wl,-syslibroot,$MW_SDKROOT ' ... '-mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -bundle'' ' ... basename '_dynamic.c ' basename '_dynamic_mex.c']) eval(['mex -O LDFLAGS=''-Wl,-twolevel_namespace -undefined ' ... 'error -arch $ARCHS -Wl,-syslibroot,$MW_SDKROOT ' ... '-mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -bundle'' ' ... basename '_static.c ' basename '_static_mex.c']) end else eval(['mex -O LINKEXPORT='''' ' basename '_dynamic.c ' ... basename '_dynamic_mex.c']) eval(['mex -O LINKEXPORT='''' ' basename '_static.c ' basename ... '_static_mex.c']) end end else % Octave eval(['mex ' basename '_dynamic.c ' basename '_dynamic_mex.c']) eval(['mex ' basename '_static.c ' basename '_static_mex.c']) end