mirror of https://github.com/tinygo-org/tinygo.git
wasmstm32webassemblymicrocontrollerarmavrspiwasiadafruitarduinocircuitplayground-expressgpioi2cllvmmicrobitnrf51nrf52nrf52840samd21tinygo
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.6 KiB
59 lines
1.6 KiB
package builder
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"os/exec"
|
|
|
|
"github.com/tinygo-org/tinygo/goenv"
|
|
)
|
|
|
|
// runCCompiler invokes a C compiler with the given arguments.
|
|
func runCCompiler(command string, flags ...string) error {
|
|
if hasBuiltinTools && command == "clang" {
|
|
// 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()
|
|
}
|
|
|
|
// Running some other compiler. Maybe it has been defined in the
|
|
// commands map (unlikely).
|
|
if cmdNames, ok := commands[command]; ok {
|
|
return execCommand(cmdNames, flags...)
|
|
}
|
|
|
|
// Alternatively, run the compiler directly.
|
|
cmd := exec.Command(command, flags...)
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
return cmd.Run()
|
|
}
|
|
|
|
// 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 cmdNames, ok := commands[linker]; ok {
|
|
return execCommand(cmdNames, flags...)
|
|
}
|
|
|
|
cmd := exec.Command(linker, flags...)
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
cmd.Dir = goenv.Get("TINYGOROOT")
|
|
return cmd.Run()
|
|
}
|
|
|