blob: 975b7aa8bfb742c3a5cdcc387ab6b5f18b57f28c [file] [log] [blame]
#!/bin/bash
# Exit on error and show the commands as they execute.
set -ex
# Ensure we get the full path of this script's directory.
PROGDIR=`dirname $0`
PROGDIR=`cd $PROGDIR && pwd`
# Use osx-x64 instead of darwin-x64 for Mac.
# TODO: Switch the build to use darwin-x64 to be consistent with
# other Android repositories.
HOST_OS=$(uname | tr A-Z a-z | sed -e "s/darwin/osx/g")"-x64"
source $PROGDIR/setup_env_common.txt
source $PROGDIR/setup_toolchain_$HOST_OS.txt
if [[ $HOST_OS == "linux-x64" ]]; then
crosscompile_windows=1
else
crosscompile_windows=0
fi
run_integration_tests=0
use_xvfb=0
BUILD_NUMBER="SNAPSHOT-"`date "+%Y-%m-%dT%H:%M:%S%z"`
BUILD_FLAVOR="release"
DIST_DIR=$GPU_BUILD_ROOT/dist
function show_help {
# Turn off command echoing so the help message is readable.
set +x
echo "USAGE: "`basename $0`" [options]"
echo ""
echo " -b <name/number> Sets the build number (used for artifact naming)."
echo " -d <absolute path> Sets the distribution directory."
echo " -f <release|debug> Sets the build flavor."
echo " -h Show this message."
echo " -i Run integration tests."
echo " -w Do NOT cross-compile the server for Windows."
echo " -x Start an Xvfb-randr server for running integration tests"
echo " without an X server."
}
while getopts "b:d:f:h?iwx" opt; do
case "$opt" in
b) BUILD_NUMBER=$OPTARG
;;
d) DIST_DIR=$OPTARG
;;
f) BUILD_FLAVOR=$OPTARG
;;
h|\?) show_help
exit 0
;;
i) run_integration_tests=1
;;
w) crosscompile_windows=0
;;
x) use_xvfb=1
;;
esac
done
cd $GPU_BUILD_ROOT
if [ $use_xvfb -eq 1 ]; then
# Start a headless X server on display :42 for integration tests.
# Xvfb is not able to run the integration tests (the cause is not entirely
# understood, but it doesn't appear to expose GLX to the X client).
# Instead, run Xvfb-randr, which appears to be installed as part of
# Chrome remote desktop.
Xvfb-randr :42 +extension GLX -screen 0 1280x1024x24 -noreset &
export XVFB_PID=$!
export DISPLAY=:42
fi
export GO_BUILD_FLAGS="-i -v -x -o"
export GO_TEST_FLAGS="-v -x"
go build $GO_BUILD_FLAGS $GPU_BUILD_ROOT/bin/$HOST_OS/$BUILD_FLAVOR/gapis $GPU_RELATIVE_SOURCE_PATH/server/gapis
# make.go is failing with gcc errors on the build machine,
# so disable it for now.
# TODO: Remove this once make.go runs on the build machine.
if [[ $HOST_OS == "osx-x64" ]]; then
exit 0
fi
# Kill any existing replay daemon before running tests.
killall replayd || true
go run src/$GPU_RELATIVE_SOURCE_PATH/make.go -f -v=1 -verbose=true --disable=code cc
# Kill any existing replay daemon before running tests.
killall replayd || true
# Run non-integration tests.
go list android.googlesource.com/platform/tools/gpu/... | egrep -v '/integration/?' | xargs go test $GO_TEST_FLAGS
if [ $run_integration_tests -eq 1 ]; then
# Run the integration tests.
go list android.googlesource.com/platform/tools/gpu/... | egrep '/integration/?' | xargs go test $GO_TEST_FLAGS
fi
if [ ! -z $XVFB_PID ]; then
kill $XVFB_PID
fi
killall replayd || true
if [ $crosscompile_windows -eq 1 ]; then
go run src/$GPU_RELATIVE_SOURCE_PATH/make.go -f -v=1 -verbose=true -targetos=windows --disable=code cc:replayd
source $PROGDIR/setup_toolchain_linux_xc_win64.txt
go build $GO_BUILD_FLAGS $GPU_BUILD_ROOT/bin/windows-x64/$BUILD_FLAVOR/gapis.exe -ldflags="-extld=$CC" $GPU_RELATIVE_SOURCE_PATH/server/gapis
fi
# Create zip files for the build artifacts.
if [[ -n "$DIST_DIR" ]]; then
mkdir -p $DIST_DIR
cd $GPU_BUILD_ROOT
for TARGET_OS in linux-x64 windows-x64 osx-x64; do
if [[ $TARGET_OS == $HOST_OS || ( $HOST_OS == linux-x64 && $TARGET_OS == windows-x64 && $crosscompile_windows == 1 ) ]]; then
if [[ $TARGET_OS == windows-x64 ]]; then
EXE_EXTENSION=".exe"
else
EXE_EXTENSION=""
fi
ZIP="$DIST_DIR/gpu-tools-$TARGET_OS-$BUILD_FLAVOR-$BUILD_NUMBER.zip"
rm -f $ZIP
for ARTIFACT in gapis replayd; do
zip -9rq $ZIP bin/$TARGET_OS/$BUILD_FLAVOR/$ARTIFACT$EXE_EXTENSION
done
fi
done
fi