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 7e934390 newt/compiler: Pass autogenerated linker script's include dir 
to linker
7e934390 is described below

commit 7e9343905a00e467a08dd00f2e22eb464b7097cc
Author: Michal Gorecki <michal.gore...@codecoup.pl>
AuthorDate: Wed Mar 6 11:58:19 2024 +0100

    newt/compiler: Pass autogenerated linker script's include dir to linker
    
    This tells the linker where to look for includes related with
    autogenerated linker scripts.
---
 newt/builder/build.go      |  9 +++++++++
 newt/builder/cmake.go      | 12 +++++++++---
 newt/pkg/bsp_package.go    | 10 ++++++++++
 newt/toolchain/compiler.go |  8 ++++++--
 4 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/newt/builder/build.go b/newt/builder/build.go
index 651c7dc4..d2fc0c9e 100644
--- a/newt/builder/build.go
+++ b/newt/builder/build.go
@@ -150,6 +150,10 @@ func (b *Builder) addPackage(rpkg *resolve.ResolvePackage) 
(
        return bpkg, nil
 }
 
+func (b *Builder) GetAutogeneratedLinkerIncludeDir() (string, error) {
+       return b.targetBuilder.BspPkg().GetAutogeneratedLinkerIncludePath()
+}
+
 func pkgTypeConflictErr(p1 *BuildPackage, p2 *BuildPackage) error {
        return util.FmtNewtError("Two %s packages in build: %s, %s",
                pkg.PackageTypeNames[p1.rpkg.Lpkg.Type()],
@@ -470,6 +474,11 @@ func (b *Builder) link(elfName string, linkerScripts 
[]string,
        }
 
        c.LinkerScripts = linkerScripts
+       c.AutogeneratedLinkerIncludeDir, err = 
b.GetAutogeneratedLinkerIncludeDir()
+       if err != nil {
+               return err
+       }
+
        err = c.CompileElf(elfName, trimmedANames, keepSymbols, b.linkElf)
        if err != nil {
                return err
diff --git a/newt/builder/cmake.go b/newt/builder/cmake.go
index dabb2a99..67d44f6f 100644
--- a/newt/builder/cmake.go
+++ b/newt/builder/cmake.go
@@ -284,6 +284,8 @@ func (b *Builder) CMakeTargetWrite(w io.Writer, 
targetCompiler *toolchain.Compil
                lFlags = append(lFlags, "-T"+ld)
        }
 
+       lFlags = append(lFlags, "-L"+c.AutogeneratedLinkerIncludeDir)
+
        var cFlags []string
        cFlags = append(cFlags, c.GetCompilerInfo().Cflags...)
        cFlags = append(cFlags, c.GetLocalCompilerInfo().Cflags...)
@@ -365,7 +367,8 @@ func CmakeCompilerInfoWrite(w io.Writer, archiveFile 
string, bpkg *BuildPackage,
 }
 
 func (t *TargetBuilder) CMakeTargetBuilderWrite(w io.Writer, targetCompiler 
*toolchain.Compiler) error {
-       if err := t.PrepBuild(); err != nil {
+       var err error
+       if err = t.PrepBuild(); err != nil {
                return err
        }
 
@@ -381,12 +384,15 @@ func (t *TargetBuilder) CMakeTargetBuilderWrite(w 
io.Writer, targetCompiler *too
        project.ResetDeps(t.AppList)
 
        targetCompiler.LinkerScripts = t.bspPkg.LinkerScripts
+       if targetCompiler.AutogeneratedLinkerIncludeDir, err = 
t.bspPkg.GetAutogeneratedLinkerIncludePath(); err != nil {
+               return err
+       }
 
-       if err := t.bspPkg.Reload(t.AppBuilder.cfg.SettingValues()); err != nil 
{
+       if err = t.bspPkg.Reload(t.AppBuilder.cfg.SettingValues()); err != nil {
                return err
        }
 
-       if err := t.AppBuilder.CMakeTargetWrite(w, targetCompiler); err != nil {
+       if err = t.AppBuilder.CMakeTargetWrite(w, targetCompiler); err != nil {
                return err
        }
 
diff --git a/newt/pkg/bsp_package.go b/newt/pkg/bsp_package.go
index 39e46669..46ecb7fb 100644
--- a/newt/pkg/bsp_package.go
+++ b/newt/pkg/bsp_package.go
@@ -92,6 +92,16 @@ func (bsp *BspPackage) getAutogeneratedLinkerScriptPath() 
(string, error) {
        return path, nil
 }
 
+func (bsp *BspPackage) GetAutogeneratedLinkerIncludePath() (string, error) {
+       defaultLinkerScriptPath := "bin/" + bsp.yov.Pkg.Name() + 
"/generated/link/include"
+       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(
diff --git a/newt/toolchain/compiler.go b/newt/toolchain/compiler.go
index c63eabbf..82ee88c1 100644
--- a/newt/toolchain/compiler.go
+++ b/newt/toolchain/compiler.go
@@ -70,8 +70,9 @@ type CompileCommand struct {
 }
 
 type Compiler struct {
-       objPathList   map[string]bool
-       LinkerScripts []string
+       objPathList                   map[string]bool
+       LinkerScripts                 []string
+       AutogeneratedLinkerIncludeDir string
 
        // Needs to be locked whenever a mutable field in this struct is 
accessed
        // during a build.  Currently, objPathList is the only such member.
@@ -1040,6 +1041,9 @@ func (c *Compiler) CompileBinaryCmd(dstFile string, 
options map[string]bool,
                cmd = append(cmd, "-T")
                cmd = append(cmd, ls)
        }
+       cmd = append(cmd, "-L")
+       cmd = append(cmd, c.AutogeneratedLinkerIncludeDir)
+
        if options["mapFile"] {
                cmd = append(cmd, "-Wl,-Map="+dstFile+".map")
        }

Reply via email to