1function make
2%MAKE Make PRIMME's Matlab module
3
4   % Get the path of this directory
5   [p,~,~] = fileparts(mfilename('fullpath'));
6
7   % Save the current path and changed the working path to here
8   w = pwd;
9   cd(p);
10
11   flags = {'-O', '-I../include', '-I../src/include'};
12   libs = {};
13
14   % If not is Windows, add underscore for blas/lapack calls
15   if ~ispc
16      flags{end+1} = '-DF77UNDERSCORE';
17   end
18
19   % If using octave, blas/lapack' int is 32bits and they are linked by default
20   if ~exist('OCTAVE_VERSION')
21      flags{end+1} = '-DPRIMME_BLASINT_SIZE=64';
22      % If is Windows, add the paths to blas/lapack libraries
23      if ispc
24         libs{end+1} = ['-L' fullfile(matlabroot,'extern','lib','win64','mingw64')];
25         libs{end+1} = ['-L' fullfile(matlabroot,'extern','lib','win64','microsoft')];
26      end
27      libs{end+1} = '-lmwlapack';
28      libs{end+1} = '-lmwblas';
29   end
30
31   % Sources
32   sources = { '../src/eigs/auxiliary_eigs.c', ...
33               '../src/eigs/auxiliary_eigs_normal.c', ...
34               '../src/eigs/convergence.c', ...
35               '../src/eigs/correction.c', ...
36               '../src/eigs/factorize.c', ...
37               '../src/eigs/init.c', ...
38               '../src/eigs/inner_solve.c', ...
39               '../src/eigs/main_iter.c', ...
40               '../src/eigs/ortho.c', ...
41               '../src/eigs/primme_c.c', ...
42               '../src/eigs/primme_f77.c', ...
43               '../src/eigs/primme_interface.c', ...
44               '../src/eigs/restart.c', ...
45               '../src/eigs/solve_projection.c', ...
46               '../src/eigs/update_projection.c', ...
47               '../src/eigs/update_W.c', ...
48               '../src/linalg/auxiliary.c', ...
49               '../src/linalg/blaslapack.c', ...
50               '../src/linalg/magma_wrapper.c', ...
51               '../src/linalg/memman.c', ...
52               '../src/linalg/wtime.c', ...
53               '../src/svds/primme_svds_c.c', ...
54               '../src/svds/primme_svds_f77.c', ...
55               '../src/svds/primme_svds_interface.c', ...
56               'primme_mex.cpp'};
57
58   % Compile PRIMME
59   try
60      mex(flags{:}, sources{:}, '-largeArrayDims', libs{:}, '-output', 'primme_mex');
61   catch me
62      cd(w);
63      rethrow(me);
64   end
65
66   % Change back the current path
67   cd(w)
68