Windows Executable Cross-Compile with MinGW
* Added Windows build instructions to Building.md and added a "make mingw" command to cross-compile the Windows binary into the bin/ folder. * Fix a bug in the Wallpaper texture loader where it would error out when caching textures to disk the first time.
This commit is contained in:
parent
569e67bf9e
commit
d0ff137b04
47
Building.md
47
Building.md
|
@ -29,6 +29,49 @@ sudo dnf -y install golang SDL2-devel SDL2_ttf-devel
|
||||||
sudo apt -y install golang libsdl2-dev libsdl2-ttf-dev
|
sudo apt -y install golang libsdl2-dev libsdl2-ttf-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
## Windows
|
## Windows Cross-Compile from Linux
|
||||||
|
|
||||||
TBD.
|
Install the Mingw C compiler:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Fedora
|
||||||
|
sudo dnf -y install mingw64-gcc # for 64-bit
|
||||||
|
sudo dnf -y install mingw32-gcc # for 32-bit
|
||||||
|
|
||||||
|
# Arch Linux
|
||||||
|
pacman -S mingw-w64
|
||||||
|
```
|
||||||
|
|
||||||
|
Download the SDL2 Mingw development libraries [here](https://libsdl.org/download-2.0.php)
|
||||||
|
and SDL2_TTF from [here](https://www.libsdl.org/projects/).
|
||||||
|
|
||||||
|
Extract each and copy their library folder into the mingw path.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# e.g. /usr/x86_64-w64-mingw32 is usually the correct path, verify on e.g.
|
||||||
|
# Fedora with `rpm -ql mingw64-filesystem`
|
||||||
|
tar -xzvf SDL2_ttf-devel-2.0.15-mingw.tar.gz
|
||||||
|
cd SDL_ttf-2.0.15
|
||||||
|
sudo cp -r x86_64-w64-mingw32 /usr
|
||||||
|
```
|
||||||
|
|
||||||
|
Make and set permissions for Go to download the standard library for Windows:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir /usr/lib/golang/pkg/windows_amd64
|
||||||
|
chown your_username /usr/lib/golang/pkg/windows_amd64
|
||||||
|
```
|
||||||
|
|
||||||
|
And run `make mingw` to build the Windows binary.
|
||||||
|
|
||||||
|
### Windows DLLs
|
||||||
|
|
||||||
|
For the .exe to run it will need SDL2.dll and such.
|
||||||
|
|
||||||
|
```
|
||||||
|
# SDL2.dll and SDL2_ttf.dll
|
||||||
|
cp /usr/x86_64-w64-mingw32/bin/SDL*.dll bin/
|
||||||
|
```
|
||||||
|
|
||||||
|
SDL2_ttf requires libfreetype, you can get its DLL here:
|
||||||
|
https://github.com/ubawurinna/freetype-windows-binaries
|
||||||
|
|
12
Makefile
12
Makefile
|
@ -19,6 +19,18 @@ build:
|
||||||
go build $(LDFLAGS) -i -o bin/doodle cmd/doodle/main.go
|
go build $(LDFLAGS) -i -o bin/doodle cmd/doodle/main.go
|
||||||
go build $(LDFLAGS) -i -o bin/doodad cmd/doodad/main.go
|
go build $(LDFLAGS) -i -o bin/doodad cmd/doodad/main.go
|
||||||
|
|
||||||
|
# `make mingw` to cross-compile a Windows binary with mingw.
|
||||||
|
.PHONY: mingw
|
||||||
|
mingw:
|
||||||
|
env CGO_ENABLED="1" CC="/usr/bin/x86_64-w64-mingw32-gcc" \
|
||||||
|
GOOS="windows" CGO_LDFLAGS="-lmingw32 -lSDL2" CGO_CFLAGS="-D_REENTRANT" \
|
||||||
|
go build $(LDFLAGS) -i -o bin/doodle.exe cmd/doodle/main.go
|
||||||
|
env CGO_ENABLED="1" CC="/usr/bin/x86_64-w64-mingw32-gcc" \
|
||||||
|
GOOS="windows" CGO_LDFLAGS="-lmingw32 -lSDL2" CGO_CFLAGS="-D_REENTRANT" \
|
||||||
|
go build $(LDFLAGS) -i -o bin/doodad.exe cmd/doodad/main.go
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# `make run` to run it in debug mode.
|
# `make run` to run it in debug mode.
|
||||||
.PHONY: run
|
.PHONY: run
|
||||||
run:
|
run:
|
||||||
|
|
|
@ -58,13 +58,17 @@ func texture(e render.Engine, img *image.RGBA, name string) (render.Texturer, er
|
||||||
if _, err := os.Stat(filename); os.IsNotExist(err) {
|
if _, err := os.Stat(filename); os.IsNotExist(err) {
|
||||||
fh, err := os.Create(filename)
|
fh, err := os.Create(filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("CornerTexture: %s", err.Error())
|
return nil, fmt.Errorf("texture(%s): %s", name, err.Error())
|
||||||
}
|
}
|
||||||
defer fh.Close()
|
|
||||||
|
|
||||||
err = bmp.Encode(fh, img)
|
err = bmp.Encode(fh, img)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("CornerTexture: bmp.Encode: %s", err.Error())
|
return nil, fmt.Errorf("texture(%s): bmp.Encode: %s", name, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
err = fh.Close()
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("texture(%s): fh.Close: %s", name, err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user