diff --git a/buildlibs.sh b/buildlibs.sh new file mode 100755 index 0000000..09cb7e8 --- /dev/null +++ b/buildlibs.sh @@ -0,0 +1,15 @@ +#!/usr/bin/sh + +if [ -z "$v" ]; then + echo "Version number cannot be null. Run with v=[version] $0" + exit 1 +fi + +mkdir -p build-lib + +CC=aarch64-linux-gnu-gcc CGO_ENABLED=1 GOOS="linux" GOARCH="arm64" go build -ldflags "-X main.version=${v}" -buildmode=c-shared -tags=external_main -o libck-client-arm64-linux.so ./cmd/ck-client +CC=arm-linux-gnueabi-gcc CGO_ENABLED=1 GOOS="linux" GOARCH="arm" go build -ldflags "-X main.version=${v}" -buildmode=c-shared -tags=external_main -o libck-client-arm-linux.so ./cmd/ck-client +CC=x86_64-linux-gnu-gcc CGO_ENABLED=1 GOOS="linux" GOARCH="amd64" go build -ldflags "-X main.version=${v}" -buildmode=c-shared -tags=external_main -o libck-client-amd64-linux.so ./cmd/ck-client +CC=x86_64-linux-gnu-gcc CGO_ENABLED=1 GOOS="linux" GOARCH="386" go build -ldflags "-X main.version=${v}" -buildmode=c-shared -tags=external_main -o libck-client-386-linux.so ./cmd/ck-client + +mv libck* build-lib diff --git a/cmd/ck-client/external-main.go b/cmd/ck-client/external-main.go new file mode 100644 index 0000000..71f7448 --- /dev/null +++ b/cmd/ck-client/external-main.go @@ -0,0 +1,23 @@ +//go:build external_main +// +build external_main + +package main + +import ( + "os" + "C" + "unsafe" +) + +//export external_main +func external_main(argc C.int, argv **C.char) { + var offset = unsafe.Sizeof(uintptr(0)) + var go_argv []string + for i := 0; i < int(argc); i++ { + go_argv = append(go_argv, C.GoString(*argv)) + argv = (**C.char)(unsafe.Pointer(uintptr(unsafe.Pointer(argv)) + offset)) + } + + os.Args = go_argv + main() +} diff --git a/cmd/ck-client/log.go b/cmd/ck-client/log.go index e44b066..ec1d4d3 100644 --- a/cmd/ck-client/log.go +++ b/cmd/ck-client/log.go @@ -1,5 +1,5 @@ -//go:build !android -// +build !android +//go:build !log_android +// +build !log_android package main diff --git a/cmd/ck-client/log_android.go b/cmd/ck-client/log_android.go index 301b35e..4ff4ada 100644 --- a/cmd/ck-client/log_android.go +++ b/cmd/ck-client/log_android.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build android -// +build android +//go:build log_android +// +build log_android package main diff --git a/cmd/ck-server/external-main.go b/cmd/ck-server/external-main.go new file mode 100644 index 0000000..71f7448 --- /dev/null +++ b/cmd/ck-server/external-main.go @@ -0,0 +1,23 @@ +//go:build external_main +// +build external_main + +package main + +import ( + "os" + "C" + "unsafe" +) + +//export external_main +func external_main(argc C.int, argv **C.char) { + var offset = unsafe.Sizeof(uintptr(0)) + var go_argv []string + for i := 0; i < int(argc); i++ { + go_argv = append(go_argv, C.GoString(*argv)) + argv = (**C.char)(unsafe.Pointer(uintptr(unsafe.Pointer(argv)) + offset)) + } + + os.Args = go_argv + main() +}