Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for NetBSD #249

Open
6 tasks
0-wiz-0 opened this issue May 17, 2024 · 28 comments
Open
6 tasks

Add support for NetBSD #249

0-wiz-0 opened this issue May 17, 2024 · 28 comments
Assignees
Labels
enhancement New feature or request

Comments

@0-wiz-0
Copy link

0-wiz-0 commented May 17, 2024

PureGo Version

6cd1224

Operating System

  • Windows
  • macOS
  • Linux
  • FreeBSD
  • Android
  • iOS

Go Version (go version)

1.21.10

What steps will reproduce the problem?

I wanted to track down a build problem in an older version, but started with building main, and it didn't build:

$ go121  build .                                                                                                                                                                                                   # github.com/ebitengine/purego
./struct_amd64.go:12:46: undefined: syscall15Args

What is the expected result?

Successful build.

What happens instead?

see above.

Anything else you feel useful to add?

That's on NetBSD/amd64.

@0-wiz-0 0-wiz-0 added the bug Something isn't working label May 17, 2024
@TotallyGamerJet
Copy link
Collaborator

NetBSD isn't supported so this is a feature request?

@0-wiz-0
Copy link
Author

0-wiz-0 commented May 17, 2024

I have no idea if that version did anything, but since 0.5.0 built on NetBSD I thought it was a regression.
Yes, please, let's make this a feature request then :)

@0-wiz-0
Copy link
Author

0-wiz-0 commented May 17, 2024

I have started adding the dlfcn_* code for NetBSD based on the FreeBSD one here, but that still fails to build with

./struct_amd64.go:12:46: undefined: syscall15Args

and I have no idea what to do about that.

@TotallyGamerJet
Copy link
Collaborator

and I have no idea what to do about that.

You have to add netbsd to the build tag in syscall.go

@TotallyGamerJet
Copy link
Collaborator

I have no idea if that version did anything, but since 0.5.0 built on NetBSD I thought it was a regression.

We probably added build tags to ensure that only the supported platforms actually build which we were missing before.

@TotallyGamerJet TotallyGamerJet added enhancement New feature or request and removed bug Something isn't working labels May 17, 2024
@0-wiz-0
Copy link
Author

0-wiz-0 commented May 17, 2024

I've added netbsd to three files but I got a missing syscall15X and now missing runtime_cgocall and numOfIntegerRegisters. Does the current version work on FreeBSD?
I'm out of my depth hear.

@TotallyGamerJet
Copy link
Collaborator

You are just missing build tags. Add netbsd to the //go:build at the top of the files

@TotallyGamerJet TotallyGamerJet changed the title NetBSD build problem Add support for NetBSD May 17, 2024
@0-wiz-0
Copy link
Author

0-wiz-0 commented May 17, 2024

Ok, adding lots of tags makes it build. Yay! I've pushed them to my fork.

go test reports:

# github.com/ebitengine/purego
package github.com/ebitengine/purego_test
        imports github.com/ebitengine/purego/internal/load: build constraints exclude all Go files in /archive/foreign/purego-fork/internal/load
FAIL    github.com/ebitengine/purego [setup failed]

@0-wiz-0
Copy link
Author

0-wiz-0 commented May 17, 2024

I've added the netbsd tag to the libc example and tried to run it, but:

./libc
fatal error: cgocall nil

goroutine 1 [running]:
runtime.throw({0x48a7c6?, 0x1?})
        /usr/pkg/go121/src/runtime/panic.go:1077 +0x5c fp=0xc0000cd4a8 sp=0xc0000cd478 pc=0x4304dc
runtime.cgocall(0x0?, 0xc000014160?)
        /usr/pkg/go121/src/runtime/cgocall.go:130 +0xc5 fp=0xc0000cd4e0 sp=0xc0000cd4a8 pc=0x4045a5
github.com/ebitengine/purego.RegisterFunc.func4({0xc0000c4390?, 0x2?, 0x2?})
        /archive/foreign/purego-fork/func.go:319 +0xc5f fp=0xc0000cd960 sp=0xc0000cd4e0 pc=0x46eadf
