avs-device-sdk/tools/Install/setup.sh

306 lines
8.6 KiB
Bash

#!/usr/bin/env bash
#
# Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License").
# You may not use this file except in compliance with the License.
# A copy of the License is located at
#
# http://aws.amazon.com/apache2.0
#
# or in the "license" file accompanying this file. This file is distributed
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
# express or implied. See the License for the specific language governing
# permissions and limitations under the License.
#
set -o errexit # Exit the script if any statement fails.
set -o nounset # Exit the script if any uninitialized variable is used.
CLONE_URL=${CLONE_URL:- 'git://github.com/alexa/avs-device-sdk.git'}
PORT_AUDIO_FILE="pa_stable_v190600_20161030.tgz"
PORT_AUDIO_DOWNLOAD_URL="http://www.portaudio.com/archives/$PORT_AUDIO_FILE"
CURL_VER=7.67.0
CURL_DOWNLOAD_URL="https://github.com/curl/curl/releases/download/curl-7_67_0/curl-${CURL_VER}.tar.gz"
TEST_MODEL_DOWNLOAD="https://github.com/Sensory/alexa-rpi/blob/master/models/spot-alexa-rpi-31000.snsr"
BUILD_TESTS=${BUILD_TESTS:-'true'}
CURRENT_DIR="$(pwd)"
INSTALL_BASE=${INSTALL_BASE:-"$CURRENT_DIR"}
SOURCE_FOLDER=${SDK_LOC:-''}
THIRD_PARTY_FOLDER=${THIRD_PARTY_LOC:-'third-party'}
BUILD_FOLDER=${BUILD_FOLDER:-'build'}
SOUNDS_FOLDER=${SOUNDS_FOLDER:-'sounds'}
DB_FOLDER=${DB_FOLDER:-'db'}
SOURCE_PATH="$INSTALL_BASE/$SOURCE_FOLDER"
THIRD_PARTY_PATH="$INSTALL_BASE/$THIRD_PARTY_FOLDER"
BUILD_PATH="$INSTALL_BASE/$BUILD_FOLDER"
SOUNDS_PATH="$INSTALL_BASE/$SOUNDS_FOLDER"
DB_PATH="$INSTALL_BASE/$DB_FOLDER"
CONFIG_DB_PATH="$DB_PATH"
UNIT_TEST_MODEL_PATH="$INSTALL_BASE/avs-device-sdk/KWD/inputs/SensoryModels/"
UNIT_TEST_MODEL="$THIRD_PARTY_PATH/alexa-rpi/models/spot-alexa-rpi-31000.snsr"
INPUT_CONFIG_FILE="$SOURCE_PATH/avs-device-sdk/Integration/AlexaClientSDKConfig.json"
OUTPUT_CONFIG_FILE="$BUILD_PATH/Integration/AlexaClientSDKConfig.json"
TEMP_CONFIG_FILE="$BUILD_PATH/Integration/tmp_AlexaClientSDKConfig.json"
TEST_SCRIPT="$INSTALL_BASE/test.sh"
LIB_SUFFIX="a"
ANDROID_CONFIG_FILE=""
# Default device serial number if nothing is specified
DEVICE_SERIAL_NUMBER="123456"
# Default device manufacturer name
DEVICE_MANUFACTURER_NAME=${DEVICE_MANUFACTURER_NAME:-"Test Manufacturer"}
# Default device description
DEVICE_DESCRIPTION=${DEVICE_DESCRIPTION:-"Test Device"}
GSTREAMER_AUDIO_SINK="autoaudiosink"
build_port_audio() {
# build port audio
echo
echo "==============> BUILDING PORT AUDIO =============="
echo
pushd $THIRD_PARTY_PATH
wget -c $PORT_AUDIO_DOWNLOAD_URL
tar zxf $PORT_AUDIO_FILE
pushd portaudio
./configure --without-jack
make
popd
popd
}
get_platform() {
uname_str=`uname -a`
result=""
if [[ "$uname_str" == "Linux "* ]] && [[ -f /etc/os-release ]]
then
sys_id=`cat /etc/os-release | grep "^ID="`
if [[ "$sys_id" == "ID=raspbian" ]]
then
echo "Raspberry pi"
fi
elif [[ "$uname_str" == "MINGW64"* ]]
then
echo "Windows mingw64"
fi
}
show_help() {
echo 'Usage: setup.sh <config-json-file> [OPTIONS]'
echo 'The <config-json-file> can be downloaded from developer portal and must contain the following:'
echo ' "clientId": "<OAuth client ID>"'
echo ' "productId": "<your product name for device>"'
echo ''
echo 'Optional parameters'
echo ' -s <serial-number> If nothing is provided, the default device serial number is 123456'
echo ' -a <file-name> The file that contains Android installation configurations (e.g. androidConfig.txt)'
echo ' -d <description> The description of the device.'
echo ' -m <manufacturer> The device manufacturer name.'
echo ' -h Display this help and exit'
}
if [[ $# -lt 1 ]]; then
show_help
exit 1
fi
CONFIG_JSON_FILE=$1
if [ ! -f "$CONFIG_JSON_FILE" ]; then
echo "Config json file not found!"
show_help
exit 1
fi
shift 1
OPTIONS=s:a:m:d:h
while getopts "$OPTIONS" opt ; do
case $opt in
s )
DEVICE_SERIAL_NUMBER="$OPTARG"
;;
a )
ANDROID_CONFIG_FILE="$OPTARG"
if [ ! -f "$ANDROID_CONFIG_FILE" ]; then
echo "Android config file is not found!"
exit 1
fi
source $ANDROID_CONFIG_FILE
;;
d )
DEVICE_DESCRIPTION="$OPTARG"
;;
m )
DEVICE_MANUFACTURER_NAME="$OPTARG"
;;
h )
show_help
exit 1
;;
esac
done
if [[ ! "$DEVICE_SERIAL_NUMBER" =~ [0-9a-zA-Z_]+ ]]; then
echo 'Device serial number is invalid!'
exit 1
fi
# The target platform for the build.
PLATFORM=${PLATFORM:-$(get_platform)}
if [ "$PLATFORM" == "Raspberry pi" ]
then
source pi.sh
elif [ "$PLATFORM" == "Windows mingw64" ]
then
source mingw.sh
else
PLATFORM_LOWER=$(echo "${PLATFORM}" | tr '[:upper:]' '[:lower:]')
if [ "$PLATFORM_LOWER" == "android" ]
then
PLATFORM="Android"
source android.sh
else
echo "The installation script doesn't support current system. (System: $(uname -a))"
exit 1
fi
fi
echo "################################################################################"
echo "################################################################################"
echo ""
echo ""
echo "AVS Device SDK $PLATFORM Script - Terms and Agreements"
echo ""
echo ""
echo "The AVS Device SDK is dependent on several third-party libraries, environments, "
echo "and/or other software packages that are installed using this script from "
echo "third-party sources (\"External Dependencies\"). These are terms and conditions "
echo "associated with the External Dependencies "
echo "(available at https://github.com/alexa/avs-device-sdk/wiki/Dependencies) that "
echo "you need to agree to abide by if you choose to install the External Dependencies."
echo ""
echo ""
echo "If you do not agree with every term and condition associated with the External "
echo "Dependencies, enter \"QUIT\" in the command line when prompted by the installer."
echo "Else enter \"AGREE\"."
echo ""
echo ""
echo "################################################################################"
echo "################################################################################"
read input
input=$(echo $input | awk '{print tolower($0)}')
if [ $input == 'quit' ]
then
exit 1
elif [ $input == 'agree' ]
then
echo "################################################################################"
echo "Proceeding with installation"
echo "################################################################################"
else
echo "################################################################################"
echo 'Unknown option'
echo "################################################################################"
exit 1
fi
if [ ! -d "$BUILD_PATH" ]
then
# Make sure required packages are installed
echo "==============> INSTALLING REQUIRED TOOLS AND PACKAGE ============"
echo
install_dependencies
# create / paths
echo
echo "==============> CREATING PATHS AND GETTING SOUND FILES ============"
echo
mkdir -p $SOURCE_PATH
mkdir -p $THIRD_PARTY_PATH
mkdir -p $SOUNDS_PATH
mkdir -p $DB_PATH
run_os_specifics
if [ ! -d "${SOURCE_PATH}/avs-device-sdk" ]
then
#get sdk
echo
echo "==============> CLONING SDK =============="
echo
cd $SOURCE_PATH
git clone --single-branch $CLONE_URL avs-device-sdk
fi
# make the SDK
echo
echo "==============> BUILDING SDK =============="
echo
mkdir -p $BUILD_PATH
cd $BUILD_PATH
cmake "$SOURCE_PATH/avs-device-sdk" \
-DCMAKE_BUILD_TYPE=DEBUG \
"${CMAKE_PLATFORM_SPECIFIC[@]}"
cd $BUILD_PATH
make SampleApp -j2
make PreviewAlexaClient -j2
else
cd $BUILD_PATH
make SampleApp -j2
make PreviewAlexaClient -j2
fi
echo
echo "==============> SAVING CONFIGURATION FILE =============="
echo
GSTREAMER_CONFIG=$(cat <<-END
{
"gstreamerMediaPlayer":{
"audioSink":"$GSTREAMER_AUDIO_SINK"
},
END
)
cd $INSTALL_BASE
bash genConfig.sh config.json $DEVICE_SERIAL_NUMBER $CONFIG_DB_PATH $SOURCE_PATH/avs-device-sdk $TEMP_CONFIG_FILE \
-DSDK_CONFIG_MANUFACTURER_NAME="$DEVICE_MANUFACTURER_NAME" -DSDK_CONFIG_DEVICE_DESCRIPTION="$DEVICE_DESCRIPTION"
# Replace the first opening bracket in the AlexaClientSDKConfig.json file with GSTREAMER_CONFIG variable.
awk -v config="$GSTREAMER_CONFIG" 'NR==1,/{/{sub(/{/,config)}1' $TEMP_CONFIG_FILE > $OUTPUT_CONFIG_FILE
# Delete temp file
rm $TEMP_CONFIG_FILE
echo
echo "==============> FINAL CONFIGURATION =============="
echo
cat $OUTPUT_CONFIG_FILE
generate_start_script
generate_test_script
echo " **** Completed Configuration/Build ***"