This is an automated email from the ASF dual-hosted git repository.

mgorecki pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git


The following commit(s) were added to refs/heads/master by this push:
     new 423bd891 builder: Fix false positive flash map errors
423bd891 is described below

commit 423bd891beb96860b6e6e0b8051a7931edf3a65b
Author: Michal Gorecki <[email protected]>
AuthorDate: Fri Jun 27 13:40:23 2025 +0200

    builder: Fix false positive flash map errors
    
    To allow conditional overrides of flash map it's necessary to
    resolve target, because otherwise the syscfgs that determine
    the choice of a different flash map will not be available.
    The problem was that every resolving was trying to detect
    errors in configuration (also in flash map). As the resolving
    had to be done before bsp package reloading, while detecting
    errors the default flash map is loaded. If this default flash
    map did not define some flash areas used in the target configuration,
    an error was reported even if the flash map that should override
    the default one was correct.
    
    Now we don't try to detect error while doing this particular
    resolving. Instead we do this after reloading bsp package so
    the properly chosen flash map is used in error detection.
---
 newt/builder/targetbuild.go | 18 ++++++++++--------
 newt/resolve/resolve.go     | 11 ++++++++---
 2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/newt/builder/targetbuild.go b/newt/builder/targetbuild.go
index b8874503..d12cf104 100644
--- a/newt/builder/targetbuild.go
+++ b/newt/builder/targetbuild.go
@@ -95,7 +95,7 @@ func NewTargetTester(target *target.Target,
                injectedSettings: cfgv.NewSettings(nil),
        }
 
-       if err := t.ensureResolved(); err != nil {
+       if err := t.ensureResolved(false); err != nil {
                return nil, err
        }
 
@@ -103,6 +103,8 @@ func NewTargetTester(target *target.Target,
                return nil, err
        }
 
+       t.res.Cfg.DetectErrors(bspPkg.FlashMap)
+
        return t, nil
 }
 
@@ -174,7 +176,7 @@ func (t *TargetBuilder) resolveTransientPkgs(lps 
[]*pkg.LocalPackage) {
        }
 }
 
-func (t *TargetBuilder) ensureResolved() error {
+func (t *TargetBuilder) ensureResolved(detectErr bool) error {
        if t.res != nil {
                return nil
        }
@@ -238,7 +240,7 @@ func (t *TargetBuilder) ensureResolved() error {
 
        var err error
        t.res, err = resolve.ResolveFull(
-               loaderSeeds, appSeeds, t.injectedSettings, t.bspPkg.FlashMap)
+               loaderSeeds, appSeeds, t.injectedSettings, t.bspPkg.FlashMap, 
detectErr)
        if err != nil {
                return err
        }
@@ -267,7 +269,7 @@ func (t *TargetBuilder) ensureResolved() error {
 }
 
 func (t *TargetBuilder) Resolve() (*resolve.Resolution, error) {
-       if err := t.ensureResolved(); err != nil {
+       if err := t.ensureResolved(true); err != nil {
                return nil, err
        }
 
@@ -275,7 +277,7 @@ func (t *TargetBuilder) Resolve() (*resolve.Resolution, 
error) {
 }
 
 func (t *TargetBuilder) validateAndWriteCfg() error {
-       if err := t.ensureResolved(); err != nil {
+       if err := t.ensureResolved(true); err != nil {
                return err
        }
 
@@ -384,7 +386,7 @@ func (t *TargetBuilder) extraADirs() []string {
 }
 
 func (t *TargetBuilder) PrepBuild() error {
-       if err := t.ensureResolved(); err != nil {
+       if err := t.ensureResolved(true); err != nil {
                return err
        }
 
@@ -836,7 +838,7 @@ func (t *TargetBuilder) MaxImgSizes() []int {
 }
 
 func (t *TargetBuilder) CreateDepGraph() (DepGraph, error) {
-       if err := t.ensureResolved(); err != nil {
+       if err := t.ensureResolved(true); err != nil {
                return nil, err
        }
 
@@ -844,7 +846,7 @@ func (t *TargetBuilder) CreateDepGraph() (DepGraph, error) {
 }
 
 func (t *TargetBuilder) CreateRevdepGraph() (DepGraph, error) {
-       if err := t.ensureResolved(); err != nil {
+       if err := t.ensureResolved(true); err != nil {
                return nil, err
        }
 
diff --git a/newt/resolve/resolve.go b/newt/resolve/resolve.go
index ef883de5..d930aa25 100644
--- a/newt/resolve/resolve.go
+++ b/newt/resolve/resolve.go
@@ -1168,7 +1168,8 @@ func ResolveFull(
        loaderSeeds []*pkg.LocalPackage,
        appSeeds []*pkg.LocalPackage,
        injectedSettings *cfgv.Settings,
-       flashMap flashmap.FlashMap) (*Resolution, error) {
+       flashMap flashmap.FlashMap,
+       detectErr bool) (*Resolution, error) {
 
        // First, calculate syscfg and determine which package provides each
        // required API.  Syscfg and APIs are project-wide; that is, they are
@@ -1239,7 +1240,9 @@ func ResolveFull(
        if loaderSeeds == nil {
                res.AppSet.Rpkgs = r.rpkgSlice()
                res.LoaderSet = nil
-               res.Cfg.DetectErrors(flashMap)
+               if detectErr == true {
+                       res.Cfg.DetectErrors(flashMap)
+               }
                return res, nil
        }
 
@@ -1290,7 +1293,9 @@ func ResolveFull(
                return nil, err
        }
 
-       res.Cfg.DetectErrors(flashMap)
+       if detectErr == true {
+               res.Cfg.DetectErrors(flashMap)
+       }
 
        return res, nil
 }

Reply via email to