From c3d6c18bfba03b1f49afe84fc653d3b0a0196aff 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 --- examples/go.mod | 4 ++-- examples/go.sum | 8 +++---- raylib/go.mod | 4 ++-- raylib/go.sum | 8 +++---- raylib/purego.go | 8 +++++++ raylib/purego_unix.go | 45 ++++++++++++++++++++++++++++++++++++++++ raylib/purego_windows.go | 3 +-- raylib/raylib_purego.go | 4 ++-- raylib/rlgl_purego.go | 4 ++-- 9 files changed, 70 insertions(+), 18 deletions(-) create mode 100644 raylib/purego.go create mode 100644 raylib/purego_unix.go diff --git a/examples/go.mod b/examples/go.mod index 32ed05e7..eb04df47 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -20,6 +20,6 @@ require ( ) require ( - github.com/ebitengine/purego v0.6.0-alpha.1.0.20231122024802-192c5e846faa // indirect - golang.org/x/sys v0.14.0 // indirect + github.com/ebitengine/purego v0.6.1 // indirect + golang.org/x/sys v0.18.0 // indirect ) diff --git a/examples/go.sum b/examples/go.sum index 881382a6..7dcac148 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -1,8 +1,8 @@ -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= +github.com/ebitengine/purego v0.6.1 h1:sjN8rfzbhXQ59/pE+wInswbU9aMDHiwlup4p/a07Mkg= +github.com/ebitengine/purego v0.6.1/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= github.com/jakecoffman/cp v1.2.1 h1:zkhc2Gpo9l4NLUZfeG3j33+3bQD7MkqPa+n5PdX+5mI= github.com/jakecoffman/cp v1.2.1/go.mod h1:JjY/Fp6d8E1CHnu74gWNnU0+b9VzEdUVPoJxg2PsTQg= github.com/neguse/go-box2d-lite v0.0.0-20170921151050-5d8ed9b7272b h1:+67TGbwfgeB5o03Rx+ZBW44zAQ+wUujcwdRA0p9CbJI= github.com/neguse/go-box2d-lite v0.0.0-20170921151050-5d8ed9b7272b/go.mod h1:kvKwD9codtns5mvpA53V3vLnqFb/Ahcu8zgkGM0SIbI= -golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +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/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.go b/raylib/purego.go new file mode 100644 index 00000000..8feae660 --- /dev/null +++ b/raylib/purego.go @@ -0,0 +1,8 @@ +//go:build !cgo +// +build !cgo + +package rl + +const ( + requiredVersion = "5.0" +) diff --git a/raylib/purego_unix.go b/raylib/purego_unix.go new file mode 100644 index 00000000..bb68d65b --- /dev/null +++ b/raylib/purego_unix.go @@ -0,0 +1,45 @@ +//go:build !cgo && (darwin || openbsd || freebsd || linux) + +package rl + +import ( + "fmt" + "runtime" + "unsafe" + + "github.com/ebitengine/purego" + "golang.org/x/sys/unix" +) + +// loadLibrary loads the raylib dll and panics on error +func loadLibrary() uintptr { + libname := "raylib.so" + switch runtime.GOOS { + case "darwin": + libname = "raylib.dylib" + } + + handle, err := purego.Dlopen(libname, purego.RTLD_NOW|purego.RTLD_GLOBAL) + 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/purego_windows.go b/raylib/purego_windows.go index 470d16d6..0507e600 100644 --- a/raylib/purego_windows.go +++ b/raylib/purego_windows.go @@ -12,8 +12,7 @@ import ( ) const ( - libname = "raylib.dll" - requiredVersion = "5.0" + libname = "raylib.dll" ) // loadLibrary loads the raylib dll and panics on error 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