diff --git a/newt/pkg/bsp_package.go b/newt/pkg/bsp_package.go index 158ebec2d..54b0aaed2 100644 --- a/newt/pkg/bsp_package.go +++ b/newt/pkg/bsp_package.go @@ -82,6 +82,16 @@ func (bsp *BspPackage) resolvePathSetting( return path, nil } +func (bsp *BspPackage) getAutogeneratedLinkerScriptPath() (string, error) { + defaultLinkerScriptPath := "bin/" + bsp.yov.Pkg.Name() + "/generated/link/mynewt.ld" + proj := interfaces.GetProject() + path, err := proj.ResolvePath(proj.Path(), defaultLinkerScriptPath) + if err != nil { + return "", err + } + return path, nil +} + // Interprets a setting as either a single linker script or a list of linker // scripts. func (bsp *BspPackage) resolveLinkerScriptSetting( @@ -103,7 +113,15 @@ func (bsp *BspPackage) resolveLinkerScriptSetting( return nil, err } - if path != "" { + if path == "autogenerated" { + path, err = bsp.getAutogeneratedLinkerScriptPath() + if err != nil { + return nil, util.PreNewtError(err, + "Could not resolve autogenerated linker script path for target \"%s\"", + bsp.yov.Pkg.Name()) + } + paths = append(paths, path) + } else if path != "" { paths = append(paths, path) } } else { @@ -111,6 +129,12 @@ func (bsp *BspPackage) resolveLinkerScriptSetting( // Read each linker script from the list. for _, val := range vals { + if val == "autogenerated" { + return nil, util.PreNewtError(err, + "Both autogenerated and custom linker scripts cannot be used."+ + "Newt handles either autogenerated linker script or a list of custom linker scripts.") + } + path, err := proj.ResolvePath(ypkg.Repo().Path(), val) if err != nil { return nil, util.PreNewtError(err, @@ -226,7 +250,6 @@ func NewBspPackage(lpkg *LocalPackage, yov *BspYCfgOverride) (*BspPackage, error lpkg.Load() bsp.LocalPackage = lpkg bsp.BspV = ycfg.NewYCfg(bsp.BspYamlPath()) - err := bsp.Reload(nil) return bsp, err