diff --git a/Makefile.am b/Makefile.am
index 14561aaff..1bb82885a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -27,8 +27,6 @@ EXTRA_DIST = \
COPYING \
CONTRIBUTING.md \
windows/dynare.nsi \
- windows/mexopts-win32.bat \
- windows/mexopts-win64.bat \
windows/README.txt \
osx \
examples \
diff --git a/doc/dynare.texi b/doc/dynare.texi
index 6e1186af0..434fddaaa 100644
--- a/doc/dynare.texi
+++ b/doc/dynare.texi
@@ -593,36 +593,29 @@ Octave comes with built-in functionality for compiling mex-files.
@node Prerequisites on Windows
@subsection Prerequisites on Windows
-If you are using MATLAB under Windows, install a C++ compiler on your machine and configure it with
-MATLAB. There are at least two free compilers you can use. First, there is Microsoft's Visual Studio
-Community (@uref{https://www.visualstudio.com/}), which has the largest history of MATLAB support, but
-requires much space on the hard-disk. Second, since MATLAB R2015b, MATLAB supports the MinGW-w64 C/C++
-Compiler from TDM-GCC. To install this compiler, use the Add-Ons menu of MATLAB. Search for MinGW or
-select it from Features.
-
-For older version of MATLAB, in particular before R2014a, it may sometimes make sense to use the gcc compiler
-provided by Cygwin. However, integrating it in MATLAB can be quite cumbersome and should be considered as a
-legacy option. For details, see
-@uref{http://www.dynare.org/DynareWiki/ConfigureMatlabWindowsForMexCompilation,instructions
-on the Dynare wiki}.
+There is no prerequisite on Windows. Dynare now ships a compilation environment
+that can be used with the @code{use_dll} option.
@node Prerequisites on Debian GNU/Linux and Ubuntu
@subsection Prerequisites on Debian GNU/Linux and Ubuntu
-Users of MATLAB under Linux need to have a working compilation environment installed. If not already present,
-it can be installed via @code{apt-get install build-essential}.
+Users of MATLAB under GNU/Linux need a working compilation environment
+installed. If not already present, it can be installed via @code{apt install
+build-essential}.
-Users of Octave under Linux should install the package for MEX file compilation
+Users of Octave under GNU/Linux should install the package for MEX file compilation
(under Debian or Ubuntu, it is called @file{liboctave-dev}).
@node Prerequisites on macOS
@subsection Prerequisites on macOS
+
+[TO BE UPDATED]
+
If you are using MATLAB under macOS, you should install the latest
version of XCode: see
@uref{http://www.dynare.org/DynareWiki/InstallOnMacOSX,instructions on
the Dynare wiki}.
-
@node Configuration
@section Configuration
@@ -917,23 +910,6 @@ command).
Prevent Dynare from printing the output of the steps leading up to the
preprocessor as well as the preprocessor output itself.
-@item mingw
-Tells Dynare that your MATLAB is configured for compiling MEX files with the
-MinGW-compiler from TDM-GCC (@pxref{Compiler installation}). This option is
-only available under Windows, and is used in conjunction with
-@code{use_dll}.
-
-@item msvc
-Tells Dynare that your MATLAB is configured for compiling MEX files with
-Microsoft Visual C++ (@pxref{Compiler installation}). This option is
-only available under Windows, and is used in conjunction with
-@code{use_dll}.
-
-@item cygwin
-Tells Dynare that your MATLAB is configured for compiling MEX files with
-Cygwin (@pxref{Compiler installation}). This option is only available
-under Windows, and is used in conjunction with @code{use_dll}.
-
@item parallel[=@var{CLUSTER_NAME}]
Tells Dynare to perform computations in parallel. If @var{CLUSTER_NAME}
is passed, Dynare will use the specified cluster to perform parallel
diff --git a/matlab/dynare.m b/matlab/dynare.m
index 369c43b9c..4e347f1a0 100644
--- a/matlab/dynare.m
+++ b/matlab/dynare.m
@@ -226,6 +226,7 @@ if regexp(firstline, '\s*\/\/', 'once') == 1
end
command = ['"' dynareroot 'preprocessor' arch_ext filesep 'dynare_m" ' fname] ;
+command = [ command ' mexext=' mexext ' "matlabroot=' matlabroot '"'];
for i=1:length(varargin)
command = [command ' ' varargin{i}];
end
@@ -240,6 +241,14 @@ if preprocessoroutput
end
end
+% Under Windows, make sure the MEX file is unloaded (in the use_dll case),
+% otherwise the preprocessor can't recompile it
+if isoctave
+ clear([fname(1:end-4) '.static'], [fname(1:end-4) '.dynamic'])
+else
+ clear(['+' fname(1:end-4) '/static'], ['+' fname(1:end-4) '/dynamic'])
+end
+
[status, result] = system(command);
if status ~= 0 || preprocessoroutput
disp(result)
diff --git a/matlab/utilities/general/dyn_mex.m b/matlab/utilities/general/dyn_mex.m
deleted file mode 100644
index 185e061f5..000000000
--- a/matlab/utilities/general/dyn_mex.m
+++ /dev/null
@@ -1,116 +0,0 @@
-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-2017 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 '/mode/src/dynamic.c']);
-Dmex = dir(['+' basename '/model/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 ~isoctave
- % 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++
- % Add /TP flag as fix for #1227
- eval(['mex -O LINKFLAGS="$LINKFLAGS /export:Dynamic" COMPFLAGS="/TP" ' basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
- eval(['mex -O LINKFLAGS="$LINKFLAGS /export:Static" COMPFLAGS="/TP" ' basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
- elseif strcmp(win_compiler,'mingw')
- eval(['mex -O LINKFLAGS="$LINKFLAGS /export:Dynamic" ' basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
- eval(['mex -O LINKFLAGS="$LINKFLAGS /export:Static" ' basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
- elseif strcmp(win_compiler,'cygwin') %legacy support for Cygwin with mexopts.bat
- % MATLAB/Windows + Cygwin g++
- eval(['mex -O PRELINK_CMDS1="echo EXPORTS > mex.def & echo ' ...
- 'mexFunction >> mex.def & echo Dynamic >> mex.def" ' ...
- basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
- eval(['mex -O PRELINK_CMDS1="echo EXPORTS > mex.def & echo ' ...
- 'mexFunction >> mex.def & echo Dynamic >> mex.def" ' ...
- basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
- else
- error(['When using the USE_DLL option, you must give either ' ...
- '''cygwin'', ''mingw'' or ''msvc'' option to the ''dynare'' command'])
- end
- elseif isunix && ~ismac
- % MATLAB/Linux
- if matlab_ver_less_than('8.3')
- eval(['mex -O LDFLAGS=''-pthread -shared -Wl,--no-undefined'' ' ...
- basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
- eval(['mex -O LDFLAGS=''-pthread -shared -Wl,--no-undefined'' ' ...
- basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
- elseif matlab_ver_less_than('9.1')
- eval(['mex -O LINKEXPORT='''' ' basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
- eval(['mex -O LINKEXPORT='''' ' basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
- else
- eval(['mex -O LINKEXPORTVER='''' ' basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
- eval(['mex -O LINKEXPORTVER='''' ' basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
- end
- elseif ismac
- % MATLAB/MacOS
- 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 '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
- eval(['mex -O LDFLAGS=''-Wl,-twolevel_namespace -undefined ' ...
- 'error -arch $ARCHS -Wl,-syslibroot,$SDKROOT ' ...
- '-mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -bundle'' ' ...
- basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
- elseif matlab_ver_less_than('8.3')
- eval(['mex -O LDFLAGS=''-Wl,-twolevel_namespace -undefined ' ...
- 'error -arch $ARCHS -Wl,-syslibroot,$MW_SDKROOT ' ...
- '-mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -bundle'' ' ...
- basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
- eval(['mex -O LDFLAGS=''-Wl,-twolevel_namespace -undefined ' ...
- 'error -arch $ARCHS -Wl,-syslibroot,$MW_SDKROOT ' ...
- '-mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -bundle'' ' ...
- basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
- elseif matlab_ver_less_than('9.1')
- eval(['mex -O LINKEXPORT='''' ' basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
- eval(['mex -O LINKEXPORT='''' ' basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
- else
- eval(['mex -O LINKEXPORT='''' LINKEXPORTVER='''' ' basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
- eval(['mex -O LINKEXPORT='''' LINKEXPORTVER='''' ' basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
- end
- end
-else
- % Octave
- eval(['mex ' basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -o +' basename '/dynamic'])
- eval(['mex ' basename '/model/src/static.c ' basename '/model/src/static_mex.c -o +' basename '/static'])
-end
diff --git a/preprocessor b/preprocessor
index 1c33af484..4a974bb42 160000
--- a/preprocessor
+++ b/preprocessor
@@ -1 +1 @@
-Subproject commit 1c33af4844557f9a5ce95a1ab6f3e293006c0811
+Subproject commit 4a974bb428d3960aface3e1760b33e169c7c733a
diff --git a/windows/dynare.nsi b/windows/dynare.nsi
index 1a77815d5..1ccf77929 100644
--- a/windows/dynare.nsi
+++ b/windows/dynare.nsi
@@ -54,7 +54,7 @@ Section "Dynare core (preprocessor and M-files)"
SectionIn RO
!insertmacro DETERMINE_CONTEXT
SetOutPath $INSTDIR
- File README.txt ..\NEWS mexopts-win32.bat mexopts-win64.bat ..\license.txt ..\VERSION
+ File README.txt ..\NEWS ..\license.txt ..\VERSION
SetOutPath $INSTDIR\matlab
File /r ..\matlab\*.m
@@ -124,6 +124,20 @@ SectionEnd
SectionGroupEnd
+SectionGroup "MinGW compiler (needed for use_dll option under MATLAB)"
+
+Section "MinGW for 32-bit MATLAB"
+ SetOutPath $INSTDIR\mingw32
+ File /r mingw32\*
+SectionEnd
+
+Section "MinGW for 64-bit MATLAB"
+ SetOutPath $INSTDIR\mingw64
+ File /r mingw64\*
+SectionEnd
+
+SectionGroupEnd
+
Section "Dynare++ (standalone executable)"
SetOutPath $INSTDIR\dynare++
File ..\dynare++\src\dynare++.exe ..\dynare++\extern\matlab\dynare_simul.m ..\dynare++\*.dll
@@ -159,8 +173,6 @@ Section "Uninstall"
Delete $INSTDIR\README.txt
Delete $INSTDIR\NEWS
Delete $INSTDIR\license.txt
- Delete $INSTDIR\mexopts-win32.bat
- Delete $INSTDIR\mexopts-win64.bat
Delete $INSTDIR\VERSION
Rmdir /r $INSTDIR\matlab
Rmdir /r $INSTDIR\contrib
@@ -169,6 +181,8 @@ Section "Uninstall"
Rmdir /r $INSTDIR\doc
Rmdir /r $INSTDIR\examples
Rmdir /r $INSTDIR\scripts
+ Rmdir /r $INSTDIR\mingw32
+ Rmdir /r $INSTDIR\mingw64
# We don't force deletion of installation directory (with /r), to avoid deleting important files
Rmdir $INSTDIR
diff --git a/windows/mexopts-win32.bat b/windows/mexopts-win32.bat
deleted file mode 100644
index bb154ecf8..000000000
--- a/windows/mexopts-win32.bat
+++ /dev/null
@@ -1,67 +0,0 @@
-@echo off
-
-rem Compile and link options used for building MEX-files using Cygwin,
-rem for the 32-bit version of MATLAB.
-rem
-rem It makes the assumption that you installed Cygwin in C:\CYGWIN,
-rem and that you installed either the "mingw64-i686-gcc" package.
-rem
-rem This file should be renamed to "mexopts.bat" and copied to:
-rem C:\Documents and Settings\\Application Data\MathWorks\MATLAB\\
-rem
-rem This file only supports C code. It can easily be changed to compile C++
-rem code by replacing "gcc" by "g++" in COMPILER and LINKER, and by adding
-rem "-static-libstdc++" to LINKFLAGS.
-rem You will also need the "mingw64-i686-gcc-g++" package.
-rem
-rem Initial version by Michel Juillard, revised by Sebastien Villemot.
-
-rem Copyright (C) 2009-2013 Dynare Team
-rem
-rem This file is part of Dynare.
-rem
-rem Dynare is free software: you can redistribute it and/or modify
-rem it under the terms of the GNU General Public License as published by
-rem the Free Software Foundation, either version 3 of the License, or
-rem (at your option) any later version.
-rem
-rem Dynare is distributed in the hope that it will be useful,
-rem but WITHOUT ANY WARRANTY; without even the implied warranty of
-rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-rem GNU General Public License for more details.
-rem
-rem You should have received a copy of the GNU General Public License
-rem along with Dynare. If not, see .
-
-rem ********************************************************************
-rem General parameters
-rem ********************************************************************
-
-set MATLAB=%MATLAB%
-set PATH=%PATH%;c:\cygwin\bin
-set MW_TARGET_ARCH=win32
-
-rem ********************************************************************
-rem Compiler parameters
-rem ********************************************************************
-set COMPILER=i686-w64-mingw32-gcc
-set COMPFLAGS=-c -fexceptions
-set OPTIMFLAGS=-O3
-set DEBUGFLAGS=-g -Wall
-set NAME_OBJECT=-o
-
-rem ********************************************************************
-rem Linker parameters
-rem ********************************************************************
-set PRELINK_CMDS1=echo EXPORTS > mex.def & echo mexFunction >> mex.def
-set LIBLOC=%MATLAB%\bin\win32\
-set LINKER=i686-w64-mingw32-gcc
-set LINKFLAGS= -static-libgcc -shared mex.def "-L%LIBLOC%"
-set LINKFLAGSPOST= -lmex -lmx -lmwlapack -lmwblas
-set LINKOPTIMFLAGS=-O3
-set LINKDEBUGFLAGS= -g -Wall
-set LINK_FILE=
-set LINK_LIB=
-set NAME_OUTPUT=-o "%OUTDIR%%MEX_NAME%%MEX_EXT%"
-set RSP_FILE_INDICATOR=@
-set POSTLINK_CMDS1=del mex.def
diff --git a/windows/mexopts-win64.bat b/windows/mexopts-win64.bat
deleted file mode 100644
index 806bbd839..000000000
--- a/windows/mexopts-win64.bat
+++ /dev/null
@@ -1,67 +0,0 @@
-@echo off
-
-rem Compile and link options used for building MEX-files using Cygwin,
-rem for the 64-bit version of MATLAB.
-rem
-rem It makes the assumption that you installed Cygwin in C:\CYGWIN,
-rem and that you installed either the "mingw64-x86_64-gcc" package.
-rem
-rem This file should be renamed to "mexopts.bat" and copied to:
-rem C:\Documents and Settings\\Application Data\MathWorks\MATLAB\\
-rem
-rem This file only supports C code. It can easily be changed to compile C++
-rem code by replacing "gcc" by "g++" in COMPILER and LINKER, and by adding
-rem "-static-libstdc++" to LINKFLAGS.
-rem You will also need the "mingw64-x86_64-gcc-g++" package.
-rem
-rem Initial version by Michel Juillard, revised by Sebastien Villemot.
-
-rem Copyright (C) 2009-2013 Dynare Team
-rem
-rem This file is part of Dynare.
-rem
-rem Dynare is free software: you can redistribute it and/or modify
-rem it under the terms of the GNU General Public License as published by
-rem the Free Software Foundation, either version 3 of the License, or
-rem (at your option) any later version.
-rem
-rem Dynare is distributed in the hope that it will be useful,
-rem but WITHOUT ANY WARRANTY; without even the implied warranty of
-rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-rem GNU General Public License for more details.
-rem
-rem You should have received a copy of the GNU General Public License
-rem along with Dynare. If not, see .
-
-rem ********************************************************************
-rem General parameters
-rem ********************************************************************
-
-set MATLAB=%MATLAB%
-set PATH=%PATH%;c:\cygwin\bin
-set MW_TARGET_ARCH=win64
-
-rem ********************************************************************
-rem Compiler parameters
-rem ********************************************************************
-set COMPILER=x86_64-w64-mingw32-gcc
-set COMPFLAGS=-c -fexceptions
-set OPTIMFLAGS=-O3
-set DEBUGFLAGS=-g -Wall
-set NAME_OBJECT=-o
-
-rem ********************************************************************
-rem Linker parameters
-rem ********************************************************************
-set PRELINK_CMDS1=echo EXPORTS > mex.def & echo mexFunction >> mex.def
-set LIBLOC=%MATLAB%\bin\win64\
-set LINKER=x86_64-w64-mingw32-gcc
-set LINKFLAGS= -static-libgcc -shared mex.def "-L%LIBLOC%"
-set LINKFLAGSPOST= -lmex -lmx -lmwlapack -lmwblas
-set LINKOPTIMFLAGS=-O3
-set LINKDEBUGFLAGS= -g -Wall
-set LINK_FILE=
-set LINK_LIB=
-set NAME_OUTPUT=-o "%OUTDIR%%MEX_NAME%%MEX_EXT%"
-set RSP_FILE_INDICATOR=@
-set POSTLINK_CMDS1=del mex.def