(*cmd/dist.tester).supportedBuildmode
包含一个大型开关,用于确定给定的 GOOS
/ GOARCH
是否支持给定的构建模式:
go/src/cmd/dist/test.go
第977行到第1038行 in fa90aac
| | func (t*tester) supportedBuildmode(modestring) bool { |
| | pair:=goos+"-"+goarch |
| | switchmode { |
| | case"c-archive": |
| | if!t.extLink() { |
| | returnfalse |
| | } |
| | switchpair { |
| | case"aix-ppc64", |
| | "darwin-amd64", "darwin-arm64", "ios-arm64", |
| | "linux-amd64", "linux-386", "linux-ppc64le", "linux-s390x", |
| | "freebsd-amd64", |
| | "windows-amd64", "windows-386": |
| | returntrue |
| | } |
| | returnfalse |
| | case"c-shared": |
| | switchpair { |
| | case"linux-386", "linux-amd64", "linux-arm", "linux-arm64", "linux-ppc64le", "linux-s390x", |
| | "darwin-amd64", "darwin-arm64", |
| | "freebsd-amd64", |
| | "android-arm", "android-arm64", "android-386", |
| | "windows-amd64", "windows-386": |
| | returntrue |
| | } |
| | returnfalse |
| | case"shared": |
| | switchpair { |
| | case"linux-386", "linux-amd64", "linux-arm", "linux-arm64", "linux-ppc64le", "linux-s390x": |
| | returntrue |
| | } |
| | returnfalse |
| | case"plugin": |
| | // linux-arm64 is missing because it causes the external linker //
| | // to crash, see https://golang.org/issue/17138 |
| | switchpair { |
| | case"linux-386", "linux-amd64", "linux-arm", "linux-s390x", "linux-ppc64le": |
| | returntrue |
| | case"darwin-amd64", "darwin-arm64": |
| | returntrue |
| | case"freebsd-amd64": |
| | returntrue |
| | } |
| | returnfalse |
| | case"pie": |
| | switchpair { |
| // ...省略部分代码... //
3条答案
按热度按时间dojqjjoe1#
我的理解是,cmd/dist需要使用Go 1.4进行构建,因此无法导入cmd/internal/sys。这就是为什么我最初编写了两个版本的原因。
uttx8gqw2#
啊,那可能是这样。
但是在这种情况下,我们仍然应该有一些东西来确保这两个开关是等效的,例如一个回归测试来比较这两个函数。
或者,也许
(*tester).supportedBuildmode
应该探测cmd/go
来确定支持,而不是在其过程中编码自己的并行假设。bqf10yzr3#
https://go.dev/cl/403014提到了这个问题:
cmd/dist: add build mode support regression test for issue #43571