1@REM ***************************************************************************
2@REM
3@REM Builds/Cleans/Tests all examples
4@REM
5@REM Call this script without parameters for usage help.
6@REM
7@REM ***************************************************************************
8
9@ECHO OFF
10
11SETLOCAL ENABLEEXTENSIONS
12SETLOCAL ENABLEDELAYEDEXPANSION
13
14SET SCRIPT_NAME=%~n0%~x0
15CALL :DBG_MSG "SCRIPT_NAME: %SCRIPT_NAME%"
16SET "AZRTOS_TEST_DIR=%~dp0"
17CALL :DBG_MSG "AZRTOS_TEST_DIR: %AZRTOS_TEST_DIR%"
18SET "AZRTOS_REPO_DIR=%~dp0..\."
19CALL :DBG_MSG "AZRTOS_REPO_DIR: %AZRTOS_REPO_DIR%"
20
21CALL :DBG_MSG "Parsing parameters..."
22IF /I "%1" EQU "" GOTO PRINT_USAGE_AND_EXIT
23IF /I "%1" EQU "BUILD" SET FLAG_DO_WHAT=BUILD
24IF /I "%1" EQU "CLEAN" SET FLAG_DO_WHAT=CLEAN
25IF /I "%1" EQU "TEST" SET FLAG_DO_WHAT=TEST
26IF "%FLAG_DO_WHAT%"=="" GOTO PRINT_USAGE_AND_EXIT
27CALL :DBG_MSG "FLAG_DO_WHAT: %FLAG_DO_WHAT%"
28SHIFT
29IF /I "%1" EQU "" GOTO PRINT_USAGE_AND_EXIT
30IF /I "%1" EQU "TX" SET FLAG_DO_WHICH=TX
31IF /I "%1" EQU "TXM" SET FLAG_DO_WHICH=TXM
32IF "%FLAG_DO_WHICH%"=="" GOTO PRINT_USAGE_AND_EXIT
33CALL :DBG_MSG "FLAG_DO_WHICH: %FLAG_DO_WHICH%"
34SET FLAG_GHS=0
35SET FLAG_IAR=0
36SET FLAG_AC5=0
37SET FLAG_AC6=0
38SET FLAG_KUV=0
39SET FLAG_GNU=0
40CALL :DBG_MSG "Parsing groups..."
41:PARSE_GROUP_PARAMS
42SHIFT
43IF /I "%1" EQU "" GOTO GROUP_PARAMS_PARSED
44IF /I "%1" EQU "ALL" (
45    SET FLAG_IAR=1
46    SET FLAG_GHS=1
47    SET FLAG_AC5=1
48    SET FLAG_AC6=1
49    SET FLAG_KUV=1
50    SET FLAG_GNU=1
51)
52IF /I "%1" EQU "IAR" SET FLAG_IAR=1
53IF /I "%1" EQU "GHS" SET FLAG_GHS=1
54IF /I "%1" EQU "AC5" SET FLAG_AC5=1
55IF /I "%1" EQU "AC6" SET FLAG_AC6=1
56IF /I "%1" EQU "KUV" SET FLAG_KUV=1
57IF /I "%1" EQU "GNU" SET FLAG_GNU=1
58GOTO PARSE_GROUP_PARAMS
59CALL :DBG_MSG "Groups parsed."
60:GROUP_PARAMS_PARSED
61CALL :DBG_MSG "FLAG_IAR: %FLAG_IAR%"
62CALL :DBG_MSG "FLAG_GHS: %FLAG_GHS%"
63CALL :DBG_MSG "FLAG_AC5: %FLAG_AC5%"
64CALL :DBG_MSG "FLAG_AC6: %FLAG_AC6%"
65CALL :DBG_MSG "FLAG_KUV: %FLAG_KUV%"
66CALL :DBG_MSG "FLAG_GNU: %FLAG_GNU%"
67CALL :DBG_MSG "Parameters parsed."
68
69IF %FLAG_IAR% EQU 1 (
70    CALL azrtos_setenv_iar.bat
71    IF %ERRORLEVEL% NEQ 0 GOTO :SETENV_ERROR
72)
73IF %FLAG_GHS% EQU 1 (
74    CALL azrtos_setenv_ghs.bat
75    IF %ERRORLEVEL% NEQ 0 GOTO :SETENV_ERROR
76)
77IF %FLAG_AC5% EQU 1 (
78    CALL azrtos_setenv_ac5.bat
79    IF %ERRORLEVEL% NEQ 0 GOTO :SETENV_ERROR
80)
81IF %FLAG_AC6% EQU 1 (
82    CALL azrtos_setenv_ac6.bat
83    IF %ERRORLEVEL% NEQ 0 GOTO :SETENV_ERROR
84)
85IF %FLAG_KUV% EQU 1 (
86    CALL azrtos_setenv_kuv.bat
87    IF %ERRORLEVEL% NEQ 0 GOTO :SETENV_ERROR
88)
89IF %FLAG_GNU% EQU 1 (
90    CALL azrtos_setenv_gnu.bat
91    IF %ERRORLEVEL% NEQ 0 GOTO :SETENV_ERROR
92)
93IF "%FLAG_DO_WHAT%" EQU "TEST" (
94    IF %FLAG_GNU% EQU 1 (
95        CALL azrtos_setenv_arm_dbg.bat
96    )
97)
98
99SET LOGFILE=%AZRTOS_REPO_DIR%\test\azrtos_do_all.log
100CALL :DBG_MSG "LOGFILE: %LOGFILE%"
101
102SET /A DIR_COUNT=0
103SET /A DIR_SUCCESS_COUNT=0
104SET /A DIR_ERROR_COUNT=0
105
106IF %FLAG_DO_WHICH%==TX (
107    IF %FLAG_IAR%==1 (
108        CALL :DO_DIR IAR CORTEX_M0 %AZRTOS_REPO_DIR%\ports\cortex_m0\iar\example_build
109        CALL :DO_DIR IAR CORTEX_M3 %AZRTOS_REPO_DIR%\ports\cortex_m3\iar\example_build
110        CALL :DO_DIR IAR CORTEX_M4 %AZRTOS_REPO_DIR%\ports\cortex_m4\iar\example_build
111        CALL :DO_DIR IAR CORTEX_M7 %AZRTOS_REPO_DIR%\ports\cortex_m7\iar\example_build
112        REM CALL :DO_DIR IAR CORTEX_M23 %AZRTOS_REPO_DIR%\ports\cortex_m23\iar\example_build
113        REM CALL :DO_DIR IAR CORTEX_M33 %AZRTOS_REPO_DIR%\ports\cortex_m33\iar\example_build
114        CALL :DO_DIR IAR CORTEX_R4 %AZRTOS_REPO_DIR%\ports\cortex_r4\iar\example_build
115        CALL :DO_DIR IAR CORTEX_R5 %AZRTOS_REPO_DIR%\ports\cortex_r5\iar\example_build
116        CALL :DO_DIR IAR CORTEX_A5 %AZRTOS_REPO_DIR%\ports\cortex_a5\iar\example_build
117        CALL :DO_DIR IAR CORTEX_A7 %AZRTOS_REPO_DIR%\ports\cortex_a7\iar\example_build
118        CALL :DO_DIR IAR CORTEX_A8 %AZRTOS_REPO_DIR%\ports\cortex_a8\iar\example_build
119        CALL :DO_DIR IAR CORTEX_A9 %AZRTOS_REPO_DIR%\ports\cortex_a9\iar\example_build
120        CALL :DO_DIR IAR CORTEX_A15 %AZRTOS_REPO_DIR%\ports\cortex_a15\iar\example_build
121        CALL :DO_DIR IAR CORTEX_ARM9 %AZRTOS_REPO_DIR%\ports\arm9\iar\example_build
122        CALL :DO_DIR IAR CORTEX_ARM11 %AZRTOS_REPO_DIR%\ports\arm11\iar\example_build
123        REM CALL :DO_DIR IAR RISC_V32 %AZRTOS_REPO_DIR%\ports\risc-v32\iar\example_build
124    )
125    IF %FLAG_GHS%==1 (
126        CALL :DO_DIR GHS CORTEX_M3 %AZRTOS_REPO_DIR%\ports\cortex_m3\ghs\example_build
127        CALL :DO_DIR GHS CORTEX_M4 %AZRTOS_REPO_DIR%\ports\cortex_m4\ghs\example_build
128        CALL :DO_DIR GHS CORTEX_M7 %AZRTOS_REPO_DIR%\ports\cortex_m7\ghs\example_build
129        CALL :DO_DIR GHS CORTEX_R4 %AZRTOS_REPO_DIR%\ports\cortex_r4\ghs\example_build
130        CALL :DO_DIR GHS CORTEX_R5 %AZRTOS_REPO_DIR%\ports\cortex_r5\ghs\example_build
131        CALL :DO_DIR GHS CORTEX_R7 %AZRTOS_REPO_DIR%\ports\cortex_r7\ghs\example_build
132        CALL :DO_DIR GHS CORTEX_A5 %AZRTOS_REPO_DIR%\ports\cortex_a5\ghs\example_build
133        CALL :DO_DIR GHS CORTEX_A7 %AZRTOS_REPO_DIR%\ports\cortex_a7\ghs\example_build
134        CALL :DO_DIR GHS CORTEX_A8 %AZRTOS_REPO_DIR%\ports\cortex_a8\ghs\example_build
135        CALL :DO_DIR GHS CORTEX_A9 %AZRTOS_REPO_DIR%\ports\cortex_a9\ghs\example_build
136    )
137    IF %FLAG_AC5%==1 (
138        CALL :DO_DIR AC5 CORTEX_M4 %AZRTOS_REPO_DIR%\ports\cortex_m4\ac5\example_build
139    )
140    IF %FLAG_AC6%==1 (
141        CALL :DO_DIR AC6 CORTEX_M0 %AZRTOS_REPO_DIR%\ports\cortex_m0\ac6\example_build
142        CALL :DO_DIR AC6 CORTEX_M3 %AZRTOS_REPO_DIR%\ports\cortex_m3\ac6\example_build
143        CALL :DO_DIR AC6 CORTEX_M4 %AZRTOS_REPO_DIR%\ports\cortex_m4\ac6\example_build
144        CALL :DO_DIR AC6 CORTEX_M7 %AZRTOS_REPO_DIR%\ports\cortex_m7\ac6\example_build
145        REM CALL :DO_DIR AC6 CORTEX_M23 %AZRTOS_REPO_DIR%\ports\cortex_m23\ac6\example_build
146        REM CALL :DO_DIR AC6 CORTEX_M33 %AZRTOS_REPO_DIR%\ports\cortex_m33\ac6\example_build
147        CALL :DO_DIR AC6 CORTEX_R4 %AZRTOS_REPO_DIR%\ports\cortex_r4\ac6\example_build
148        CALL :DO_DIR AC6 CORTEX_R5 %AZRTOS_REPO_DIR%\ports\cortex_r5\ac6\example_build
149        CALL :DO_DIR AC6 CORTEX_A5X %AZRTOS_REPO_DIR%\ports\cortex_a5x\ac6\example_build
150        CALL :DO_DIR AC6 CORTEX_A7 %AZRTOS_REPO_DIR%\ports\cortex_a7\ac6\example_build
151        CALL :DO_DIR AC6 CORTEX_A8 %AZRTOS_REPO_DIR%\ports\cortex_a8\ac6\example_build
152        CALL :DO_DIR AC6 CORTEX_A9 %AZRTOS_REPO_DIR%\ports\cortex_a9\ac6\example_build
153        CALL :DO_DIR AC6 CORTEX_A15 %AZRTOS_REPO_DIR%\ports\cortex_a15\ac6\example_build
154    )
155    IF %FLAG_KUV%==1 (
156        CALL :DO_DIR KUV CORTEX_M3 %AZRTOS_REPO_DIR%\ports\cortex_m3\keil\example_build
157        CALL :DO_DIR KUV CORTEX_M4 %AZRTOS_REPO_DIR%\ports\cortex_m4\keil\example_build
158    )
159    IF %FLAG_GNU%==1 (
160        CALL :DO_DIR GNU CORTEX_M0 %AZRTOS_REPO_DIR%\ports\cortex_m0\gnu\example_build
161        CALL :DO_DIR GNU CORTEX_M3 %AZRTOS_REPO_DIR%\ports\cortex_m3\gnu\example_build
162        CALL :DO_DIR GNU CORTEX_M4 %AZRTOS_REPO_DIR%\ports\cortex_m4\gnu\example_build
163        CALL :DO_DIR GNU CORTEX_M7 %AZRTOS_REPO_DIR%\ports\cortex_m7\gnu\example_build
164        REM CALL :DO_DIR GNU CORTEX_M23 %AZRTOS_REPO_DIR%\ports\cortex_m23\gnu\example_build
165        REM CALL :DO_DIR GNU CORTEX_M33 %AZRTOS_REPO_DIR%\ports\cortex_m33\gnu\example_build
166        CALL :DO_DIR GNU CORTEX_R4 %AZRTOS_REPO_DIR%\ports\cortex_r4\gnu\example_build
167        CALL :DO_DIR GNU CORTEX_R5 %AZRTOS_REPO_DIR%\ports\cortex_r5\gnu\example_build
168        CALL :DO_DIR GNU CORTEX_A5 %AZRTOS_REPO_DIR%\ports\cortex_a5\gnu\example_build
169        CALL :DO_DIR GNU CORTEX_A7 %AZRTOS_REPO_DIR%\ports\cortex_a7\gnu\example_build
170        CALL :DO_DIR GNU CORTEX_A8 %AZRTOS_REPO_DIR%\ports\cortex_a8\gnu\example_build
171        CALL :DO_DIR GNU CORTEX_A9 %AZRTOS_REPO_DIR%\ports\cortex_a9\gnu\example_build
172        CALL :DO_DIR GNU CORTEX_A15 %AZRTOS_REPO_DIR%\ports\cortex_a15\gnu\example_build
173        REM CALL :DO_DIR GNU CORTEX_A35 %AZRTOS_REPO_DIR%\ports\cortex_a35\gnu\example_build
174    )
175)
176IF %FLAG_DO_WHICH%==TXM (
177    IF %FLAG_IAR%==1 (
178        SET CURRENT_TOOLCHAIN=IAR
179        CALL :DO_DIR IAR CORTEX_M3 %AZRTOS_REPO_DIR%\ports_module\cortex-m3\iar\example_build
180        CALL :DO_DIR IAR CORTEX_M4 %AZRTOS_REPO_DIR%\ports_module\cortex-m4\iar\example_build
181        CALL :DO_DIR IAR CORTEX_M7 %AZRTOS_REPO_DIR%\ports_module\cortex-m7\iar\example_build
182        CALL :DO_DIR IAR CORTEX_R4 %AZRTOS_REPO_DIR%\ports_module\cortex-r4\iar\example_build
183    )
184    IF %FLAG_AC5%==1 (
185        CALL :DO_DIR AC5 CORTEX_M3 %AZRTOS_REPO_DIR%\ports_module\cortex-m3\ac5\example_build
186        CALL :DO_DIR AC5 CORTEX_M4 %AZRTOS_REPO_DIR%\ports_module\cortex-m4\ac5\example_build
187        CALL :DO_DIR AC5 CORTEX_M7 %AZRTOS_REPO_DIR%\ports_module\cortex-m7\ac5\example_build
188        CALL :DO_DIR AC5 CORTEX_A7 %AZRTOS_REPO_DIR%\ports_module\cortex-a7\ac5\example_build
189    )
190    IF %FLAG_AC6%==1 (
191        CALL :DO_DIR AC6 CORTEX_M3 %AZRTOS_REPO_DIR%\ports_module\cortex-m3\ac6\example_build
192        CALL :DO_DIR AC6 CORTEX_M4 %AZRTOS_REPO_DIR%\ports_module\cortex-m4\ac6\example_build
193        CALL :DO_DIR AC6 CORTEX_M7 %AZRTOS_REPO_DIR%\ports_module\cortex-m7\ac6\example_build
194        CALL :DO_DIR AC6 CORTEX_R4 %AZRTOS_REPO_DIR%\ports_module\cortex-r4\ac6\example_build
195    )
196    IF %FLAG_KUV%==1 (
197        CALL :DO_DIR KUV CORTEX_M4 %AZRTOS_REPO_DIR%\ports_module\cortex-m4\keil\example_build
198    )
199    IF %FLAG_GNU%==1 (
200        CALL :DO_DIR GNU CORTEX_M3 %AZRTOS_REPO_DIR%\ports_module\cortex-m3\gnu\example_build
201        CALL :DO_DIR GNU CORTEX_M4 %AZRTOS_REPO_DIR%\ports_module\cortex-m4\gnu\example_build
202        CALL :DO_DIR GNU CORTEX_M7 %AZRTOS_REPO_DIR%\ports_module\cortex-m7\gnu\example_build
203    )
204)
205CALL :DBG_MSG "All operations called."
206
207CALL :DBG_MSG "Printing results."
208CALL :OUT_MSG "INFO: %FLAG_DO_WHAT% results:"
209CALL :OUT_MSG "INFO: %DIR_COUNT% total."
210CALL :OUT_MSG "INFO: %DIR_SUCCESS_COUNT% completed successfully."
211IF "%DIR_ERROR_COUNT%" NEQ "0" CALL :OUT_MSG "ERROR: %DIR_ERROR_COUNT% failed."
212CALL :OUT_MSG "INFO: Ending %FLAG_DO_WHAT% on %DATE% at %TIME%."
213EXIT /B 0
214
215
216:PRINT_USAGE_AND_EXIT
217ECHO.
218ECHO Usage:
219ECHO %SCRIPT_NAME% {build^|clean^|test} {tx^|txm} [[group] [[group] [...]]]
220ECHO Performs the selected operation on ThreadX or ThreadX Modules examples in one or more groups,
221ECHO where group is one of the following:
222ECHO ALL -- ALL examples
223ECHO IAR -- IAR Embedded Workbench examples
224ECHO GHS -- Green Hills Software examples
225ECHO AC5 -- ARM Developer Studio 5 examples
226ECHO AC6 -- ARM Developer Studio 6 examples
227ECHO KUV -- KEIL uVision
228ECHO GNU -- GNU Compiler Collection
229ECHO If no parameters are passed usage information is displayed.
230ECHO Outputs a report to standard output.
231ECHO Creates a log file with all output.
232ECHO.
233EXIT /B 0
234
235
236:SETENV_ERROR
237CALL :OUT_MSG "ERROR: failed to set the environment"
238EXIT 1
239
240
241:DO_DIR
242SET "CURRENT_TOOLCHAIN=%~1"
243SET "CURRENT_PLATFORM=%~2"
244SET "CURRENT_DIRECTORY=%~3"
245CALL :DBG_MSG "CURRENT_DIRECTORY: %CURRENT_DIRECTORY%"
246IF NOT EXIST %CURRENT_DIRECTORY% (
247    EXIT /B 1
248    CALL :OUT_MSG "ERROR: Directory doesn't exist: CURRENT_DIRECTORY"
249)
250PUSHD %CURRENT_DIRECTORY%
251IF /I "%FLAG_DO_WHAT%" EQU "BUILD" SET CURRENT_SCRIPT=%AZRTOS_REPO_DIR%\test\azrtos_build_%FLAG_DO_WHICH%_%CURRENT_TOOLCHAIN%.bat
252IF /I "%FLAG_DO_WHAT%" EQU "CLEAN" SET CURRENT_SCRIPT=%AZRTOS_REPO_DIR%\test\azrtos_clean_%FLAG_DO_WHICH%_%CURRENT_TOOLCHAIN%.bat
253IF /I "%FLAG_DO_WHAT%" EQU "TEST" SET CURRENT_SCRIPT=%AZRTOS_REPO_DIR%\test\azrtos_test_%FLAG_DO_WHICH%_%CURRENT_TOOLCHAIN%_%CURRENT_PLATFORM%.bat
254IF DEFINED DEBUG ECHO DEBUG: %CURRENT_SCRIPT%
255IF NOT EXIST %CURRENT_SCRIPT% (
256    CALL :OUT_MSG "ERROR: script does not exist: %CURRENT_SCRIPT%"
257) ELSE (
258    CALL :OUT_MSG "INFO: STARTING: %FLAG_DO_WHAT%: %CD% - %DATE% %TIME%"
259    SET /A DIR_COUNT+=1
260    CALL %CURRENT_SCRIPT% >> %LOGFILE% 2>&1
261    IF %ERRORLEVEL% EQU 0 (
262        CALL :OUT_MSG "INFO: SUCCESS:  %FLAG_DO_WHAT%: %CD% - %DATE% %TIME%"
263        SET /A DIR_SUCCESS_COUNT+=1
264    ) ELSE (
265        CALL :OUT_MSG "ERROR:          %FLAG_DO_WHAT%: %CD% - %DATE% %TIME%"
266        SET /A DIR_ERROR_COUNT+=1
267    )
268    POPD
269)
270EXIT /B 0
271
272
273:DBG_MSG
274IF DEFINED AZRTOS_DEBUG (ECHO DEBUG: %~1)
275EXIT /B 0
276
277
278:OUT_MSG
279ECHO %~1
280IF DEFINED LOGFILE (ECHO %~1 > %LOGFILE%)
281EXIT /B 0
282