@@ -21,6 +21,11 @@ if [%ERRORLEVEL%] neq [0] (
2121)
2222exit /b 0
2323
24+ REM # Silently check if command is available (for fallback logic)
25+ :check_command_silent
26+ where %1 >nul 2>&1
27+ exit /b %ERRORLEVEL%
28+
2429:entry
2530
2631REM # Initialise GNU toolchain list
@@ -53,8 +58,7 @@ REM # Check dependencies
5358
5459call :check_command cmake 90
5560if [%ERRORLEVEL%] neq [0] goto end
56- call :check_command wget 91
57- if [%ERRORLEVEL%] neq [0] goto end
61+
5862call :check_command 7z 92
5963if [%ERRORLEVEL%] neq [0] goto end
6064
@@ -81,6 +85,17 @@ if /i [%1] equ [/t] (
8185 )
8286 set DO_GNU_TOOLCHAIN=y
8387 shift
88+ ) else if /i [%1] equ [/dl] (
89+ if /i [%2] equ [curl] (
90+ set DL_FORCE=curl
91+ ) else if /i [%2] equ [wget] (
92+ set DL_FORCE=wget
93+ ) else (
94+ echo ERROR: /dl expects ^<curl^|wget^>
95+ set EXITCODE=3
96+ goto end
97+ )
98+ shift
8499) else if /i [%1] equ [/l] (
85100 set DO_LLVM_TOOLCHAIN=y
86101) else if /i [%1] equ [/h] (
@@ -144,7 +159,71 @@ if [%ERRORLEVEL%] equ [1] set DO_CMAKE_PKG=y
144159
145160echo.
146161
162+ REM # Download helper
163+ REM # usage: call :download URL OUTFILE
164+ :download
165+ setlocal ENABLEDELAYEDEXPANSION
166+ set _URL=%~1
167+ set _OUT=%~2
168+
169+ if /i [%DL_TOOL%] equ [wget] (
170+ REM Emulate quiet+progress+timestamping:
171+ wget -q --show-progress -N -O "!_OUT!" "!_URL!"
172+ endlocal & exit /b %ERRORLEVEL%
173+ ) else (
174+ REM curl: -f fail on HTTP errors; -L follow redirects
175+ REM --remote-time preserves Last-Modified on the file
176+ REM -z OUTFILE does conditional GET (only download if newer)
177+ REM Replace the --progress-bar with an -sS to make it quiet if needed
178+ if exist "!_OUT!" (
179+ curl.exe -fL --retry 5 --retry-delay 2 --progress-bar --remote-time -z "!_OUT!" -o "!_OUT!" "!_URL!"
180+ ) else (
181+ curl.exe -fL --retry 5 --retry-delay 2 --progress-bar --remote-time -o "!_OUT!" "!_URL!"
182+ )
183+ endlocal & exit /b %ERRORLEVEL%
184+ )
185+
147186:process
187+ REM # Choose downloader (default: wget; fallback to curl). Allow /dl override.
188+ set DL_TOOL=
189+
190+ if /i [%DL_FORCE%] equ [curl] (
191+ call :check_command curl 91
192+ if [!ERRORLEVEL!] equ [0] (
193+ set DL_TOOL=curl
194+ ) else (
195+ echo ERROR: /dl curl requested but 'curl' not found in PATH.
196+ set EXITCODE=91
197+ goto end
198+ )
199+ ) else if /i [%DL_FORCE%] equ [wget] (
200+ call :check_command wget 91
201+ if [!ERRORLEVEL!] equ [0] (
202+ set DL_TOOL=wget
203+ ) else (
204+ echo ERROR: /dl wget requested but 'wget' not found in PATH.
205+ set EXITCODE=91
206+ goto end
207+ )
208+ ) else (
209+ REM Default behavior: prefer wget, else curl
210+ call :check_command_silent wget
211+ if [!ERRORLEVEL!] equ [0] (
212+ set DL_TOOL=wget
213+ ) else (
214+ call :check_command_silent curl
215+ if [!ERRORLEVEL!] equ [0] (
216+ set DL_TOOL=curl
217+ )
218+ )
219+ )
220+
221+ if [%DL_TOOL%] equ [] (
222+ echo Zephyr SDK setup requires either 'wget' or 'curl' in PATH.
223+ set EXITCODE=91
224+ goto end
225+ )
226+
148227REM # Install GNU toolchains
149228if [%DO_GNU_TOOLCHAIN%] neq [] (
150229 if not exist gnu\ mkdir gnu
@@ -158,7 +237,7 @@ if [%DO_GNU_TOOLCHAIN%] neq [] (
158237 echo Installing '%%t' GNU toolchain ...
159238
160239 REM # Download toolchain archive
161- wget -q --show-progress -N -O !TOOLCHAIN_FILENAME ! !TOOLCHAIN_URI !
240+ call :download !TOOLCHAIN_URI ! !TOOLCHAIN_FILENAME !
162241 if [!ERRORLEVEL!] neq [0] (
163242 del /q !TOOLCHAIN_FILENAME!
164243 echo ERROR: GNU toolchain download failed
@@ -190,7 +269,7 @@ if [%DO_LLVM_TOOLCHAIN%] neq [] (
190269 set TOOLCHAIN_URI=%DL_REL_BASE%/!TOOLCHAIN_FILENAME!
191270
192271 REM # Download toolchain archive
193- wget -q --show-progress -N -O !TOOLCHAIN_FILENAME ! !TOOLCHAIN_URI !
272+ call :download !TOOLCHAIN_URI ! !TOOLCHAIN_FILENAME !
194273 if [!ERRORLEVEL!] neq [0] (
195274 del /q !TOOLCHAIN_FILENAME!
196275 echo ERROR: LLVM toolchain download failed
@@ -243,6 +322,7 @@ echo all Install all GNU toolchains
243322echo /l Install LLVM toolchain
244323echo /h Install host tools
245324echo /c Register Zephyr SDK CMake package
325+ echo /dl ^<curl^|wget^> Force downloader (default: wget, fallback to curl)
246326echo.
247327echo Supported GNU Toolchains:
248328echo.
0 commit comments