mirror of
https://github.com/golang/go
synced 2024-11-22 02:24:41 -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:
parent
851ded9660
commit
0f8678a747
@ -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)
|
||||
|
9
src/pkg/go/build/cgotest/cgotest.c
Normal file
9
src/pkg/go/build/cgotest/cgotest.c
Normal 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;
|
||||
}
|
@ -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
|
||||
}
|
||||
|
5
src/pkg/go/build/cgotest/cgotest.h
Normal file
5
src/pkg/go/build/cgotest/cgotest.h
Normal 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 *);
|
Loading…
Reference in New Issue
Block a user