@@ -250,13 +250,15 @@ private List<File> compileFiles(File outputPath, File sourcePath,
250
250
throws RunnerException {
251
251
List <File > objectPaths = new ArrayList <File >();
252
252
for (File file : sourceFiles ) {
253
- File objectFile = new File (outputPath , file .getName () + ".o" );
254
- File dependFile = new File (outputPath , file .getName () + ".d" );
253
+ String relative = FileUtils .relativeSubPath (sourcePath , file );
254
+ File objectFile = new File (outputPath , relative + ".o" );
255
+ File dependFile = new File (outputPath , relative + ".d" );
255
256
objectPaths .add (objectFile );
256
257
257
258
if (isAlreadyCompiled (file , objectFile , dependFile , prefs ))
258
259
continue ;
259
260
261
+ createFolder (objectFile .getParentFile ());
260
262
String [] cmd ;
261
263
if (FileUtils .hasExtension (file , "s" )) {
262
264
cmd = getCommandCompilerS (includeFolders , file , objectFile );
@@ -599,7 +601,7 @@ private String[] getCommandCompilerCPP(List<File> includeFolders,
599
601
private void createFolder (File folder ) throws RunnerException {
600
602
if (folder .isDirectory ())
601
603
return ;
602
- if (!folder .mkdir ())
604
+ if (!folder .mkdirs ())
603
605
throw new RunnerException ("Couldn't create: " + folder );
604
606
}
605
607
@@ -625,7 +627,7 @@ private void compileLibrary(Library lib, List<File> includeFolders)
625
627
if (lib .useRecursion ()) {
626
628
// libBuildFolder == {build.path}/LibName
627
629
// libFolder == {lib.path}/src
628
- recursiveCompileFilesInFolder ( libBuildFolder , libFolder , includeFolders );
630
+ objectFiles . addAll ( compileFiles ( libBuildFolder , libFolder , true , includeFolders ) );
629
631
630
632
} else {
631
633
// libFolder == {lib.path}/
@@ -636,29 +638,15 @@ private void compileLibrary(Library lib, List<File> includeFolders)
636
638
File utilityBuildFolder = new File (libBuildFolder , "utility" );
637
639
638
640
includeFolders .add (utilityFolder );
639
- compileFilesInFolder ( libBuildFolder , libFolder , includeFolders );
641
+ objectFiles . addAll ( compileFiles ( libBuildFolder , libFolder , false , includeFolders ) );
640
642
if (utilityFolder .isDirectory ())
641
- compileFilesInFolder ( utilityBuildFolder , utilityFolder , includeFolders );
643
+ objectFiles . addAll ( compileFiles ( utilityBuildFolder , utilityFolder , false , includeFolders ) );
642
644
643
645
// other libraries should not see this library's utility/ folder
644
646
includeFolders .remove (utilityFolder );
645
647
}
646
648
}
647
649
648
- private void recursiveCompileFilesInFolder (File srcBuildFolder , File srcFolder , List <File > includeFolders ) throws RunnerException {
649
- compileFilesInFolder (srcBuildFolder , srcFolder , includeFolders );
650
- for (File subFolder : srcFolder .listFiles (new OnlyDirs ())) {
651
- File subBuildFolder = new File (srcBuildFolder , subFolder .getName ());
652
- recursiveCompileFilesInFolder (subBuildFolder , subFolder , includeFolders );
653
- }
654
- }
655
-
656
- private void compileFilesInFolder (File buildFolder , File srcFolder , List <File > includeFolders ) throws RunnerException {
657
- createFolder (buildFolder );
658
- List <File > objects = compileFiles (buildFolder , srcFolder , false , includeFolders );
659
- objectFiles .addAll (objects );
660
- }
661
-
662
650
// 3. compile the core, outputting .o files to <buildPath> and then
663
651
// collecting them into the core.a library file.
664
652
// Also compiles the variant (if it supplies actual source files),
0 commit comments