andrewm@58: #!/bin/bash andrewm@58: # giuliomoro@377: # This script copies the core Bela files to the BeagleBone Black andrewm@58: # in preparation for building projects. It will remove any existing giuliomoro@377: # Bela directory before copying the files over andrewm@58: giuliomoro@367: [ -z "$BBB_ADDRESS" ] && BBB_ADDRESS="root@192.168.7.2" giuliomoro@413: [ -z "$BBB_BELA_HOME" ] && BBB_BELA_HOME="/root/Bela/" giuliomoro@413: giuliomoro@413: FILES_TO_COPY="core include Makefile libNE10.a libprussdrv.a examples Doxyfile" giuliomoro@413: giuliomoro@413: # The following variables are manually copied from the Makefile. giuliomoro@413: # It is a bit nasty, but here we need to handle the case that the board may be giuliomoro@413: # in any arbitrarily (bad) condition and try to handle it the best we can giuliomoro@413: BELA_IDE_SCREEN_NAME=IDE-Bela giuliomoro@413: SCREEN_NAME=Bela giuliomoro@413: andrewm@58: function usage andrewm@58: { andrewm@58: THIS_SCRIPT=`basename "$0"` giuliomoro@413: echo "Usage: $THIS_SCRIPT [-b path-on-beaglebone] [--clean] [-y]" andrewm@58: andrewm@58: echo " giuliomoro@413: This script updates the core Bela files on the BeagleBone, bringing it up giuliomoro@415: to date with the files in the folder on the host computer. giuliomoro@413: The script must be run once to initialize the board before running any of giuliomoro@413: the other scripts in this directory. It must also be run every time you giuliomoro@413: wish to update the core code. giuliomoro@413: Running this script will discard all changes to the core code on the remote giuliomoro@413: end. giuliomoro@413: giuliomoro@413: Command line options: giuliomoro@413: -i arg : allows to set the username and IP address of the remote end (default: $BBB_ADDRESS) giuliomoro@413: -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: --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: -y : does not prompt the user before deleting the remote files. giuliomoro@413: " andrewm@58: } giuliomoro@413: trap "echo; exit" SIGINT SIGTERM giuliomoro@412: giuliomoro@412: function error_handler { giuliomoro@412: [ $1 -eq 0 ] && printf "done\n" || { [ -z "$2" ] && printf "\nAn error occurred. Is the board connected?\n" || printf "$2"; exit 1; } giuliomoro@412: } andrewm@58: andrewm@58: OPTIND=1 giuliomoro@412: ALWAYS_YES=0 giuliomoro@413: RESET_BOARD=0 giuliomoro@413: while [ "$1" != "" ]; do giuliomoro@413: case $1 in giuliomoro@413: -b) giuliomoro@413: shift giuliomoro@413: BBB_BELA_HOME=$1 giuliomoro@413: ;; giuliomoro@413: -i) giuliomoro@413: shift giuliomoro@413: BBB_ADDRESS=$1 giuliomoro@413: ;; giuliomoro@413: --clean) giuliomoro@413: RESET_BOARD=1 giuliomoro@413: ;; giuliomoro@413: -y) giuliomoro@413: ALWAYS_YES=1 giuliomoro@413: ;; giuliomoro@413: *) giuliomoro@413: usage giuliomoro@413: exit 1 giuliomoro@413: ;; giuliomoro@412: esac giuliomoro@413: shift andrewm@58: done andrewm@58: andrewm@58: andrewm@58: # Find location of this script so we can locate the rest of the files giuliomoro@300: SCRIPTPATH=$(readlink "$0") andrewm@58: SCRIPTDIR=$(dirname "$SCRIPTPATH") l@405: [ -z "$IDE_FOLDER" ] && IDE_FOLDER=$SCRIPTDIR/../../bela-ide/ andrewm@58: giuliomoro@413: giuliomoro@419: ssh $BBB_ADDRESS "date -s '`date`' > /dev/null; stat $BBB_BELA_HOME &>/dev/null" && DESTINATION_EMPTY=0 || DESTINATION_EMPTY=1 giuliomoro@413: giuliomoro@413: if [ $DESTINATION_EMPTY -eq 0 ]; andrewm@58: then giuliomoro@413: echo "Updating the Bela core code in $BBB_ADDRESS:$BBB_BELA_HOME" giuliomoro@413: if [ $RESET_BOARD -eq 1 ]; giuliomoro@413: then giuliomoro@413: 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: else giuliomoro@413: 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: fi; giuliomoro@413: if [ $ALWAYS_YES -eq 1 ]; giuliomoro@413: then giuliomoro@413: printf "y\n" giuliomoro@413: else giuliomoro@413: read REPLY; giuliomoro@413: [ $REPLY != y ] && [ $REPLY != Y ] && { echo "Aborting..."; exit 1; } giuliomoro@413: fi giuliomoro@413: else giuliomoro@413: echo "Installing Bela core code in $BBB_ADDRESS:$BBB_BELA_HOME" giuliomoro@413: fi giuliomoro@412: giuliomoro@413: echo "Updating Bela core files to remote folder $BBB_BELA_HOME" giuliomoro@377: # Stop Bela if running and remove all files giuliomoro@413: printf "Stopping Bela..." giuliomoro@413: 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: error_handler $? andrewm@58: giuliomoro@413: if [ $RESET_BOARD -eq 1 ]; giuliomoro@413: then giuliomoro@413: printf "Removing old files..." giuliomoro@413: ssh $BBB_ADDRESS "rm -rf $BBB_BELA_HOME"; giuliomoro@413: error_handler $? giuliomoro@413: fi giuliomoro@413: giuliomoro@413: #Check if rsync is available giuliomoro@413: [ -z `which rsync` ] && RSYNC_AVAILABLE=0 || RSYNC_AVAILABLE=1 giuliomoro@413: giuliomoro@413: cd $SCRIPTDIR/../ giuliomoro@413: printf "Updating files..." andrewm@58: # Copy relevant files to BeagleBone Black giuliomoro@413: if [ $RSYNC_AVAILABLE -eq 1 ]; giuliomoro@413: then giuliomoro@413: [ -z `which sed` ] && FILTER=cat || FILTER="sed s/\\n// | sed s/^.*:/Updated\ files:\/g | tr \"\n\" \" \"" giuliomoro@413: 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: rsync -ac --no-t libpd.so $BBB_ADDRESS:/usr/lib giuliomoro@413: else giuliomoro@413: # if rsync is not available, then clean the folders before copying the files giuliomoro@413: ssh $BBB_ADDRESS "rm -rf $FILES_TO_COPY; mkdir -p $BBB_BELA_HOME" &&\ giuliomoro@413: scp -r -q $FILES_TO_COPY $BBB_ADDRESS:$BBB_BELA_HOME &&\ giuliomoro@413: scp -q libpd.so $BBB_ADDRESS:/usr/lib giuliomoro@413: fi giuliomoro@412: error_handler $? giuliomoro@412: giuliomoro@402: # Create remaining directories needed for building giuliomoro@412: printf "Creating directory structure on BeagleBone..." giuliomoro@415: ssh $BBB_ADDRESS "mkdir -p $BBB_BELA_HOME/build/core $BBB_BELA_HOME/projects" giuliomoro@412: error_handler $? giuliomoro@412: giuliomoro@413: printf "Generating on-board documentation..." giuliomoro@412: ssh $BBB_ADDRESS "cd $BBB_BELA_HOME; doxygen &>/dev/null" giuliomoro@412: error_handler $? "\nError while generating Doxygen documentation\n" andrewm@58: giuliomoro@402: #------------- giuliomoro@402: #Installing IDE giuliomoro@412: stat $IDE_FOLDER/scripts/setup_IDE.sh &> /dev/null giuliomoro@402: if [ $? -eq 0 ] giuliomoro@402: then giuliomoro@402: cd $IDE_FOLDER/scripts; giuliomoro@412: ./setup_IDE.sh -y giuliomoro@413: # run the IDE giuliomoro@413: ssh $BBB_ADDRESS "make -C $BBB_BELA_HOME --no-print-directory idestart" giuliomoro@402: else giuliomoro@419: # run the IDE giuliomoro@419: ssh $BBB_ADDRESS "make -C $BBB_BELA_HOME --no-print-directory idestart" giuliomoro@413: echo \ giuliomoro@419: "Bela was installed on the board, but the IDE files were not found, so the IDE was not installed. If there was an older version of the IDE on the board, it is being restarted. giuliomoro@419: You can get a copy of the most up-to-date IDE files from https://github.com/LBDonovan/bela-ide" giuliomoro@419: fi