reflect.callReflect(0xc0000c4180, 0xc0000cdec0, 0xc0000cdd98, 0xc0000cdda0)
        /usr/pkg/go121/src/reflect/value.go:782 +0x54b fp=0xc0000cdd48 sp=0xc0000cd960 pc=0x46764b
reflect.callReflect(0xc0000c4180, 0xc0000cdec0, 0xc0000cdd98, 0xc0000cdda0)
        <autogenerated>:1 +0x45 fp=0xc0000cdd78 sp=0xc0000cdd48 pc=0x46b625
reflect.makeFuncStub()
        /usr/pkg/go121/src/reflect/asm_amd64.s:47 +0x6e fp=0xc0000cdec0 sp=0xc0000cdd78 pc=0x46b0ae
github.com/ebitengine/purego.Dlopen({0x48a100?, 0x404585?}, 0x4010cf?)
        /archive/foreign/purego-fork/dlfcn.go:37 +0x1f fp=0xc0000cdef8 sp=0xc0000cdec0 pc=0x46d6ff
main.openLibrary(...)
        /archive/foreign/purego-fork/examples/libc/main_unix.go:11
main.main()
        /archive/foreign/purego-fork/examples/libc/main.go:33 +0x29 fp=0xc0000cdf40 sp=0xc0000cdef8 pc=0x471109
runtime.main()
        /usr/pkg/go121/src/runtime/proc.go:267 +0x2bb fp=0xc0000cdfe0 sp=0xc0000cdf40 pc=0x432ebb
runtime.goexit()
        /usr/pkg/go121/src/runtime/asm_amd64.s:1650 +0x1 fp=0xc0000cdfe8 sp=0xc0000cdfe0 pc=0x45b941

