You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
4.6 KiB
114 lines
4.6 KiB
IOS_OUT := ./ios
|
|
|
|
.PHONY: all linux android windows macos clean ios
|
|
|
|
|
|
DEFAULT_GOAL: linux
|
|
|
|
all: linux android windows
|
|
|
|
ARCH := $(shell uname -m)
|
|
ARM_X_CC := aarch64-linux-gnu-gcc
|
|
|
|
# determine if the x64 cross arm64 compiler is available so we can add that target
|
|
LINUX_X_ARM=
|
|
ifneq (,$(shell which $(ARM_X_CC)))
|
|
LINUX_X_ARM = libCwtch.x.so
|
|
endif
|
|
|
|
linux: EXPERIMENTS ?= "serverExperiment"
|
|
linux: libCwtch.so $(LINUX_X_ARM)
|
|
|
|
macos: EXPERIMENTS ?= "serverExperiment"
|
|
macos: libCwtch.x64.dylib libCwtch.arm64.dylib
|
|
|
|
android: EXPERIMENTS ?= ""
|
|
android: cwtch.aar
|
|
|
|
windows: EXPERIMENTS ?= "serverExperiment"
|
|
windows: libCwtch.dll
|
|
|
|
|
|
lib.go: generate/generate_bindings.go spec
|
|
go run generate/generate_bindings.go --experiments "$(EXPERIMENTS)"
|
|
|
|
|
|
libCwtch.so: lib.go
|
|
./switch-ffi.sh
|
|
go build -trimpath -ldflags "-buildid=autobindings-$(shell git describe --tags) -X main.buildVer=autobindings-$(shell git describe --tags) -X main.buildDate=$(shell git log -1 --format=%cd --date=format:%G-%m-%d-%H-%M)" -buildmode c-shared -o libCwtch.so
|
|
mkdir -p build/linux
|
|
ifeq ($(ARCH),x86_64)
|
|
mv libCwtch.so build/linux/libCwtch.x64.so
|
|
else ifeq ($(ARCH),aarch64)
|
|
mv libCwtch.so build/linux/libCwtch.arm64.so
|
|
endif
|
|
mv libCwtch.h build/linux/libCwtch.h
|
|
|
|
libCwtch.x.so: lib.go
|
|
./switch-ffi.sh
|
|
mkdir -p build/linux
|
|
ifeq ($(ARCH),x86_64)
|
|
env CGO_ENABLED=1 CC=$(ARM_X_CC) GOARCH=arm64 go build -trimpath -ldflags "-buildid=autobindings-v0.0.3-22-g20065b2 -X main.buildVer=autobindings-v0.0.3-22-g20065b2 -X main.buildDate=2023-05-01-21-41" -buildmode c-shared -o libCwtch.x.so
|
|
mv libCwtch.x.so build/linux/libCwtch.arm64.so
|
|
mv libCwtch.x.h build/linux/libCwtch.h
|
|
endif
|
|
|
|
libCwtch.x64.dylib: lib.go
|
|
./switch-ffi.sh
|
|
go build -trimpath -ldflags "-buildid=autobindings-$(shell git describe --tags) -X main.buildVer=autobindings-$(shell git describe --tags) -X main.buildDate=$(shell git log -1 --format=%cd --date=format:%G-%m-%d-%H-%M)" -buildmode c-shared -o libCwtch.x64.dylib
|
|
mkdir -p build/macos
|
|
mv libCwtch.x64.dylib build/macos/
|
|
|
|
libCwtch.arm64.dylib: lib.go
|
|
./switch-ffi.sh
|
|
env GOARCH=arm64 GOOS=darwin CGO_ENABLED=1 go build -trimpath -ldflags "-buildid=$(shell git describe --tags) -X main.buildVer=$(shell git describe --tags) -X main.buildDate=$(shell git log -1 --format=%cd --date=format:%G-%m-%d-%H-%M)" -buildmode c-shared -o libCwtch.arm64.dylib
|
|
mkdir -p build/macos
|
|
mv libCwtch.arm64.dylib build/macos/
|
|
|
|
cwtch.aar: lib.go
|
|
./switch-gomobile.sh
|
|
gomobile bind -trimpath -target android/arm,android/arm64,android/amd64 -ldflags="-buildid=$(shell git describe --tags) -X cwtch.buildVer=$(shell git describe --tags) -X cwtch.buildDate=$(shell git log -1 --format=%cd --date=format:%G-%m-%d-%H-%M)"
|
|
mkdir -p build/android
|
|
mv cwtch.aar build/android/
|
|
mv cwtch-sources.jar build/android/
|
|
|
|
libCwtch.dll: lib.go
|
|
./switch-ffi.sh
|
|
# '-Xlinker --no-insert-timestamp` sets the output dll PE timestamp header to all zeros, instead of the actual time
|
|
# this is necessary for reproducible builds (see: https://wiki.debian.org/ReproducibleBuilds/TimestampsInPEBinaries for additional information)
|
|
# note: the above documentation also references an ability to set an optional timestamp - this behaviour seems to no longer be supported in more recent versions of mingw32-gcc (the help docs no longer reference that functionality)
|
|
# these flags have to be passed through to the underlying gcc process using the -extldflags option in the underlying go linker, note that the whole flag is quoted...this is necessary.
|
|
GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc-win32 go build -trimpath -ldflags "-buildid=$(shell git describe --tags) -X main.buildVer=$(shell git describe --tags) -X main.buildDate=$(shell git log -1 --format=%cd --date=format:%G-%m-%d-%H-%M) '-extldflags=-Xlinker --no-insert-timestamp'" -buildmode c-shared -o libCwtch.dll
|
|
mkdir -p build/windows
|
|
mv libCwtch.dll build/windows/
|
|
mv libCwtch.h build/windows/
|
|
|
|
clean-autobindings:
|
|
rm -f lib.go
|
|
|
|
clean:
|
|
rm -fr lib.go cwtch.aar cwtch_go.apk libCwtch.*.h libCwtch.*.so cwtch-sources.jar libCwtch.dll libCwtch.*.dylib build
|
|
|
|
# iOS - for testing purposes only for now, not officially supported
|
|
|
|
ios-arm64:
|
|
CGO_ENABLED=1 \
|
|
GOOS=darwin \
|
|
GOARCH=arm64 \
|
|
SDK=iphoneos \
|
|
CGO_CFLAGS="-fembed-bitcode" \
|
|
CC=$(PWD)/clangwrap.sh \
|
|
go build -buildmode=c-archive -tags ios -o $(IOS_OUT)/arm64.a .
|
|
|
|
ios-x86_64:
|
|
CGO_ENABLED=1 \
|
|
GOOS=darwin \
|
|
GOARCH=amd64 \
|
|
SDK=iphonesimulator \
|
|
CC=$(PWD)/clangwrap.sh \
|
|
go build -buildmode=c-archive -tags ios -o $(IOS_OUT)/x86_64.a .
|
|
|
|
ios: ios-arm64 ios-x86_64
|
|
lipo $(IOS_OUT)/x86_64.a $(IOS_OUT)/arm64.a -create -output $(IOS_OUT)/cwtch.a
|
|
cp $(IOS_OUT)/arm64.h $(IOS_OUT)/cwtch.h
|