]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: invoke gcc -print-libgcc-file-name only once
authorShenghou Ma <minux.ma@gmail.com>
Tue, 6 Nov 2012 21:09:54 +0000 (05:09 +0800)
committerShenghou Ma <minux.ma@gmail.com>
Tue, 6 Nov 2012 21:09:54 +0000 (05:09 +0800)
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/6741051

src/cmd/go/build.go

index 78d7c907bdb7e4f0835e033ff03647c2108b27ab..4cfecdd88f19512a5b13be5a02b04e5b2ce4e48c 100644 (file)
@@ -1541,6 +1541,8 @@ func envList(key string) []string {
 
 var cgoRe = regexp.MustCompile(`[/\\:]`)
 
+var cgoLibGccFile string
+
 func (b *builder) cgo(p *Package, cgoExe, obj string, gccfiles []string) (outGo, outObj []string, err error) {
        if goos != toolGOOS {
                return nil, nil, errors.New("cannot use cgo when compiling for a different operating system")
@@ -1630,16 +1632,19 @@ func (b *builder) cgo(p *Package, cgoExe, obj string, gccfiles []string) (outGo,
                        bareLDFLAGS = append(bareLDFLAGS, f)
                }
        }
-       libgcc, err := b.libgcc(p)
-       if err != nil {
-               return nil, nil, err
+       if cgoLibGccFile == "" {
+               var err error
+               cgoLibGccFile, err = b.libgcc(p)
+               if err != nil {
+                       return nil, nil, err
+               }
        }
        var staticLibs []string
        if goos == "windows" {
                // libmingw32 and libmingwex might also use libgcc, so libgcc must come last
-               staticLibs = []string{"-lmingwex", "-lmingw32", libgcc}
+               staticLibs = []string{"-lmingwex", "-lmingw32", cgoLibGccFile}
        } else {
-               staticLibs = []string{libgcc}
+               staticLibs = []string{cgoLibGccFile}
        }
 
        for _, cfile := range cfiles {