
LLDB mostly works on most platforms, but it is still lacking in some features. For example, it doesn't seem to support RISC-V yet (coming in LLVM 12), it only partially supports AVR (no stacktraces), and it doesn't seem to support the Ctrl-C keyboard command when running a binary for another platform (e.g. with GOOS=arm64). However, it does mostly work, even on baremetal systems.
50 строки
1,3 КиБ
Go
50 строки
1,3 КиБ
Go
package builder
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"os/exec"
|
|
|
|
"github.com/tinygo-org/tinygo/goenv"
|
|
)
|
|
|
|
// runCCompiler invokes a C compiler with the given arguments.
|
|
func runCCompiler(flags ...string) error {
|
|
if hasBuiltinTools {
|
|
// Compile this with the internal Clang compiler.
|
|
headerPath := getClangHeaderPath(goenv.Get("TINYGOROOT"))
|
|
if headerPath == "" {
|
|
return errors.New("could not locate Clang headers")
|
|
}
|
|
flags = append(flags, "-I"+headerPath)
|
|
cmd := exec.Command(os.Args[0], append([]string{"clang"}, flags...)...)
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
return cmd.Run()
|
|
}
|
|
|
|
// Compile this with an external invocation of the Clang compiler.
|
|
return execCommand("clang", flags...)
|
|
}
|
|
|
|
// link invokes a linker with the given name and flags.
|
|
func link(linker string, flags ...string) error {
|
|
if hasBuiltinTools && (linker == "ld.lld" || linker == "wasm-ld") {
|
|
// Run command with internal linker.
|
|
cmd := exec.Command(os.Args[0], append([]string{linker}, flags...)...)
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
return cmd.Run()
|
|
}
|
|
|
|
// Fall back to external command.
|
|
if _, ok := commands[linker]; ok {
|
|
return execCommand(linker, flags...)
|
|
}
|
|
|
|
cmd := exec.Command(linker, flags...)
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
cmd.Dir = goenv.Get("TINYGOROOT")
|
|
return cmd.Run()
|
|
}
|