goroutine 2 [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/pkg/go121/src/runtime/proc.go:398 +0xce fp=0xc000084fa8 sp=0xc000084f88 pc=0x43330e
runtime.goparkunlock(...)
        /usr/pkg/go121/src/runtime/proc.go:404
runtime.forcegchelper()
        /usr/pkg/go121/src/runtime/proc.go:322 +0xb3 fp=0xc000084fe0 sp=0xc000084fa8 pc=0x433193
runtime.goexit()
        /usr/pkg/go121/src/runtime/asm_amd64.s:1650 +0x1 fp=0xc000084fe8 sp=0xc000084fe0 pc=0x45b941
created by runtime.init.6 in goroutine 1
        /usr/pkg/go121/src/runtime/proc.go:310 +0x1a

goroutine 3 [GC sweep wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/pkg/go121/src/runtime/proc.go:398 +0xce fp=0xc000085778 sp=0xc000085758 pc=0x43330e
runtime.goparkunlock(...)
        /usr/pkg/go121/src/runtime/proc.go:404
runtime.bgsweep(0x0?)
        /usr/pkg/go121/src/runtime/mgcsweep.go:280 +0x94 fp=0xc0000857c8 sp=0xc000085778 pc=0x420954
runtime.gcenable.func1()
        /usr/pkg/go121/src/runtime/mgc.go:200 +0x25 fp=0xc0000857e0 sp=0xc0000857c8 pc=0x415b05
runtime.goexit()
        /usr/pkg/go121/src/runtime/asm_amd64.s:1650 +0x1 fp=0xc0000857e8 sp=0xc0000857e0 pc=0x45b941
created by runtime.gcenable in goroutine 1
        /usr/pkg/go121/src/runtime/mgc.go:200 +0x66

goroutine 4 [GC scavenge wait]:
runtime.gopark(0xc0000aa000?, 0x4a71e0?, 0x1?, 0x0?, 0xc0000071e0?)
        /usr/pkg/go121/src/runtime/proc.go:398 +0xce fp=0xc000085f70 sp=0xc000085f50 pc=0x43330e
runtime.goparkunlock(...)
        /usr/pkg/go121/src/runtime/proc.go:404
runtime.(*scavengerState).park(0x50c6c0)
        /usr/pkg/go121/src/runtime/mgcscavenge.go:425 +0x49 fp=0xc000085fa0 sp=0xc000085f70 pc=0x41e229
runtime.bgscavenge(0x0?)
        /usr/pkg/go121/src/runtime/mgcscavenge.go:653 +0x3c fp=0xc000085fc8 sp=0xc000085fa0 pc=0x41e7bc
runtime.gcenable.func2()
        /usr/pkg/go121/src/runtime/mgc.go:201 +0x25 fp=0xc000085fe0 sp=0xc000085fc8 pc=0x415aa5
runtime.goexit()
        /usr/pkg/go121/src/runtime/asm_amd64.s:1650 +0x1 fp=0xc000085fe8 sp=0xc000085fe0 pc=0x45b941
created by runtime.gcenable in goroutine 1
        /usr/pkg/go121/src/runtime/mgc.go:201 +0xa5

goroutine 5 [finalizer wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/pkg/go121/src/runtime/proc.go:398 +0xce fp=0xc000086620 sp=0xc000086600 pc=0x43330e
runtime.runfinq()
        /usr/pkg/go121/src/runtime/mfinal.go:193 +0x107 fp=0xc0000867e0 sp=0xc000086620 pc=0x414b27
runtime.goexit()
        /usr/pkg/go121/src/runtime/asm_amd64.s:1650 +0x1 fp=0xc0000867e8 sp=0xc0000867e0 pc=0x45b941
created by runtime.createfing in goroutine 1
        /usr/pkg/go121/src/runtime/mfinal.go:163 +0x3d

@TotallyGamerJet
Copy link
Collaborator

Ok, adding lots of tags makes it build. Yay! I've pushed them to my fork.

go test reports:


# github.com/ebitengine/purego

package github.com/ebitengine/purego_test

        imports github.com/ebitengine/purego/internal/load: build constraints exclude all Go files in /archive/foreign/purego-fork/internal/load

FAIL    github.com/ebitengine/purego [setup failed]

It's telling you that you are missing a build tag in that file.

@0-wiz-0
Copy link
Author

0-wiz-0 commented May 18, 2024

I tried looking at all files with build tags. I think I found a problem for FreeBSD (because it affects NetBSD too).

#cgo LDFLAGS: -ldl

#cgo LDFLAGS: -ldl

both have

 #cgo LDFLAGS: -ldl

but *BSD do not provide this library, the dl*() functions are in libc.
What's the proper go way to conditionalize this without making complete copies of the files?

@TotallyGamerJet
Copy link
Collaborator

Well build tags in the Cgo comment can be used.

The directive can include a list of build constraints limiting its effect to systems satisfying one of the constraints

https://pkg.go.dev/cmd/cgo

I'm a little confused as FreeBSD is tested in CI and it passes with the current code

@0-wiz-0
Copy link
Author

0-wiz-0 commented May 18, 2024

I have no clue why it works on FreeBSD in CI.

Thanks, that worked. I've pushed my changes to the fork.
It builds now, but segfaults when I run go test.
log.txt

@JupiterRider
Copy link
Contributor

I just want to let you know, that I do not have any issues with purego and FreeBSD.

@TotallyGamerJet
Copy link
Collaborator

@0-wiz-0 Can you download my branch and try running go test ./...? You will need a C compiler.

https://github.com/TotallyGamerJet/purego/tree/issue-249_netbsd

@0-wiz-0
Copy link
Author

0-wiz-0 commented Aug 16, 2024

@TotallyGamerJet Thanks for looking at this.
Trying your branch, we're back to the first error I reported:

# git clone https://github.com/TotallyGamerJet/purego.git
Cloning into 'purego'...
remote: Enumerating objects: 1310, done.
remote: Counting objects: 100% (744/744), done.
remote: Compressing objects: 100% (316/316), done.
remote: Total 1310 (delta 509), reused 568 (delta 404), pack-reused 566 (from 1)
Receiving objects: 100% (1310/1310), 359.76 KiB | 3.46 MiB/s, done.
Resolving deltas: 100% (755/755), done.
# cd purego
# go test ./...
# github.com/ebitengine/purego
package github.com/ebitengine/purego_test
        imports github.com/ebitengine/purego/internal/load: build constraints exclude all Go files in /archive/foreign/purego/internal/load
FAIL    github.com/ebitengine/purego [setup failed]
# github.com/ebitengine/purego
./struct_amd64.go:12:46: undefined: syscall15Args
FAIL    github.com/ebitengine/purego/internal/buildtest [build failed]
?       github.com/ebitengine/purego/internal/cgo       [no test files]
?       github.com/ebitengine/purego/internal/strings   [no test files]
FAIL

@TotallyGamerJet
Copy link
Collaborator

Thanks for trying. I think you need to checkout the feature branch after you clone (git checkout -b issue-249_netbsd). I believe you just pulled main which doesn't have netbsd support.

Also if it doesn't work again can you include the values of running go env. You can remove any personally identifiable information just need to know what kind of system your build it with.

@0-wiz-0
Copy link
Author

0-wiz-0 commented Aug 16, 2024

You're probably right, but your instructions didn't work. I'll paste what I did in case we need it again:

#  git checkout -b issue-249_netbsd
Switched to a new branch 'issue-249_netbsd'
#  go test ./...
# github.com/ebitengine/purego
package github.com/ebitengine/purego_test
        imports github.com/ebitengine/purego/internal/load: build constraints exclude all Go files in /archive/foreign/purego/internal/load
FAIL    github.com/ebitengine/purego [setup failed]
# github.com/ebitengine/purego
./struct_amd64.go:12:46: undefined: syscall15Args
FAIL    github.com/ebitengine/purego/internal/buildtest [build failed]
?       github.com/ebitengine/purego/internal/cgo       [no test files]
?       github.com/ebitengine/purego/internal/strings   [no test files]
FAIL
#  git branch -d issue-249_netbsd
error: cannot delete branch 'issue-249_netbsd' used by worktree at '/disk/storage-202004/archive/foreign/purego'
#  git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
#  git branch -d issue-249_netbsd
Deleted branch issue-249_netbsd (was a969731).
#  git fetch
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0 (from 0)
Unpacking objects: 100% (3/3), 600 bytes | 37.00 KiB/s, done.
From https://github.com/TotallyGamerJet/purego
   5068751..92769ac  issue-249_netbsd -> origin/issue-249_netbsd
#  git branch -v -a
...
#  git switch remotes/origin/issue-249_netbsd
fatal: a branch is expected, got remote branch 'origin/issue-249_netbsd'
hint: If you want to detach HEAD at the commit, try again with the --detach option.
#  git switch issue-249_netbsd
branch 'issue-249_netbsd' set up to track 'origin/issue-249_netbsd'.
Switched to a new branch 'issue-249_netbsd'
#  go test ./...
# github.com/ebitengine/purego
./struct_amd64.go:12:46: undefined: syscall15Args
FAIL    github.com/ebitengine/purego/examples/libc [build failed]
FAIL    github.com/ebitengine/purego [build failed]
FAIL    github.com/ebitengine/purego/internal/buildtest [build failed]
FAIL    github.com/ebitengine/purego/internal/load [build failed]
?       github.com/ebitengine/purego/internal/strings   [no test files]
?       github.com/ebitengine/purego/internal/cgo       [no test files]
FAIL

Here's my go env:

GO111MODULE=''
GOARCH='amd64'
GOBIN=''
GOCACHE='/home/wiz/.cache/go-build'
GOENV='/home/wiz/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='netbsd'
GOINSECURE=''
GOMODCACHE='/home/wiz/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='netbsd'
GOPATH='/home/wiz/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/usr/pkg/go122'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/pkg/go122/pkg/tool/netbsd_amd64'
GOVCS=''
GOVERSION='go1.22.6'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='1'
GOMOD='/dev/null'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build1978414147=/tmp/go-build -gno-record-gcc-switches'

@TotallyGamerJet
Copy link
Collaborator

Can you try:

git clone https://github.com/TotallyGamerJet/purego.git
git switch issue-249_netbsd
cd ./purego
go test ./...

If that fails with the exact same error about missing syscall15Args can you run ls and make sure there is a syscall_cgo_netbsd.go file?

@0-wiz-0
Copy link
Author

0-wiz-0 commented Aug 16, 2024

git clone https://github.com/TotallyGamerJet/purego.git
cd ./purego
git switch issue-249_netbsd
go test ./...

gives me

Switched to a new branch 'issue-249_netbsd'
# github.com/ebitengine/purego_test [github.com/ebitengine/purego.test]
./func_test.go:41:9: undefined: purego.RegisterLibFunc
./func_test.go:65:9: undefined: purego.RegisterLibFunc
./func_test.go:89:10: undefined: purego.RegisterLibFunc
./func_test.go:101:10: undefined: purego.RegisterLibFunc
./func_test.go:125:9: undefined: purego.RegisterFunc
FAIL    github.com/ebitengine/purego [build failed]
?       github.com/ebitengine/purego/examples/libc      [no test files]
?       github.com/ebitengine/purego/internal/buildtest [no test files]
?       github.com/ebitengine/purego/internal/cgo       [no test files]
?       github.com/ebitengine/purego/internal/load      [no test files]
?       github.com/ebitengine/purego/internal/strings   [no test files]
FAIL

A new error!

@TotallyGamerJet
Copy link
Collaborator

Try again. I pushed some more changes with build tags. Hopefully I got all the spots

@0-wiz-0
Copy link
Author

0-wiz-0 commented Aug 16, 2024

Yes, better, now:

ld: cannot find -ldl: No such file or directory
ld: cannot find -ldl: No such file or directory

On NetBSD (and I think other BSDs too), dlopen() and friends are in libc directly.

@TotallyGamerJet
Copy link
Collaborator

I made a change let me know if that works for you

@0-wiz-0
Copy link
Author

0-wiz-0 commented Aug 16, 2024

Thanks. It needed fixing in a second place too:

diff --git a/internal/cgo/syscall_cgo_unix.go b/internal/cgo/syscall_cgo_unix.go
index 072ea11..03455da 100644
--- a/internal/cgo/syscall_cgo_unix.go
+++ b/internal/cgo/syscall_cgo_unix.go
@@ -9,7 +9,7 @@ package cgo
 // because Cgo and assembly files can't be in the same package.

 /*
- #cgo LDFLAGS: -ldl
+ #cgo !netbsd LDFLAGS: -ldl

 #include <stdint.h>
 #include <dlfcn.h>

Now I see:

# go test ./...
?       github.com/ebitengine/purego/examples/libc      [no test files]
?       github.com/ebitengine/purego/internal/load      [no test files]
?       github.com/ebitengine/purego/internal/buildtest [no test files]
?       github.com/ebitengine/purego/internal/cgo       [no test files]
?       github.com/ebitengine/purego/internal/strings   [no test files]
--- FAIL: TestNestedDlopenCall (0.06s)
    dlfcn_test.go:30: Build /tmp/TestNestedDlopenCall3074681690/001/libdlnested.so
    dlfcn_test.go:33: compile lib: exit status 1
        "/usr/bin/g++ -shared -Wall -Werror -o /tmp/TestNestedDlopenCall3074681690/001/libdlnested.so testdata/libdlnested/nested_test.cpp"
        ld: /tmp//ccYZR644.o: relocation R_X86_64_32 against `.bss' can not be used when making a shared object; recompile with -fPIC
        ld: failed to set dynamic section sizes: bad value

--- FAIL: TestRegisterFunc (0.00s)
    func_test.go:34: couldn't get system library: GOOS=netbsd is not supported
--- FAIL: Test_qsort (0.00s)
    func_test.go:52: couldn't get system library: GOOS=netbsd is not supported
--- FAIL: TestRegisterFunc_Floats (0.00s)
    func_test.go:81: couldn't get system library: GOOS=netbsd is not supported
--- FAIL: TestRegisterLibFunc_Bool (0.00s)
panic: purego: NewCallback on Linux is only supported on amd64/arm64 [recovered]
        panic: purego: NewCallback on Linux is only supported on amd64/arm64

goroutine 15 [running]:
testing.tRunner.func1.2({0x52b6a0, 0x58c940})
        /usr/pkg/go122/src/testing/testing.go:1631 +0x24a
testing.tRunner.func1()
        /usr/pkg/go122/src/testing/testing.go:1634 +0x377
panic({0x52b6a0?, 0x58c940?})
        /usr/pkg/go122/src/runtime/panic.go:770 +0x132
github.com/ebitengine/purego.NewCallback(...)
        /archive/foreign/purego/syscall_cgo_netbsd.go:20
github.com/ebitengine/purego_test.TestRegisterLibFunc_Bool(0xc0000eb1e0?)
        /archive/foreign/purego/func_test.go:120 +0x25
testing.tRunner(0xc0000eb1e0, 0x5633f8)
        /usr/pkg/go122/src/testing/testing.go:1689 +0xfb
created by testing.(*T).Run in goroutine 1
        /usr/pkg/go122/src/testing/testing.go:1742 +0x390
FAIL    github.com/ebitengine/purego    0.101s
FAIL

@TotallyGamerJet
Copy link
Collaborator

Thanks! I made the necessary changes which should solve all those problems

@TotallyGamerJet TotallyGamerJet self-assigned this Aug 17, 2024
@0-wiz-0
Copy link
Author

0-wiz-0 commented Aug 17, 2024

Thanks! Now I see:

# go test ./...
?       github.com/ebitengine/purego/examples/libc      [no test files]
?       github.com/ebitengine/purego/internal/buildtest [no test files]
?       github.com/ebitengine/purego/internal/load      [no test files]
?       github.com/ebitengine/purego/internal/strings   [no test files]
?       github.com/ebitengine/purego/internal/cgo       [no test files]
--- FAIL: Test_qsort (0.00s)
panic: purego: NewCallback is not supported on NetBSD [recovered]
        panic: purego: NewCallback is not supported on NetBSD

goroutine 13 [running]:
testing.tRunner.func1.2({0x52b6a0, 0x58c920})
        /usr/pkg/go122/src/testing/testing.go:1631 +0x24a
testing.tRunner.func1()
        /usr/pkg/go122/src/testing/testing.go:1634 +0x377
panic({0x52b6a0?, 0x58c920?})
        /usr/pkg/go122/src/runtime/panic.go:770 +0x132
github.com/ebitengine/purego.NewCallback(...)
        /archive/foreign/purego/syscall_cgo_netbsd.go:20
github.com/ebitengine/purego.RegisterFunc.func1({0xc0000b6780?, 0x4?, 0x4?})
        /archive/foreign/purego/func.go:293 +0x132a
github.com/ebitengine/purego_test.Test_qsort(0xc0000eaea0)
        /archive/foreign/purego/func_test.go:68 +0x163
testing.tRunner(0xc0000eaea0, 0x563400)
        /usr/pkg/go122/src/testing/testing.go:1689 +0xfb
created by testing.(*T).Run in goroutine 1
        /usr/pkg/go122/src/testing/testing.go:1742 +0x390
FAIL    github.com/ebitengine/purego    0.128s
FAIL

@TotallyGamerJet
Copy link
Collaborator

Ok, I pushed a commit to just ignore all those tests

@0-wiz-0
Copy link
Author

0-wiz-0 commented Aug 17, 2024

Thank you!

# go test ./...
?       github.com/ebitengine/purego/examples/libc      [no test files]
?       github.com/ebitengine/purego/internal/buildtest [no test files]
?       github.com/ebitengine/purego/internal/strings   [no test files]
?       github.com/ebitengine/purego/internal/cgo       [no test files]
?       github.com/ebitengine/purego/internal/load      [no test files]
ok      github.com/ebitengine/purego    0.038s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants