From 39dc68fa4e17971c116a59f40ef831a29d90e945 Mon Sep 17 00:00:00 2001 From: Li Jie Date: Tue, 26 Nov 2024 09:20:06 +0800 Subject: [PATCH] demo/cgofull: add multi cgo module and macro calling --- _demo/cgofull/cgofull.go | 17 ++++++++++++++++- _demo/cgofull/pymod1/pymod1.go | 11 +++++++++++ _demo/cgofull/pymod2/pymod2.go | 11 +++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 _demo/cgofull/pymod1/pymod1.go create mode 100644 _demo/cgofull/pymod2/pymod2.go diff --git a/_demo/cgofull/cgofull.go b/_demo/cgofull/cgofull.go index 82c5e0f6..038c9ef4 100644 --- a/_demo/cgofull/cgofull.go +++ b/_demo/cgofull/cgofull.go @@ -6,7 +6,9 @@ package main #cgo windows,amd64 CFLAGS: -D_WIN64 #cgo linux,amd64 CFLAGS: -D_LINUX64 #cgo !windows,amd64 CFLAGS: -D_UNIX64 +#cgo pkg-config: python3-embed #include +#include #include "foo.h" typedef struct { int a; @@ -71,9 +73,18 @@ static void test_macros() { printf("UNIX64 is defined\n"); #endif } + +#define MY_VERSION "1.0.0" +#define MY_CODE 0x12345678 */ import "C" -import "fmt" +import ( + "fmt" + "unsafe" + + "github.com/goplus/llgo/_demo/cgofull/pymod1" + "github.com/goplus/llgo/_demo/cgofull/pymod2" +) func main() { runPy() @@ -86,10 +97,14 @@ func main() { if r != 35 { panic("test_structs failed") } + fmt.Println(C.MY_VERSION) + fmt.Println(int(C.MY_CODE)) } func runPy() { Initialize() defer Finalize() Run("print('Hello, Python!')") + C.PyObject_Print((*C.PyObject)(unsafe.Pointer(pymod1.Float(1.23))), C.stderr, 0) + C.PyObject_Print((*C.PyObject)(unsafe.Pointer(pymod2.Long(123))), C.stdout, 0) } diff --git a/_demo/cgofull/pymod1/pymod1.go b/_demo/cgofull/pymod1/pymod1.go new file mode 100644 index 00000000..480b1b4a --- /dev/null +++ b/_demo/cgofull/pymod1/pymod1.go @@ -0,0 +1,11 @@ +package pymod1 + +/* +#cgo pkg-config: python3-embed +#include +*/ +import "C" + +func Float(f float64) *C.PyObject { + return C.PyFloat_FromDouble(C.double(f)) +} diff --git a/_demo/cgofull/pymod2/pymod2.go b/_demo/cgofull/pymod2/pymod2.go new file mode 100644 index 00000000..8cc7dd27 --- /dev/null +++ b/_demo/cgofull/pymod2/pymod2.go @@ -0,0 +1,11 @@ +package pymod2 + +/* +#cgo pkg-config: python3-embed +#include +*/ +import "C" + +func Long(l int64) *C.PyObject { + return C.PyLong_FromLongLong(C.longlong(l)) +}