aboutsummaryrefslogtreecommitdiffhomepage
path: root/target.go
diff options
context:
space:
mode:
authorm-chichikalov <[email protected]>2019-06-13 20:41:18 -0400
committerRon Evans <[email protected]>2019-06-20 19:10:15 +0200
commit84618c45eb75958283db84a4763ac0a16b2fbb1a (patch)
tree955a7ae8f68dd25e7d8617100558efe3989f4eaa /target.go
parentc0ff4e566d1bd0a740e1aa0ff02fb263ac392400 (diff)
downloadtinygo-84618c45eb75958283db84a4763ac0a16b2fbb1a.tar.gz
tinygo-84618c45eb75958283db84a4763ac0a16b2fbb1a.zip
Added supporting suctom TargetSpec json file via -target flag.
Diffstat (limited to 'target.go')
-rw-r--r--target.go20
1 files changed, 14 insertions, 6 deletions
diff --git a/target.go b/target.go
index d732e716b..53255f8b5 100644
--- a/target.go
+++ b/target.go
@@ -104,10 +104,18 @@ func (spec *TargetSpec) load(r io.Reader) error {
return nil
}
-// loadFromName loads the given target from the targets/ directory inside the
-// compiler sources.
-func (spec *TargetSpec) loadFromName(name string) error {
- path := filepath.Join(sourceDir(), "targets", strings.ToLower(name)+".json")
+// loadFromGivenStr loads the TargetSpec from the given string that could be:
+// - targets/ directory inside the compiler sources
+// - a relative or absolute path to custom (project specific) target specification .json file;
+// the Inherits[] could contain the files from target folder (ex. stm32f4disco)
+// as well as path to custom files (ex. myAwesomeProject.json)
+func (spec *TargetSpec) loadFromGivenStr(str string) error {
+ path := ""
+ if strings.HasSuffix(str, ".json") {
+ path, _ = filepath.Abs(str)
+ } else {
+ path = filepath.Join(sourceDir(), "targets", strings.ToLower(str)+".json")
+ }
fp, err := os.Open(path)
if err != nil {
return err
@@ -122,7 +130,7 @@ func (spec *TargetSpec) resolveInherits() error {
newSpec := &TargetSpec{}
for _, name := range spec.Inherits {
subtarget := &TargetSpec{}
- err := subtarget.loadFromName(name)
+ err := subtarget.loadFromGivenStr(name)
if err != nil {
return err
}
@@ -172,7 +180,7 @@ func LoadTarget(target string) (*TargetSpec, error) {
// See whether there is a target specification for this target (e.g.
// Arduino).
spec := &TargetSpec{}
- err := spec.loadFromName(target)
+ err := spec.loadFromGivenStr(target)
if err == nil {
// Successfully loaded this target from a built-in .json file. Make sure
// it includes all parents as specified in the "inherits" key.