purego: skip importing `runtime/cgo` for Windows (#41)
This change resolves these issues: * Buiding purego for `GOOS=darwin` and `GOARCH=arm64` with Go 1.15 is not supported so far (#37). Skip this. * Buiding purego for `GOOS=windows` with Cgo failed due to duplicated symbols (#39). Let's not import `runtime/cgo` for Windows. `fakecgo` is implemented only for Darwin so this should be fine. As a side effect, purego can no longer be imported from non-Darwin or non-Windows so far. Updates #37 Closes #39
- commit
- e8e2e45217f385595bfde48c47b86a0fe2cbd2cd
- author
- Hajime Hoshi · · 2022-09-10 03:58 UTC
- committer
- GitHub · · 2022-09-10 03:58 UTC
- parent
- 80868e8
- signature
- GPG Unverified
4AEE18F83AFDEB23The key is unknown
3 files · +24 -1
M .github/workflows/test.yml +9 -1
| @@ -48,15 +48,23 @@ jobs: | |||
| 48 | 48 | ||
| 49 | 49 | # Check cross-compiling macOS binaries. | |
| 50 | 50 | env GOOS=darwin GOARCH=amd64 go build -v ./... | |
| 51 | - | env GOOS=darwin GOARCH=arm64 go build -v ./... | |
| 52 | 51 | ||
| 53 | 52 | - name: go build (Windows, ARM64) | |
| 53 | + | # Go 1.16 and older don't support the pair GOOS=windows and GOARCH=arm64. | |
| 54 | 54 | if: ${{ !startsWith(matrix.go, '1.15.') && !startsWith(matrix.go, '1.16.') }} | |
| 55 | 55 | run: | | |
| 56 | 56 | # Check cross-compiling Windows binaries. | |
| 57 | 57 | env GOOS=windows GOARCH=arm64 go build -v ./... | |
| 58 | 58 | ||
| 59 | + | - name: go build (macOS, ARM64) | |
| 60 | + | # Purego doesn't support the pair GOOS=darwin and GOARCH=arm64 with Go 1.15 so far (#37). | |
| 61 | + | if: ${{ !startsWith(matrix.go, '1.15.') }} | |
| 62 | + | run: | | |
| 63 | + | # Check cross-compiling macOS binaries. | |
| 64 | + | env GOOS=darwin GOARCH=arm64 go build -v ./... | |
| 65 | + | ||
| 59 | 66 | - name: go mod vendor | |
| 67 | + | if: ${{ !startsWith(matrix.os, 'ubuntu-') }} | |
| 60 | 68 | run: | | |
| 61 | 69 | mkdir /tmp/vendoring | |
| 62 | 70 | cd /tmp/vendoring | |
| @@ -48,15 +48,23 @@ jobs: | |||||
| 48 | 48 | ||||
| 49 | # Check cross-compiling macOS binaries. | 49 | # Check cross-compiling macOS binaries. | ||
| 50 | env GOOS=darwin GOARCH=amd64 go build -v ./... | 50 | env GOOS=darwin GOARCH=amd64 go build -v ./... | ||
| 51 | - | env GOOS=darwin GOARCH=arm64 go build -v ./... | |||
| 52 | 51 | ||||
| 53 | - name: go build (Windows, ARM64) | 52 | - name: go build (Windows, ARM64) | ||
| 53 | + | # Go 1.16 and older don't support the pair GOOS=windows and GOARCH=arm64. | |||
| 54 | if: ${{ !startsWith(matrix.go, '1.15.') && !startsWith(matrix.go, '1.16.') }} | 54 | if: ${{ !startsWith(matrix.go, '1.15.') && !startsWith(matrix.go, '1.16.') }} | ||
| 55 | run: | | 55 | run: | | ||
| 56 | # Check cross-compiling Windows binaries. | 56 | # Check cross-compiling Windows binaries. | ||
| 57 | env GOOS=windows GOARCH=arm64 go build -v ./... | 57 | env GOOS=windows GOARCH=arm64 go build -v ./... | ||
| 58 | 58 | ||||
| 59 | + | - name: go build (macOS, ARM64) | |||
| 60 | + | # Purego doesn't support the pair GOOS=darwin and GOARCH=arm64 with Go 1.15 so far (#37). | |||
| 61 | + | if: ${{ !startsWith(matrix.go, '1.15.') }} | |||
| 62 | + | run: | | |||
| 63 | + | # Check cross-compiling macOS binaries. | |||
| 64 | + | env GOOS=darwin GOARCH=arm64 go build -v ./... | |||
| 65 | + | ||||
| 59 | - name: go mod vendor | 66 | - name: go mod vendor | ||
| 67 | + | if: ${{ !startsWith(matrix.os, 'ubuntu-') }} | |||
| 60 | run: | | 68 | run: | | ||
| 61 | mkdir /tmp/vendoring | 69 | mkdir /tmp/vendoring | ||
| 62 | cd /tmp/vendoring | 70 | cd /tmp/vendoring | ||
R cgo.go → cgo_darwin.go +0 -0 renamed, 100% similar
renamed, 100% similar
A example/main.go +15 -0
| @@ -0,0 +1,15 @@ | |||
| 1 | + | // SPDX-License-Identifier: Apache-2.0 | |
| 2 | + | // SPDX-FileCopyrightText: 2022 The Ebitengine Authors | |
| 3 | + | ||
| 4 | + | //go:build darwin || windows | |
| 5 | + | // +build darwin windows | |
| 6 | + | ||
| 7 | + | package main | |
| 8 | + | ||
| 9 | + | import ( | |
| 10 | + | _ "github.com/ebitengine/purego" | |
| 11 | + | ) | |
| 12 | + | ||
| 13 | + | func main() { | |
| 14 | + | // TODO: Add an implementation. This example exists only for testing so far. | |
| 15 | + | } | |
| @@ -0,0 +1,15 @@ | |||||
| 1 | + | // SPDX-License-Identifier: Apache-2.0 | |||
| 2 | + | // SPDX-FileCopyrightText: 2022 The Ebitengine Authors | |||
| 3 | + | ||||
| 4 | + | //go:build darwin || windows | |||
| 5 | + | // +build darwin windows | |||
| 6 | + | ||||
| 7 | + | package main | |||
| 8 | + | ||||
| 9 | + | import ( | |||
| 10 | + | _ "github.com/ebitengine/purego" | |||
| 11 | + | ) | |||
| 12 | + | ||||
| 13 | + | func main() { | |||
| 14 | + | // TODO: Add an implementation. This example exists only for testing so far. | |||
| 15 | + | } | |||