]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/cgo: only write _cgo_flags for gccgo
authorIan Lance Taylor <iant@golang.org>
Wed, 30 Aug 2023 21:06:45 +0000 (14:06 -0700)
committerGopher Robot <gobot@golang.org>
Wed, 30 Aug 2023 22:53:52 +0000 (22:53 +0000)
We only use it for gccgo. Also only write out LDFLAGS,
as that is all that cmd/go uses.

Fixes #60642

Change-Id: I6ccc419a17a433583d9868dd63aa7ec41c2b22c4
Reviewed-on: https://go-review.googlesource.com/c/go/+/524556
Auto-Submit: Ian Lance Taylor <iant@google.com>
Commit-Queue: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
src/cmd/cgo/doc.go
src/cmd/cgo/gcc.go
src/cmd/cgo/main.go
src/cmd/cgo/out.go

index 894df2d836de9c74a3d0f76f003263cea678b20d..1f635d7c098bca174708bf204d7830d6d9f642b4 100644 (file)
@@ -710,7 +710,7 @@ files:
        _cgo_export.c   # for gcc
        _cgo_export.h   # for gcc
        _cgo_main.c     # for gcc
-       _cgo_flags      # for alternative build tools
+       _cgo_flags      # for build tool (if -gccgo)
 
 The file x.cgo1.go is a copy of x.go with the import "C" removed and
 references to C.xxx replaced with names like _Cfunc_xxx or _Ctype_xxx.
index 28dc2a9bf8998123cfa59a916f3b9332c3518ec5..d30056ec840033c6bd2188a2e0ab6d7ce87b6365 100644 (file)
@@ -104,10 +104,8 @@ func (f *File) ProcessCgoDirectives() {
        f.Preamble = strings.Join(linesOut, "\n")
 }
 
-// addToFlag appends args to flag. All flags are later written out onto the
-// _cgo_flags file for the build system to use.
+// addToFlag appends args to flag.
 func (p *Package) addToFlag(flag string, args []string) {
-       p.CgoFlags[flag] = append(p.CgoFlags[flag], args...)
        if flag == "CFLAGS" {
                // We'll also need these when preprocessing for dwarf information.
                // However, discard any -g options: we need to be able
@@ -118,6 +116,9 @@ func (p *Package) addToFlag(flag string, args []string) {
                        }
                }
        }
+       if flag == "LDFLAGS" {
+               p.LdFlags = append(p.LdFlags, args...)
+       }
 }
 
 // splitQuoted splits the string s around each instance of one or more consecutive
index 55f9cdc318b08e1f66b0e3d0236c52989428fba4..fce2671c2c123b3b87887c4cd6552addd4b36509 100644 (file)
@@ -38,7 +38,7 @@ type Package struct {
        IntSize     int64
        GccOptions  []string
        GccIsClang  bool
-       CgoFlags    map[string][]string // #cgo flags (CFLAGS, LDFLAGS)
+       LdFlags     []string // #cgo LDFLAGS
        Written     map[string]bool
        Name        map[string]*Name // accumulated Name from Files
        ExpFunc     []*ExpFunc       // accumulated ExpFunc from Files
@@ -475,7 +475,6 @@ func newPackage(args []string) *Package {
        p := &Package{
                PtrSize:     ptrSize,
                IntSize:     intSize,
-               CgoFlags:    make(map[string][]string),
                Written:     make(map[string]bool),
                noCallbacks: make(map[string]bool),
                noEscapes:   make(map[string]bool),
index 947c61b5c5970e0b14d1bd77722c1e5f9df120c8..8e1b5d62fd702994b0c5a1e8fb55384f6561748e 100644 (file)
@@ -45,18 +45,17 @@ func (p *Package) writeDefs() {
 
        var gccgoInit strings.Builder
 
-       fflg := creat(*objDir + "_cgo_flags")
-       for k, v := range p.CgoFlags {
-               for _, arg := range v {
-                       fmt.Fprintf(fflg, "_CGO_%s=%s\n", k, arg)
-               }
-               if k == "LDFLAGS" && !*gccgo {
-                       for _, arg := range v {
-                               fmt.Fprintf(fgo2, "//go:cgo_ldflag %q\n", arg)
-                       }
+       if !*gccgo {
+               for _, arg := range p.LdFlags {
+                       fmt.Fprintf(fgo2, "//go:cgo_ldflag %q\n", arg)
+               }
+       } else {
+               fflg := creat(*objDir + "_cgo_flags")
+               for _, arg := range p.LdFlags {
+                       fmt.Fprintf(fflg, "_CGO_LDFLAGS=%s\n", arg)
                }
+               fflg.Close()
        }
-       fflg.Close()
 
        // Write C main file for using gcc to resolve imports.
        fmt.Fprintf(fm, "#include <stddef.h>\n") // For size_t below.