mirror of
https://github.com/golang/go
synced 2024-11-17 05:54:46 -07:00
cmd/go/internal/work: reduce code duplication in buildModeInit by using sys.BuildModeSupported
Updates #34347 Change-Id: I6ea02d4737999bf24f5335508b5ed2352b498122 Reviewed-on: https://go-review.googlesource.com/c/go/+/208458 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
8324acadfe
commit
9f3c2b6d16
@ -86,7 +86,11 @@ func instrumentInit() {
|
||||
func buildModeInit() {
|
||||
gccgo := cfg.BuildToolchainName == "gccgo"
|
||||
var codegenArg string
|
||||
platform := cfg.Goos + "/" + cfg.Goarch
|
||||
|
||||
// Configure the build mode first, then verify that it is supported.
|
||||
// That way, if the flag is completely bogus we will prefer to error out with
|
||||
// "-buildmode=%s not supported" instead of naming the specific platform.
|
||||
|
||||
switch cfg.BuildBuildmode {
|
||||
case "archive":
|
||||
pkgsFilter = pkgsNotMain
|
||||
@ -95,20 +99,18 @@ func buildModeInit() {
|
||||
if gccgo {
|
||||
codegenArg = "-fPIC"
|
||||
} else {
|
||||
switch platform {
|
||||
case "darwin/arm", "darwin/arm64":
|
||||
codegenArg = "-shared"
|
||||
default:
|
||||
switch cfg.Goos {
|
||||
case "dragonfly", "freebsd", "illumos", "linux", "netbsd", "openbsd", "solaris":
|
||||
if platform == "linux/ppc64" {
|
||||
base.Fatalf("-buildmode=c-archive not supported on %s\n", platform)
|
||||
}
|
||||
// Use -shared so that the result is
|
||||
// suitable for inclusion in a PIE or
|
||||
// shared library.
|
||||
switch cfg.Goos {
|
||||
case "darwin":
|
||||
switch cfg.Goarch {
|
||||
case "arm", "arm64":
|
||||
codegenArg = "-shared"
|
||||
}
|
||||
|
||||
case "dragonfly", "freebsd", "illumos", "linux", "netbsd", "openbsd", "solaris":
|
||||
// Use -shared so that the result is
|
||||
// suitable for inclusion in a PIE or
|
||||
// shared library.
|
||||
codegenArg = "-shared"
|
||||
}
|
||||
}
|
||||
cfg.ExeSuffix = ".a"
|
||||
@ -118,27 +120,25 @@ func buildModeInit() {
|
||||
if gccgo {
|
||||
codegenArg = "-fPIC"
|
||||
} else {
|
||||
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":
|
||||
switch cfg.Goos {
|
||||
case "linux", "android", "freebsd":
|
||||
codegenArg = "-shared"
|
||||
case "darwin/amd64", "darwin/386":
|
||||
case "windows/amd64", "windows/386":
|
||||
case "windows":
|
||||
// Do not add usual .exe suffix to the .dll file.
|
||||
cfg.ExeSuffix = ""
|
||||
default:
|
||||
base.Fatalf("-buildmode=c-shared not supported on %s\n", platform)
|
||||
}
|
||||
}
|
||||
ldBuildmode = "c-shared"
|
||||
case "default":
|
||||
switch platform {
|
||||
case "android/arm", "android/arm64", "android/amd64", "android/386":
|
||||
switch cfg.Goos {
|
||||
case "android":
|
||||
codegenArg = "-shared"
|
||||
ldBuildmode = "pie"
|
||||
case "darwin/arm", "darwin/arm64":
|
||||
codegenArg = "-shared"
|
||||
case "darwin":
|
||||
switch cfg.Goarch {
|
||||
case "arm", "arm64":
|
||||
codegenArg = "-shared"
|
||||
}
|
||||
fallthrough
|
||||
default:
|
||||
ldBuildmode = "exe"
|
||||
@ -161,18 +161,8 @@ func buildModeInit() {
|
||||
}
|
||||
if gccgo {
|
||||
codegenArg = "-fPIE"
|
||||
} else {
|
||||
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":
|
||||
codegenArg = "-shared"
|
||||
case "darwin/amd64":
|
||||
codegenArg = "-shared"
|
||||
case "aix/ppc64":
|
||||
default:
|
||||
base.Fatalf("-buildmode=pie not supported on %s\n", platform)
|
||||
}
|
||||
} else if cfg.Goos != "aix" {
|
||||
codegenArg = "-shared"
|
||||
}
|
||||
ldBuildmode = "pie"
|
||||
case "shared":
|
||||
@ -180,11 +170,6 @@ func buildModeInit() {
|
||||
if gccgo {
|
||||
codegenArg = "-fPIC"
|
||||
} else {
|
||||
switch platform {
|
||||
case "linux/386", "linux/amd64", "linux/arm", "linux/arm64", "linux/ppc64le", "linux/s390x":
|
||||
default:
|
||||
base.Fatalf("-buildmode=shared not supported on %s\n", platform)
|
||||
}
|
||||
codegenArg = "-dynlink"
|
||||
}
|
||||
if cfg.BuildO != "" {
|
||||
@ -196,14 +181,6 @@ func buildModeInit() {
|
||||
if gccgo {
|
||||
codegenArg = "-fPIC"
|
||||
} else {
|
||||
switch platform {
|
||||
case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", "linux/s390x", "linux/ppc64le",
|
||||
"android/amd64", "android/arm", "android/arm64", "android/386":
|
||||
case "darwin/amd64":
|
||||
case "freebsd/amd64":
|
||||
default:
|
||||
base.Fatalf("-buildmode=plugin not supported on %s\n", platform)
|
||||
}
|
||||
codegenArg = "-dynlink"
|
||||
}
|
||||
cfg.ExeSuffix = ".so"
|
||||
@ -211,16 +188,19 @@ func buildModeInit() {
|
||||
default:
|
||||
base.Fatalf("buildmode=%s not supported", cfg.BuildBuildmode)
|
||||
}
|
||||
|
||||
if !sys.BuildModeSupported(cfg.BuildToolchainName, cfg.BuildBuildmode, cfg.Goos, cfg.Goarch) {
|
||||
base.Fatalf("-buildmode=%s not supported on %s/%s\n", cfg.BuildBuildmode, cfg.Goos, cfg.Goarch)
|
||||
}
|
||||
|
||||
if cfg.BuildLinkshared {
|
||||
if !sys.BuildModeSupported(cfg.BuildToolchainName, "shared", cfg.Goos, cfg.Goarch) {
|
||||
base.Fatalf("-linkshared not supported on %s/%s\n", cfg.Goos, cfg.Goarch)
|
||||
}
|
||||
if gccgo {
|
||||
codegenArg = "-fPIC"
|
||||
} else {
|
||||
switch platform {
|
||||
case "linux/386", "linux/amd64", "linux/arm", "linux/arm64", "linux/ppc64le", "linux/s390x":
|
||||
forcedAsmflags = append(forcedAsmflags, "-D=GOBUILDMODE_shared=1")
|
||||
default:
|
||||
base.Fatalf("-linkshared not supported on %s\n", platform)
|
||||
}
|
||||
forcedAsmflags = append(forcedAsmflags, "-D=GOBUILDMODE_shared=1")
|
||||
codegenArg = "-dynlink"
|
||||
forcedGcflags = append(forcedGcflags, "-linkshared")
|
||||
// TODO(mwhudson): remove -w when that gets fixed in linker.
|
||||
|
@ -47,11 +47,6 @@ func MustLinkExternal(goos, goarch string) bool {
|
||||
// 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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user