diff options
Diffstat (limited to 'cmd/rescribe/makefile')
| -rw-r--r-- | cmd/rescribe/makefile | 87 |
1 files changed, 76 insertions, 11 deletions
diff --git a/cmd/rescribe/makefile b/cmd/rescribe/makefile index aee2114..44cdee4 100644 --- a/cmd/rescribe/makefile +++ b/cmd/rescribe/makefile @@ -1,19 +1,84 @@ # See LICENSE file for copyright and license details. +# +# This is a set of make(1) rules to cross compile rescribe +# from Linux to other architectures - as we use Fyne, CGO +# is required, so we have to do more to cross compile than +# just rely on the standard go tools. It relies on osxcross +# being set up for the Mac builds, and mingw-w64 being +# installed for the Windows build. +# +# The standard go tools work perfectly for native builds on +# all architectures - note that "go generate" needs to be +# run before building to download the dependencies which are +# embedded. -all: dist/linux/rescribe dist/darwin_amd64/rescribe dist/darwin_arm64/rescribe dist/windows/rescribe.exe +# For osxcross, there are many versions of the MacOS SDK +# that are too old or too new to build Rescribe correctly. +# SDK 11.3, as extracted from XCode 12.5.1, seems to work +# perfectly for us. +OSXCROSSDIR=/opt/osxcross +# go < 1.25 needed for the MacOS SDK version we use due to +# https://go-review.googlesource.com/c/go/+/654376 +# could probably use a newer SDK, but finding and building +# a working version is a pain +OSXGOVERSION=go1.24.13 -dist/linux/rescribe: +GOPATH=$(HOME)/go + +EMBEDS=embed_darwin.go embed_darwin_amd64.go embed_darwin_arm64.go embed_linux.go embed_windows.go embed_other.go +GODEPS=gui.go main.go $(EMBEDS) +VERSION=1.4.0 + +all: dist/linux/rescribe dist/linux/wayland/rescribe dist/darwin/rescribe.zip dist/windows/rescribe.exe + +dist/linux/rescribe: $(GODEPS) + go generate mkdir -p dist/linux - GOOS=linux GOARCH=amd64 go build -o $@ . + GOOS=linux GOARCH=amd64 go build -tags embed -o $@ . + +dist/linux/wayland/rescribe: $(GODEPS) + go generate + mkdir -p dist/linux/wayland + GOOS=linux GOARCH=amd64 go build -tags embed,wayland -o $@ . + +build/darwin_amd64/rescribe: $(GODEPS) + go generate + mkdir -p build/darwin_amd64 + LD_LIBRARY_PATH="$(OSXCROSSDIR)/lib" PATH="$(PATH):$(OSXCROSSDIR)/bin" CC="o64-clang" CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 GOTOOLCHAIN=$(OSXGOVERSION) go build -tags embed -o $@ . -dist/darwin_amd64/rescribe: - mkdir -p dist/darwin_amd64 - GOOS=darwin GOARCH=amd64 go build -o $@ . +build/darwin_arm64/rescribe: $(GODEPS) + go generate + mkdir -p build/darwin_arm64 + LD_LIBRARY_PATH="$(OSXCROSSDIR)/lib" PATH="$(PATH):$(OSXCROSSDIR)/bin" CC="oa64-clang" CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 GOTOOLCHAIN=$(OSXGOVERSION) go build -tags embed -o $@ . -dist/darwin_arm64/rescribe: - mkdir -p dist/darwin_arm64 - GOOS=darwin GOARCH=arm64 go build -o $@ . +build/darwin/rescribe: build/darwin_amd64/rescribe build/darwin_arm64/rescribe + mkdir -p build/darwin + LD_LIBRARY_PATH="$(OSXCROSSDIR)/lib" PATH="$(PATH):$(OSXCROSSDIR)/bin" lipo -create build/darwin_amd64/rescribe build/darwin_arm64/rescribe -output $@ -dist/windows/rescribe.exe: +rescribe.pem: + rcodesign generate-self-signed-certificate --person-name Rescribe > $@ + +build/darwin/Rescribe.app: build/darwin/rescribe rescribe.pem + go install fyne.io/tools/cmd/fyne@v1.7.0 + PATH="$(PATH):$(OSXCROSSDIR)/bin" $(GOPATH)/bin/fyne package --release --certificate Rescribe --id xyz.rescribe.rescribe --tags embed --name Rescribe --exe build/darwin/rescribe --os darwin --icon icon.png --app-version $(VERSION) + rcodesign sign --pem-file rescribe.pem Rescribe.app + mv Rescribe.app $@ + +dist/darwin/rescribe.zip: build/darwin/Rescribe.app + mkdir -p dist/darwin + cd build/darwin; zip -r ../../dist/darwin/rescribe.zip Rescribe.app + +dist/windows/rescribe.exe: $(GODEPS) mkdir -p dist/windows - GOOS=windows GOARCH=386 go build -o $@ . + go generate + go install fyne.io/tools/cmd/fyne@v1.7.0 + CC="x86_64-w64-mingw32-gcc" $(GOPATH)/bin/fyne package --tags embed --name Rescribe --exe $@ --os windows --icon icon.png --app-version $(VERSION) + +# used for flatpak building +modules.tar.xz: ../../go.mod + go mod vendor + cd ../.. && tar c vendor | xz > cmd/rescribe/$@ + +clean: + rm -rf dist build + rm -rf ../../vendor |
