| #!/bin/bash |
| set -e |
| |
| # felt: a command-line utility for building and testing Flutter web engine. |
| # It stands for Flutter Engine Local Tester. |
| # TODO: Add git fetch --tags step. Tags are critical for the correct Dart |
| # version. |
| |
| FELT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" |
| |
| if [ -z "`which gclient`" ] |
| then |
| echo "ERROR: gclient is not in your PATH" |
| echo "Fix: add the path to your installation of depot_tools to your PATH" |
| exit 1 |
| fi |
| GCLIENT_PATH=`which gclient` |
| |
| if [ -z "`which autoninja`" ] |
| then |
| echo "ERROR: autoninja is not in your PATH" |
| echo "Fix: add the path to your installation of depot_tools to your PATH" |
| exit 1 |
| fi |
| NINJA_PATH=`which autoninja` |
| |
| KERNEL_NAME=`uname` |
| CPU_NAME=`uname -m` |
| ENGINE_SRC_DIR="$(dirname $(dirname $(dirname $(dirname ${FELT_DIR}))))" |
| FLUTTER_DIR="${ENGINE_SRC_DIR}/flutter" |
| SDK_PREBUILTS_DIR="${FLUTTER_DIR}/prebuilts" |
| |
| if [ -z "${DART_SDK_DIR}"] |
| then |
| if [[ $KERNEL_NAME == *"Darwin"* ]] |
| then |
| TARGET_OS="macos" |
| elif [[ $KERNEL_NAME == *"Linux"* ]] |
| then |
| TARGET_OS="linux" |
| else |
| echo "Unrecognized kernel name: ${KERNEL_NAME}" |
| exit 1 |
| fi |
| |
| if [[ $CPU_NAME == *"x86_64"* ]] |
| then |
| TARGET_ARCH="x64" |
| elif [[ $CPU_NAME == *"arm64"* ]] |
| then |
| TARGET_ARCH="arm64" |
| else |
| echo "Unrecognized architecture: ${CPU_NAME}" |
| exit 1 |
| fi |
| |
| PREBUILT_TARGET="${TARGET_OS}-${TARGET_ARCH}" |
| DART_SDK_DIR="${SDK_PREBUILTS_DIR}/${PREBUILT_TARGET}/dart-sdk" |
| |
| if [ ! -d "$DART_SDK_DIR" ] |
| then |
| echo "Prebuilt dart sdk for ${PREBUILT_TARGET} not found." |
| echo "Note: You can specify your own path to a built dart sdk with the DART_SDK_DIR environment variable." |
| exit 1 |
| fi |
| |
| else |
| if [ ! -d "$DART_SDK_DIR" ] |
| then |
| echo "Explicitly specified dart SDK not found at ${DART_SDK_DIR}." |
| exit 1 |
| fi |
| fi |
| |
| WEB_UI_DIR="${FLUTTER_DIR}/lib/web_ui" |
| DART_PATH="$DART_SDK_DIR/bin/dart" |
| |
| if [[ "$FELT_DEBUG" == "true" || "$FELT_DEBUG" == "1" ]] |
| then |
| FELT_DEBUG_FLAGS="--enable-vm-service --pause-isolates-on-start" |
| fi |
| |
| install_deps() { |
| # We need to run pub get here before we actually invoke felt. |
| echo "Running \`dart pub get\` in 'engine/src/flutter/lib/web_ui'" |
| (cd "$WEB_UI_DIR"; $DART_PATH pub get) |
| } |
| |
| if [[ $KERNEL_NAME == *"Darwin"* ]] |
| then |
| echo "Running on MacOS. Will check the file and user limits." |
| # Disable exit if the commands fails. We want to give more actionable |
| # error message. |
| set +e |
| ULIMIT_FILES=`ulimit -n` |
| # Increase the file limit if it is low. Note that these limits are changed |
| # only for this script (for this shell). After felt execution is completed |
| # no change is required to reset the original shell. |
| if [[ $ULIMIT_FILES -lt 50000 ]] |
| then |
| echo "File limits too low increasing the file limits" |
| # Get the max file limit. |
| MAX_ULIMIT_FILES=`launchctl limit maxfiles | sed -e 's/^[[:space:]]*//' | sed 's/ \{1,\}/ /g' | cut -d' ' -f2` |
| if [[ $MAX_ULIMIT_FILES -lt 50000 ]] |
| then |
| # Increase the maximum file limit. |
| sudo launchctl limit maxfiles 50000 200000 |
| fi |
| ERROR=$(ulimit -n 50000 2>&1 >/dev/null) |
| if [[ ! -z $ERROR ]] |
| then |
| echo "Problem changing the file limit. Please try to reboot to use the higher limits. error: \n$ERROR" 1>&2 |
| fi |
| fi |
| ULIMIT_USER=`ulimit -u` |
| # Increase the hard user limit if it is lower than 2048. |
| if [[ $ULIMIT_USER -lt 4096 ]] |
| then |
| echo "User limits too low increasing the user limits" |
| ERROR2=$(ulimit -u 4096 2>&1 >/dev/null) |
| if [[ ! -z $ERROR2 ]] |
| then |
| echo "Problem changing the user limit. Please try to reboot to use the higher limits. error: \n$ERROR2" 1>&2 |
| fi |
| fi |
| # Set the value back to exit on non zero results. |
| set -e |
| fi |
| |
| cd $WEB_UI_DIR |
| install_deps |
| (cd $WEB_UI_DIR && $DART_SDK_DIR/bin/dart run $FELT_DEBUG_FLAGS dev/felt.dart $@) |