@@ -358,7 +358,11 @@ protected void size(PreferencesMap prefs) throws RunnerException {
358358 * @throws RunnerException Only if there's a problem. Only then.
359359 */
360360 public boolean compile (boolean _verbose , boolean _save ) throws RunnerException , PreferencesMapException {
361- preprocess (prefs .get ("build.path" ));
361+ File sketchBuildFolder = new File (prefs .get ("build.path" ), "sketch" );
362+ if (!sketchBuildFolder .exists () && !sketchBuildFolder .mkdirs ()) {
363+ throw new RunnerException ("Unable to create folder " + sketchBuildFolder );
364+ }
365+ preprocess (sketchBuildFolder .getAbsolutePath ());
362366
363367 verbose = _verbose || PreferencesData .getBoolean ("build.verbose" );
364368 saveHex = _save ;
@@ -410,7 +414,7 @@ public boolean compile(boolean _verbose, boolean _save) throws RunnerException,
410414
411415 // 1. compile the sketch (already in the buildPath)
412416 progressListener .progress (20 );
413- compileSketch (includeFolders );
417+ compileSketch (includeFolders , sketchBuildFolder );
414418 sketchIsCompiled = true ;
415419
416420 runActions ("hooks.sketch.postbuild" , prefs );
@@ -485,6 +489,9 @@ public boolean compile(boolean _verbose, boolean _save) throws RunnerException,
485489 }
486490
487491 private void adviseDuplicateLibraries () {
492+ if (importedDuplicateHeaders == null ) {
493+ return ;
494+ }
488495 for (int i =0 ; i < importedDuplicateHeaders .size (); i ++) {
489496 System .out .println (I18n .format (_ ("Multiple libraries were found for \" {0}\" " ),
490497 importedDuplicateHeaders .get (i )));
@@ -995,8 +1002,7 @@ static public List<File> findFilesInFolder(File folder, String extension,
9951002 }
9961003
9971004 // 1. compile the sketch (already in the buildPath)
998- void compileSketch (List <File > includeFolders ) throws RunnerException , PreferencesMapException {
999- File buildPath = prefs .getFile ("build.path" );
1005+ void compileSketch (List <File > includeFolders , File buildPath ) throws RunnerException , PreferencesMapException {
10001006 objectFiles .addAll (compileFiles (buildPath , buildPath , false , includeFolders ));
10011007 }
10021008
@@ -1011,7 +1017,12 @@ void compileLibraries(List<File> includeFolders) throws RunnerException, Prefere
10111017 private void compileLibrary (UserLibrary lib , List <File > includeFolders )
10121018 throws RunnerException , PreferencesMapException {
10131019 File libFolder = lib .getSrcFolder ();
1014- File libBuildFolder = prefs .getFile (("build.path" ), lib .getName ());
1020+ File librariesFolder = new File (prefs .getFile ("build.path" ), "libraries" );
1021+ if (!librariesFolder .exists () && !librariesFolder .mkdirs ()) {
1022+ throw new RunnerException ("Unable to create folder " + librariesFolder );
1023+ }
1024+
1025+ File libBuildFolder = new File (librariesFolder , lib .getName ());
10151026
10161027 if (lib .useRecursion ()) {
10171028 // libBuildFolder == {build.path}/LibName
@@ -1058,7 +1069,10 @@ void compileCore()
10581069
10591070 File coreFolder = prefs .getFile ("build.core.path" );
10601071 File variantFolder = prefs .getFile ("build.variant.path" );
1061- File buildFolder = prefs .getFile ("build.path" );
1072+ File buildFolder = new File (prefs .getFile ("build.path" ), "core" );
1073+ if (!buildFolder .exists () && !buildFolder .mkdirs ()) {
1074+ throw new RunnerException ("Unable to create folder " + buildFolder );
1075+ }
10621076
10631077 List <File > includeFolders = new ArrayList <File >();
10641078 includeFolders .add (coreFolder ); // include core path only
@@ -1108,6 +1122,7 @@ void compileCore()
11081122 dict .put ("ide_version" , "" + BaseNoGui .REVISION );
11091123 dict .put ("archive_file" , afile .getName ());
11101124 dict .put ("object_file" , file .getAbsolutePath ());
1125+ dict .put ("build.path" , buildFolder .getAbsolutePath ());
11111126
11121127 String [] cmdArray ;
11131128 String cmd = prefs .getOrExcept ("recipe.ar.pattern" );
@@ -1144,7 +1159,7 @@ void compileLink()
11441159 PreferencesMap dict = new PreferencesMap (prefs );
11451160 String flags = dict .get ("compiler.c.elf.flags" ) + optRelax ;
11461161 dict .put ("compiler.c.elf.flags" , flags );
1147- dict .put ("archive_file" , "core.a" );
1162+ dict .put ("archive_file" , new File ( "core" , "core .a"). getPath () );
11481163 dict .put ("object_files" , objectFileList );
11491164 dict .put ("ide_version" , "" + BaseNoGui .REVISION );
11501165
0 commit comments