
For context, see: https://github.com/tinygo-org/tinygo-site/pull/327 It only needs to be updated every half year, so it's not too bad, and it could be very useful to some people.
51 строка
1,6 КиБ
Go
51 строка
1,6 КиБ
Go
package builder
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/tinygo-org/tinygo/compileopts"
|
|
"github.com/tinygo-org/tinygo/goenv"
|
|
)
|
|
|
|
// NewConfig builds a new Config object from a set of compiler options. It also
|
|
// loads some information from the environment while doing that. For example, it
|
|
// uses the currently active GOPATH (from the goenv package) to determine the Go
|
|
// version to use.
|
|
func NewConfig(options *compileopts.Options) (*compileopts.Config, error) {
|
|
spec, err := compileopts.LoadTarget(options)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if options.OpenOCDCommands != nil {
|
|
// Override the OpenOCDCommands from the target spec if specified on
|
|
// the command-line
|
|
spec.OpenOCDCommands = options.OpenOCDCommands
|
|
}
|
|
|
|
goroot := goenv.Get("GOROOT")
|
|
if goroot == "" {
|
|
return nil, errors.New("cannot locate $GOROOT, please set it manually")
|
|
}
|
|
|
|
major, minor, err := goenv.GetGorootVersion(goroot)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("could not read version from GOROOT (%v): %v", goroot, err)
|
|
}
|
|
if major != 1 || minor < 18 || minor > 20 {
|
|
// Note: when this gets updated, also update the Go compatibility matrix:
|
|
// https://github.com/tinygo-org/tinygo-site/blob/dev/content/docs/reference/go-compat-matrix.md
|
|
return nil, fmt.Errorf("requires go version 1.18 through 1.20, got go%d.%d", major, minor)
|
|
}
|
|
|
|
clangHeaderPath := getClangHeaderPath(goenv.Get("TINYGOROOT"))
|
|
|
|
return &compileopts.Config{
|
|
Options: options,
|
|
Target: spec,
|
|
GoMinorVersion: minor,
|
|
ClangHeaders: clangHeaderPath,
|
|
TestConfig: options.TestConfig,
|
|
}, nil
|
|
}
|