Commit 84dc501d authored by Russ Cox's avatar Russ Cox

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/73994Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
parent 2e2047a0
// cmpout // cmpout -tags=use_go_run
// Copyright 2010 The Go Authors. All rights reserved. // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
...@@ -11,9 +11,10 @@ ...@@ -11,9 +11,10 @@
package main package main
import ( import (
"."
"flag" "flag"
"fmt" "fmt"
"."
) )
const MAXDIM = 100 const MAXDIM = 100
......
// cmpout // cmpout -tags=use_go_run
// Copyright 2009 The Go Authors. All rights reserved. // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
......
// cmpout // cmpout -tags=use_go_run
// Copyright 2009 The Go Authors. All rights reserved. // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
......
// cmpout // cmpout -tags=use_go_run
// Copyright 2009 The Go Authors. All rights reserved. // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
......
...@@ -799,13 +799,38 @@ func (t *test) run() { ...@@ -799,13 +799,38 @@ func (t *test) run() {
case "run": case "run":
useTmp = false useTmp = false
cmd := []string{"go", "run", goGcflags()} var out []byte
if *linkshared { var err error
cmd = append(cmd, "-linkshared") 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 { if err != nil {
t.err = err t.err = err
return return
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment