From 2ffbe85efba87e039c7785998105c4b8cfa2103e Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 29 Nov 2019 16:44:36 +0100 Subject: [PATCH 1/3] Add support for additional_include_paths library property Fixes #501 --- arduino/libraries/libraries.go | 29 +++++++++++----------- arduino/libraries/loader.go | 8 ++++++ legacy/builder/phases/libraries_builder.go | 5 ++++ rpc/commands/lib.proto | 1 + 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/arduino/libraries/libraries.go b/arduino/libraries/libraries.go index b31f546aa74..06657b30201 100644 --- a/arduino/libraries/libraries.go +++ b/arduino/libraries/libraries.go @@ -55,20 +55,21 @@ type Library struct { Types []string `json:"types,omitempty"` - InstallDir *paths.Path - SourceDir *paths.Path - UtilityDir *paths.Path - Location LibraryLocation - ContainerPlatform *cores.PlatformRelease `json:""` - Layout LibraryLayout - RealName string - DotALinkage bool - Precompiled bool - LDflags string - IsLegacy bool - Version *semver.Version - License string - Properties *properties.Map + InstallDir *paths.Path + SourceDir *paths.Path + UtilityDir *paths.Path + Location LibraryLocation + ContainerPlatform *cores.PlatformRelease `json:""` + Layout LibraryLayout + RealName string + DotALinkage bool + Precompiled bool + LDflags string + IsLegacy bool + Version *semver.Version + License string + AdditionalIncludePaths []*paths.Path + Properties *properties.Map } func (library *Library) String() string { diff --git a/arduino/libraries/loader.go b/arduino/libraries/loader.go index 221f28a11e6..f03657626a5 100644 --- a/arduino/libraries/loader.go +++ b/arduino/libraries/loader.go @@ -105,6 +105,14 @@ func makeNewLibrary(libraryDir *paths.Path, location LibraryLocation) (*Library, library.DotALinkage = libProperties.GetBoolean("dot_a_linkage") library.Precompiled = libProperties.GetBoolean("precompiled") library.LDflags = strings.TrimSpace(libProperties.Get("ldflags")) + additionalIncludePathsList := libProperties.Get("additional_include_paths") + if additionalIncludePathsList != "" { + temp := strings.Split(additionalIncludePathsList, ",") + for _, el := range temp { + dir := paths.New(libraryDir.Join(el).String()) + library.AdditionalIncludePaths = append(library.AdditionalIncludePaths, dir) + } + } library.Properties = libProperties return library, nil diff --git a/legacy/builder/phases/libraries_builder.go b/legacy/builder/phases/libraries_builder.go index b01ffe70dc2..06ab152bcf3 100644 --- a/legacy/builder/phases/libraries_builder.go +++ b/legacy/builder/phases/libraries_builder.go @@ -192,6 +192,11 @@ func compileLibrary(ctx *types.Context, library *libraries.Library, buildPath *p } if library.Layout == libraries.RecursiveLayout { + if library.AdditionalIncludePaths != nil { + for _, el := range library.AdditionalIncludePaths { + includes = append(includes, utils.WrapWithHyphenI(el.String())) + } + } libObjectFiles, err := builder_utils.CompileFilesRecursive(ctx, library.SourceDir, libraryBuildPath, buildProperties, includes) if err != nil { return nil, i18n.WrapError(err) diff --git a/rpc/commands/lib.proto b/rpc/commands/lib.proto index 2de44ab28e2..7c4c878c74e 100644 --- a/rpc/commands/lib.proto +++ b/rpc/commands/lib.proto @@ -160,6 +160,7 @@ message Library { string version = 21; string license = 22; map properties = 23; + string additional_include_paths = 24; } enum LibraryLayout { From 6058360927a0577ca8f1f54a86c455886b36d5de Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 29 Nov 2019 17:13:22 +0100 Subject: [PATCH 2/3] Add additional paths also in library discovery phase This tries to avoid bundled libraries shadowing other includes --- legacy/builder/container_find_includes.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/legacy/builder/container_find_includes.go b/legacy/builder/container_find_includes.go index 2221c8cfde4..1aba04b1490 100644 --- a/legacy/builder/container_find_includes.go +++ b/legacy/builder/container_find_includes.go @@ -318,6 +318,11 @@ func findIncludesUntilDone(ctx *types.Context, cache *includeCache, sourceFile t if library, ok := sourceFile.Origin.(*libraries.Library); ok && library.UtilityDir != nil { includes = append(includes, library.UtilityDir) } + if library, ok := sourceFile.Origin.(*libraries.Library); ok && library.AdditionalIncludePaths != nil { + for _, el := range library.AdditionalIncludePaths { + includes = append(includes, el) + } + } var preproc_err error var preproc_stderr []byte if unchanged && cache.valid { From 4853add8dc76961c4a0466089d94875eeb688a6e Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 11 Mar 2020 11:53:22 +0100 Subject: [PATCH 3/3] Library discovery: add additional include paths after discovering the library --- legacy/builder/container_find_includes.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/legacy/builder/container_find_includes.go b/legacy/builder/container_find_includes.go index 1aba04b1490..0b68351d6b3 100644 --- a/legacy/builder/container_find_includes.go +++ b/legacy/builder/container_find_includes.go @@ -318,11 +318,6 @@ func findIncludesUntilDone(ctx *types.Context, cache *includeCache, sourceFile t if library, ok := sourceFile.Origin.(*libraries.Library); ok && library.UtilityDir != nil { includes = append(includes, library.UtilityDir) } - if library, ok := sourceFile.Origin.(*libraries.Library); ok && library.AdditionalIncludePaths != nil { - for _, el := range library.AdditionalIncludePaths { - includes = append(includes, el) - } - } var preproc_err error var preproc_stderr []byte if unchanged && cache.valid { @@ -376,6 +371,10 @@ func findIncludesUntilDone(ctx *types.Context, cache *includeCache, sourceFile t return i18n.WrapError(preproc_err) } + for _, el := range library.AdditionalIncludePaths { + appendIncludeFolder(ctx, cache, sourcePath, include, el) + } + // Add this library to the list of libraries, the // include path and queue its source files for further // include scanning