function runsci2c(UserScilabMainFile, UserSciFilesPaths, SCI2COutputPath, Runmode, BuildTool,Target) // function runsci2c(SCI2CInputPrmFile) // ----------------------------------------------------------------- // === hArtes/PoliBa/GAP SCI2C tool === // === Authors: === // === Raffaele Nutricato === // === raffaele.nutricato@tiscali.it === // === Alberto Morea === // // This is the main function of SCI2C. // // Input data: // SCI2CInputPrmFile: path+filename of the input parameters file. // // Output data: // --- // // Status: // 11-Apr-2007 -- Raffaele Nutricato: Author. // 11-Apr-2007 -- Alberto Morea: Tests. // // Copyright 2007 Raffaele Nutricato & Alberto Morea. // Contact: raffaele.nutricato@tiscali.it // ----------------------------------------------------------------- // ------------------- // --- Soft reset. --- // ------------------- //mode(-1); //clc; // ----------------------- // --- End Soft reset. --- // ----------------------- // ------------------------- // --- Input Parameters. --- // ------------------------- RunSci2CMainDir = pwd(); disp(RunSci2CMainDir); // ----------------------------- // --- End input Parameters. --- // ----------------------------- // ------------------------------- // --- Perform Intializations. --- // ------------------------------- // --- Load SCI2C directories and files. --- //cd(fullfile(RunSci2CMainDir,'ToolInitialization')); //exec('INIT_SCI2CLoader.sce'); //cd(RunSci2CMainDir); // --- Initialize the SCI2C tool directories and files. --- [FileInfoDatFile,SharedInfoDatFile] = INIT_SCI2C(UserScilabMainFile, ... UserSciFilesPaths, SCI2COutputPath, RunMode, Target); // -- Load FileInfo and SharedInfo load(SharedInfoDatFile,'SharedInfo'); load(FileInfoDatFile,'FileInfo'); RunMode = SharedInfo.RunMode; // --- Generation of the library structure. --- if (RunMode == 'GenLibraryStructure' | RunMode == 'All') INIT_GenLibraries(FileInfoDatFile); end // --- Load Library Info. --- INIT_LoadLibraries(FileInfoDatFile); // ----------------------------------- // --- End Perform Intializations. --- // ----------------------------------- // ---------------------------------- // --- Perform SCI2C Translation. --- // ---------------------------------- if (RunMode == 'All' | RunMode == 'Translate') FlagContinueTranslation = 1; while(FlagContinueTranslation == 1) UpdateSCI2CInfo(FileInfoDatFile); AST_GetASTFile(FileInfoDatFile); AST2Ccode(FileInfoDatFile); JoinDeclarAndCcode(FileInfoDatFile); FlagContinueTranslation = ManageNextConversion(FileInfoDatFile); end end load(SharedInfoDatFile,'SharedInfo'); // --------------------------- // --- Copy library files. --- // --------------------------- global SCI2CHOME allSources = SCI2CHOME + "/" + getAllSources(SharedInfo); allHeaders = SCI2CHOME + "/" +getAllHeaders(SharedInfo); allInterfaces = SCI2CHOME + "/" + getAllInterfaces(SharedInfo); if(~isempty(getAllLibraries(SharedInfo))) allLibraries = SCI2CHOME + "/" + getAllLibraries(SharedInfo); else allLibraries = '' end //allLibraries = SCI2CHOME + "/" + getAllLibraries(Target); mkdir(SCI2COutputPath+"/src/"); mkdir(SCI2COutputPath+"/src/c/"); mkdir(SCI2COutputPath+"/includes/"); mkdir(SCI2COutputPath+"/interfaces/"); mkdir(SCI2COutputPath+"/libraries/"); // -- Sources PrintStepInfo('Copying sources', FileInfo.GeneralReport,'both'); for i = 1:size(allSources, "*") // DEBUG only //disp("Copying "+allSources(i)+" in "+SCI2COutputPath+"/src/c/"); //Copy ode related functions only if 'ode' function is used. if(~isempty(strstr(allSources(i),'dode'))) if(size(SharedInfo.Includelist) <> 0) if((mtlb_strcmp(part(SharedInfo.Includelist(1),1:5),'odefn') == %T)) copyfile(allSources(i), SCI2COutputPath+"/src/c/"); end end else copyfile(allSources(i), SCI2COutputPath+"/src/c/"); end end // -- Includes PrintStepInfo('Copying headers', FileInfo.GeneralReport,'both'); for i = 1:size(allHeaders, "*") // DEBUG only //disp("Copying "+allHeaders(i)+" in "+SCI2COutputPath+"/includes/"); copyfile(allHeaders(i), SCI2COutputPath+"/includes/"); end // -- Interfaces PrintStepInfo('Copying interfaces', FileInfo.GeneralReport,'both'); for i = 1:size(allInterfaces, "*") // DEBUG only //disp("Copying "+allInterfaces(i)+" in "+SCI2COutputPath+"/interfaces/"); copyfile(allInterfaces(i), SCI2COutputPath+"/interfaces/"); end // -- Libraries if(~isempty(allLibraries)) PrintStepInfo('Copying libraries', FileInfo.GeneralReport,'both'); for i = 1:size(allLibraries, "*") // DEBUG only //disp("Copying "+allLibraries(i)+" in "+SCI2COutputPath+"/libraries/"); copyfile(allLibraries(i), SCI2COutputPath+"/libraries/"); end end //Copy folder containing opencv include files in Includes folder //if((Target == 'RPi') & (SharedInfo.OpenCVUsed == %T)) // copyfile(SCI2CHOME + "/" +'thirdparty/raspberrypi/includes/opencv2/',SCI2COutputPath+"/includes/opencv2") //end // -------------------------- // --- Generate Makefile. --- // -------------------------- //If output format is chosen as 'Arduino', then copy makefile for arduino from //default folder, else generate makefile for standalone c code if (Target == 'Arduino') GenerateSetupFunction(FileInfo); mkdir(SCI2COutputPath+"/arduino/"); mkdir(SCI2COutputPath+"/arduino/sci2c_arduino"); //Copy arduino makefile arduinoFiles = SCI2CHOME + "/" + getArduinoFiles(); PrintStepInfo('Copying arduino files', FileInfo.GeneralReport,'both'); copyfile(arduinoFiles(1), SCI2COutputPath); for i = 2:size(arduinoFiles, "*") // DEBUG only //disp("Copying "+arduinoFiles(i)+" in "+SCI2COutputPath+"/arduino/sci2carduino"); copyfile(arduinoFiles(i), SCI2COutputPath+"/arduino/sci2c_arduino/"); end elseif (Target == 'AVR') AVRFile = SCI2CHOME + "/" + "src/c/hardware/avr/default_files/Makefile"; copyfile(AVRFile, SCI2COutputPath); else if BuildTool == "make" C_GenerateMakefile(FileInfo,SharedInfo); copyBlasLapackLibs(FileInfo,SharedInfo); //Previously .dll files and blas,lapack library not creating for cygwin by additing this works fine end if BuildTool == "nmake" copyBlasLapackLibs(FileInfo,SharedInfo); C_GenerateMakefile_msvc(FileInfo,SharedInfo); end end // ------------------------------ // --- Generate SCI2C Header. --- // ------------------------------ // FIXME : Give the user the ability to set this prefix FunctionPrefix = "SCI2C"; C_GenerateSCI2CHeader(SCI2COutputPath+"/includes/", FunctionPrefix); // ----------------- // --- Epilogue. --- // ----------------- if (RunMode == 'All' | RunMode == 'Translate') PrintStepInfo('Translation Successfully Completed!!!',FileInfo.GeneralReport,'both'); elseif (RunMode == 'GenLibraryStructure') PrintStepInfo('Library Structure Successfully Created!!!',FileInfo.GeneralReport,'both'); end endfunction function r = copyBlasLapackLibs(FileInfo, SharedInfo) r = %f; if getos() == 'Windows' then // create external-libs directory EXTERNLIBSPATH = FileInfo.OutCCCodeDir + '/external-libs'; if ~isdir(EXTERNLIBSPATH) then mkdir(EXTERNLIBSPATH); end if ~isdir(EXTERNLIBSPATH) r = %f; else // copy blas & lapack librairies copyfile(SCI + '/bin/blasplus.lib', EXTERNLIBSPATH); copyfile(SCI + '/bin/lapack.lib', EXTERNLIBSPATH); copyfile(SCI + '/bin/blasplus.dll', FileInfo.OutCCCodeDir); copyfile(SCI + '/bin/lapack.dll', FileInfo.OutCCCodeDir); // copy dependencies if MKL if isfile(SCI + '/bin/libguide40.dll') then copyfile(SCI + '/bin/libguide40.dll', FileInfo.OutCCCodeDir); end if isfile(SCI + '/bin/libiomp5md.dll') then copyfile(SCI + '/bin/libiomp5md.dll', FileInfo.OutCCCodeDir); end r = %t; end end endfunction