@@ -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