Adjust the build-rust-sdk script to allow non-interactive use
This commit is contained in:
parent
721add707c
commit
5cfcffc45e
3 changed files with 243 additions and 103 deletions
|
|
@ -144,8 +144,8 @@ Prerequisites:
|
||||||
```
|
```
|
||||||
|
|
||||||
You can then build the Rust SDK by running the script
|
You can then build the Rust SDK by running the script
|
||||||
[`tools/sdk/build_rust_sdk.sh`](../tools/sdk/build_rust_sdk.sh) and just answering
|
[`tools/sdk/build-rust-sdk`](../tools/sdk/build-rust-sdk). Type
|
||||||
the questions.
|
`./tools/sdk/build-rust-sdk --help` for help.
|
||||||
|
|
||||||
This will prompt you for the path to the Rust SDK, then build it and
|
This will prompt you for the path to the Rust SDK, then build it and
|
||||||
`matrix-rust-components-kotlin`, eventually producing an aar file at
|
`matrix-rust-components-kotlin`, eventually producing an aar file at
|
||||||
|
|
|
||||||
241
tools/sdk/build-rust-sdk
Executable file
241
tools/sdk/build-rust-sdk
Executable file
|
|
@ -0,0 +1,241 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2025-2026 Element Creations Ltd.
|
||||||
|
# Copyright 2024 New Vector Ltd.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||||
|
# Please see LICENSE files in the repository root for full details.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
|
||||||
|
# Usage:
|
||||||
|
#
|
||||||
|
# ./tools/sdk/build-rust-sdk --help
|
||||||
|
#
|
||||||
|
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
# * matrix-rust-components-kotlin will be cloned into
|
||||||
|
# ../matrix-rust-components-kotlin and any changes in there will be
|
||||||
|
# overwritten (without prompting!)
|
||||||
|
#
|
||||||
|
# * If you opt to build a remote repo, it will be cloned into
|
||||||
|
# ../matrix-rust-sdk-<<DATE>>
|
||||||
|
|
||||||
|
## Defaults
|
||||||
|
|
||||||
|
buildLocal=0
|
||||||
|
rustSdkPath="../matrix-rust-sdk/"
|
||||||
|
rustSdkUrl="https://github.com/matrix-org/matrix-rust-sdk.git"
|
||||||
|
rustSdkBranch="main"
|
||||||
|
buildApp=1
|
||||||
|
|
||||||
|
default_arch="$(uname -m)-linux-android"
|
||||||
|
# On ARM MacOS, `uname -m` returns arm64, but the toolchain is called aarch64
|
||||||
|
default_arch="${default_arch/arm64/aarch64}"
|
||||||
|
|
||||||
|
target_arch="${default_arch}"
|
||||||
|
|
||||||
|
sdkArg=""
|
||||||
|
|
||||||
|
## Argument parsing
|
||||||
|
|
||||||
|
TEMP=$(getopt -o 'rs:b:at:h' --long 'remote,sdk:,branch:,build-app,target-arch,help' -- "$@")
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo 'Terminating...' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
eval set -- "$TEMP"
|
||||||
|
unset TEMP
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
case "$1" in
|
||||||
|
'r'|'--remote')
|
||||||
|
buildLocal=1
|
||||||
|
shift
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
's'|'--sdk')
|
||||||
|
sdkArg="$2"
|
||||||
|
shift 2
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
'b'|'--branch')
|
||||||
|
rustSdkBranch="$2"
|
||||||
|
shift 2
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
'a'|'--build-app')
|
||||||
|
buildApp=0
|
||||||
|
shift
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
't'|'--target-arch')
|
||||||
|
target_arch="$2"
|
||||||
|
shift 2
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
'h'|'--help')
|
||||||
|
cat << END
|
||||||
|
SYNOPSIS
|
||||||
|
|
||||||
|
$0 [-s|--sdk=PATH] [-a|--build-app] [-t|--target-arch=TARGET]"
|
||||||
|
|
||||||
|
$0 --remote [-s|--sdk=URL] [-b|--branch=BRANCH] [-a|--build-app] [-t|--target-arch=TARGET]"
|
||||||
|
|
||||||
|
ARGUMENTS
|
||||||
|
|
||||||
|
-a --build-app
|
||||||
|
Build the Android app after the SDK is built.
|
||||||
|
|
||||||
|
-b --branch
|
||||||
|
If --remote is supplied, the branch of the remote repo to build.
|
||||||
|
|
||||||
|
-r --remote
|
||||||
|
Fetch the SDK code from a remote repo instead of building a local version.
|
||||||
|
|
||||||
|
-s --sdk
|
||||||
|
The local path of the SDK to build, or the URL of the remote repo if --remote is provided.
|
||||||
|
|
||||||
|
-t --target-arch
|
||||||
|
The architecture for which to build the app. Defaults to the architecture of this machine (${default_arch}).
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
|
||||||
|
$0
|
||||||
|
Build the default local rust SDK (../matrix-rust-sdk)
|
||||||
|
|
||||||
|
$0 --sdk=/home/andy/code/matrix-rust-sdk
|
||||||
|
Build the supplied local rust SDK
|
||||||
|
|
||||||
|
$0 --remote
|
||||||
|
Build the default remote SDK
|
||||||
|
|
||||||
|
$0 --remote --branch=featureA
|
||||||
|
Build the "featureA" branch of the remote SDK
|
||||||
|
|
||||||
|
$0 --remote --sdk=https://github.com/andybalaam/matrix-rust-sdk.git
|
||||||
|
Build an alternative remote SDK
|
||||||
|
|
||||||
|
$0 --build-app
|
||||||
|
Build the app after building the SDK
|
||||||
|
|
||||||
|
$0 --build-app --target-arch=x86_64-linux-android
|
||||||
|
Build the app after building the SDK, for the x86_64 target architecture
|
||||||
|
|
||||||
|
END
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
'--')
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo 'Unrecognised argument!' >&2
|
||||||
|
exit 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "${sdkArg}" ]; then
|
||||||
|
if [ "${buildLocal}" == "0" ]; then
|
||||||
|
rustSdkPath="${sdkArg}"
|
||||||
|
else
|
||||||
|
rustSdkUrl="${sdkArg}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
#echo "buildLocal=${buildLocal}"
|
||||||
|
#echo "rustSdkPath=${rustSdkPath}"
|
||||||
|
#echo "rustSdkUrl=${rustSdkUrl}"
|
||||||
|
#echo "rustSdkBranch=${rustSdkBranch}"
|
||||||
|
#echo "buildApp=${buildApp}"
|
||||||
|
|
||||||
|
## Find the date
|
||||||
|
|
||||||
|
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||||
|
date=$(date +%Y%m%d%H%M%S)
|
||||||
|
else
|
||||||
|
date=$(gdate +%Y%m%d%H%M%S)
|
||||||
|
fi
|
||||||
|
|
||||||
|
elementPwd=$(pwd)
|
||||||
|
|
||||||
|
## Check the local build dir is valid, or clone the remote repo
|
||||||
|
|
||||||
|
if [ "${buildLocal}" == "0" ]; then
|
||||||
|
if [ ! -d "${rustSdkPath}" ]; then
|
||||||
|
printf "\nFolder ${rustSdkPath} does not exist. Please clone the\n" >&2
|
||||||
|
printf "matrix-rust-sdk repository into ../matrix-rust-sdk\n" >&2
|
||||||
|
printf "or supply the --sdk argument.\n\n" >&2
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
printf "\n## Cloning the SDK repo...\n\n"
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
git clone "${rustSdkUrl}" matrix-rust-sdk-"$date"
|
||||||
|
cd matrix-rust-sdk-"$date"
|
||||||
|
git checkout "${rustSdkBranch}"
|
||||||
|
rustSdkPath=$(pwd)
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "${elementPwd}"
|
||||||
|
|
||||||
|
## Clone matrix-rust-components-kotlin if needed
|
||||||
|
|
||||||
|
if [ ! -d "../matrix-rust-components-kotlin" ]; then
|
||||||
|
printf "\nFolder ../matrix-rust-components-kotlin does not exist."
|
||||||
|
printf "Cloning the repository into ../matrix-rust-components-kotlin.\n\n"
|
||||||
|
git clone \
|
||||||
|
https://github.com/matrix-org/matrix-rust-components-kotlin.git \
|
||||||
|
../matrix-rust-components-kotlin
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n## Resetting matrix-rust-components-kotlin to the latest main...\n\n"
|
||||||
|
|
||||||
|
cd ../matrix-rust-components-kotlin
|
||||||
|
git reset --hard
|
||||||
|
git checkout main
|
||||||
|
git pull
|
||||||
|
|
||||||
|
## Build the SDK
|
||||||
|
|
||||||
|
printf "\n## Building the SDK for ${target_arch}...\n\n"
|
||||||
|
|
||||||
|
./scripts/build.sh \
|
||||||
|
-p "${rustSdkPath}" \
|
||||||
|
-m sdk \
|
||||||
|
-t "${target_arch}" \
|
||||||
|
-o "${elementPwd}/libraries/rustsdk"
|
||||||
|
|
||||||
|
cd "${elementPwd}"
|
||||||
|
|
||||||
|
mv \
|
||||||
|
./libraries/rustsdk/sdk-android-debug.aar \
|
||||||
|
./libraries/rustsdk/matrix-rust-sdk.aar
|
||||||
|
|
||||||
|
mkdir -p ./libraries/rustsdk/sdks
|
||||||
|
|
||||||
|
cp \
|
||||||
|
"./libraries/rustsdk/matrix-rust-sdk.aar" \
|
||||||
|
"./libraries/rustsdk/sdks/matrix-rust-sdk-${date}.aar"
|
||||||
|
|
||||||
|
## Build the app
|
||||||
|
|
||||||
|
if [ "${buildApp}" == "0" ]; then
|
||||||
|
printf "\n## Building the application...\n\n"
|
||||||
|
./gradlew assembleDebug
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Clean remote checkout of SDK repo
|
||||||
|
|
||||||
|
if [ "${buildLocal}" != "0" ]; then
|
||||||
|
printf "\n## Cleaning up...\n\n"
|
||||||
|
rm -rf "../matrix-rust-sdk-$date"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n## Done!\n"
|
||||||
|
|
@ -1,101 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2025 Element Creations Ltd.
|
|
||||||
# Copyright 2024 New Vector Ltd.
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
|
||||||
# Please see LICENSE files in the repository root for full details.
|
|
||||||
|
|
||||||
# Exit on error
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Ask to build from local source or to clone the repository
|
|
||||||
read -p "Do you want to build the Rust SDK from local source (yes/no) default to yes? " buildLocal
|
|
||||||
buildLocal=${buildLocal:-yes}
|
|
||||||
|
|
||||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
|
||||||
date=$(date +%Y%m%d%H%M%S)
|
|
||||||
else
|
|
||||||
date=$(gdate +%Y%m%d%H%M%S)
|
|
||||||
fi
|
|
||||||
|
|
||||||
elementPwd=$(pwd)
|
|
||||||
|
|
||||||
# Ask for the Rust SDK local source path
|
|
||||||
# if folder rustSdk/ exists, use it as default
|
|
||||||
if [ "${buildLocal}" == "yes" ]; then
|
|
||||||
read -p "Please enter the path to the Rust SDK local source, default to ../matrix-rust-sdk" rustSdkPath
|
|
||||||
rustSdkPath=${rustSdkPath:-../matrix-rust-sdk/}
|
|
||||||
if [ ! -d "${rustSdkPath}" ]; then
|
|
||||||
printf "\nFolder ${rustSdkPath} does not exist. Please clone the matrix-rust-sdk repository in the folder ../matrix-rust-sdk.\n\n"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
read -p "Please enter the Rust SDK repository url, default to https://github.com/matrix-org/matrix-rust-sdk.git " rustSdkUrl
|
|
||||||
rustSdkUrl=${rustSdkUrl:-https://github.com/matrix-org/matrix-rust-sdk.git}
|
|
||||||
read -p "Please enter the Rust SDK branch, default to main " rustSdkBranch
|
|
||||||
rustSdkBranch=${rustSdkBranch:-main}
|
|
||||||
cd ..
|
|
||||||
git clone "${rustSdkUrl}" matrix-rust-sdk-"$date"
|
|
||||||
cd matrix-rust-sdk-"$date"
|
|
||||||
git checkout "${rustSdkBranch}"
|
|
||||||
rustSdkPath=$(pwd)
|
|
||||||
cd "${elementPwd}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
cd "${rustSdkPath}"
|
|
||||||
git status
|
|
||||||
|
|
||||||
read -p "Will build with this version of the Rust SDK ^. Is it correct (yes/no) default to yes? " sdkCorrect
|
|
||||||
sdkCorrect=${sdkCorrect:-yes}
|
|
||||||
|
|
||||||
if [ "${sdkCorrect}" != "yes" ]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Ask if the user wants to build the app after
|
|
||||||
read -p "Do you want to build the app after (yes/no) default to no? " buildApp
|
|
||||||
buildApp=${buildApp:-no}
|
|
||||||
|
|
||||||
cd "${elementPwd}"
|
|
||||||
|
|
||||||
default_arch="$(uname -m)-linux-android"
|
|
||||||
# On ARM MacOS, `uname -m` returns arm64, but the toolchain is called aarch64
|
|
||||||
default_arch="${default_arch/arm64/aarch64}"
|
|
||||||
|
|
||||||
read -p "Enter the architecture you want to build for (default '$default_arch'): " target_arch
|
|
||||||
target_arch="${target_arch:-${default_arch}}"
|
|
||||||
|
|
||||||
# If folder ../matrix-rust-components-kotlin does not exist, clone the repo
|
|
||||||
if [ ! -d "../matrix-rust-components-kotlin" ]; then
|
|
||||||
printf "\nFolder ../matrix-rust-components-kotlin does not exist. Cloning the repository into ../matrix-rust-components-kotlin.\n\n"
|
|
||||||
git clone https://github.com/matrix-org/matrix-rust-components-kotlin.git ../matrix-rust-components-kotlin
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf "\nResetting matrix-rust-components-kotlin to the latest main branch...\n\n"
|
|
||||||
cd ../matrix-rust-components-kotlin
|
|
||||||
git reset --hard
|
|
||||||
git checkout main
|
|
||||||
git pull
|
|
||||||
|
|
||||||
printf "\nBuilding the SDK for ${target_arch}...\n\n"
|
|
||||||
./scripts/build.sh -p "${rustSdkPath}" -m sdk -t "${target_arch}" -o "${elementPwd}/libraries/rustsdk"
|
|
||||||
|
|
||||||
cd "${elementPwd}"
|
|
||||||
mv ./libraries/rustsdk/sdk-android-debug.aar ./libraries/rustsdk/matrix-rust-sdk.aar
|
|
||||||
mkdir -p ./libraries/rustsdk/sdks
|
|
||||||
cp ./libraries/rustsdk/matrix-rust-sdk.aar ./libraries/rustsdk/sdks/matrix-rust-sdk-"${date}".aar
|
|
||||||
|
|
||||||
|
|
||||||
if [ "${buildApp}" == "yes" ]; then
|
|
||||||
printf "\nBuilding the application...\n\n"
|
|
||||||
./gradlew assembleDebug
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${buildLocal}" == "no" ]; then
|
|
||||||
printf "\nCleaning up...\n\n"
|
|
||||||
rm -rf ../matrix-rust-sdk-"$date"
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf "\nDone!\n"
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue