mirror of
https://github.com/golang/go
synced 2024-10-14 11:53:56 +00:00
test/run: use go tool compile + link instead of go run when possible
This cuts 6 seconds off all.bash with the new go command. Not a ton, but also an easy 6 seconds to grab. The -tags=use_go_run in the misc/cgo tests is just some go command flag that will make run.go use go run, but without making everything look stale. (Those tests have relative imports, so go tool compile+link is not enough.) Change-Id: I43bf4bb661d3adde2b2d4aad5e8f64b97bc69ba9 Reviewed-on: https://go-review.googlesource.com/73994 Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
2e2047a07f
commit
84dc501d20
|
@ -1,4 +1,4 @@
|
|||
// cmpout
|
||||
// cmpout -tags=use_go_run
|
||||
|
||||
// Copyright 2010 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
|
@ -11,9 +11,10 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"."
|
||||
"flag"
|
||||
"fmt"
|
||||
|
||||
"."
|
||||
)
|
||||
|
||||
const MAXDIM = 100
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// cmpout
|
||||
// cmpout -tags=use_go_run
|
||||
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// cmpout
|
||||
// cmpout -tags=use_go_run
|
||||
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// cmpout
|
||||
// cmpout -tags=use_go_run
|
||||
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
|
|
37
test/run.go
37
test/run.go
|
@ -799,13 +799,38 @@ func (t *test) run() {
|
|||
|
||||
case "run":
|
||||
useTmp = false
|
||||
cmd := []string{"go", "run", goGcflags()}
|
||||
if *linkshared {
|
||||
cmd = append(cmd, "-linkshared")
|
||||
var out []byte
|
||||
var err error
|
||||
if len(flags)+len(args) == 0 && goGcflags() == "" && !*linkshared {
|
||||
// If we're not using special go command flags,
|
||||
// skip all the go command machinery.
|
||||
// This avoids any time the go command would
|
||||
// spend checking whether, for example, the installed
|
||||
// package runtime is up to date.
|
||||
// Because we run lots of trivial test programs,
|
||||
// the time adds up.
|
||||
pkg := filepath.Join(t.tempDir, "pkg.a")
|
||||
if _, err := runcmd("go", "tool", "compile", "-o", pkg, t.goFileName()); err != nil {
|
||||
t.err = err
|
||||
return
|
||||
}
|
||||
exe := filepath.Join(t.tempDir, "test.exe")
|
||||
cmd := []string{"go", "tool", "link", "-s", "-w"}
|
||||
cmd = append(cmd, "-o", exe, pkg)
|
||||
if _, err := runcmd(cmd...); err != nil {
|
||||
t.err = err
|
||||
return
|
||||
}
|
||||
out, err = runcmd(append([]string{exe}, args...)...)
|
||||
} else {
|
||||
cmd := []string{"go", "run", goGcflags()}
|
||||
if *linkshared {
|
||||
cmd = append(cmd, "-linkshared")
|
||||
}
|
||||
cmd = append(cmd, flags...)
|
||||
cmd = append(cmd, t.goFileName())
|
||||
out, err = runcmd(append(cmd, args...)...)
|
||||
}
|
||||
cmd = append(cmd, flags...)
|
||||
cmd = append(cmd, t.goFileName())
|
||||
out, err := runcmd(append(cmd, args...)...)
|
||||
if err != nil {
|
||||
t.err = err
|
||||
return
|
||||
|
|
Loading…
Reference in a new issue