From c440275314dffc6e33315e694b21b85d8b713eb8 Mon Sep 17 00:00:00 2001 From: Alexander Vorobyov Date: Sun, 4 Aug 2024 15:13:35 +0300 Subject: [PATCH] Example --- README.md | 2 +- example.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ go.mod | 5 +++++ script.exp | 4 ++++ 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 example.go create mode 100644 go.mod create mode 100644 script.exp diff --git a/README.md b/README.md index d49369a..0aac107 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -# go-bin-example +# glib-example Example binary module \ No newline at end of file diff --git a/example.go b/example.go new file mode 100644 index 0000000..92bca87 --- /dev/null +++ b/example.go @@ -0,0 +1,47 @@ +package main + +// compile: CGO_LDFLAGS_ALLOW=".*" CGO_ENABLED=1 go build -buildmode=c-shared + +/* +#cgo LDFLAGS: "-Wl,--version-script=${SRCDIR}/script.exp" + +int gmod13_open(void* L); +int gmod13_close(void* L); + +int glib_test(void* L); +*/ +import "C" + +import ( + "fmt" + "unsafe" + + "code.gurenya.net/gmod/glib" +) + +type State = unsafe.Pointer + +//export glib_test +func glib_test(L State) C.int { + fmt.Println("Hello from glib_test function!") + + return 0 +} + +//export gmod13_open +func gmod13_open(L State) C.int { + fmt.Println("Hello from binary module!") + + glib.PushFunc(L, C.glib_test) + glib.SetGlobal(L, "glib_test") + return 0 +} + +//export gmod13_close +func gmod13_close(L State) C.int { + fmt.Println("Goodbye from binary module!") + + return 0 +} + +func main() {} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..0cd970b --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module code.gurenya.net/gmod/glib-example + +go 1.22.2 + +require "code.gurenya.net/gmod/glib" v0.0.1 \ No newline at end of file diff --git a/script.exp b/script.exp new file mode 100644 index 0000000..972b698 --- /dev/null +++ b/script.exp @@ -0,0 +1,4 @@ +{ + global: gmod13_open; gmod13_close; + local: *; +}; \ No newline at end of file