diff --git a/arduino/cores/packagemanager/loader.go b/arduino/cores/packagemanager/loader.go index 8a542ef4a03..f0c2f99d548 100644 --- a/arduino/cores/packagemanager/loader.go +++ b/arduino/cores/packagemanager/loader.go @@ -77,6 +77,17 @@ func (pm *PackageManager) LoadHardwareFromDirectory(path *paths.Path) error { for _, packagerPath := range files { packager := packagerPath.Base() + // Load custom platform properties if available + if packager == "platform.txt" { + pm.Log.Infof("Loading custom platform properties: %s", packagerPath) + if p, err := properties.LoadFromPath(packagerPath); err != nil { + pm.Log.WithError(err).Errorf("Error loading properties.") + } else { + pm.CustomGlobalProperties.Merge(p) + } + continue + } + // First exclude all "tools" directory if packager == "tools" { pm.Log.Infof("Excluding directory: %s", packagerPath) diff --git a/arduino/cores/packagemanager/package_manager.go b/arduino/cores/packagemanager/package_manager.go index ef3920a375d..0eb7727577a 100644 --- a/arduino/cores/packagemanager/package_manager.go +++ b/arduino/cores/packagemanager/package_manager.go @@ -38,23 +38,25 @@ import ( // The manager also keeps track of the status of the Packages (their Platform Releases, actually) // installed in the system. type PackageManager struct { - Log logrus.FieldLogger - Packages cores.Packages - IndexDir *paths.Path - PackagesDir *paths.Path - DownloadDir *paths.Path - TempDir *paths.Path + Log logrus.FieldLogger + Packages cores.Packages + IndexDir *paths.Path + PackagesDir *paths.Path + DownloadDir *paths.Path + TempDir *paths.Path + CustomGlobalProperties *properties.Map } // NewPackageManager returns a new instance of the PackageManager func NewPackageManager(indexDir, packagesDir, downloadDir, tempDir *paths.Path) *PackageManager { return &PackageManager{ - Log: logrus.StandardLogger(), - Packages: cores.NewPackages(), - IndexDir: indexDir, - PackagesDir: packagesDir, - DownloadDir: downloadDir, - TempDir: tempDir, + Log: logrus.StandardLogger(), + Packages: cores.NewPackages(), + IndexDir: indexDir, + PackagesDir: packagesDir, + DownloadDir: downloadDir, + TempDir: tempDir, + CustomGlobalProperties: properties.NewMap(), } } diff --git a/legacy/builder/setup_build_properties.go b/legacy/builder/setup_build_properties.go index 7ae9a54a3fd..65718bfa6b6 100644 --- a/legacy/builder/setup_build_properties.go +++ b/legacy/builder/setup_build_properties.go @@ -127,6 +127,8 @@ func (s *SetupBuildProperties) Run(ctx *types.Context) error { buildProperties.Set("extra.time.zone", strconv.Itoa(timeutils.TimezoneOffsetNoDST(now))) buildProperties.Set("extra.time.dst", strconv.Itoa(timeutils.DaylightSavingsOffset(now))) + buildProperties.Merge(ctx.PackageManager.CustomGlobalProperties) + ctx.BuildProperties = buildProperties return nil