diff options
author | Russ Cox <rsc@golang.org> | 2009-10-03 10:37:12 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-10-03 10:37:12 -0700 |
commit | e7a28869ec5829d4e202b44797b748522a533b2a (patch) | |
tree | 7b69b0974f4999bac76d11abed2071a2dc9e97aa /src/cmd/cgo/main.go | |
parent | e6310aac93e28c68953277b30e2eaf8bdd9f106a (diff) | |
download | go-e7a28869ec5829d4e202b44797b748522a533b2a.tar.gz |
8c, 8l dynamic loading support.
better mach binaries.
cgo working on darwin+linux amd64+386.
eliminated context switches - pi is 30x faster.
add libcgo to build.
on snow leopard:
- non-cgo binaries work; all tests pass.
- cgo binaries work on amd64 but not 386.
R=r
DELTA=2031 (1316 added, 626 deleted, 89 changed)
OCL=35264
CL=35304
Diffstat (limited to 'src/cmd/cgo/main.go')
-rw-r--r-- | src/cmd/cgo/main.go | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/src/cmd/cgo/main.go b/src/cmd/cgo/main.go index b629f0a22..eb04fa77d 100644 --- a/src/cmd/cgo/main.go +++ b/src/cmd/cgo/main.go @@ -11,15 +11,13 @@ package main import ( - "flag"; "fmt"; "go/ast"; "os"; ) func usage() { - fmt.Fprint(os.Stderr, "usage: cgo file.cgo\n"); - flag.PrintDefaults(); + fmt.Fprint(os.Stderr, "usage: cgo [compiler options] file.go\n"); } var ptrSizeMap = map[string]int64 { @@ -28,9 +26,24 @@ var ptrSizeMap = map[string]int64 { "arm": 4 } +var expandName = map[string]string { + "schar": "signed char", + "uchar": "unsigned char", + "ushort": "unsigned short", + "uint": "unsigned int", + "ulong": "unsigned long", + "longlong": "long long", + "ulonglong": "unsigned long long", +} + func main() { - flag.Usage = usage; - flag.Parse(); + args := os.Args; + if len(args) < 2 { + usage(); + os.Exit(2); + } + gccOptions := args[1:len(args)-1]; + input := args[len(args)-1]; arch := os.Getenv("GOARCH"); if arch == "" { @@ -41,14 +54,17 @@ func main() { fatal("unknown architecture %s", arch); } - args := flag.Args(); - if len(args) != 1 { - usage(); - os.Exit(2); + p := openProg(input); + for _, cref := range p.Crefs { + // Convert C.ulong to C.unsigned long, etc. + if expand, ok := expandName[cref.Name]; ok { + cref.Name = expand; + } } - p := openProg(args[0]); + p.PtrSize = ptrSize; p.Preamble = p.Preamble + "\n" + builtinProlog; + p.GccOptions = gccOptions; p.loadDebugInfo(); p.Vardef = make(map[string]*Type); p.Funcdef = make(map[string]*FuncType); @@ -83,5 +99,5 @@ func main() { } p.PackagePath = p.Package; - p.writeOutput(args[0]); + p.writeOutput(input); } |