amiro-blt / ide / QtCreator / QtCreatorSetup.sh @ 69661903
History | View | Annotate | Download (13.822 KB)
1 | 69661903 | Thomas Schöpping | #!/bin/bash |
---|---|---|---|
2 | |||
3 | ############################################################################### |
||
4 | ### HELPER FUNCTIONS ### |
||
5 | ############################################################################### |
||
6 | |||
7 | #------------------------------------------------------------------------------ |
||
8 | # toAbsolutePath $1 [$2] |
||
9 | # |
||
10 | # Makes a given path absolute and either echos the result or stores it in the |
||
11 | # specified variable. |
||
12 | # arguments: |
||
13 | # $1: the path to be converted |
||
14 | # $2: a variable to store the resulting path [optiional] |
||
15 | function toAbsolutePath { |
||
16 | # the path that shall be converted if required |
||
17 | TARGET_PATH=$1 |
||
18 | |||
19 | # store the path where the script was called from |
||
20 | ORIGIN_PATH="${PWD}/" |
||
21 | |||
22 | # check, whether the target is a directory or not |
||
23 | if [ -d $TARGET_PATH ]; then |
||
24 | cd $TARGET_PATH |
||
25 | # special case: the target is the root directory |
||
26 | if [ $TARGET_PATH = "/" ]; then |
||
27 | ABSOLUTE_PATH="${PWD}" |
||
28 | else |
||
29 | ABSOLUTE_PATH="${PWD}/" |
||
30 | fi |
||
31 | else |
||
32 | cd $(dirname $TARGET_PATH) |
||
33 | ABSOLUTE_PATH="${PWD}/$(basename $TARGET_PATH)" |
||
34 | fi |
||
35 | cd $ORIGIN_PATH |
||
36 | |||
37 | # return the result |
||
38 | if [ $# -gt 1 ]; then |
||
39 | eval $2="$ABSOLUTE_PATH" |
||
40 | else |
||
41 | echo $ABSOLUTE_PATH |
||
42 | fi |
||
43 | |||
44 | # cleanup |
||
45 | unset TARGET_PATH |
||
46 | unset ORIGIN_PATH |
||
47 | unset ABSOLUTE_PATH |
||
48 | } |
||
49 | #------------------------------------------------------------------------------ |
||
50 | |||
51 | #------------------------------------------------------------------------------ |
||
52 | # getRelativePath $1 $2 [$3] |
||
53 | # |
||
54 | # Computes the relative path from one to another location. |
||
55 | # The result is then either stored in a specified variable, or just echoed. |
||
56 | # arguments: |
||
57 | # $1: the path to start from |
||
58 | # If this is not a directory, only the path will be used |
||
59 | # $2: the target location |
||
60 | # $3: a variable to store the resulting path [optional] |
||
61 | function getRelativePath { |
||
62 | # make start and target location absolute |
||
63 | START_PATH=$(toAbsolutePath $1) |
||
64 | if [ ! -d $START_PATH ]; then |
||
65 | START_PATH="$(dirname $START_PATH)/" |
||
66 | fi |
||
67 | TARGET_PATH=$(toAbsolutePath $2) |
||
68 | |||
69 | # initialize the common prefix and the relative path from START_PATH to TARGET_PATH |
||
70 | COMMON_PREFIX=$START_PATH |
||
71 | RELATIVE_PATH="./" |
||
72 | # while the common prefix is no substring of the target path |
||
73 | while [ "${TARGET_PATH#$COMMON_PREFIX}" == "$TARGET_PATH" ]; do |
||
74 | read |
||
75 | # reduce the common prefix and record the relative path |
||
76 | COMMON_PREFIX="$(dirname $COMMON_PREFIX)/" |
||
77 | RELATIVE_PATH="../$RELATIVE_PATH" |
||
78 | # special case: if only root is the common prefix, remove the just appended '/' |
||
79 | if [ $COMMON_PREFIX == "//" ]; then |
||
80 | COMMON_PREFIX="/" |
||
81 | fi |
||
82 | done |
||
83 | |||
84 | # if the relative path is more than just the current directory, cut off the trailing './' |
||
85 | if [ ! $RELATIVE_PATH == "./" ]; then |
||
86 | RELATIVE_PATH=${RELATIVE_PATH::-2} |
||
87 | fi |
||
88 | |||
89 | # compute the unique part of the target path |
||
90 | UNIQUE_POSTFIX=${TARGET_PATH#$COMMON_PREFIX} |
||
91 | |||
92 | # append the unique postfix to the relative path |
||
93 | RELATIVE_PATH=$RELATIVE_PATH$UNIQUE_POSTFIX |
||
94 | |||
95 | # return the result |
||
96 | if [ $# -gt 2 ]; then |
||
97 | eval $3="$RELATIVE_PATH" |
||
98 | else |
||
99 | echo $RELATIVE_PATH |
||
100 | fi |
||
101 | |||
102 | # clean up |
||
103 | unset START_PATH |
||
104 | unset TARGET_PATH |
||
105 | unset COMMON_PREFIX |
||
106 | unset RELATIVE_PATH |
||
107 | unset UNIQUE_POSTFIX |
||
108 | } |
||
109 | #------------------------------------------------------------------------------ |
||
110 | |||
111 | #------------------------------------------------------------------------------ |
||
112 | # printHelp |
||
113 | # |
||
114 | # Prnts a help text, how to use this script |
||
115 | function printHelp { |
||
116 | echo -e "The following commands are available:" |
||
117 | echo -e "" |
||
118 | echo -e " help - Prints this help text." |
||
119 | echo -e " all - Creates a project for each of the AMiRo base modules." |
||
120 | echo -e " clean - Deletes all files created by this script." |
||
121 | echo -e " wipe - In addittion to 'clean', the .user files created by QtCreator are deleted as well." |
||
122 | echo -e "" |
||
123 | echo -e "Note: This script does not create a project for the host application." |
||
124 | echo -e " Since the host application uses CMAKE, QtCreator can import it directly." |
||
125 | } |
||
126 | |||
127 | #------------------------------------------------------------------------------ |
||
128 | |||
129 | |||
130 | |||
131 | ############################################################################### |
||
132 | ### INTRO ### |
||
133 | ############################################################################### |
||
134 | |||
135 | echo "-------------------------------------------------------------------------------" |
||
136 | echo "" |
||
137 | echo "Setup to create QtCreator projects" |
||
138 | echo "==================================" |
||
139 | echo "" |
||
140 | |||
141 | ############################################################################### |
||
142 | ### INITIALIZATION ### |
||
143 | ############################################################################### |
||
144 | |||
145 | # the current user dir |
||
146 | USER_DIR="${PWD}/" |
||
147 | |||
148 | # the directory containing this script file |
||
149 | toAbsolutePath $(dirname ${BASH_SOURCE[0]}) SCRIPT_DIR |
||
150 | |||
151 | # the root directory of the project |
||
152 | toAbsolutePath ${SCRIPT_DIR}../../ PROJECT_ROOT_DIR |
||
153 | |||
154 | # the location where to create the QtCreator files |
||
155 | QTCREATOR_FILES_PATH=${PROJECT_ROOT_DIR} |
||
156 | |||
157 | # the include path for GCC specific headers |
||
158 | ARM_NONE_EABI_GCC_BIN=$(which arm-none-eabi-gcc) |
||
159 | while [ -L $ARM_NONE_EABI_GCC_BIN ]; do |
||
160 | ARM_NONE_EABI_GCC_BIN=$(readlink $ARM_NONE_EABI_GCC_BIN) |
||
161 | done |
||
162 | toAbsolutePath "$(dirname $ARM_NONE_EABI_GCC_BIN)/../arm-none-eabi/include/" ARM_NONE_EABI_GCC_INCLUDE_PATH |
||
163 | |||
164 | # a common path for all projects |
||
165 | COMMON_SOURCE_INCLUDE_PATH=${PROJECT_ROOT_DIR}Target/Source |
||
166 | |||
167 | # the paths to the individual projects |
||
168 | POWERMANAGEMENT_PROJECT_ROOT_PATH=${PROJECT_ROOT_DIR}Target/Demo/ARMCM4_STM32F405_Power_Management_GCC/Boot |
||
169 | DIWHEELDRIVE_PROJECT_ROOT_PATH=${PROJECT_ROOT_DIR}Target/Demo/ARMCM3_STM32F103_DiWheelDrive_GCC/Boot |
||
170 | LIGHTRING_PROJECT_ROOT_PATH=${PROJECT_ROOT_DIR}Target/Demo/ARMCM3_STM32F103_LightRing_GCC/Boot |
||
171 | |||
172 | # some prefixes for the project files |
||
173 | POWERMANAGEMENT_PROJECT_PREFIX="PowerManagement" |
||
174 | DIWHEELDRIVE_PROJECT_PREFIX="DiWheelDrive" |
||
175 | LIGHTRING_PROJECT_PREFIX="LightRing" |
||
176 | |||
177 | # evaluate user arguments |
||
178 | COMMAND="" |
||
179 | shopt -s nocasematch |
||
180 | if [ $# == 0 ]; then |
||
181 | COMMAND="help" |
||
182 | else |
||
183 | case $1 in |
||
184 | "help"|"h") |
||
185 | COMMAND="help" |
||
186 | ;; |
||
187 | "all"|"a") |
||
188 | COMMAND="all" |
||
189 | ;; |
||
190 | "clean"|"c") |
||
191 | COMMAND="clean" |
||
192 | ;; |
||
193 | "wipe"|"w") |
||
194 | COMMAND="wipe" |
||
195 | ;; |
||
196 | *) |
||
197 | COMMAND="unknown" |
||
198 | ;; |
||
199 | esac |
||
200 | fi |
||
201 | |||
202 | ############################################################################### |
||
203 | ### SETUP ### |
||
204 | ############################################################################### |
||
205 | |||
206 | cd $QTCREATOR_FILES_PATH |
||
207 | |||
208 | case $COMMAND in |
||
209 | |||
210 | ############################################################################# |
||
211 | ### HELP CASE ### |
||
212 | ############################################################################# |
||
213 | "help") |
||
214 | printHelp |
||
215 | ;; |
||
216 | |||
217 | ############################################################################# |
||
218 | ### CLEAN / WIPE CASE ### |
||
219 | ############################################################################# |
||
220 | "clean"|"wipe") |
||
221 | echo -n "removing project files..." |
||
222 | |||
223 | rm ${POWERMANAGEMENT_PROJECT_PREFIX}.includes |
||
224 | rm ${POWERMANAGEMENT_PROJECT_PREFIX}.files |
||
225 | rm ${POWERMANAGEMENT_PROJECT_PREFIX}.config |
||
226 | rm ${POWERMANAGEMENT_PROJECT_PREFIX}.creator |
||
227 | |||
228 | rm ${DIWHEELDRIVE_PROJECT_PREFIX}.includes |
||
229 | rm ${DIWHEELDRIVE_PROJECT_PREFIX}.files |
||
230 | rm ${DIWHEELDRIVE_PROJECT_PREFIX}.config |
||
231 | rm ${DIWHEELDRIVE_PROJECT_PREFIX}.creator |
||
232 | |||
233 | rm ${LIGHTRING_PROJECT_PREFIX}.includes |
||
234 | rm ${LIGHTRING_PROJECT_PREFIX}.files |
||
235 | rm ${LIGHTRING_PROJECT_PREFIX}.config |
||
236 | rm ${LIGHTRING_PROJECT_PREFIX}.creator |
||
237 | |||
238 | echo -e "\tdone" |
||
239 | |||
240 | if [ $COMMAND == "wipe" ]; then |
||
241 | echo -n "removing .user project files..." |
||
242 | if [ -f ${POWERMANAGEMENT_PROJECT_PREFIX}.creator.user ]; then |
||
243 | rm ${POWERMANAGEMENT_PROJECT_PREFIX}.creator.user |
||
244 | fi |
||
245 | if [ -f ${DIWHEELDRIVE_PROJECT_PREFIX}.creator.user ]; then |
||
246 | rm ${DIWHEELDRIVE_PROJECT_PREFIX}.creator.user |
||
247 | fi |
||
248 | if [ -f ${LIGHTRING_PROJECT_PREFIX}.creator.user ]; then |
||
249 | rm ${LIGHTRING_PROJECT_PREFIX}.creator.user |
||
250 | fi |
||
251 | echo -e "\tdone" |
||
252 | fi |
||
253 | ;; |
||
254 | |||
255 | ############################################################################# |
||
256 | ### CREATE CASE ### |
||
257 | ############################################################################# |
||
258 | "all") |
||
259 | ########################################################################### |
||
260 | ### Create PowerManagement Project ### |
||
261 | ########################################################################### |
||
262 | echo -n "creating project files for ${POWERMANAGEMENT_PROJECT_PREFIX} (STM32F405RGT6)..." |
||
263 | |||
264 | # generate a file that contains all subdirectories as includes (but ignore hidden and documentation directories) |
||
265 | find $ARM_NONE_EABI_GCC_INCLUDE_PATH -type d > ${POWERMANAGEMENT_PROJECT_PREFIX}.includes |
||
266 | find $COMMON_SOURCE_INCLUDE_PATH -type d | grep -v "ARMCM3_STM32" >> ${POWERMANAGEMENT_PROJECT_PREFIX}.includes |
||
267 | find $POWERMANAGEMENT_PROJECT_ROOT_PATH -type d | grep -v "uip\|fatfs\|ethernetlib\|cmd\|ide" >> ${POWERMANAGEMENT_PROJECT_PREFIX}.includes |
||
268 | |||
269 | # generate a file that specifies all files |
||
270 | echo -n "" > ${POWERMANAGEMENT_PROJECT_PREFIX}.files |
||
271 | for path in `cat ${POWERMANAGEMENT_PROJECT_PREFIX}.includes`; do |
||
272 | find $path -maxdepth 1 -type f \( ! -iname ".*" \) | grep -v "/arm-none-eabi/" | grep -E ".*(\.h|\.c|\.x)$" >> ${POWERMANAGEMENT_PROJECT_PREFIX}.files |
||
273 | done |
||
274 | |||
275 | # generate a default project configuration file if none exists so far |
||
276 | if [ ! -f ${POWERMANAGEMENT_PROJECT_PREFIX}.config ]; then |
||
277 | echo -e "// Add predefined macros for your project here. For example:\n// #define YOUR_CONFIGURATION belongs here\n" > ${POWERMANAGEMENT_PROJECT_PREFIX}.config |
||
278 | fi |
||
279 | |||
280 | # generate a default .creator file if none exists so far |
||
281 | if [ ! -f ${POWERMANAGEMENT_PROJECT_PREFIX}.creator ]; then |
||
282 | echo -e "[general]\n" > ${POWERMANAGEMENT_PROJECT_PREFIX}.creator |
||
283 | fi |
||
284 | |||
285 | echo -e "\tdone" |
||
286 | |||
287 | ########################################################################### |
||
288 | ### Create DiWheelDrive Project ### |
||
289 | ########################################################################### |
||
290 | echo -n "creating project files for ${DIWHEELDRIVE_PROJECT_PREFIX} (STM32F103RET6)..." |
||
291 | |||
292 | # generate a file that contains all subdirectories as includes (but ignore hidden and documentation directories) |
||
293 | find $ARM_NONE_EABI_GCC_INCLUDE_PATH -type d > ${DIWHEELDRIVE_PROJECT_PREFIX}.includes |
||
294 | find $COMMON_SOURCE_INCLUDE_PATH -type d | grep -v "ARMCM4_STM32" >> ${DIWHEELDRIVE_PROJECT_PREFIX}.includes |
||
295 | find $DIWHEELDRIVE_PROJECT_ROOT_PATH -type d | grep -v "uip\|fatfs\|ethernetlib\|cmd\|ide" >> ${DIWHEELDRIVE_PROJECT_PREFIX}.includes |
||
296 | |||
297 | # generate a file that specifies all files |
||
298 | echo -n "" > ${DIWHEELDRIVE_PROJECT_PREFIX}.files |
||
299 | for path in `cat ${DIWHEELDRIVE_PROJECT_PREFIX}.includes`; do |
||
300 | find $path -maxdepth 1 -type f \( ! -iname ".*" \) | grep -v "/arm-none-eabi/" | grep -E ".*(\.h|\.c|\.x)$" >> ${DIWHEELDRIVE_PROJECT_PREFIX}.files |
||
301 | done |
||
302 | |||
303 | # generate a default project configuration file if none exists so far |
||
304 | if [ ! -f ${DIWHEELDRIVE_PROJECT_PREFIX}.config ]; then |
||
305 | echo -e "// Add predefined macros for your project here. For example:\n// #define YOUR_CONFIGURATION belongs here\n" > ${DIWHEELDRIVE_PROJECT_PREFIX}.config |
||
306 | fi |
||
307 | |||
308 | # generate a default .creator file if none exists so far |
||
309 | if [ ! -f ${DIWHEELDRIVE_PROJECT_PREFIX}.creator ]; then |
||
310 | echo -e "[general]\n" > ${DIWHEELDRIVE_PROJECT_PREFIX}.creator |
||
311 | fi |
||
312 | |||
313 | echo -e "\tdone" |
||
314 | |||
315 | ########################################################################### |
||
316 | ### Create LightRing Project ### |
||
317 | ########################################################################### |
||
318 | echo -n "creating project files for ${LIGHTRING_PROJECT_PREFIX} (STM32F103RET6)..." |
||
319 | |||
320 | # generate a file that contains all subdirectories as includes (but ignore hidden and documentation directories) |
||
321 | find $ARM_NONE_EABI_GCC_INCLUDE_PATH -type d > ${LIGHTRING_PROJECT_PREFIX}.includes |
||
322 | find $COMMON_SOURCE_INCLUDE_PATH -type d | grep -v "ARMCM4_STM32" >> ${LIGHTRING_PROJECT_PREFIX}.includes |
||
323 | find $LIGHTRING_PROJECT_ROOT_PATH -type d | grep -v "uip\|fatfs\|ethernetlib\|cmd\|ide" >> ${LIGHTRING_PROJECT_PREFIX}.includes |
||
324 | |||
325 | # generate a file that specifies all files |
||
326 | echo -n "" > ${LIGHTRING_PROJECT_PREFIX}.files |
||
327 | for path in `cat ${LIGHTRING_PROJECT_PREFIX}.includes`; do |
||
328 | find $path -maxdepth 1 -type f \( ! -iname ".*" \) | grep -v "/arm-none-eabi/" | grep -E ".*(\.h|\.c|\.x)$" >> ${LIGHTRING_PROJECT_PREFIX}.files |
||
329 | done |
||
330 | |||
331 | # generate a default project configuration file if none exists so far |
||
332 | if [ ! -f ${LIGHTRING_PROJECT_PREFIX}.config ]; then |
||
333 | echo -e "// Add predefined macros for your project here. For example:\n// #define YOUR_CONFIGURATION belongs here\n" > ${LIGHTRING_PROJECT_PREFIX}.config |
||
334 | fi |
||
335 | |||
336 | # generate a default .creator file if none exists so far |
||
337 | if [ ! -f ${LIGHTRING_PROJECT_PREFIX}.creator ]; then |
||
338 | echo -e "[general]\n" > ${LIGHTRING_PROJECT_PREFIX}.creator |
||
339 | fi |
||
340 | |||
341 | echo -e "\tdone" |
||
342 | |||
343 | ;; |
||
344 | |||
345 | ############################################################################# |
||
346 | ### ERROR CASE ### |
||
347 | ############################################################################# |
||
348 | *) |
||
349 | echo "ERROR: invalid argument!" |
||
350 | echo "" |
||
351 | printHelp |
||
352 | ;; |
||
353 | |||
354 | esac |
||
355 | |||
356 | ############################################################################### |
||
357 | ### OUTRO ### |
||
358 | ############################################################################### |
||
359 | |||
360 | echo "" |
||
361 | echo "-------------------------------------------------------------------------------" |