From 9144c65457154383bc662356fa25fe26dd9d7e1c Mon Sep 17 00:00:00 2001 From: Michal Gorecki Date: Fri, 27 Jun 2025 13:40:23 +0200 Subject: [PATCH] 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 b887450369..d12cf1043d 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 ef883de529..d930aa25bc 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 }