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

jerzy 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 07e635eb newt: Add possibility to use generated linker script
07e635eb is described below

commit 07e635eb43f25e1d76bc44d1cf7f849f60844143
Author: Michal Gorecki <[email protected]>
AuthorDate: Fri Jan 19 15:28:51 2024 +0100

    newt: Add possibility to use generated linker script
    
    Now if "bsp.linkerscript" has value "autogenerated", default linker script
    will be passed to the linker.
---
 newt/pkg/bsp_package.go | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/newt/pkg/bsp_package.go b/newt/pkg/bsp_package.go
index 158ebec2..54b0aaed 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

Reply via email to