annotate scripts/update_board @ 451:7f9032f43f41 prerelease

Do a coreclean in update_board
author Liam Donovan <l.b.donovan@qmul.ac.uk>
date Sun, 19 Jun 2016 22:43:06 +0100
parents d2dfa1718edb
children 0567af952cfa
rev   line source
l@450 1 \#!/bin/sh
andrewm@58 2 #
giuliomoro@377 3 # This script copies the core Bela files to the BeagleBone Black
andrewm@58 4 # in preparation for building projects. It will remove any existing
giuliomoro@377 5 # Bela directory before copying the files over
giuliomoro@367 6 [ -z "$BBB_ADDRESS" ] && BBB_ADDRESS="root@192.168.7.2"
giuliomoro@413 7 [ -z "$BBB_BELA_HOME" ] && BBB_BELA_HOME="/root/Bela/"
giuliomoro@447 8
l@449 9 # . ./.bela_common || exit 1
giuliomoro@413 10
giuliomoro@413 11 FILES_TO_COPY="core include Makefile libNE10.a libprussdrv.a examples Doxyfile"
giuliomoro@413 12
giuliomoro@413 13 # The following variables are manually copied from the Makefile.
giuliomoro@413 14 # It is a bit nasty, but here we need to handle the case that the board may be
giuliomoro@413 15 # in any arbitrarily (bad) condition and try to handle it the best we can
giuliomoro@413 16 BELA_IDE_SCREEN_NAME=IDE-Bela
giuliomoro@413 17 SCREEN_NAME=Bela
giuliomoro@413 18
giuliomoro@428 19 usage ()
andrewm@58 20 {
andrewm@58 21 THIS_SCRIPT=`basename "$0"`
giuliomoro@413 22 echo "Usage: $THIS_SCRIPT [-b path-on-beaglebone] [--clean] [-y]"
andrewm@58 23
andrewm@58 24 echo "
giuliomoro@413 25 This script updates the core Bela files on the BeagleBone, bringing it up
giuliomoro@415 26 to date with the files in the folder on the host computer.
giuliomoro@413 27 The script must be run once to initialize the board before running any of
giuliomoro@413 28 the other scripts in this directory. It must also be run every time you
giuliomoro@413 29 wish to update the core code.
giuliomoro@413 30 Running this script will discard all changes to the core code on the remote
giuliomoro@413 31 end.
giuliomoro@413 32
giuliomoro@413 33 Command line options:
giuliomoro@413 34 -i arg : allows to set the username and IP address of the remote end (default: $BBB_ADDRESS)
giuliomoro@413 35 -b arg : allows to set the path to the Bela folder on the remote end. Use quotes if you use the \"~\" symbol (default: $BBB_BELA_HOME)
giuliomoro@413 36 --clean : removes all the files in the $BBB_BELA_HOME folder, INCLUDING any source code you may have in the $BBB_BELA_HOME/projects/ subdirectory.
giuliomoro@413 37 -y : does not prompt the user before deleting the remote files.
giuliomoro@413 38 "
andrewm@58 39 }
giuliomoro@412 40
giuliomoro@428 41 signal_handler ()
giuliomoro@428 42 {
giuliomoro@428 43 echo
giuliomoro@428 44 exit
giuliomoro@428 45 }
giuliomoro@428 46
giuliomoro@432 47 trap signal_handler 2
giuliomoro@428 48
giuliomoro@428 49 error_handler () {
giuliomoro@412 50 [ $1 -eq 0 ] && printf "done\n" || { [ -z "$2" ] && printf "\nAn error occurred. Is the board connected?\n" || printf "$2"; exit 1; }
giuliomoro@412 51 }
andrewm@58 52
andrewm@58 53 OPTIND=1
giuliomoro@412 54 ALWAYS_YES=0
giuliomoro@413 55 RESET_BOARD=0
giuliomoro@413 56 while [ "$1" != "" ]; do
giuliomoro@413 57 case $1 in
giuliomoro@413 58 -b)
giuliomoro@413 59 shift
giuliomoro@413 60 BBB_BELA_HOME=$1
giuliomoro@413 61 ;;
giuliomoro@413 62 -i)
giuliomoro@413 63 shift
giuliomoro@413 64 BBB_ADDRESS=$1
giuliomoro@413 65 ;;
giuliomoro@413 66 --clean)
giuliomoro@413 67 RESET_BOARD=1
giuliomoro@413 68 ;;
giuliomoro@413 69 -y)
giuliomoro@413 70 ALWAYS_YES=1
giuliomoro@413 71 ;;
giuliomoro@413 72 *)
giuliomoro@413 73 usage
giuliomoro@413 74 exit 1
giuliomoro@413 75 ;;
giuliomoro@412 76 esac
giuliomoro@413 77 shift
andrewm@58 78 done
andrewm@58 79
andrewm@58 80
andrewm@58 81 # Find location of this script so we can locate the rest of the files
giuliomoro@427 82 SCRIPTDIR=$(dirname "$0")
l@405 83 [ -z "$IDE_FOLDER" ] && IDE_FOLDER=$SCRIPTDIR/../../bela-ide/
andrewm@58 84
giuliomoro@445 85 set_date "stat $BBB_BELA_HOME &>/dev/null" && DESTINATION_EMPTY=0 || DESTINATION_EMPTY=1
giuliomoro@413 86
giuliomoro@413 87 if [ $DESTINATION_EMPTY -eq 0 ];
andrewm@58 88 then
giuliomoro@413 89 echo "Updating the Bela core code in $BBB_ADDRESS:$BBB_BELA_HOME"
giuliomoro@413 90 if [ $RESET_BOARD -eq 1 ];
giuliomoro@413 91 then
giuliomoro@413 92 printf "DANGER: you are about to perform a HARD RESET, which will DELETE all the existing files from the folder $BBB_BELA_HOME on the BeagleBone Black.\nAre you sure you want to continue? (y/N) "
giuliomoro@413 93 else
giuliomoro@413 94 printf "All the changes to the CORE files in the remote folder $BBB_BELA_HOME will be LOST. The content of these files/folders will be lost:\n $FILES_TO_COPY \nYour projects stored in $BBB_BELA_HOME/projects should be safe (and surely you have already backed them up somewhere safe, haven't you?).\nAre you sure you want to continue? (y/N) "
giuliomoro@413 95 fi;
giuliomoro@413 96 if [ $ALWAYS_YES -eq 1 ];
giuliomoro@413 97 then
giuliomoro@413 98 printf "y\n"
giuliomoro@413 99 else
giuliomoro@413 100 read REPLY;
giuliomoro@439 101 [ -z "$REPLY" ] || { [ "$REPLY" != y ] && [ "$REPLY" != Y ]; } && { echo "Aborting..."; exit 1; }
giuliomoro@413 102 fi
giuliomoro@413 103 else
giuliomoro@413 104 echo "Installing Bela core code in $BBB_ADDRESS:$BBB_BELA_HOME"
giuliomoro@413 105 fi
giuliomoro@412 106
giuliomoro@420 107 echo "Updating Bela cores files to remote folder $BBB_BELA_HOME"
giuliomoro@377 108 # Stop Bela if running and remove all files
giuliomoro@413 109 printf "Stopping Bela..."
giuliomoro@413 110 ssh $BBB_ADDRESS "make -C $BBB_BELA_HOME idestop stop &>/dev/null; screen -X -S Bela quit &>/dev/null; screen -X -S IDE-Bela quit &>/dev/null; true";
giuliomoro@412 111 error_handler $?
andrewm@58 112
giuliomoro@413 113 if [ $RESET_BOARD -eq 1 ];
giuliomoro@413 114 then
giuliomoro@413 115 printf "Removing old files..."
giuliomoro@413 116 ssh $BBB_ADDRESS "rm -rf $BBB_BELA_HOME";
giuliomoro@413 117 error_handler $?
giuliomoro@413 118 fi
giuliomoro@413 119
giuliomoro@413 120 #Check if rsync is available
giuliomoro@413 121 [ -z `which rsync` ] && RSYNC_AVAILABLE=0 || RSYNC_AVAILABLE=1
giuliomoro@413 122
giuliomoro@420 123 # cd to the home of the project to make the following lines less verbose
giuliomoro@420 124 RUN_FOLDER=`pwd`
giuliomoro@413 125 cd $SCRIPTDIR/../
giuliomoro@420 126
giuliomoro@413 127 printf "Updating files..."
andrewm@58 128 # Copy relevant files to BeagleBone Black
giuliomoro@413 129 if [ $RSYNC_AVAILABLE -eq 1 ];
giuliomoro@413 130 then
giuliomoro@413 131 [ -z `which sed` ] && FILTER=cat || FILTER="sed s/\\n// | sed s/^.*:/Updated\ files:\/g | tr \"\n\" \" \""
giuliomoro@413 132 rsync -ac --no-t --delete-after --stats $FILES_TO_COPY $BBB_ADDRESS:$BBB_BELA_HOME |grep -i "Number" | grep -i "files" | grep -i "transferred" | eval $FILTER &&\
giuliomoro@413 133 rsync -ac --no-t libpd.so $BBB_ADDRESS:/usr/lib
giuliomoro@413 134 else
giuliomoro@413 135 # if rsync is not available, then clean the folders before copying the files
giuliomoro@413 136 ssh $BBB_ADDRESS "rm -rf $FILES_TO_COPY; mkdir -p $BBB_BELA_HOME" &&\
giuliomoro@413 137 scp -r -q $FILES_TO_COPY $BBB_ADDRESS:$BBB_BELA_HOME &&\
giuliomoro@413 138 scp -q libpd.so $BBB_ADDRESS:/usr/lib
giuliomoro@413 139 fi
giuliomoro@412 140 error_handler $?
giuliomoro@420 141 # cd back to the original folder.
giuliomoro@420 142 cd "$RUN_FOLDER"
giuliomoro@412 143
giuliomoro@402 144 # Create remaining directories needed for building
giuliomoro@412 145 printf "Creating directory structure on BeagleBone..."
giuliomoro@415 146 ssh $BBB_ADDRESS "mkdir -p $BBB_BELA_HOME/build/core $BBB_BELA_HOME/projects"
giuliomoro@412 147 error_handler $?
giuliomoro@412 148
giuliomoro@413 149 printf "Generating on-board documentation..."
giuliomoro@437 150 #ssh $BBB_ADDRESS "cd $BBB_BELA_HOME; doxygen &> /dev/null"
giuliomoro@412 151 error_handler $? "\nError while generating Doxygen documentation\n"
andrewm@58 152
l@450 153 printf "Building example projects..."
l@450 154 ssh $BBB_ADDRESS "sh $BBB_BELA_HOME/examples/core/link_core.sh"
l@450 155 error_handler $? "\nError while building example projects\n"
l@450 156
l@451 157 printf "Cleaning build environment..."
l@451 158 ssh $BBB_ADDRESS "make -C $BBB_BELA_HOME --no-print-directory coreclean"
l@451 159 error_handler $? "\nError cleaning core\n"
l@451 160
giuliomoro@402 161 #-------------
giuliomoro@402 162 #Installing IDE
giuliomoro@432 163 [ $ALWAYS_YES -eq 0 ] && ALWAYS_YES_FLAG= || ALWAYS_YES_FLAG="-y"
giuliomoro@428 164 ls $IDE_FOLDER/scripts/setup_IDE.sh >/dev/null 2>/dev/null
giuliomoro@402 165 if [ $? -eq 0 ]
giuliomoro@402 166 then
giuliomoro@432 167 cd $IDE_FOLDER/scripts && ./setup_IDE.sh $ALWAYS_YES_FLAG
giuliomoro@413 168 # run the IDE
giuliomoro@413 169 ssh $BBB_ADDRESS "make -C $BBB_BELA_HOME --no-print-directory idestart"
giuliomoro@402 170 else
giuliomoro@419 171 # run the IDE
giuliomoro@419 172 ssh $BBB_ADDRESS "make -C $BBB_BELA_HOME --no-print-directory idestart"
giuliomoro@413 173 echo \
giuliomoro@421 174 "The Bela core files were updated the board, but a valid IDE folder was not found in $IDE_FOLDER/, so the IDE was not updated. If there was an older version of the IDE on the board, it is being restarted.
giuliomoro@428 175 You can get a copy of the most up-to-date IDE files from https://github.com/LBDonovan/bela-ide
giuliomoro@428 176 "
giuliomoro@419 177 fi
giuliomoro@421 178
giuliomoro@421 179 ssh $BBB_ADDRESS make -C $BBB_BELA_HOME --no-print-directory idestartup nostartup && echo "The board will now run the IDE at startup, but startup of the Bela program has been disabled. To enable it, use the set_startup.sh script"
giuliomoro@421 180
giuliomoro@437 181 { [ $ALWAYS_YES -eq 1 ] || [ $SHLVL -ge 1 ]; } && printf "\nSetup complete.\n\n" || {
giuliomoro@437 182 printf '\nSetup complete, press any key to continue\n\n'
giuliomoro@437 183 read
giuliomoro@437 184 }