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.
// Use of this source code is governed by a BSD-style
......@@ -11,9 +11,10 @@
package main
import (
"."
"flag"
"fmt"
"."
)
const MAXDIM = 100
......
// 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
......
// 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
......
// 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
......
......@@ -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
......
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