You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by cc...@apache.org on 2016/11/05 01:26:25 UTC
incubator-mynewt-newt git commit: Allow BSP to specify
repository-relative paths
Repository: incubator-mynewt-newt
Updated Branches:
refs/heads/develop 0fa789525 -> 9dbb073c4
Allow BSP to specify repository-relative paths
This affects the following BSP settings:
* bsp.linkerscript
* bsp.part2linkerscript
* bsp.downloadscript
* bsp.debugscript
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/commit/9dbb073c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/tree/9dbb073c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/diff/9dbb073c
Branch: refs/heads/develop
Commit: 9dbb073c4ffda7946ac4ef7f59d12ecc7b55e044
Parents: 0fa7895
Author: Christopher Collins <cc...@apache.org>
Authored: Fri Nov 4 17:56:44 2016 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Fri Nov 4 17:56:44 2016 -0700
----------------------------------------------------------------------
newt/builder/build.go | 2 +-
newt/builder/load.go | 12 +++++-----
newt/interfaces/interfaces.go | 1 +
newt/pkg/bsp_package.go | 45 ++++++++++++++++++++++++++++++++------
newt/project/project.go | 23 ++++++++++++++++++-
5 files changed, 67 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/9dbb073c/newt/builder/build.go
----------------------------------------------------------------------
diff --git a/newt/builder/build.go b/newt/builder/build.go
index 6e2f9b5..abdba35 100644
--- a/newt/builder/build.go
+++ b/newt/builder/build.go
@@ -328,7 +328,7 @@ func (b *Builder) link(elfName string, linkerScript string,
}
if linkerScript != "" {
- c.LinkerScript = b.bspPkg.BasePath() + "/" + linkerScript
+ c.LinkerScript = linkerScript
}
err = c.CompileElf(elfName, pkgNames, keepSymbols, b.linkElf)
if err != nil {
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/9dbb073c/newt/builder/load.go
----------------------------------------------------------------------
diff --git a/newt/builder/load.go b/newt/builder/load.go
index 46cb506..ec07f1f 100644
--- a/newt/builder/load.go
+++ b/newt/builder/load.go
@@ -22,7 +22,6 @@ package builder
import (
"fmt"
"os"
- "path/filepath"
"sort"
"strconv"
@@ -59,7 +58,6 @@ func Load(binBaseName string, bspPkg *pkg.BspPackage,
}
bspPath := bspPkg.BasePath()
- downloadScript := filepath.Join(bspPath, bspPkg.DownloadScript)
sortedKeys := make([]string, 0, len(extraEnvSettings))
for k, _ := range extraEnvSettings {
@@ -79,8 +77,8 @@ func Load(binBaseName string, bspPkg *pkg.BspPackage,
// bspPath, binBaseName are passed in command line for backwards
// compatibility
- downloadCmd := fmt.Sprintf("%s %s %s %s", envSettings, downloadScript,
- bspPath, binBaseName)
+ downloadCmd := fmt.Sprintf("%s %s %s %s", envSettings,
+ bspPkg.DownloadScript, bspPath, binBaseName)
util.StatusMessage(util.VERBOSITY_VERBOSE, "Load command: %s\n",
downloadCmd)
@@ -198,13 +196,13 @@ func (b *Builder) Debug(extraJtagCmd string, reset bool, noGDB bool) error {
envSettings = append(envSettings, fmt.Sprintf("NO_GDB=1"))
}
- debugScript := filepath.Join(bspPath, b.targetBuilder.bspPkg.DebugScript)
-
os.Chdir(project.GetProject().Path())
// bspPath, binBaseName are passed in command line for backwards
// compatibility
- cmdLine := []string{debugScript, bspPath, binBaseName}
+ cmdLine := []string{
+ b.targetBuilder.bspPkg.DebugScript, bspPath, binBaseName,
+ }
fmt.Printf("%s\n", cmdLine)
return util.ShellInteractiveCommand(cmdLine, envSettings)
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/9dbb073c/newt/interfaces/interfaces.go
----------------------------------------------------------------------
diff --git a/newt/interfaces/interfaces.go b/newt/interfaces/interfaces.go
index 5bafdf7..602c8bb 100644
--- a/newt/interfaces/interfaces.go
+++ b/newt/interfaces/interfaces.go
@@ -60,6 +60,7 @@ type ProjectInterface interface {
Name() string
Path() string
ResolveDependency(dep DependencyInterface) PackageInterface
+ ResolvePath(basePath string, name string) (string, error)
PackageList() PackageList
}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/9dbb073c/newt/pkg/bsp_package.go
----------------------------------------------------------------------
diff --git a/newt/pkg/bsp_package.go b/newt/pkg/bsp_package.go
index a57a31a..d89149b 100644
--- a/newt/pkg/bsp_package.go
+++ b/newt/pkg/bsp_package.go
@@ -23,6 +23,7 @@ import (
"strings"
"mynewt.apache.org/newt/newt/flash"
+ "mynewt.apache.org/newt/newt/interfaces"
"mynewt.apache.org/newt/newt/newtutil"
"mynewt.apache.org/newt/util"
"mynewt.apache.org/newt/viper"
@@ -38,13 +39,28 @@ type BspPackage struct {
Part2LinkerScript string /* script to link app to second partition */
DownloadScript string
DebugScript string
- WriteScript string
FlashMap flash.FlashMap
BspV *viper.Viper
}
+func (bsp *BspPackage) resolvePathSetting(
+ features map[string]bool, key string) (string, error) {
+
+ outVal := newtutil.GetStringFeatures(bsp.BspV, features, key)
+
+ proj := interfaces.GetProject()
+ path, err := proj.ResolvePath(bsp.BasePath(), outVal)
+ if err != nil {
+ return "", util.PreNewtError(err,
+ "BSP \"%s\" specifies invalid %s setting",
+ bsp.Name(), key)
+ }
+ return path, nil
+}
+
func (bsp *BspPackage) Reload(features map[string]bool) error {
var err error
+
bsp.BspV, err = util.ReadConfig(bsp.BasePath(),
strings.TrimSuffix(BSP_YAML_FILENAME, ".yml"))
if err != nil {
@@ -54,18 +70,33 @@ func (bsp *BspPackage) Reload(features map[string]bool) error {
bsp.CompilerName = newtutil.GetStringFeatures(bsp.BspV,
features, "bsp.compiler")
+
bsp.Arch = newtutil.GetStringFeatures(bsp.BspV,
features, "bsp.arch")
- bsp.LinkerScript = newtutil.GetStringFeatures(bsp.BspV,
+
+ bsp.LinkerScript, err = bsp.resolvePathSetting(
features, "bsp.linkerscript")
- bsp.Part2LinkerScript = newtutil.GetStringFeatures(bsp.BspV,
+ if err != nil {
+ return err
+ }
+
+ bsp.Part2LinkerScript, err = bsp.resolvePathSetting(
features, "bsp.part2linkerscript")
- bsp.DownloadScript = newtutil.GetStringFeatures(bsp.BspV,
+ if err != nil {
+ return err
+ }
+
+ bsp.DownloadScript, err = bsp.resolvePathSetting(
features, "bsp.downloadscript")
- bsp.DebugScript = newtutil.GetStringFeatures(bsp.BspV,
+ if err != nil {
+ return err
+ }
+
+ bsp.DebugScript, err = bsp.resolvePathSetting(
features, "bsp.debugscript")
- bsp.WriteScript = newtutil.GetStringFeatures(bsp.BspV,
- features, "bsp.writescript")
+ if err != nil {
+ return err
+ }
if bsp.CompilerName == "" {
return util.NewNewtError("BSP does not specify a compiler " +
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/9dbb073c/newt/project/project.go
----------------------------------------------------------------------
diff --git a/newt/project/project.go b/newt/project/project.go
index 95ee367..45f7405 100644
--- a/newt/project/project.go
+++ b/newt/project/project.go
@@ -523,7 +523,6 @@ func (proj *Project) ResolveDependency(dep interfaces.DependencyInterface) inter
func (proj *Project) ResolvePackage(
dfltRepo interfaces.RepoInterface, name string) (*pkg.LocalPackage, error) {
-
// Trim trailing slash from name. This is necessary when tab
// completion is used to specify the name.
name = strings.TrimSuffix(name, "/")
@@ -557,6 +556,28 @@ func (proj *Project) ResolvePackage(
return pack.(*pkg.LocalPackage), nil
}
+// Resolves a path with an optional repo prefix (e.g., "@apache-mynewt-core").
+func (proj *Project) ResolvePath(
+ basePath string, name string) (string, error) {
+
+ repoName, subPath, err := newtutil.ParsePackageString(name)
+ if err != nil {
+ return "", util.FmtNewtError("invalid path: %s (%s)", name,
+ err.Error())
+ }
+
+ if repoName == "" {
+ return basePath + "/" + subPath, nil
+ } else {
+ repo := proj.repos[repoName]
+ if repo == nil {
+ return "", util.FmtNewtError("Unknown repository: %s", repoName)
+ }
+
+ return repo.Path() + "/" + subPath, nil
+ }
+}
+
func findProjectDir(dir string) (string, error) {
for {
projFile := path.Clean(dir) + "/" + PROJECT_FILE_NAME