From afc1dab1026f7cb3bac36d60180a5fb5295ff713 Mon Sep 17 00:00:00 2001
From: Federico Felici <federico.felici@epfl.ch>
Date: Sat, 30 Nov 2019 17:41:28 +0100
Subject: [PATCH] Try catch to clear build folder and retry if build failure

---
 code/classes/SCDclass_expcode.m | 28 ++++++++++++++++++++--------
 1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/code/classes/SCDclass_expcode.m b/code/classes/SCDclass_expcode.m
index 6d34fc7..8e7a03f 100644
--- a/code/classes/SCDclass_expcode.m
+++ b/code/classes/SCDclass_expcode.m
@@ -168,6 +168,14 @@ classdef SCDclass_expcode
               node.wrapdatadicts{iwrap} = sprintf('SCDwrap_template%02d%02d.sldd',nodenr,iwrap);
             end
       end
+      
+      function build_nodes(compileslx_list)
+        for mynodeslx = compileslx_list
+             fprintf(' *** Buiding Node %s ***\n',mynodeslx{1});
+             rtwbuild(mynodeslx{1});
+        end
+      end
+           
     end
     
     methods
@@ -563,7 +571,7 @@ classdef SCDclass_expcode
              nodeinfo=obj.(sprintf('node%02d',inode));
              for icpu = 1:nodeinfo.ncpu
                if nodeinfo.cpuactive(icpu)
-                 compileslx_list = [compileslx_list;
+                 compileslx_list = [compileslx_list,...
                    sprintf('SCD_rtccode_%02d_%02d',inode,icpu)]; %#ok<AGROW>
                end
              end
@@ -588,15 +596,19 @@ classdef SCDclass_expcode
     
            % set configuration settings for compilation
            SCDconf_setCODEconf('configurationSettingsCODEicc')
-           
- 
 
            % Build
-           for mynodeslx = compileslx_list
-             fprintf(' *** Buiding Node %s ***\n',mynodeslx{1});
-             rtwbuild(mynodeslx{1});
-           end
-           
+           try
+             SCDclass_expcode.build_nodes(compileslx_list);
+           catch ME
+             % if fails on first attempt, clear build folder and retry
+             fprintf(' **** FIRST ATTEMPT BUILDING %s FAILED **** \n',obj.name)
+             fprintf('  Error message:\n %s\n',getReport(ME));
+             fprintf('  Try again clearning build folder\n')
+             
+             system(sprintf('rm -rf %s/*',CodeGenFolder));
+             SCDclass_expcode.build_nodes(compileslx_list);
+           end           
         end
     end
    
-- 
GitLab