blob: 14863eba8c79fedcd7bd08dbacea02eed9c702f2 [file]
#!/bin/bash
# Gamesdk build driver script
# Usage:
# ./build.sh
# Builds the gamesdk with Swappy, Tuning Fork and Oboe (no samples)
# ./build.sh samples
# Builds the gamesdk with Swappy and the Swappy samples
# ./build.sh full
# Builds the gamesdk with Swappy, Tuning Fork, Oboe and all samples
set -e # Exit on error
# Set up the environment
export ANDROID_HOME=$(pwd)/../prebuilts/sdk
unset ANDROID_SDK_ROOT
unset ANDROID_NDK_HOME
export BUILDBOT_SCRIPT=true
export BUILDBOT_CMAKE=$(pwd)/../prebuilts/cmake/linux-x86
export PATH="$PATH:$(pwd)/../prebuilts/ninja/linux-x86/"
if [ "$(uname)" == "Darwin" ]; then
: # Do nothing but skip the next condition so we don't get a bash warning on macos
elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
# Do only for GNU/Linux platform
export JAVA_HOME=$(pwd)/../prebuilts/jdk/jdk17/linux-x86
fi
sdkmanager_path="$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager"
if [ ! -f "$sdkmanager_path" ]; then
pushd $ANDROID_HOME
mkdir -p cmdline-tools/latest && \
curl -o cmdline-tools/latest/sdk-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip && \
unzip cmdline-tools/latest/sdk-tools.zip -d cmdline-tools/latest && \
mv cmdline-tools/latest/cmdline-tools/* cmdline-tools/latest/ && \
rm -rf cmdline-tools/latest/cmdline-tools && \
rm cmdline-tools/latest/sdk-tools.zip
popd
fi
echo yes | $sdkmanager_path "platform-tools"
echo yes | $sdkmanager_path "platforms;android-35"
echo yes | $sdkmanager_path "platforms;android-31"
echo yes | $sdkmanager_path "build-tools;35.0.0"
echo yes | $sdkmanager_path "ndk;23.1.7779620"
# Use the distribution path given to the script by the build bot in DIST_DIR. Otherwise,
# build in the default location.
if [[ -z $DIST_DIR ]]
then
dist_dir=$(pwd)/../dist
else
dist_dir=$DIST_DIR
fi
## Build the Game SDK distribution zip and the zips for Maven AARs
if [[ $1 == "full" ]]
then
package_name=fullsdk
./gradlew packageZip -Plibraries=swappy,tuningfork,game_activity,game_text_input,paddleboat,memory_advice -PincludeSampleSources -PincludeSampleArtifacts -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=swappy -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=tuningfork -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=game_activity -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=game_text_input -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=paddleboat -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=memory_advice -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew jetpadJson -Plibraries=swappy,tuningfork,game_activity,game_text_input,paddleboat,memory_advice -PdistPath="$dist_dir" -PpackageName=$package_name
elif [[ $1 == "samples" ]]
then
package_name=gamesdk
./gradlew packageZip -Plibraries=swappy -PincludeSampleSources -PincludeSampleArtifacts -PdistPath="$dist_dir"
./gradlew packageMavenZip -Plibraries=swappy -PdistPath="$dist_dir"
elif [[ $1 == "maven-only" ]]
then
# Only the Maven artifacts for Jetpack
package_name=gamesdk-maven
./gradlew packageMavenZip -Plibraries=swappy -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=tuningfork -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=game_activity -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=game_text_input -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=paddleboat -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=memory_advice -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew jetpadJson -Plibraries=swappy,tuningfork,game_activity,game_text_input,paddleboat,memory_advice -PdistPath="$dist_dir" -PpackageName=$package_name
elif [[ $1 == "tests" ]]
then
package_name=gamesdk-tests
./gradlew :game-controller:connectedAndroidTest -Plibraries=paddleboat -PincludeSampleSources -PincludeSampleArtifacts -PdistPath="$dist_dir" -PpackageName=$package_name
# ./gradlew :game-frame-pacing:connectedAndroidTest -Plibraries=swappy -PincludeSampleSources -PincludeSampleArtifacts -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew :game-text-input:connectedAndroidTest -Plibraries=game_text_input,game_activity -PincludeSampleSources -PincludeSampleArtifacts -PdistPath="$dist_dir" -PpackageName=$package_name
exit
else
# The default is to build the express zip
package_name=gamesdk-express
./gradlew packageZip -Plibraries=swappy,tuningfork,game_activity,game_text_input,paddleboat,memory_advice -PincludeSampleSources -PincludeSampleArtifacts -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=swappy -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=tuningfork -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=game_activity -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=game_text_input -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=paddleboat -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew packageMavenZip -Plibraries=memory_advice -PdistPath="$dist_dir" -PpackageName=$package_name
./gradlew jetpadJson -Plibraries=swappy,tuningfork,game_activity,game_text_input,paddleboat,memory_advice -PdistPath="$dist_dir" -PpackageName=$package_name
fi
if [[ $1 != "maven-only" ]]
then
mkdir -p "$dist_dir/$package_name/apks/samples"
mkdir -p "$dist_dir/$package_name/apks/test"
mkdir -p "$dist_dir/$package_name/apks/tools"
# Add the tuningfork samples and apks into the Game SDK distribution zip
pushd ./samples/tuningfork/insightsdemo/
./gradlew ":app:assembleDebug"
popd
pushd ./samples/tuningfork/experimentsdemo/
./gradlew ":app:assembleDebug"
popd
# Add tuningfork monitor app
pushd ./games-performance-tuner/tools/TuningForkMonitor/
./gradlew ":app:assembleDebug"
popd
# Add the swappy samples
pushd samples/bouncyball
./gradlew ":app:assembleDebug"
popd
pushd third_party/cube
./gradlew ":app:assembleDebug"
popd
# Add the memory_advice samples
pushd samples/memory_advice/hogger/
./gradlew ":app:assembleDebug"
popd
# Add the game controller samples
pushd samples/game_controller/
mkdir -p ./third-party
pushd third-party
if [ ! -d "imgui" ] ; then
git clone https://github.com/ocornut/imgui -b v1.89
fi
popd
popd
pushd samples/game_controller/gameactivity
./gradlew ":app:assembleDebug"
popd
pushd samples/game_controller/nativeactivity
./gradlew ":app:assembleDebug"
popd
pushd samples/agdktunnel/third-party/glm
if [ ! -d "glm" ] ; then
git clone https://github.com/g-truc/glm.git
fi
popd
pushd samples/agdktunnel/
./gradlew ":app:assembleDebug"
popd
# Add the game text input samples
pushd samples/game_text_input/game_text_input_testbed
./gradlew ":app:assembleDebug"
popd
cp samples/tuningfork/insightsdemo/app/build/outputs/apk/debug/app-debug.apk \
"$dist_dir/$package_name/apks/samples/insightsdemo.apk"
cp samples/tuningfork/experimentsdemo/app/build/outputs/apk/debug/app-debug.apk \
"$dist_dir/$package_name/apks/samples/experimentsdemo.apk"
cp games-performance-tuner/tools/TuningForkMonitor/app/build/outputs/apk/debug/app-debug.apk \
"$dist_dir/$package_name/apks/tools/tuningforkmonitor.apk"
cp samples/game_controller/nativeactivity/app/build/outputs/apk/debug/app-debug.apk \
"$dist_dir/$package_name/apks/samples/game_controller_nativeactivity.apk"
cp samples/game_controller/gameactivity/app/build/outputs/apk/debug/app-debug.apk \
"$dist_dir/$package_name/apks/samples/game_controller_gameactivity.apk"
cp samples/bouncyball/app/build/outputs/apk/debug/app-debug.apk \
"$dist_dir/$package_name/apks/samples/bouncyball.apk"
cp third_party/cube/app/build/outputs/apk/debug/app-debug.apk \
"$dist_dir/$package_name/apks/samples/cube.apk"
cp samples/memory_advice/hogger/app/build/outputs/apk/debug/app-debug.apk \
"$dist_dir/$package_name/apks/samples/hogger.apk"
cp samples/agdktunnel/app/build/outputs/apk/debug/app-debug.apk \
"$dist_dir/$package_name/apks/samples/agdktunnel.apk"
cp samples/game_text_input/game_text_input_testbed/app/build/outputs/apk/debug/app-debug.apk \
"$dist_dir/$package_name/apks/samples/game_text_input.apk"
pushd $dist_dir/$package_name
if [[ -z "$(ls -1 agdk-libraries-*.zip 2>/dev/null | grep agdk)" ]] ; then
echo 'Could not find the zip "agdk-libraries-*.zip".'
exit
fi
zip -ur agdk-libraries-*.zip "apks/samples/insightsdemo.apk"
zip -ur agdk-libraries-*.zip "apks/samples/experimentsdemo.apk"
zip -ur agdk-libraries-*.zip "apks/tools/tuningforkmonitor.apk"
zip -ur agdk-libraries-*.zip "apks/samples/game_controller_nativeactivity.apk"
zip -ur agdk-libraries-*.zip "apks/samples/game_controller_gameactivity.apk"
zip -ur agdk-libraries-*.zip "apks/samples/bouncyball.apk"
zip -ur agdk-libraries-*.zip "apks/samples/cube.apk"
zip -ur agdk-libraries-*.zip "apks/samples/hogger.apk"
zip -ur agdk-libraries-*.zip "apks/samples/agdktunnel.apk"
zip -ur agdk-libraries-*.zip "apks/samples/game_text_input.apk"
popd
fi
# Calculate hash of the zip file
pushd "$dist_dir/$package_name"
for ZIPNAME in agdk-libraries-*
do
if [[ -e $ZIPNAME ]]
then
sha256sum $ZIPNAME > $ZIPNAME.sha256
fi
break
done
popd
pushd "$dist_dir/$package_name"
# Remove intermediate files that would be very costly to store
rm -rf libs prefab
# Remove other files that we don't care about and are polluting the output
rm -rf external third_party src include samples aar
popd