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 <[email protected]>
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")
}