giuliomoro@425
|
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@447
|
6
|
giuliomoro@461
|
7 # Find location of this script so we can locate the rest of the files
|
giuliomoro@461
|
8 SCRIPTDIR=$(dirname "$0")
|
giuliomoro@461
|
9 [ -z $SCRIPTDIR ] && SCRIPTDIR="./" || SCRIPTDIR=$SCRIPTDIR/
|
giuliomoro@461
|
10 . $SCRIPTDIR.bela_common || { echo "You must be in Bela/scripts to run these scripts" | exit 1; }
|
giuliomoro@461
|
11
|
giuliomoro@461
|
12 [ -z "$IDE_FOLDER" ] && IDE_FOLDER=$SCRIPTDIR/../../bela-ide/
|
giuliomoro@413
|
13
|
giuliomoro@413
|
14 FILES_TO_COPY="core include Makefile libNE10.a libprussdrv.a examples Doxyfile"
|
giuliomoro@413
|
15
|
giuliomoro@413
|
16 # The following variables are manually copied from the Makefile.
|
giuliomoro@413
|
17 # It is a bit nasty, but here we need to handle the case that the board may be
|
giuliomoro@413
|
18 # in any arbitrarily (bad) condition and try to handle it the best we can
|
giuliomoro@413
|
19 BELA_IDE_SCREEN_NAME=IDE-Bela
|
giuliomoro@413
|
20 SCREEN_NAME=Bela
|
giuliomoro@413
|
21
|
giuliomoro@428
|
22 usage ()
|
andrewm@58
|
23 {
|
andrewm@58
|
24 THIS_SCRIPT=`basename "$0"`
|
giuliomoro@452
|
25 echo "Usage: $THIS_SCRIPT [--clean] [--no-frills] [-dy ] [-i user@ip] [-b /path/to/remote/Bela]"
|
andrewm@58
|
26
|
andrewm@58
|
27 echo "
|
giuliomoro@413
|
28 This script updates the core Bela files on the BeagleBone, bringing it up
|
giuliomoro@415
|
29 to date with the files in the folder on the host computer.
|
giuliomoro@413
|
30 The script must be run once to initialize the board before running any of
|
giuliomoro@413
|
31 the other scripts in this directory. It must also be run every time you
|
giuliomoro@413
|
32 wish to update the core code.
|
giuliomoro@413
|
33 Running this script will discard all changes to the core code on the remote
|
giuliomoro@413
|
34 end.
|
giuliomoro@413
|
35
|
giuliomoro@413
|
36 Command line options:
|
giuliomoro@413
|
37 -i arg : allows to set the username and IP address of the remote end (default: $BBB_ADDRESS)
|
giuliomoro@413
|
38 -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
|
39 --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@452
|
40 -d : skips re-generating Doxygen documentation on the board.
|
giuliomoro@484
|
41 -n : do not try to update the IDE.
|
giuliomoro@452
|
42 --no-frills : skips some optional commands.
|
giuliomoro@413
|
43 -y : does not prompt the user before deleting the remote files.
|
giuliomoro@413
|
44 "
|
andrewm@58
|
45 }
|
giuliomoro@412
|
46
|
giuliomoro@428
|
47 signal_handler ()
|
giuliomoro@428
|
48 {
|
giuliomoro@428
|
49 echo
|
giuliomoro@428
|
50 exit
|
giuliomoro@428
|
51 }
|
giuliomoro@428
|
52
|
giuliomoro@432
|
53 trap signal_handler 2
|
giuliomoro@428
|
54
|
giuliomoro@428
|
55 error_handler () {
|
giuliomoro@412
|
56 [ $1 -eq 0 ] && printf "done\n" || { [ -z "$2" ] && printf "\nAn error occurred. Is the board connected?\n" || printf "$2"; exit 1; }
|
giuliomoro@412
|
57 }
|
andrewm@58
|
58
|
giuliomoro@452
|
59 FULL=1
|
andrewm@58
|
60 OPTIND=1
|
giuliomoro@412
|
61 ALWAYS_YES=0
|
giuliomoro@413
|
62 RESET_BOARD=0
|
giuliomoro@452
|
63 DOXYGEN=1
|
giuliomoro@484
|
64 UPDATE_IDE=1
|
giuliomoro@413
|
65 while [ "$1" != "" ]; do
|
giuliomoro@413
|
66 case $1 in
|
giuliomoro@413
|
67 -b)
|
giuliomoro@413
|
68 shift
|
giuliomoro@413
|
69 BBB_BELA_HOME=$1
|
giuliomoro@413
|
70 ;;
|
giuliomoro@413
|
71 -i)
|
giuliomoro@413
|
72 shift
|
giuliomoro@413
|
73 BBB_ADDRESS=$1
|
giuliomoro@413
|
74 ;;
|
giuliomoro@413
|
75 --clean)
|
giuliomoro@413
|
76 RESET_BOARD=1
|
giuliomoro@413
|
77 ;;
|
giuliomoro@452
|
78 -d)
|
giuliomoro@452
|
79 DOXYGEN=0
|
giuliomoro@452
|
80 ;;
|
giuliomoro@484
|
81 -n)
|
giuliomoro@484
|
82 UPDATE_IDE=0
|
giuliomoro@484
|
83 ;;
|
giuliomoro@452
|
84 --no-frills)
|
giuliomoro@452
|
85 FULL=0
|
giuliomoro@452
|
86 ;;
|
giuliomoro@413
|
87 -y)
|
giuliomoro@413
|
88 ALWAYS_YES=1
|
giuliomoro@413
|
89 ;;
|
giuliomoro@413
|
90 *)
|
giuliomoro@413
|
91 usage
|
giuliomoro@413
|
92 exit 1
|
giuliomoro@413
|
93 ;;
|
giuliomoro@412
|
94 esac
|
giuliomoro@413
|
95 shift
|
andrewm@58
|
96 done
|
andrewm@58
|
97
|
andrewm@58
|
98
|
andrewm@58
|
99
|
giuliomoro@454
|
100 # Check if destination folder exists
|
giuliomoro@454
|
101 # the StrictHostKeyChecking no should prevent the unkown host prompt
|
giuliomoro@454
|
102 ssh -o "StrictHostKeyChecking no" $BBB_ADDRESS stat $BBB_BELA_HOME &>/dev/null && DESTINATION_EMPTY=0 || DESTINATION_EMPTY=1
|
giuliomoro@452
|
103 # Set the date on the board
|
giuliomoro@452
|
104 [ $FULL -eq 1 ] && set_date
|
giuliomoro@413
|
105
|
giuliomoro@413
|
106 if [ $DESTINATION_EMPTY -eq 0 ];
|
andrewm@58
|
107 then
|
giuliomoro@413
|
108 echo "Updating the Bela core code in $BBB_ADDRESS:$BBB_BELA_HOME"
|
giuliomoro@413
|
109 if [ $RESET_BOARD -eq 1 ];
|
giuliomoro@413
|
110 then
|
giuliomoro@413
|
111 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
|
112 else
|
giuliomoro@413
|
113 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
|
114 fi;
|
giuliomoro@413
|
115 if [ $ALWAYS_YES -eq 1 ];
|
giuliomoro@413
|
116 then
|
giuliomoro@413
|
117 printf "y\n"
|
giuliomoro@413
|
118 else
|
giuliomoro@413
|
119 read REPLY;
|
giuliomoro@439
|
120 [ -z "$REPLY" ] || { [ "$REPLY" != y ] && [ "$REPLY" != Y ]; } && { echo "Aborting..."; exit 1; }
|
giuliomoro@413
|
121 fi
|
giuliomoro@413
|
122 else
|
giuliomoro@413
|
123 echo "Installing Bela core code in $BBB_ADDRESS:$BBB_BELA_HOME"
|
giuliomoro@413
|
124 fi
|
giuliomoro@412
|
125
|
giuliomoro@452
|
126 echo "Updating Bela core files to remote folder $BBB_BELA_HOME"
|
giuliomoro@377
|
127 # Stop Bela if running and remove all files
|
giuliomoro@454
|
128 if [ $FULL -eq 1 ]
|
giuliomoro@454
|
129 then
|
giuliomoro@454
|
130 printf "Stopping Bela..."
|
giuliomoro@454
|
131 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@454
|
132 error_handler $?
|
giuliomoro@454
|
133 fi
|
andrewm@58
|
134
|
giuliomoro@413
|
135 if [ $RESET_BOARD -eq 1 ];
|
giuliomoro@413
|
136 then
|
giuliomoro@413
|
137 printf "Removing old files..."
|
giuliomoro@413
|
138 ssh $BBB_ADDRESS "rm -rf $BBB_BELA_HOME";
|
giuliomoro@413
|
139 error_handler $?
|
giuliomoro@413
|
140 fi
|
giuliomoro@413
|
141
|
giuliomoro@413
|
142 #Check if rsync is available
|
giuliomoro@413
|
143 [ -z `which rsync` ] && RSYNC_AVAILABLE=0 || RSYNC_AVAILABLE=1
|
giuliomoro@413
|
144
|
giuliomoro@420
|
145 # cd to the home of the project to make the following lines less verbose
|
giuliomoro@420
|
146 RUN_FOLDER=`pwd`
|
giuliomoro@413
|
147 cd $SCRIPTDIR/../
|
giuliomoro@420
|
148
|
giuliomoro@413
|
149 printf "Updating files..."
|
andrewm@58
|
150 # Copy relevant files to BeagleBone Black
|
giuliomoro@413
|
151 if [ $RSYNC_AVAILABLE -eq 1 ];
|
giuliomoro@413
|
152 then
|
giuliomoro@413
|
153 [ -z `which sed` ] && FILTER=cat || FILTER="sed s/\\n// | sed s/^.*:/Updated\ files:\/g | tr \"\n\" \" \""
|
giuliomoro@461
|
154 rsync -ac --no-t --delete-after --stats $FILES_TO_COPY $BBB_ADDRESS:$BBB_BELA_HOME 2>/dev/null |grep -i "Number" | grep -i "files" | grep -i "transferred" | eval $FILTER &&\
|
giuliomoro@477
|
155 printf "..." && rsync -ac --no-t libpd.so $BBB_ADDRESS:/usr/lib
|
giuliomoro@413
|
156 else
|
giuliomoro@413
|
157 # if rsync is not available, then clean the folders before copying the files
|
giuliomoro@413
|
158 ssh $BBB_ADDRESS "rm -rf $FILES_TO_COPY; mkdir -p $BBB_BELA_HOME" &&\
|
giuliomoro@413
|
159 scp -r -q $FILES_TO_COPY $BBB_ADDRESS:$BBB_BELA_HOME &&\
|
giuliomoro@413
|
160 scp -q libpd.so $BBB_ADDRESS:/usr/lib
|
giuliomoro@413
|
161 fi
|
giuliomoro@412
|
162 error_handler $?
|
giuliomoro@420
|
163 # cd back to the original folder.
|
giuliomoro@420
|
164 cd "$RUN_FOLDER"
|
giuliomoro@412
|
165
|
giuliomoro@402
|
166 # Create remaining directories needed for building
|
giuliomoro@412
|
167 printf "Creating directory structure on BeagleBone..."
|
giuliomoro@415
|
168 ssh $BBB_ADDRESS "mkdir -p $BBB_BELA_HOME/build/core $BBB_BELA_HOME/projects"
|
giuliomoro@412
|
169 error_handler $?
|
giuliomoro@412
|
170
|
giuliomoro@452
|
171 if [ $DOXYGEN -eq 1 ]
|
giuliomoro@452
|
172 then
|
giuliomoro@452
|
173 printf "Generating on-board documentation..."
|
giuliomoro@452
|
174 ssh $BBB_ADDRESS "cd $BBB_BELA_HOME; doxygen &> /dev/null"
|
giuliomoro@452
|
175 error_handler $? "\nError while generating Doxygen documentation\n"
|
giuliomoro@452
|
176 fi
|
andrewm@58
|
177
|
giuliomoro@491
|
178 if [ $FULL -eq 1 ]
|
giuliomoro@491
|
179 then
|
giuliomoro@491
|
180 printf "Cleaning build environment..."
|
giuliomoro@491
|
181 ssh $BBB_ADDRESS "make -C $BBB_BELA_HOME --no-print-directory coreclean &>/dev/null"
|
giuliomoro@491
|
182 error_handler $? "\nError cleaning core\n"
|
giuliomoro@491
|
183 fi
|
l@451
|
184
|
giuliomoro@402
|
185 #-------------
|
giuliomoro@402
|
186 #Installing IDE
|
giuliomoro@484
|
187
|
giuliomoro@484
|
188 if [ $UPDATE_IDE -eq 1 ]
|
giuliomoro@402
|
189 then
|
giuliomoro@484
|
190 [ $ALWAYS_YES -eq 0 ] && ALWAYS_YES_FLAG= || ALWAYS_YES_FLAG="-y"
|
giuliomoro@484
|
191 ls $IDE_FOLDER/scripts/update_IDE >/dev/null 2>/dev/null
|
giuliomoro@484
|
192 if [ $? -eq 0 ]
|
giuliomoro@484
|
193 then
|
giuliomoro@484
|
194 export BBB_ADDRESS BBB_BELA_HOME
|
giuliomoro@504
|
195 cd $IDE_FOLDER/scripts && ./update_IDE $ALWAYS_YES_FLAG --no-frills
|
giuliomoro@504
|
196
|
giuliomoro@484
|
197 # The IDE is restarted by the update_IDE script
|
giuliomoro@484
|
198 else
|
giuliomoro@484
|
199 # run the IDE
|
giuliomoro@484
|
200 printf "\nThe Bela core files were updated on the board, but a valid IDE folder was not found in $IDE_FOLDER/, so the IDE was not updated.
|
giuliomoro@484
|
201 You can get a copy of the most up-to-date IDE files from https://github.com/LBDonovan/bela-ide\n"
|
giuliomoro@484
|
202 [ $FULL -eq 1 ] && printf "If there was an older version of the IDE on the board, it is being restarted.\n\n" &&\
|
giuliomoro@484
|
203 ssh $BBB_ADDRESS "make -C $BBB_BELA_HOME --no-print-directory idestart"
|
giuliomoro@484
|
204 fi
|
giuliomoro@402
|
205 else
|
giuliomoro@484
|
206 echo "Not updating the IDE"
|
giuliomoro@419
|
207 fi
|
giuliomoro@477
|
208 [ $FULL -eq 1 ] && ssh $BBB_ADDRESS make -C $BBB_BELA_HOME --no-print-directory idestartup nostartup && printf "The board will now run the IDE at startup, but startup of the Bela program has been disabled.\nTo enable it, use the set_startup.sh script.\nTo control the ide use the ide.sh script\n"
|
giuliomoro@421
|
209
|
giuliomoro@504
|
210 [ $ALWAYS_YES -eq 1 ] && printf "\nCore setup complete.\n\n" || {
|
giuliomoro@477
|
211 printf '\nSetup complete, press any key to continue . . .\n\n'
|
giuliomoro@437
|
212 read
|
giuliomoro@437
|
213 }
|