gdb: enable to specify multiple candidates for gdb
Этот коммит содержится в:
родитель
f23ba3b023
коммит
16e7dd83a3
7 изменённых файлов: 27 добавлений и 12 удалений
|
@ -7,6 +7,7 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
@ -42,7 +43,7 @@ type TargetSpec struct {
|
||||||
ExtraFiles []string `json:"extra-files"`
|
ExtraFiles []string `json:"extra-files"`
|
||||||
Emulator []string `json:"emulator" override:"copy"` // inherited Emulator must not be append
|
Emulator []string `json:"emulator" override:"copy"` // inherited Emulator must not be append
|
||||||
FlashCommand string `json:"flash-command"`
|
FlashCommand string `json:"flash-command"`
|
||||||
GDB string `json:"gdb"`
|
GDB []string `json:"gdb"`
|
||||||
PortReset string `json:"flash-1200-bps-reset"`
|
PortReset string `json:"flash-1200-bps-reset"`
|
||||||
FlashMethod string `json:"flash-method"`
|
FlashMethod string `json:"flash-method"`
|
||||||
FlashVolume string `json:"msd-volume-name"`
|
FlashVolume string `json:"msd-volume-name"`
|
||||||
|
@ -240,7 +241,7 @@ func defaultTarget(goos, goarch, triple string) (*TargetSpec, error) {
|
||||||
Compiler: "clang",
|
Compiler: "clang",
|
||||||
Linker: "cc",
|
Linker: "cc",
|
||||||
CFlags: []string{"--target=" + triple},
|
CFlags: []string{"--target=" + triple},
|
||||||
GDB: "gdb",
|
GDB: []string{"gdb"},
|
||||||
PortReset: "false",
|
PortReset: "false",
|
||||||
}
|
}
|
||||||
if goos == "darwin" {
|
if goos == "darwin" {
|
||||||
|
@ -253,7 +254,7 @@ func defaultTarget(goos, goarch, triple string) (*TargetSpec, error) {
|
||||||
}
|
}
|
||||||
if goarch != runtime.GOARCH {
|
if goarch != runtime.GOARCH {
|
||||||
// Some educated guesses as to how to invoke helper programs.
|
// Some educated guesses as to how to invoke helper programs.
|
||||||
spec.GDB = "gdb-multiarch"
|
spec.GDB = []string{"gdb-multiarch"}
|
||||||
if goarch == "arm" && goos == "linux" {
|
if goarch == "arm" && goos == "linux" {
|
||||||
spec.CFlags = append(spec.CFlags, "--sysroot=/usr/arm-linux-gnueabihf")
|
spec.CFlags = append(spec.CFlags, "--sysroot=/usr/arm-linux-gnueabihf")
|
||||||
spec.Linker = "arm-linux-gnueabihf-gcc"
|
spec.Linker = "arm-linux-gnueabihf-gcc"
|
||||||
|
@ -271,3 +272,17 @@ func defaultTarget(goos, goarch, triple string) (*TargetSpec, error) {
|
||||||
}
|
}
|
||||||
return &spec, nil
|
return &spec, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LookupGDB looks up a gdb executable.
|
||||||
|
func (spec *TargetSpec) LookupGDB() (string, error) {
|
||||||
|
if len(spec.GDB) == 0 {
|
||||||
|
return "", errors.New("gdb not configured in the target specification")
|
||||||
|
}
|
||||||
|
for _, d := range spec.GDB {
|
||||||
|
_, err := exec.LookPath(d)
|
||||||
|
if err == nil {
|
||||||
|
return d, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "", errors.New("no gdb found configured in the target specification (" + strings.Join(spec.GDB, ", ") + ")")
|
||||||
|
}
|
||||||
|
|
7
main.go
7
main.go
|
@ -344,8 +344,9 @@ func FlashGDB(pkgName string, ocdOutput bool, options *compileopts.Options) erro
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if config.Target.GDB == "" {
|
gdb, err := config.Target.LookupGDB()
|
||||||
return errors.New("gdb not configured in the target specification")
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return builder.Build(pkgName, "", config, func(result builder.BuildResult) error {
|
return builder.Build(pkgName, "", config, func(result builder.BuildResult) error {
|
||||||
|
@ -490,7 +491,7 @@ func FlashGDB(pkgName string, ocdOutput bool, options *compileopts.Options) erro
|
||||||
for _, cmd := range gdbCommands {
|
for _, cmd := range gdbCommands {
|
||||||
params = append(params, "-ex", cmd)
|
params = append(params, "-ex", cmd)
|
||||||
}
|
}
|
||||||
cmd := executeCommand(config.Options, config.Target.GDB, params...)
|
cmd := executeCommand(config.Options, gdb, params...)
|
||||||
cmd.Stdin = os.Stdin
|
cmd.Stdin = os.Stdin
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
|
|
|
@ -19,5 +19,5 @@
|
||||||
"src/internal/task/task_stack_avr.S",
|
"src/internal/task/task_stack_avr.S",
|
||||||
"src/runtime/gc_avr.S"
|
"src/runtime/gc_avr.S"
|
||||||
],
|
],
|
||||||
"gdb": "avr-gdb"
|
"gdb": ["avr-gdb"]
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,5 +28,5 @@
|
||||||
"src/internal/task/task_stack_cortexm.S",
|
"src/internal/task/task_stack_cortexm.S",
|
||||||
"src/runtime/gc_arm.S"
|
"src/runtime/gc_arm.S"
|
||||||
],
|
],
|
||||||
"gdb": "gdb-multiarch"
|
"gdb": ["gdb-multiarch", "arm-none-eabi-gdb"]
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
"cflags": [
|
"cflags": [
|
||||||
"--target=armv7em-none-eabi",
|
"--target=armv7em-none-eabi",
|
||||||
"-Qunused-arguments"
|
"-Qunused-arguments"
|
||||||
],
|
]
|
||||||
"gdb": "arm-none-eabi-gdb"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,6 @@
|
||||||
"targets/gameboy-advance.s",
|
"targets/gameboy-advance.s",
|
||||||
"src/runtime/gc_arm.S"
|
"src/runtime/gc_arm.S"
|
||||||
],
|
],
|
||||||
"gdb": "gdb-multiarch",
|
"gdb": ["gdb-multiarch"],
|
||||||
"emulator": ["mgba", "-3"]
|
"emulator": ["mgba", "-3"]
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,5 +21,5 @@
|
||||||
"src/runtime/gc_riscv.S",
|
"src/runtime/gc_riscv.S",
|
||||||
"src/device/riscv/handleinterrupt.S"
|
"src/device/riscv/handleinterrupt.S"
|
||||||
],
|
],
|
||||||
"gdb": "riscv64-unknown-elf-gdb"
|
"gdb": ["riscv64-unknown-elf-gdb"]
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче