mirror of
https://github.com/golang/go
synced 2024-11-25 02:07:58 -07:00
cgo: add support for callbacks from dynamic libraries
R=golang-dev, rsc CC=golang-dev, mpimenov https://golang.org/cl/5375042
This commit is contained in:
parent
95e60acb97
commit
11e73b89ca
22
misc/cgo/testso/Makefile
Normal file
22
misc/cgo/testso/Makefile
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# 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.
|
||||||
|
|
||||||
|
include ../../../src/Make.inc
|
||||||
|
|
||||||
|
TARG=cgosotest
|
||||||
|
|
||||||
|
CGO_DEPS+=libcgoso.so
|
||||||
|
CGO_LDFLAGS+=-lcgoso -L.
|
||||||
|
CLEANFILES+=out libcgoso.so
|
||||||
|
CGOFILES=\
|
||||||
|
cgoso.go\
|
||||||
|
|
||||||
|
include ../../../src/Make.pkg
|
||||||
|
|
||||||
|
libcgoso.so: cgoso_c.c
|
||||||
|
gcc cgoso_c.c -fPIC -o $@ $(_CGO_CFLAGS_$(GOARCH)) $(_CGO_LDFLAGS_$(GOOS))
|
||||||
|
|
||||||
|
out: install main.go
|
||||||
|
$(GC) main.go
|
||||||
|
$(LD) -o $@ main.$O
|
16
misc/cgo/testso/cgoso.go
Normal file
16
misc/cgo/testso/cgoso.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
package cgosotest
|
||||||
|
|
||||||
|
//void sofunc(void);
|
||||||
|
import "C"
|
||||||
|
|
||||||
|
func Test() {
|
||||||
|
C.sofunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
//export goCallback
|
||||||
|
func goCallback() {
|
||||||
|
}
|
9
misc/cgo/testso/cgoso_c.c
Normal file
9
misc/cgo/testso/cgoso_c.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.
|
||||||
|
|
||||||
|
void sofunc(void)
|
||||||
|
{
|
||||||
|
extern void goCallback(void);
|
||||||
|
goCallback();
|
||||||
|
}
|
11
misc/cgo/testso/main.go
Normal file
11
misc/cgo/testso/main.go
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "cgosotest"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
cgosotest.Test()
|
||||||
|
}
|
@ -162,7 +162,7 @@ endif
|
|||||||
# After main we have to define all the symbols that will be provided
|
# After main we have to define all the symbols that will be provided
|
||||||
# by Go code. That's crosscall2 and any exported symbols.
|
# by Go code. That's crosscall2 and any exported symbols.
|
||||||
|
|
||||||
_cgo1_.o: _cgo_main.o $(CGO_OFILES)
|
_cgo1_.o: _cgo_main.o $(CGO_OFILES) $(CGO_DEPS)
|
||||||
$(HOST_CC) $(_CGO_CFLAGS_$(GOARCH)) -g -fPIC -O2 -o $@ $^ $(CGO_LDFLAGS) $(_CGO_LDFLAGS)
|
$(HOST_CC) $(_CGO_CFLAGS_$(GOARCH)) -g -fPIC -O2 -o $@ $^ $(CGO_LDFLAGS) $(_CGO_LDFLAGS)
|
||||||
|
|
||||||
_obj/_cgo_import.c: _cgo1_.o
|
_obj/_cgo_import.c: _cgo1_.o
|
||||||
|
@ -501,6 +501,7 @@ func (p *Package) writeExports(fgo2, fc, fm *os.File) {
|
|||||||
if fn.Recv != nil {
|
if fn.Recv != nil {
|
||||||
goname = "_cgoexpwrap" + cPrefix + "_" + fn.Recv.List[0].Names[0].Name + "_" + goname
|
goname = "_cgoexpwrap" + cPrefix + "_" + fn.Recv.List[0].Names[0].Name + "_" + goname
|
||||||
}
|
}
|
||||||
|
fmt.Fprintf(fc, "#pragma dynexport %s %s\n", goname, goname)
|
||||||
fmt.Fprintf(fc, "extern void ·%s();\n", goname)
|
fmt.Fprintf(fc, "extern void ·%s();\n", goname)
|
||||||
fmt.Fprintf(fc, "\nvoid\n")
|
fmt.Fprintf(fc, "\nvoid\n")
|
||||||
fmt.Fprintf(fc, "_cgoexp%s_%s(void *a, int32 n)\n", cPrefix, exp.ExpName)
|
fmt.Fprintf(fc, "_cgoexp%s_%s(void *a, int32 n)\n", cPrefix, exp.ExpName)
|
||||||
|
@ -73,6 +73,15 @@ gomake clean
|
|||||||
gotest
|
gotest
|
||||||
) || exit $?
|
) || exit $?
|
||||||
|
|
||||||
|
[ "$CGO_ENABLED" != 1 ] ||
|
||||||
|
[ "$GOHOSTOS" == windows ] ||
|
||||||
|
[ "$GOHOSTOS" == darwin ] ||
|
||||||
|
(xcd ../misc/cgo/testso
|
||||||
|
gomake clean
|
||||||
|
gomake out
|
||||||
|
LD_LIBRARY_PATH=. ./out
|
||||||
|
) || exit $?
|
||||||
|
|
||||||
(xcd ../doc/progs
|
(xcd ../doc/progs
|
||||||
time ./run
|
time ./run
|
||||||
) || exit $?
|
) || exit $?
|
||||||
|
Loading…
Reference in New Issue
Block a user