mirror of
https://github.com/golang/go
synced 2024-11-17 07:45:09 -07:00
cmd/go: add a 'buildmode' condition for script tests
In CL 208233 I am fixing a panic that occurs only with a specific build mode. I want that test to run on all platforms that support that build mode, but the logic for determining support is somewhat involved. For now, I am duplicating that logic into the cmd/internal/sys package, which already reports platform support for other build flags. We can refactor cmd/go/internal/work to use the extracted function in a followup CL. Updates #35759 Change-Id: Ibbaedde4d1e8f683c650beedd10849bc27e7a6e7 Reviewed-on: https://go-review.googlesource.com/c/go/+/208457 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
This commit is contained in:
parent
c931f1b6e6
commit
28314cf124
@ -30,6 +30,7 @@ import (
|
|||||||
"cmd/go/internal/robustio"
|
"cmd/go/internal/robustio"
|
||||||
"cmd/go/internal/txtar"
|
"cmd/go/internal/txtar"
|
||||||
"cmd/go/internal/work"
|
"cmd/go/internal/work"
|
||||||
|
"cmd/internal/sys"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TestScript runs the tests in testdata/script/*.txt.
|
// TestScript runs the tests in testdata/script/*.txt.
|
||||||
@ -303,6 +304,11 @@ Script:
|
|||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
if strings.HasPrefix(cond.tag, "buildmode:") {
|
||||||
|
value := strings.TrimPrefix(cond.tag, "buildmode:")
|
||||||
|
ok = sys.BuildModeSupported(runtime.Compiler, value, runtime.GOOS, runtime.GOARCH)
|
||||||
|
break
|
||||||
|
}
|
||||||
if !imports.KnownArch[cond.tag] && !imports.KnownOS[cond.tag] && cond.tag != "gc" && cond.tag != "gccgo" {
|
if !imports.KnownArch[cond.tag] && !imports.KnownOS[cond.tag] && cond.tag != "gc" && cond.tag != "gccgo" {
|
||||||
ts.fatalf("unknown condition %q", cond.tag)
|
ts.fatalf("unknown condition %q", cond.tag)
|
||||||
}
|
}
|
||||||
|
1
src/cmd/go/testdata/script/README
vendored
1
src/cmd/go/testdata/script/README
vendored
@ -79,6 +79,7 @@ should only run when the condition is satisfied. The available conditions are:
|
|||||||
- [symlink] for testenv.HasSymlink()
|
- [symlink] for testenv.HasSymlink()
|
||||||
- [exec:prog] for whether prog is available for execution (found by exec.LookPath)
|
- [exec:prog] for whether prog is available for execution (found by exec.LookPath)
|
||||||
- [GODEBUG:value] for whether value is one of the comma-separated entries in the GODEBUG variable
|
- [GODEBUG:value] for whether value is one of the comma-separated entries in the GODEBUG variable
|
||||||
|
- [buildmode:value] for whether -buildmode=value is supported
|
||||||
|
|
||||||
A condition can be negated: [!short] means to run the rest of the line
|
A condition can be negated: [!short] means to run the rest of the line
|
||||||
when testing.Short() is false. Multiple conditions may be given for a single
|
when testing.Short() is false. Multiple conditions may be given for a single
|
||||||
|
@ -43,3 +43,76 @@ func MustLinkExternal(goos, goarch string) bool {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BuildModeSupported reports whether goos/goarch supports the given build mode
|
||||||
|
// using the given compiler.
|
||||||
|
func BuildModeSupported(compiler, buildmode, goos, goarch string) bool {
|
||||||
|
// This function mirrors the logic in cmd/go/internal/work.buildModeInit.
|
||||||
|
//
|
||||||
|
// TODO(bcmills): Refactor buildModeInit to use this function so that the two
|
||||||
|
// don't get out of sync.
|
||||||
|
|
||||||
|
if compiler == "gccgo" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
platform := goos + "/" + goarch
|
||||||
|
|
||||||
|
switch buildmode {
|
||||||
|
case "archive":
|
||||||
|
return true
|
||||||
|
|
||||||
|
case "c-archive":
|
||||||
|
// TODO(bcmills): This seems dubious.
|
||||||
|
// Do we really support c-archive mode on js/wasm‽
|
||||||
|
return platform != "linux/ppc64"
|
||||||
|
|
||||||
|
case "c-shared":
|
||||||
|
switch platform {
|
||||||
|
case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", "linux/ppc64le", "linux/s390x",
|
||||||
|
"android/amd64", "android/arm", "android/arm64", "android/386",
|
||||||
|
"freebsd/amd64",
|
||||||
|
"darwin/amd64", "darwin/386",
|
||||||
|
"windows/amd64", "windows/386":
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
|
||||||
|
case "default":
|
||||||
|
return true
|
||||||
|
|
||||||
|
case "exe":
|
||||||
|
return true
|
||||||
|
|
||||||
|
case "pie":
|
||||||
|
switch platform {
|
||||||
|
case "linux/386", "linux/amd64", "linux/arm", "linux/arm64", "linux/ppc64le", "linux/s390x",
|
||||||
|
"android/amd64", "android/arm", "android/arm64", "android/386",
|
||||||
|
"freebsd/amd64",
|
||||||
|
"darwin/amd64",
|
||||||
|
"aix/ppc64":
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
|
||||||
|
case "shared":
|
||||||
|
switch platform {
|
||||||
|
case "linux/386", "linux/amd64", "linux/arm", "linux/arm64", "linux/ppc64le", "linux/s390x":
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
|
||||||
|
case "plugin":
|
||||||
|
switch platform {
|
||||||
|
case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", "linux/s390x", "linux/ppc64le",
|
||||||
|
"android/amd64", "android/arm", "android/arm64", "android/386",
|
||||||
|
"darwin/amd64",
|
||||||
|
"freebsd/amd64":
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user