Skip to content

Commit

Permalink
Handle promotion based on architecture for all libraries
Browse files Browse the repository at this point in the history
solves arduino/ArduinoCore-samd#80, which was caused by USBHost library not having a corresponding .h, thus bypassing the findBestLibraryWithHeader check
  • Loading branch information
facchinm committed Mar 7, 2016
1 parent 4debb62 commit d3b4fb1
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions src/arduino.cc/builder/includes_to_include_folders.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ func resolveLibrary(header string, headerToLibraries map[string][]*types.Library

for _, platform := range platforms {
if platform != nil {
library = findBestLibraryWithHeader(header, librariesCompatibleWithPlatform(libraries, platform))
library = findBestLibraryWithHeader(header, librariesCompatibleWithPlatform(libraries, platform, true))
}
}

Expand All @@ -150,6 +150,12 @@ func resolveLibrary(header string, headerToLibraries map[string][]*types.Library
}

if library == nil {
// reorder libraries to promote fully compatible ones
for _, platform := range platforms {
if platform != nil {
libraries = append(librariesCompatibleWithPlatform(libraries, platform, false), libraries...)
}
}
library = libraries[0]
}

Expand Down Expand Up @@ -235,12 +241,12 @@ func libraryCompatibleWithAllPlatforms(library *types.Library) bool {
return false
}

func librariesCompatibleWithPlatform(libraries []*types.Library, platform *types.Platform) []*types.Library {
func librariesCompatibleWithPlatform(libraries []*types.Library, platform *types.Platform, reorder bool) []*types.Library {
var compatibleLibraries []*types.Library
for _, library := range libraries {
compatible, generic := libraryCompatibleWithPlatform(library, platform)
if compatible {
if !generic && len(compatibleLibraries) != 0 && libraryCompatibleWithAllPlatforms(compatibleLibraries[0]) {
if !generic && len(compatibleLibraries) != 0 && libraryCompatibleWithAllPlatforms(compatibleLibraries[0]) && reorder == true {
//priority inversion
compatibleLibraries = append([]*types.Library{library}, compatibleLibraries...)
} else {
Expand Down

0 comments on commit d3b4fb1

Please sign in to comment.