1
0
mirror of https://github.com/golang/go synced 2024-11-22 02:04:40 -07:00

go/build: include processing of .c files for cgo packages

R=golang-dev, adg
CC=golang-dev
https://golang.org/cl/4696041
This commit is contained in:
Alex Brainman 2011-07-12 17:27:07 +10:00
parent 851ded9660
commit 0f8678a747
4 changed files with 31 additions and 2 deletions

View File

@ -61,7 +61,9 @@ func Build(tree *Tree, pkg string, info *DirInfo) (*Script, os.Error) {
if len(info.CgoFiles) > 0 {
cgoFiles := b.abss(info.CgoFiles...)
s.addInput(cgoFiles...)
outGo, outObj := b.cgo(cgoFiles)
cgoCFiles := b.abss(info.CFiles...)
s.addInput(cgoCFiles...)
outGo, outObj := b.cgo(cgoFiles, cgoCFiles)
gofiles = append(gofiles, outGo...)
ofiles = append(ofiles, outObj...)
s.addIntermediate(outGo...)
@ -370,7 +372,7 @@ func (b *build) gccArgs(args ...string) []string {
var cgoRe = regexp.MustCompile(`[/\\:]`)
func (b *build) cgo(cgofiles []string) (outGo, outObj []string) {
func (b *build) cgo(cgofiles, cgocfiles []string) (outGo, outObj []string) {
// cgo
// TODO(adg): CGOPKGPATH
// TODO(adg): CGO_FLAGS
@ -413,6 +415,12 @@ func (b *build) cgo(cgofiles []string) (outGo, outObj []string) {
b.script.addIntermediate(ofile)
}
}
for _, cfile := range cgocfiles {
ofile := b.obj + cgoRe.ReplaceAllString(cfile[:len(cfile)-1], "_") + "o"
b.gccCompile(ofile, cfile)
linkobj = append(linkobj, ofile)
outObj = append(outObj, ofile)
}
dynObj := b.obj + "_cgo_.o"
b.gccLink(dynObj, linkobj...)
b.script.addIntermediate(dynObj)

View File

@ -0,0 +1,9 @@
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
int
Add(int x, int y, int *sum)
{
sum = x+y;
}

View File

@ -7,6 +7,13 @@ package cgotest
/*
char* greeting = "hello, world";
*/
// #include "cgotest.h"
import "C"
import "unsafe"
var Greeting = C.GoString(C.greeting)
func DoAdd(x, y int) (sum int) {
C.Add(C.int(x), C.int(y), (*C.int)(unsafe.Pointer(&sum)))
return
}

View File

@ -0,0 +1,5 @@
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
extern int Add(int, int, int *);