]> git.puffer.fish Git - matthieu/nova.git/commitdiff
fix go linking
authorMatthieuCoder <matthieu@matthieu-dev.xyz>
Mon, 16 Jan 2023 08:06:41 +0000 (12:06 +0400)
committerMatthieuCoder <matthieu@matthieu-dev.xyz>
Mon, 16 Jan 2023 08:06:41 +0000 (12:06 +0400)
.github/workflows/build.yml
internal/pkg/all-in-one/all-in-one.go
internal/pkg/all-in-one/error_handler.h
internal/pkg/all-in-one/handler.go [new file with mode: 0644]

index a2bb06e651dab4f792500d1379fc546d71d4c561..1f9073fbda1e4d46dc383b8c7ec3ea41fd9f222d 100644 (file)
@@ -130,6 +130,7 @@ jobs:
         env:
           CC: clang
         run: |
+          update-alternatives --set ld /usr/bin/lld
           make all
       - uses: actions/upload-artifact@v3
         with:
index 76c11f23331e7055b5b390fc3db850ab3c807ed9..b95d51510b9db82ba28eb066bb791fa11856b12a 100644 (file)
@@ -9,7 +9,6 @@ import "C"
 import (
        "fmt"
        "time"
-       "unsafe"
 
        "github.com/Jeffail/gabs"
        "github.com/alicebob/miniredis/v2"
@@ -22,14 +21,6 @@ type AllInOne struct {
        instance *C.AllInOneInstance
 }
 
-//export goErrorHandler
-func goErrorHandler(size C.int, start *C.char) {
-       dest := make([]byte, size)
-       copy(dest, (*(*[1024]byte)(unsafe.Pointer(start)))[:size:size])
-
-       println("Error from all in one runner: %s", string(dest))
-}
-
 func NewAllInOne() (*AllInOne, error) {
        redis := miniredis.NewMiniRedis()
        nats, err := server.NewServer(&server.Options{})
@@ -55,6 +46,7 @@ func (s *AllInOne) Start() error {
        if !s.nats.ReadyForConnections(5 * time.Second) {
                return fmt.Errorf("nats server didn't start after 5 seconds, please check if there is another service listening on the same port as nats")
        }
+
        handler := C.ErrorHandler(C.allInOneErrorHandler)
        // Set the error handler
        C.set_error_handler(handler)
index e04f68d29d4efd74669a9d94fa70de4f775bf5df..8fe1a605bf4f61ce3963c2daf64c17e982972e74 100644 (file)
@@ -2,7 +2,6 @@ extern void goErrorHandler(int, char*);
 
 typedef void (*ErrorHandler)(int, char*);
 
-__attribute__((weak))
 void allInOneErrorHandler(int size, char* string) {
   goErrorHandler(size, string);
 }
\ No newline at end of file
diff --git a/internal/pkg/all-in-one/handler.go b/internal/pkg/all-in-one/handler.go
new file mode 100644 (file)
index 0000000..b92493e
--- /dev/null
@@ -0,0 +1,13 @@
+package allinone
+
+import "C"
+import "unsafe"
+
+//go:linkname goErrorHandler c.goErrorHandler
+//export goErrorHandler
+func goErrorHandler(size C.int, start *C.char) {
+       dest := make([]byte, size)
+       copy(dest, (*(*[1024]byte)(unsafe.Pointer(start)))[:size:size])
+
+       println("Error from all in one runner: %s", string(dest))
+}