1
0
mirror of https://github.com/golang/go synced 2024-10-03 04:11:21 -06:00

cmd/go: start support for -linkshared

This will fruitlessly rebuild stale packages that are in a shared
library.

Change-Id: I66a6e1adf7818558e7d1351ab215a5021b4a8a6b
Reviewed-on: https://go-review.googlesource.com/8333
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Michael Hudson-Doyle 2015-04-01 15:53:52 +13:00 committed by Ian Lance Taylor
parent c3ddb97022
commit 09fb56dc7d
4 changed files with 20 additions and 1 deletions

View File

@ -77,6 +77,9 @@ and test commands:
-buildmode mode
build mode to use. See 'go help buildmodes' for more.
-linkshared
link against shared libraries previously created with
-buildmode=shared
-compiler name
name of compiler to use, as in runtime.Compiler (gccgo or gc).
-gccgoflags 'arg list'
@ -149,6 +152,7 @@ var buildGccgoflags []string // -gccgoflags flag
var buildRace bool // -race flag
var buildToolExec []string // -toolexec flag
var buildBuildmode string // -buildmode flag
var buildLinkshared bool // -linkshared flag
var buildContext = build.Default
var buildToolchain toolchain = noToolchain{}
@ -204,6 +208,7 @@ func addBuildFlags(cmd *Command) {
cmd.Flag.BoolVar(&buildRace, "race", false, "")
cmd.Flag.Var((*stringsFlag)(&buildToolExec), "toolexec", "")
cmd.Flag.StringVar(&buildBuildmode, "buildmode", "default", "")
cmd.Flag.BoolVar(&buildLinkshared, "linkshared", false, "")
}
func addBuildFlagsNX(cmd *Command) {
@ -307,6 +312,15 @@ func buildModeInit() {
default:
fatalf("buildmode=%s not supported", buildBuildmode)
}
if buildLinkshared {
if goarch != "amd64" || goos != "linux" {
fmt.Fprintf(os.Stderr, "go %s: -linkshared is only supported on linux/amd64\n", flag.Args()[0])
os.Exit(2)
}
codegenArg = "-dynlink"
// TODO(mwhudson): remove -w when that gets fixed in linker.
buildLdflags = append(buildLdflags, "-linkshared", "-w")
}
if ldBuildmode != "" {
buildLdflags = append(buildLdflags, "-buildmode="+ldBuildmode)
}

View File

@ -97,6 +97,9 @@ and test commands:
-buildmode mode
build mode to use. See 'go help buildmodes' for more.
-linkshared
link against shared libraries previously created with
-buildmode=shared
-compiler name
name of compiler to use, as in runtime.Compiler (gccgo or gc).
-gccgoflags 'arg list'

View File

@ -314,6 +314,7 @@ func runTest(cmd *Command, args []string) {
findExecCmd() // initialize cached result
raceInit()
buildModeInit()
pkgs := packagesForBuild(pkgArgs)
if len(pkgs) == 0 {
fatalf("no packages to test")

View File

@ -48,6 +48,7 @@ var testFlagDefn = []*testFlagSpec{
{name: "tags"},
{name: "compiler"},
{name: "race", boolVar: &buildRace},
{name: "linkshared", boolVar: &buildLinkshared},
{name: "installsuffix"},
// passed to 6.out, adding a "test." prefix to the name if necessary: -v becomes -test.v.
@ -115,7 +116,7 @@ func testFlags(args []string) (packageNames, passToTest []string) {
var err error
switch f.name {
// bool flags.
case "a", "c", "i", "n", "x", "v", "race", "cover", "work":
case "a", "c", "i", "n", "x", "v", "race", "cover", "work", "linkshared":
setBoolFlag(f.boolVar, value)
case "o":
testO = value