0001 function matRad_compileOmpMCInterface(dest,omcFolder)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032 matRad_cfg = MatRad_Config.instance();
0033
0034 env = matRad_getEnvironment();
0035
0036 if nargin < 1
0037 dest = fileparts(mfilename('fullpath'));
0038 end
0039
0040 if nargin < 2
0041 omcFolder = [matRad_cfg.matRadRoot filesep 'submodules' filesep 'ompMC'];
0042 end
0043
0044 sourceFolder = [omcFolder filesep 'src'];
0045 interfaceFolder = [omcFolder filesep 'ucodes' filesep 'omc_matrad'];
0046
0047 mainFile = [interfaceFolder filesep 'omc_matrad.c'];
0048
0049 addFiles = {'ompmc.c','omc_utilities.c','omc_random.c'};
0050 addFiles = cellfun(@(f) fullfile(sourceFolder,f),addFiles,'UniformOutput',false);
0051
0052 addFiles = strjoin(addFiles,' ');
0053
0054 if exist ('OCTAVE_VERSION','builtin')
0055 ccName = eval('mkoctfile -p CC');
0056 else
0057 myCCompiler = mex.getCompilerConfigurations('C','Selected');
0058 ccName = myCCompiler.ShortName;
0059 end
0060
0061
0062 if ~isempty(strfind(ccName,'MSVC'))
0063 flags{1,1} = 'COMPFLAGS';
0064 flags{1,2} = '/openmp';
0065 flags{2,1} = 'OPTIMFLAGS';
0066 flags{2,2} = '/O2';
0067 else
0068 flags{1,1} = 'CFLAGS';
0069 flags{1,2} = '-std=gnu99 -fopenmp -O3';
0070 flags{2,1} = 'LDFLAGS';
0071 flags{2,2} = '-fopenmp';
0072
0073 end
0074
0075 includestring = ['-I' sourceFolder];
0076
0077 flagstring = '';
0078
0079
0080
0081 for flag = 1:size(flags,1)
0082 if strcmp(env,'OCTAVE')
0083 preFlagContent = eval(['mkoctfile -p ' flags{flag,1}]);
0084 if ~isempty(preFlagContent)
0085 preFlagContent = preFlagContent(1:end-1);
0086 end
0087 newContent = [preFlagContent ' ' flags{flag,2}];
0088 setenv(flags{flag,1},newContent);
0089 matRad_cfg.dispDebug('Set compiler flag %s to %s\n',flags{flag,1},newContent);
0090 else
0091 flagstring = [flagstring flags{flag,1} '="$' flags{flag,1} ' ' flags{flag,2} '" '];
0092 end
0093 end
0094
0095 mexCall = ['mex -largeArrayDims ' flagstring ' ' includestring ' ' mainFile ' ' addFiles];
0096 matRad_cfg.dispDebug('Compiler call: %s\n',mexCall);
0097
0098 currDir = pwd;
0099 cd(dest);
0100 eval(mexCall);
0101 cd(currDir);
0102 end