1 # ******************************************************************************
2 # * FILE PURPOSE: PDK Unit Test and Example Project Creator
3 # ******************************************************************************
4 # * FILE NAME: pdkProjectCreate.sh
5 # *
6 # * DESCRIPTION:
7 # * The script file is used to create the test and example projects of all
8 # * components under PDK. These projects are available in the specified
9 # * workspace.
10 # *
11 # * USAGE:
12 # * pdkProjectCreate.sh [soc] [board] [endian] [module] [processor]
13 # *
14 # * Description: (first option is default)
15 # * soc - AM335x / AM437x / AM571x / AM572x / K2E / K2G / K2K / K2H / K2L /
16 # * C6678 / C6657
17 # * board - all (use "all" for K2X and C66X SOCs)
18 # * -or-
19 # * Refer to pdk_<soc>_<version>\packages\ti\board\lib
20 # * for valid board inputs for the soc
21 # * endian - little / big
22 # * module - all
23 # * -or-
24 # * aif2 / bcp / cppi / csl / dfe / emac / fatfs / fm / fftc /
25 # * gpio / hyplnk / i2c / icss_emac / iqn2 / mcasp / mcbsp / mmcsd / nimu /
26 # * nimu_icss / nwal / pa / pcie / pktlib / pruss / qmss / rm / sa /
27 # * serdes-diag / spi / srio / tcp3d / tfw / transportqmss /
28 # * transportsrio / tsip / uart / usb / wdtimer
29 # * processor - arm / dsp / m4
30 # *
31 # * Example:
32 # * a) pdkProjectCreate.sh
33 # * - Creates all module projects for the AM335x soc for arm little endian
34 # * b) pdkProjectCreate.sh AM437x
35 # * - Creates all module projects for the AM437x soc for arm little endian
36 # * c) pdkProjectCreate.sh AM437x idkAM437x
37 # * - Creates all module projects for idkAM437x device for arm little endian
38 # * d) pdkProjectCreate.sh AM571x evmAM571x little
39 # * - Creates all module projects for evmAM571x device for arm little endian
40 # * e) pdkProjectCreate.sh AM571x evmAM571x little i2c dsp
41 # * - Creates i2c module projects for evmAM571x device for dsp little endian
42 # * f) pdkProjectCreate.sh K2H all little i2c arm
43 # * - Creates i2c module projects for K2H device for arm little endian
44 # * g) pdkProjectCreate.sh C6678 all little hyplnk dsp
45 # * - Creates hyplnk module projects for C6678 device for dsp little endian
46 # *
47 # * Copyright (C) 2012-2016, Texas Instruments, Inc.
48 # *****************************************************************************
50 # Lists of valid input parameters - MUST be updated as new input parameters are added
51 # *****************************************************************************
52 soc_list=("AM335x" "AM437x" "AM571x" "AM572x" "K2E" "K2K" "K2H" "K2L" "K2G" "C6678" "C6657")
53 endian_list=("little" "big")
54 module_list=("all" "aif2" "bcp" "cppi" "csl" "dfe" "emac" "fatfs" "fm" "fftc" "gpio" "hyplnk" "i2c" "icss_emac" "iqn2" "mcasp" "mcbsp" "mmcsd" "nimu" "nimu_icss" "nwal" "pa" "pcie" "pktlib" "pruss" "qmss" "rm" "sa" "serdes_diag" "spi" "srio" "tcp3d" "tfw" "transportqmss" "transportsrio" "tsip" "uart" "usb" "wdtimer")
55 proc_list=("arm" "dsp" "m4")
57 # Parameter Validation: Check if the argument was passed to the batch file.
58 # *****************************************************************************
59 # Argument [soc] is used to set SOC variable.
60 if [ -n "$1" ]; then
61 export SOC="$1"
62 else
63 export SOC="AM335x"
64 fi
66 # Argument [board] is used to set BOARD variable.
67 # This is the board type of the soc for which project are to be created.
68 if [ -n "$2" ]; then
69 export BOARD="$2"
70 else
71 export BOARD="all"
72 fi
74 # Argument [endian] is used to set ENDIAN variable.
75 # This is Endianess of the projects being created.
76 # Valid Values are 'little' and 'big'. Defaults to 'little'.
77 if [ -n "$3" ]; then
78 export ENDIAN="$3"
79 else
80 export ENDIAN="little"
81 fi
83 # Argument [module] is used to set MODULE variable.
84 # This is specific module for which projects are created.
85 # Valid Values are LLD name. Defaults to all LLD's.
86 if [ -n "$4" ]; then
87 export MODULE="$4"
88 else
89 export MODULE="all"
90 fi
92 # Argument [processor] is used to set PROCESSOR variable.
93 # This is specific processor type for which projects are created.
94 # Valid Values are arm, dsp, or m4 . Defaults to arm.
95 if [ -n "$5" ]; then
96 export PROCESSOR="$5"
97 else
98 export PROCESSOR="arm"
99 fi
101 export PDK_SHORT_NAME=$PWD
103 # *****************************************************************************
105 echo "========================================================================="
106 echo "Configuration:"
107 echo " SOC : $SOC"
108 echo " BOARD : $BOARD"
109 echo " ENDIAN : $ENDIAN"
110 echo " MODULE : $MODULE"
111 echo " PROCESSOR : $PROCESSOR"
112 echo " PDK_SHORT_NAME : $PDK_SHORT_NAME"
113 echo "========================================================================="
114 echo "Checking Configuration..."
116 error_exit () {
117 echo "Exiting..."
118 echo "========================================================================="
119 exit 1
120 }
122 contains () {
123 local name=$1[@]
124 local list=("${!name}")
125 local in_list=0
127 for item in "${list[@]}"
128 do
129 if [ "$2" = "$item" ]; then
130 in_list=1
131 break
132 fi
133 done
135 if [ $in_list -eq 0 ]; then
136 echo "ERROR: $3 ($2) is invalid"
137 error_exit
138 fi
139 }
141 contains soc_list "$SOC" "SOC"
142 contains endian_list "$ENDIAN" "Endian"
143 contains module_list "$MODULE" "Module"
144 contains proc_list "$PROCESSOR" "Processor"
146 if [ $BOARD != "all" ]; then
147 if [ "${BOARD/$SOC}" = "$BOARD" ]; then
148 echo "ERROR: Board ($BOARD) is invalid for the specified SOC ($SOC)"
149 error_exit
150 fi
151 fi
153 if [ $SOC = "AM335x" ]; then
154 if [ $PROCESSOR = "dsp" ]; then
155 echo "ERROR: The AM335x soc does not contain a DSP processor"
156 error_exit
157 elif [ $PROCESSOR = "m4" ]; then
158 echo "ERROR: The AM335x soc does not contain a M4 processor"
159 error_exit
160 fi
162 if [ $ENDIAN = "big" ]; then
163 echo "ERROR: The AM335x soc's arm does not support big endian"
164 error_exit
165 fi
166 elif [ $SOC = "AM437x" ]; then
167 if [ $PROCESSOR = "dsp" ]; then
168 echo "ERROR: The AM437x soc does not contain a DSP processor"
169 error_exit
170 elif [ $PROCESSOR = "m4" ]; then
171 echo "ERROR: The AM437x soc does not contain a M4 processor"
172 error_exit
173 fi
175 if [ $ENDIAN = "big" ]; then
176 echo "ERROR: The AM437x soc's arm does not support big endian"
177 error_exit
178 fi
179 elif [ $SOC = "AM571x" ]; then
180 if [ $ENDIAN = "big" ]; then
181 echo "ERROR: The AM571x soc's processor's do not support big endian"
182 error_exit
183 fi
184 elif [ $SOC = "AM572x" ]; then
185 if [ $ENDIAN = "big" ]; then
186 echo "ERROR: The AM572x soc's processor's do not support big endian"
187 error_exit
188 fi
189 elif [ $SOC = "K2K" ]; then
190 if [ $PROCESSOR = "m4" ]; then
191 echo "ERROR: The K2K soc does not contain a M4 processor"
192 error_exit
193 fi
194 if [ $PROCESSOR = "arm" ]; then
195 if [ $ENDIAN = "big" ]; then
196 echo "ERROR: The K2K soc's processor's do not support big endian"
197 error_exit
198 fi
199 fi
200 elif [ $SOC = "K2H" ]; then
201 if [ $PROCESSOR = "m4" ]; then
202 echo "ERROR: The K2H soc does not contain a M4 processor"
203 error_exit
204 fi
205 if [ $PROCESSOR = "arm" ]; then
206 if [ $ENDIAN = "big" ]; then
207 echo "ERROR: The K2H soc's processor's do not support big endian"
208 error_exit
209 fi
210 fi
211 elif [ $SOC = "K2E" ]; then
212 if [ $PROCESSOR = "m4" ]; then
213 echo "ERROR: The K2E soc does not contain a M4 processor"
214 error_exit
215 fi
216 if [ $PROCESSOR = "arm" ]; then
217 if [ $ENDIAN = "big" ]; then
218 echo "ERROR: The K2E soc's processor's do not support big endian"
219 error_exit
220 fi
221 fi
222 elif [ $SOC = "K2L" ]; then
223 if [ $PROCESSOR = "m4" ]; then
224 echo "ERROR: The K2L soc does not contain a M4 processor"
225 error_exit
226 fi
227 if [ $PROCESSOR = "arm" ]; then
228 if [ $ENDIAN = "big" ]; then
229 echo "ERROR: The K2L soc's processor's do not support big endian"
230 error_exit
231 fi
232 fi
233 elif [ $SOC = "K2G" ]; then
234 if [ $PROCESSOR = "m4" ]; then
235 echo "ERROR: The K2G soc does not contain a M4 processor"
236 error_exit
237 fi
238 if [ $PROCESSOR = "arm" ]; then
239 if [ $ENDIAN = "big" ]; then
240 echo "ERROR: The K2G soc's processor's do not support big endian"
241 error_exit
242 fi
243 fi
244 elif [ $SOC = "C6678" ]; then
245 if [ $PROCESSOR = "m4" ]; then
246 echo "ERROR: The C6678 soc does not contain a M4 processor"
247 error_exit
248 fi
249 if [ $PROCESSOR = "arm" ]; then
250 echo "ERROR: The C6678 soc does not contain an arm processor"
251 error_exit
252 fi
253 elif [ $SOC = "C6657" ]; then
254 if [ $PROCESSOR = "m4" ]; then
255 echo "ERROR: The C6657 soc does not contain a M4 processor"
256 error_exit
257 fi
258 if [ $PROCESSOR = "arm" ]; then
259 echo "ERROR: The C6657 soc does not contain an arm processor"
260 error_exit
261 fi
262 else
263 echo "ERROR: Invalid soc"
264 error_exit
265 fi
267 # *****************************************************************************
268 # * Version Information of the various tools etc required to build the test
269 # * projects. Customers are free to modify these to meet their requi#ents.
270 # *****************************************************************************
272 # export to 'no' when using QT, EVM, VDB, or other hardware. export to 'yes'
273 # only when using the simulator.
274 export IS_SIMULATOR_SUPPORT_NEEDED=no
276 # Install Location for CCS
277 export CCS_INSTALL_PATH=~/ti/ccsv6
279 # Workspace where the PDK projects will be created.
280 export MY_WORKSPACE=$PDK_SHORT_NAME/MyExampleProjects
282 # macros.ini location
283 export MACROS_FILE=$PDK_SHORT_NAME/macros.ini
285 # This is the format of the executable being created
286 # Valid Values are 'ELF' and 'COFF'
287 export OUTPUT_FORMAT=ELF
289 # Version of CG-Tools
290 export CGT_VERSION=8.1.0
292 # Version of CG-ARM-Tools for M4
293 export CGT_M4_VERSION=5.2.5
295 # Version of XDC
296 export XDC_VERSION=3.32.00.06
298 # Version of BIOS
299 export BIOS_VERSION=6.45.01.29
301 # Version of CG-Tools for ARM
302 export CGT_VERSION_ARM=GNU_4.8.4:Linaro
304 # Version of the IPC
305 export IPC_VERSION=3.42.00.02
307 # EDMA3 Version
308 export EDMA_VERSION=2.12.01.23
310 # Version of the PDK
311 export PDK_VERSION=1.0.1
313 # Version of the NDK
314 export NDK_VERSION=2.24.03.35
316 # Version of UIA
317 export UIA_VERSION=2.00.03.43
319 # PDK Part Number & Platform name
320 if [ "$SOC" = "K2K" ]; then
321 export PDK_PARTNO=TCI6638
322 export PDK_ECLIPSE_ID=com.ti.pdk.k2hk
323 export RTSC_PLATFORM_NAME=ti.platforms.evmTCI6638K2K
324 if [ "$PROCESSOR" == "arm" ]; then
325 export RTSC_TARGET=gnu.targets.arm.A15F
326 export CCS_DEVICE="Cortex A.TCI6638K2K"
327 fi
328 elif [ "$SOC" = "K2H" ]; then
329 export PDK_PARTNO=TCI6636
330 export PDK_ECLIPSE_ID=com.ti.pdk.k2hk
331 export RTSC_PLATFORM_NAME=ti.platforms.evmTCI6636K2H
332 if [ "$PROCESSOR" == "arm" ]; then
333 export RTSC_TARGET=gnu.targets.arm.A15F
334 export CCS_DEVICE="Cortex A.66AK2H12"
335 fi
336 elif [ "$SOC" = "K2L" ]; then
337 export PDK_PARTNO=TCI6630
338 export PDK_ECLIPSE_ID=com.ti.pdk.k2l
339 export RTSC_PLATFORM_NAME=ti.platforms.evmTCI6630K2L
340 if [ "$PROCESSOR" == "arm" ]; then
341 export RTSC_TARGET=gnu.targets.arm.A15F
342 export CCS_DEVICE="Cortex A.TCI6630K2L"
343 fi
344 elif [ "$SOC" = "K2E" ]; then
345 export PDK_PARTNO=66AK2E05
346 export PDK_ECLIPSE_ID=com.ti.pdk.k2e
347 export RTSC_PLATFORM_NAME=ti.platforms.evmC66AK2E
348 if [ "$PROCESSOR" == "arm" ]; then
349 export RTSC_TARGET=gnu.targets.arm.A15F
350 export CCS_DEVICE="Cortex A.66AK2E05"
351 fi
352 elif [ "$SOC" = "K2G" ]; then
353 export PDK_PARTNO=66AK2G02
354 export PDK_ECLIPSE_ID=com.ti.pdk.k2g
355 export RTSC_PLATFORM_NAME=ti.platforms.evmTCI66AK2G02
356 if [ "$PROCESSOR" == "arm" ]; then
357 export RTSC_TARGET=gnu.targets.arm.A15F
358 export CCS_DEVICE="Cortex A.66AK2G02"
359 fi
360 elif [ "$SOC" = "AM571x" ]; then
361 export PDK_PARTNO=AM571X
362 export PDK_ECLIPSE_ID=com.ti.pdk.am57xx
363 export RTSC_PLATFORM_NAME=ti.platforms.evmAM571X
364 if [ "$PROCESSOR" = "arm" ]; then
365 export RTSC_TARGET=gnu.targets.arm.A15F
366 export CCS_DEVICE="Cortex A.AM5728_RevA"
367 elif [ "$PROCESSOR" == "m4" ]; then
368 export RTSC_TARGET=ti.targets.arm.elf.M4
369 export CCS_DEVICE="Cortex M.AM5728_RevA"
370 fi
371 elif [ "$SOC" == "AM572x" ]; then
372 export PDK_PARTNO=AM572X
373 export PDK_ECLIPSE_ID=com.ti.pdk.am57xx
374 export RTSC_PLATFORM_NAME=ti.platforms.evmAM572X
375 if [ "$PROCESSOR" == "arm" ]; then
376 export RTSC_TARGET=gnu.targets.arm.A15F
377 export CCS_DEVICE="Cortex A.AM5728_RevA"
378 elif [ "$PROCESSOR" == "m4" ]; then
379 export RTSC_TARGET=ti.targets.arm.elf.M4
380 export CCS_DEVICE="Cortex M.AM5728_RevA"
381 fi
382 elif [ "$SOC" == AM335x ]; then
383 export PDK_PARTNO=AM335
384 export PDK_ECLIPSE_ID=com.ti.pdk.am335x
385 export RTSC_PLATFORM_NAME=ti.platforms.evmAM3359
386 export RTSC_TARGET=gnu.targets.arm.A8F
387 export CCS_DEVICE="Cortex A.AM3359.ICE_AM3359"
388 elif [ "$SOC" = "AM437x" ]; then
389 export PDK_PARTNO=AM437
390 export PDK_ECLIPSE_ID=com.ti.pdk.am437x
391 export RTSC_PLATFORM_NAME=ti.platforms.evmAM437X
392 export RTSC_TARGET=gnu.targets.arm.A9F
393 export CCS_DEVICE="Cortex A.AM4379.IDK_AM437X"
394 elif [ "$SOC" = "C6678" ]; then
395 export PDK_PARTNO=C6678L
396 export PDK_ECLIPSE_ID=com.ti.pdk.c667x
397 export RTSC_PLATFORM_NAME=ti.platforms.evm6678
398 elif [ "$SOC" = "C6657" ]; then
399 export PDK_PARTNO=C6657
400 export PDK_ECLIPSE_ID=com.ti.pdk.c665x
401 export RTSC_PLATFORM_NAME=ti.platforms.evm6657
402 else
403 # Need to exit the batch script cleanly
404 export PDK_PARTNO=TCI6634
405 export PDK_ECLIPSE_ID=ti.pdk
406 export RTSC_PLATFORM_NAME=ti.platforms.simKepler
407 fi
409 # RTSC Target
410 # - Please ensure that you select this taking into account the
411 # OUTPUT_FORMAT and the RTSC_PLATFORM_NAME
412 if [ "$PROCESSOR" = "dsp" ]; then
413 if [ "$ENDIAN" = "big" ]; then
414 export RTSC_TARGET=ti.targets.elf.C66_big_endian
415 export CCS_DEVICE="com.ti.ccstudio.deviceModel.C6000.GenericC64xPlusDevice"
416 else
417 export RTSC_TARGET=ti.targets.elf.C66
418 export CCS_DEVICE="com.ti.ccstudio.deviceModel.C6000.GenericC64xPlusDevice"
419 fi
420 fi
422 echo " PDK_PARTNO : $PDK_PARTNO"
423 echo " PDK_ECLIPSE_ID : $PDK_ECLIPSE_ID"
424 echo " RTSC_PLATFORM_NAME : $RTSC_PLATFORM_NAME"
425 echo " RTSC_TARGET : $RTSC_TARGET"
426 echo " CCS_DEVICE : $CCS_DEVICE"
427 # *****************************************************************************
428 # *****************************************************************************
429 # Please do NOT change anything below this
430 # *****************************************************************************
431 # *****************************************************************************
433 # export auto create command by default for use with CCSv5 and CCSv6
434 export AUTO_CREATE_COMMAND=eclipse/ccstudio
436 # export project for Silicon or QT by default
437 export SIMULATOR_SUPPORT_DEFINE=
439 echo "*****************************************************************************"
440 echo "Detecting all projects in PDK and importing them in the workspace $MY_WORKSPACE"
442 # Set BOARD to equal the SOC if BOARD is set to "all". All projects for the
443 # SOC will be picked up
444 if [ "$BOARD" = "all" ]; then
445 BOARD="$SOC"
446 fi
447 # Set MODULE to null string so it picks up all projects of PROCESSOR
448 if [ "$MODULE" = "all" ]; then
449 MODULE=""
450 fi
452 ccs_create_dsp()
453 {
454 echo Detected Project $1
455 textfile=${1#*/}
457 $CCS_INSTALL_PATH/$AUTO_CREATE_COMMAND -nosplash -data $MY_WORKSPACE -application com.ti.ccstudio.apps.projectCreate -ccs.name ${textfile%.*} -ccs.outputFormat $OUTPUT_FORMAT -ccs.device "$CCS_DEVICE" -ccs.endianness $ENDIAN -ccs.kind executable -ccs.cgtVersion $CGT_VERSION -rtsc.xdcVersion $XDC_VERSION -rtsc.enableDspBios -rtsc.biosVersion $BIOS_VERSION -rtsc.buildProfile "debug" -rtsc.products "com.ti.sdo.edma3:$EDMA_VERSION;com.ti.rtsc.IPC:$IPC_VERSION;com.ti.rtsc.SYSBIOS:$BIOS_VERSION;$PDK_ECLIPSE_ID:$PDK_VERSION;com.ti.rtsc.NDK:$NDK_VERSION;com.ti.uia:$UIA_VERSION" -rtsc.platform "$RTSC_PLATFORM_NAME" -rtsc.target $RTSC_TARGET -ccs.rts libc.a -ccs.args $textfile -ccs.overwrite full \;
459 echo "Copying macros.ini"
460 cp $PDK_SHORT_NAME/macros.ini $MY_WORKSPACE/${textfile%.*}
461 }
463 ccs_create_arm()
464 {
465 echo Detected Project $1
466 textfile=${1#*/}
468 $CCS_INSTALL_PATH/$AUTO_CREATE_COMMAND -nosplash -data $MY_WORKSPACE -application com.ti.ccstudio.apps.projectCreate -ccs.cmd "" -ccs.name ${textfile%.*} -ccs.outputFormat $OUTPUT_FORMAT -ccs.setLinkerOptions "-L\${BIOS_CG_ROOT}/packages/gnu/targets/arm/libs/install-native/arm-none-eabi/lib/fpu" -ccs.device "$CCS_DEVICE" -ccs.endianness $ENDIAN -ccs.kind executable -ccs.cgtVersion $CGT_VERSION_ARM -rtsc.xdcVersion $XDC_VERSION -rtsc.enableDspBios -rtsc.biosVersion $BIOS_VERSION -rtsc.buildProfile "debug" -rtsc.products "com.ti.sdo.edma3:$EDMA_VERSION;com.ti.rtsc.SYSBIOS:$BIOS_VERSION;$PDK_ECLIPSE_ID:$PDK_VERSION;com.ti.rtsc.NDK:$NDK_VERSION" -rtsc.platform "$RTSC_PLATFORM_NAME" -rtsc.target $RTSC_TARGET -ccs.rts libc.a libgcc.a libuart.a libm.a libnosys.a -ccs.args $textfile -ccs.overwrite full \;
470 echo "Copying macros.ini"
471 cp $PDK_SHORT_NAME/macros.ini $MY_WORKSPACE/${textfile%.*}
472 }
474 ccs_create_m4()
475 {
476 echo Detected Project $1
477 textfile=${1#*/}
479 $CCS_INSTALL_PATH/$AUTO_CREATE_COMMAND -nosplash -data $MY_WORKSPACE -application com.ti.ccstudio.apps.projectCreate -ccs.cmd "" -ccs.name ${textfile%.*} -ccs.outputFormat $OUTPUT_FORMAT -ccs.device "$CCS_DEVICE" -ccs.endianness $ENDIAN -ccs.kind executable -ccs.cgtVersion $CGT_M4_VERSION -rtsc.xdcVersion $XDC_VERSION -rtsc.enableDspBios -rtsc.biosVersion $BIOS_VERSION -rtsc.buildProfile "debug" -rtsc.products "com.ti.sdo.edma3:$EDMA_VERSION;com.ti.rtsc.IPC:$IPC_VERSION;com.ti.rtsc.SYSBIOS:$BIOS_VERSION;$PDK_ECLIPSE_ID:$PDK_VERSION;com.ti.rtsc.NDK:$NDK_VERSION" -rtsc.platform "$RTSC_PLATFORM_NAME" -rtsc.target $RTSC_TARGET -ccs.rts libc.a libgcc.a libuart.a libm.a libnosys.a -ccs.args $textfile -ccs.overwrite full \;
481 echo "Copying macros.ini"
482 cp $PDK_SHORT_NAME/macros.ini $MY_WORKSPACE/${textfile%.*}
483 }
485 export -f ccs_create_dsp
486 export -f ccs_create_arm
487 export -f ccs_create_m4
489 if [ "$PROCESSOR" = "dsp" ]; then
490 find -iname "*$MODULE*$BOARD*c66*roject.txt" -execdir bash -c 'ccs_create_dsp {}' \;
491 if [ $(find -iname "*$MODULE*$BOARD*c66*roject.txt" | wc -l) -eq 0 ]; then
492 echo "No projects detected"
493 fi
494 elif [ "$PROCESSOR" = "arm" ]; then
495 find -iname "*$MODULE*$BOARD*arm*roject.txt" -execdir bash -c 'ccs_create_arm {}' \;
496 if [ $(find -iname "*$MODULE*$BOARD*arm*roject.txt" | wc -l) -eq 0 ]; then
497 echo "No projects detected"
498 fi
499 elif [ "$PROCESSOR" = "m4" ]; then
500 find -iname "*$MODULE*$BOARD*m4*roject.txt" -execdir bash -c 'ccs_create_m4 {}' \;
501 if [ $(find -iname "*$MODULE*$BOARD*m4*roject.txt" | wc -l) -eq 0 ]; then
502 echo "No projects detected"
503 fi
504 else
505 echo "$PROCESSOR is an invalid processor"
506 fi
508 echo "Project generation complete"
509 echo "*****************************************************************************"