From 08ff520180afcd6ed082a4e8d599344d860eccaa Mon Sep 17 00:00:00 2001 From: Allen Ray Date: Thu, 14 Mar 2024 18:00:50 -0400 Subject: [PATCH] Add purego support for unix --- raylib/go.mod | 4 ++-- raylib/go.sum | 8 ++++---- raylib/purego_unix.go | 43 +++++++++++++++++++++++++++++++++++++++++ raylib/raylib_purego.go | 4 ++-- raylib/rlgl_purego.go | 4 ++-- 5 files changed, 53 insertions(+), 10 deletions(-) create mode 100644 raylib/purego_unix.go diff --git a/raylib/go.mod b/raylib/go.mod index c0c536cc..13866326 100644 --- a/raylib/go.mod +++ b/raylib/go.mod @@ -3,6 +3,6 @@ module github.com/gen2brain/raylib-go/raylib go 1.21 require ( - github.com/ebitengine/purego v0.6.0-alpha.1.0.20231122024802-192c5e846faa - golang.org/x/sys v0.14.0 + github.com/ebitengine/purego v0.6.1 + golang.org/x/sys v0.18.0 ) diff --git a/raylib/go.sum b/raylib/go.sum index 96d4ea7f..16afe706 100644 --- a/raylib/go.sum +++ b/raylib/go.sum @@ -1,4 +1,4 @@ -github.com/ebitengine/purego v0.6.0-alpha.1.0.20231122024802-192c5e846faa h1:Ik7QikRgeH+bFOfAcMpttCbs6XxWXxCLXMm4awxtOXk= -github.com/ebitengine/purego v0.6.0-alpha.1.0.20231122024802-192c5e846faa/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= -golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +github.com/ebitengine/purego v0.6.1 h1:sjN8rfzbhXQ59/pE+wInswbU9aMDHiwlup4p/a07Mkg= +github.com/ebitengine/purego v0.6.1/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= diff --git a/raylib/purego_unix.go b/raylib/purego_unix.go new file mode 100644 index 00000000..201a01ef --- /dev/null +++ b/raylib/purego_unix.go @@ -0,0 +1,43 @@ +//go:build !cgo && (darwin || freebsd || linux) + +package rl + +import ( + "fmt" + "unsafe" + + "github.com/ebitengine/purego" + "golang.org/x/sys/unix" +) + +const ( + libname = "raylib.so" + requiredVersion = "5.0" +) + +// loadLibrary loads the raylib dll and panics on error +func loadLibrary() uintptr { + handle, err := purego.Dlopen(libname, purego.RTLD_DEFAULT) + if err != nil { + panic(fmt.Errorf("cannot load library %s: %w", libname, err)) + } + + proc, err := purego.Dlsym(handle, "raylib_version") + if err != nil { + panic(err) + } + + version := unix.BytePtrToString(**(***byte)(unsafe.Pointer(&proc))) + if version != requiredVersion { + panic(fmt.Errorf("version %s of %s doesn't match the required version %s", version, libname, requiredVersion)) + } + + return uintptr(handle) +} + +func traceLogCallbackWrapper(fn TraceLogCallbackFun) uintptr { + return purego.NewCallback(func(logLevel int32, text *byte) uintptr { + fn(int(logLevel), unix.BytePtrToString(text)) + return 0 + }) +} diff --git a/raylib/raylib_purego.go b/raylib/raylib_purego.go index f70512e3..d5a9b884 100644 --- a/raylib/raylib_purego.go +++ b/raylib/raylib_purego.go @@ -1,5 +1,5 @@ -//go:build !cgo && windows -// +build !cgo,windows +//go:build !cgo +// +build !cgo package rl diff --git a/raylib/rlgl_purego.go b/raylib/rlgl_purego.go index ccb5029e..89bce1e3 100644 --- a/raylib/rlgl_purego.go +++ b/raylib/rlgl_purego.go @@ -1,5 +1,5 @@ -//go:build !cgo && windows -// +build !cgo,windows +//go:build !cgo +// +build !cgo package rl