aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--compileopts/target.go37
-rw-r--r--main.go2
-rw-r--r--monitor.go41
3 files changed, 40 insertions, 40 deletions
diff --git a/compileopts/target.go b/compileopts/target.go
index 92561f1e0..b21a0183a 100644
--- a/compileopts/target.go
+++ b/compileopts/target.go
@@ -246,6 +246,43 @@ func LoadTarget(options *Options) (*TargetSpec, error) {
return spec, nil
}
+// GetTargetSpecs retrieves target specifications from the TINYGOROOT targets
+// directory. Only valid target JSON files are considered, and the function
+// returns a map of target names to their respective TargetSpec.
+func GetTargetSpecs() (map[string]*TargetSpec, error) {
+ dir := filepath.Join(goenv.Get("TINYGOROOT"), "targets")
+ entries, err := os.ReadDir(dir)
+ if err != nil {
+ return nil, fmt.Errorf("could not list targets: %w", err)
+ }
+
+ maps := map[string]*TargetSpec{}
+ for _, entry := range entries {
+ entryInfo, err := entry.Info()
+ if err != nil {
+ return nil, fmt.Errorf("could not get entry info: %w", err)
+ }
+ if !entryInfo.Mode().IsRegular() || !strings.HasSuffix(entry.Name(), ".json") {
+ // Only inspect JSON files.
+ continue
+ }
+ path := filepath.Join(dir, entry.Name())
+ spec, err := LoadTarget(&Options{Target: path})
+ if err != nil {
+ return nil, fmt.Errorf("could not list target: %w", err)
+ }
+ if spec.FlashMethod == "" && spec.FlashCommand == "" && spec.Emulator == "" {
+ // This doesn't look like a regular target file, but rather like
+ // a parent target (such as targets/cortex-m.json).
+ continue
+ }
+ name := entry.Name()
+ name = name[:len(name)-5]
+ maps[name] = spec
+ }
+ return maps, nil
+}
+
func defaultTarget(goos, goarch, triple string) (*TargetSpec, error) {
// No target spec available. Use the default one, useful on most systems
// with a regular OS.
diff --git a/main.go b/main.go
index 288cdf44a..72bf76a11 100644
--- a/main.go
+++ b/main.go
@@ -1743,7 +1743,7 @@ func main() {
handleCompilerError(err)
}
case "targets":
- specs, err := GetTargetSpecs()
+ specs, err := compileopts.GetTargetSpecs()
if err != nil {
fmt.Fprintln(os.Stderr, "could not list targets:", err)
os.Exit(1)
diff --git a/monitor.go b/monitor.go
index 23846b352..571ff2c64 100644
--- a/monitor.go
+++ b/monitor.go
@@ -11,7 +11,6 @@ import (
"io"
"os"
"os/signal"
- "path/filepath"
"regexp"
"strconv"
"strings"
@@ -20,7 +19,6 @@ import (
"github.com/mattn/go-tty"
"github.com/tinygo-org/tinygo/builder"
"github.com/tinygo-org/tinygo/compileopts"
- "github.com/tinygo-org/tinygo/goenv"
"go.bug.st/serial"
"go.bug.st/serial/enumerator"
@@ -145,9 +143,9 @@ type SerialPortInfo struct {
}
// ListSerialPort returns serial port information and any detected TinyGo
-// target
+// target.
func ListSerialPorts() ([]SerialPortInfo, error) {
- maps, err := GetTargetSpecs()
+ maps, err := compileopts.GetTargetSpecs()
if err != nil {
return nil, err
}
@@ -186,41 +184,6 @@ func ListSerialPorts() ([]SerialPortInfo, error) {
return serialPortInfo, nil
}
-func GetTargetSpecs() (map[string]*compileopts.TargetSpec, error) {
- dir := filepath.Join(goenv.Get("TINYGOROOT"), "targets")
- entries, err := os.ReadDir(dir)
- if err != nil {
- return nil, fmt.Errorf("could not list targets: %w", err)
- }
-
- maps := map[string]*compileopts.TargetSpec{}
- for _, entry := range entries {
- entryInfo, err := entry.Info()
- if err != nil {
- return nil, fmt.Errorf("could not get entry info: %w", err)
- }
- if !entryInfo.Mode().IsRegular() || !strings.HasSuffix(entry.Name(), ".json") {
- // Only inspect JSON files.
- continue
- }
- path := filepath.Join(dir, entry.Name())
- spec, err := compileopts.LoadTarget(&compileopts.Options{Target: path})
- if err != nil {
- return nil, fmt.Errorf("cnuld not list target: %w", err)
- }
- if spec.FlashMethod == "" && spec.FlashCommand == "" && spec.Emulator == "" {
- // This doesn't look like a regular target file, but rather like
- // a parent target (such as targets/cortex-m.json).
- continue
- }
- name := entry.Name()
- name = name[:len(name)-5]
- //fmt.Println(name)
- maps[name] = spec
- }
- return maps, nil
-}
-
var addressMatch = regexp.MustCompile(`^panic: runtime error at 0x([0-9a-f]+): `)
// Extract the address from the "panic: runtime error at" message.