scripts/build_lib.sh
#!/bin/bash

# This script is used to locally build Android .aar library and iOS .xcframework from ctrld source using go mobile tool.

# Requirements:
#   - Android NDK (version 23+)
#   - Android SDK (version 33+)
#   - Xcode 15 + Build tools
#   - Go 1.21
#   - Git
# usage: $ ./build_lib.sh v1.3.4

TAG="$1"
# Hacky way to replace version info.
update_versionInfo() {
    local file="$1/ctrld/cmd/cli/cli.go"
    local tag="$2"
    local commit="$3"
    awk -v tag="$tag" -v commit="$commit" '
        BEGIN { version_updated = 0; commit_updated = 0 }
        /^\tversion/ {
            sub(/= ".+"/, "= \"" tag "\"");
            version_updated = 1;
        }
        /^\tcommit/ {
            sub(/= ".+"/, "= \"" commit "\"");
            commit_updated = 1;
        }
        { print }
        END {
            if (version_updated == 0) {
                print "\tversion = \"" tag "\"";
            }
            if (commit_updated == 0) {
                print "\tcommit = \"" commit "\"";
            }
        }
    ' "$file" > "$file.tmp" && mv "$file.tmp" "$file"
}
export ANDROID_NDK_HOME=~/Library/Android/sdk/ndk/23.0.7599858
mkdir bin
cd bin || exit
root=$(pwd)
# Get source from github and switch to tag
git clone --depth 1 --branch "$TAG" https://github.com/Control-D-Inc/ctrld.git
# Prepare gomobile tool
sourcePath=./ctrld/cmd/ctrld_library
cd $sourcePath || exit
go mod tidy
go install golang.org/x/mobile/cmd/gomobile@latest
go get golang.org/x/mobile/bind
gomobile init
# Prepare build info
buildDir=$root/../build
mkdir -p "$buildDir"
COMMIT=$(git rev-parse HEAD)
update_versionInfo "$root" "$TAG" "$COMMIT"
ldflags="-s -w"
# Build
gomobile bind -target ios/arm64 -ldflags="$ldflags" -o "$buildDir"/ctrld-"$TAG".xcframework || exit
gomobile bind -ldflags="$ldflags" -o "$buildDir"/ctrld-"$TAG".aar || exit
# Clean up
rm -r "$root"
echo "Successfully built Ctrld library $TAG($COMMIT)."