1@echo off 2rem *************************************************************************** 3rem * _ _ ____ _ 4rem * Project ___| | | | _ \| | 5rem * / __| | | | |_) | | 6rem * | (__| |_| | _ <| |___ 7rem * \___|\___/|_| \_\_____| 8rem * 9rem * Copyright (C) Steve Holme, <steve_holme@hotmail.com>. 10rem * Copyright (C) Jay Satiro, <raysatiro@yahoo.com>. 11rem * 12rem * This software is licensed as described in the file COPYING, which 13rem * you should have received as part of this distribution. The terms 14rem * are also available at https://curl.se/docs/copyright.html. 15rem * 16rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell 17rem * copies of the Software, and permit persons to whom the Software is 18rem * furnished to do so, under the terms of the COPYING file. 19rem * 20rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 21rem * KIND, either express or implied. 22rem * 23rem * SPDX-License-Identifier: curl 24rem * 25rem *************************************************************************** 26 27:begin 28 rem Check we are running on a Windows NT derived OS 29 if not "%OS%" == "Windows_NT" goto nodos 30 31 rem Set our variables 32 setlocal 33 set SUCCESSFUL_BUILDS= 34 set VC_VER= 35 set BUILD_PLATFORM= 36 set DEFAULT_START_DIR=..\..\wolfssl 37 38 rem Calculate the program files directory 39 if defined PROGRAMFILES ( 40 set "PF=%PROGRAMFILES%" 41 set OS_PLATFORM=x86 42 ) 43 if defined PROGRAMFILES(x86) ( 44 rem Visual Studio was x86-only prior to 14.3 45 if /i "%~1" == "vc14.3" ( 46 set "PF=%PROGRAMFILES%" 47 ) else ( 48 set "PF=%PROGRAMFILES(x86)%" 49 ) 50 set OS_PLATFORM=x64 51 ) 52 53 rem Ensure we have the required arguments 54 if /i "%~1" == "" goto syntax 55 56:parseArgs 57 if "%~1" == "" goto prerequisites 58 59 if /i "%~1" == "vc10" ( 60 set VC_VER=10.0 61 set VC_DESC=VC10 62 set VC_TOOLSET=v100 63 set "VC_PATH=Microsoft Visual Studio 10.0\VC" 64 ) else if /i "%~1" == "vc11" ( 65 set VC_VER=11.0 66 set VC_DESC=VC11 67 set VC_TOOLSET=v110 68 set "VC_PATH=Microsoft Visual Studio 11.0\VC" 69 ) else if /i "%~1" == "vc12" ( 70 set VC_VER=12.0 71 set VC_DESC=VC12 72 set VC_TOOLSET=v120 73 set "VC_PATH=Microsoft Visual Studio 12.0\VC" 74 ) else if /i "%~1" == "vc14" ( 75 set VC_VER=14.0 76 set VC_DESC=VC14 77 set VC_TOOLSET=v140 78 set "VC_PATH=Microsoft Visual Studio 14.0\VC" 79 ) else if /i "%~1" == "vc14.1" ( 80 set VC_VER=14.1 81 set VC_DESC=VC14.10 82 set VC_TOOLSET=v141 83 84 rem Determine the VC14.1 path based on the installed edition in descending 85 rem order (Enterprise, then Professional and finally Community) 86 if exist "%PF%\Microsoft Visual Studio\2017\Enterprise\VC" ( 87 set "VC_PATH=Microsoft Visual Studio\2017\Enterprise\VC" 88 ) else if exist "%PF%\Microsoft Visual Studio\2017\Professional\VC" ( 89 set "VC_PATH=Microsoft Visual Studio\2017\Professional\VC" 90 ) else ( 91 set "VC_PATH=Microsoft Visual Studio\2017\Community\VC" 92 ) 93 ) else if /i "%~1" == "vc14.2" ( 94 set VC_VER=14.2 95 set VC_DESC=VC14.20 96 set VC_TOOLSET=v142 97 98 rem Determine the VC14.2 path based on the installed edition in descending 99 rem order (Enterprise, then Professional and finally Community) 100 if exist "%PF%\Microsoft Visual Studio\2019\Enterprise\VC" ( 101 set "VC_PATH=Microsoft Visual Studio\2019\Enterprise\VC" 102 ) else if exist "%PF%\Microsoft Visual Studio\2019\Professional\VC" ( 103 set "VC_PATH=Microsoft Visual Studio\2019\Professional\VC" 104 ) else ( 105 set "VC_PATH=Microsoft Visual Studio\2019\Community\VC" 106 ) 107 ) else if /i "%~1" == "vc14.3" ( 108 set VC_VER=14.3 109 set VC_DESC=VC14.30 110 set VC_TOOLSET=v143 111 112 rem Determine the VC14.3 path based on the installed edition in descending 113 rem order (Enterprise, then Professional and finally Community) 114 if exist "%PF%\Microsoft Visual Studio\2022\Enterprise\VC" ( 115 set "VC_PATH=Microsoft Visual Studio\2022\Enterprise\VC" 116 ) else if exist "%PF%\Microsoft Visual Studio\2022\Professional\VC" ( 117 set "VC_PATH=Microsoft Visual Studio\2022\Professional\VC" 118 ) else ( 119 set "VC_PATH=Microsoft Visual Studio\2022\Community\VC" 120 ) 121 ) else if /i "%~1" == "x86" ( 122 set BUILD_PLATFORM=x86 123 ) else if /i "%~1" == "x64" ( 124 set BUILD_PLATFORM=x64 125 ) else if /i "%~1" == "debug" ( 126 set BUILD_CONFIG=debug 127 ) else if /i "%~1" == "release" ( 128 set BUILD_CONFIG=release 129 ) else if /i "%~1" == "-?" ( 130 goto syntax 131 ) else if /i "%~1" == "-h" ( 132 goto syntax 133 ) else if /i "%~1" == "-help" ( 134 goto syntax 135 ) else ( 136 if not defined START_DIR ( 137 set START_DIR=%~1 138 ) else ( 139 goto unknown 140 ) 141 ) 142 143 shift & goto parseArgs 144 145:prerequisites 146 rem Compiler is a required parameter 147 if not defined VC_VER goto syntax 148 149 rem Default the start directory if one isn't specified 150 if not defined START_DIR set "START_DIR=%DEFAULT_START_DIR%" 151 152 rem Check we have a program files directory 153 if not defined PF goto nopf 154 155 rem Check we have Visual Studio installed 156 if not exist "%PF%\%VC_PATH%" goto novc 157 158 rem Check the start directory exists 159 if not exist "%START_DIR%" goto nowolfssl 160 161:configure 162 if "%BUILD_PLATFORM%" == "" set BUILD_PLATFORM=%OS_PLATFORM% 163 164 if "%BUILD_PLATFORM%" == "x86" ( 165 set VCVARS_PLATFORM=x86 166 ) else if "%BUILD_PLATFORM%" == "x64" ( 167 if "%VC_VER%" == "10.0" set VCVARS_PLATFORM=%BUILD_PLATFORM% 168 if "%VC_VER%" == "11.0" set VCVARS_PLATFORM=amd64 169 if "%VC_VER%" == "12.0" set VCVARS_PLATFORM=amd64 170 if "%VC_VER%" == "14.0" set VCVARS_PLATFORM=amd64 171 if "%VC_VER%" == "14.1" set VCVARS_PLATFORM=amd64 172 if "%VC_VER%" == "14.2" set VCVARS_PLATFORM=amd64 173 if "%VC_VER%" == "14.3" set VCVARS_PLATFORM=amd64 174 ) 175 176:start 177 echo. 178 set SAVED_PATH=%CD% 179 180 if "%VC_VER%" == "14.1" ( 181 call "%PF%\%VC_PATH%\Auxiliary\Build\vcvarsall" %VCVARS_PLATFORM% 182 ) else if "%VC_VER%" == "14.2" ( 183 call "%PF%\%VC_PATH%\Auxiliary\Build\vcvarsall" %VCVARS_PLATFORM% 184 ) else if "%VC_VER%" == "14.3" ( 185 call "%PF%\%VC_PATH%\Auxiliary\Build\vcvarsall" %VCVARS_PLATFORM% 186 ) else ( 187 call "%PF%\%VC_PATH%\vcvarsall" %VCVARS_PLATFORM% 188 ) 189 190 echo. 191 cd /d %SAVED_PATH% 192 if defined START_DIR cd /d %START_DIR% 193 goto %BUILD_PLATFORM% 194 195:x64 196 rem Calculate our output directory 197 set OUTDIR=build\Win64\%VC_DESC% 198 if not exist %OUTDIR% md %OUTDIR% 199 200 if "%BUILD_CONFIG%" == "release" goto x64release 201 202:x64debug 203 rem Perform 64-bit Debug Build 204 205 call :build Debug x64 206 if errorlevel 1 goto error 207 208 call :build "DLL Debug" x64 209 if errorlevel 1 goto error 210 211 if "%BUILD_CONFIG%" == "debug" goto success 212 213:x64release 214 rem Perform 64-bit Release Build 215 216 call :build Release x64 217 if errorlevel 1 goto error 218 219 call :build "DLL Release" x64 220 if errorlevel 1 goto error 221 222 goto success 223 224:x86 225 rem Calculate our output directory 226 set OUTDIR=build\Win32\%VC_DESC% 227 if not exist %OUTDIR% md %OUTDIR% 228 229 if "%BUILD_CONFIG%" == "release" goto x86release 230 231:x86debug 232 rem Perform 32-bit Debug Build 233 234 call :build Debug Win32 235 if errorlevel 1 goto error 236 237 call :build "DLL Debug" Win32 238 if errorlevel 1 goto error 239 240 if "%BUILD_CONFIG%" == "debug" goto success 241 242:x86release 243 rem Perform 32-bit Release Build 244 245 call :build Release Win32 246 if errorlevel 1 goto error 247 248 call :build "DLL Release" Win32 249 if errorlevel 1 goto error 250 251 goto success 252 253:build 254 rem This function builds wolfSSL. 255 rem Usage: CALL :build <configuration> <platform> 256 rem The current directory must be the wolfSSL directory. 257 rem VS Configuration: Debug, Release, DLL Debug or DLL Release. 258 rem VS Platform: Win32 or x64. 259 rem Returns: 1 on fail, 0 on success. 260 rem An informational message should be shown before any return. 261 setlocal 262 set MSBUILD_CONFIG=%~1 263 set MSBUILD_PLATFORM=%~2 264 265 if not exist wolfssl64.sln ( 266 echo. 267 echo Error: build: wolfssl64.sln not found in "%CD%" 268 exit /b 1 269 ) 270 271 rem OUTDIR isn't a full path, only relative. MSBUILD_OUTDIR must be full and 272 rem not have trailing backslashes, which are handled later. 273 if "%MSBUILD_CONFIG%" == "Debug" ( 274 set "MSBUILD_OUTDIR=%CD%\%OUTDIR%\LIB Debug" 275 ) else if "%MSBUILD_CONFIG%" == "Release" ( 276 set "MSBUILD_OUTDIR=%CD%\%OUTDIR%\LIB Release" 277 ) else if "%MSBUILD_CONFIG%" == "DLL Debug" ( 278 set "MSBUILD_OUTDIR=%CD%\%OUTDIR%\DLL Debug" 279 ) else if "%MSBUILD_CONFIG%" == "DLL Release" ( 280 set "MSBUILD_OUTDIR=%CD%\%OUTDIR%\DLL Release" 281 ) else ( 282 echo. 283 echo Error: build: Configuration not recognized. 284 exit /b 1 285 ) 286 287 if not "%MSBUILD_PLATFORM%" == "Win32" if not "%MSBUILD_PLATFORM%" == "x64" ( 288 echo. 289 echo Error: build: Platform not recognized. 290 exit /b 1 291 ) 292 293 copy /v /y "%~dp0\wolfssl_options.h" .\cyassl\options.h 294 if %ERRORLEVEL% neq 0 ( 295 echo. 296 echo Error: build: Couldn't replace .\cyassl\options.h 297 exit /b 1 298 ) 299 300 copy /v /y "%~dp0\wolfssl_options.h" .\wolfssl\options.h 301 if %ERRORLEVEL% neq 0 ( 302 echo. 303 echo Error: build: Couldn't replace .\wolfssl\options.h 304 exit /b 1 305 ) 306 307 rem Extra trailing \ in Dirs because otherwise it thinks a quote is escaped 308 msbuild wolfssl64.sln ^ 309 -p:CustomAfterMicrosoftCommonTargets="%~dp0\wolfssl_override.props" ^ 310 -p:Configuration="%MSBUILD_CONFIG%" ^ 311 -p:Platform="%MSBUILD_PLATFORM%" ^ 312 -p:PlatformToolset="%VC_TOOLSET%" ^ 313 -p:OutDir="%MSBUILD_OUTDIR%\\" ^ 314 -p:IntDir="%MSBUILD_OUTDIR%\obj\\" 315 316 if %ERRORLEVEL% neq 0 ( 317 echo. 318 echo Error: Failed building wolfSSL %MSBUILD_CONFIG%^|%MSBUILD_PLATFORM%. 319 exit /b 1 320 ) 321 322 rem For tests to run properly the wolfSSL directory must remain the current. 323 set "PATH=%MSBUILD_OUTDIR%;%PATH%" 324 "%MSBUILD_OUTDIR%\testsuite.exe" 325 326 if %ERRORLEVEL% neq 0 ( 327 echo. 328 echo Error: Failed testing wolfSSL %MSBUILD_CONFIG%^|%MSBUILD_PLATFORM%. 329 exit /b 1 330 ) 331 332 echo. 333 echo Success: Built and tested wolfSSL %MSBUILD_CONFIG%^|%MSBUILD_PLATFORM%. 334 echo. 335 echo. 336 rem This is necessary to export our local variables back to the caller. 337 endlocal & set SUCCESSFUL_BUILDS="%MSBUILD_CONFIG%|%MSBUILD_PLATFORM%" ^ 338 %SUCCESSFUL_BUILDS% 339 exit /b 0 340 341:syntax 342 rem Display the help 343 echo. 344 echo Usage: build-wolfssl ^<compiler^> [platform] [configuration] [directory] 345 echo. 346 echo. 347 echo Compiler: 348 echo. 349 echo vc10 - Use Visual Studio 2010 350 echo vc11 - Use Visual Studio 2012 351 echo vc12 - Use Visual Studio 2013 352 echo vc14 - Use Visual Studio 2015 353 echo vc14.1 - Use Visual Studio 2017 354 echo vc14.2 - Use Visual Studio 2019 355 echo vc14.3 - Use Visual Studio 2022 356 echo. 357 echo. 358 echo Platform: 359 echo. 360 echo x86 - Perform a 32-bit build 361 echo x64 - Perform a 64-bit build 362 echo. 363 echo If this parameter is unset the OS platform is used ^(%OS_PLATFORM%^). 364 echo. 365 echo. 366 echo Configuration: 367 echo. 368 echo debug - Perform a debug build 369 echo release - Perform a release build 370 echo. 371 echo If this parameter is unset both configurations are built. 372 echo. 373 echo. 374 echo Other: 375 echo. 376 echo directory - Specifies the wolfSSL source directory 377 echo. 378 echo If this parameter is unset the directory used is "%DEFAULT_START_DIR%". 379 echo. 380 goto error 381 382:unknown 383 echo. 384 echo Error: Unknown argument '%1' 385 goto error 386 387:nodos 388 echo. 389 echo Error: Only a Windows NT based Operating System is supported 390 goto error 391 392:nopf 393 echo. 394 echo Error: Cannot obtain the directory for Program Files 395 goto error 396 397:novc 398 echo. 399 echo Error: %VC_DESC% is not installed 400 goto error 401 402:nox64 403 echo. 404 echo Error: %VC_DESC% does not support 64-bit builds 405 goto error 406 407:nowolfssl 408 echo. 409 echo Error: Cannot locate wolfSSL source directory, expected "%START_DIR%" 410 goto error 411 412:error 413 if "%OS%" == "Windows_NT" endlocal 414 exit /B 1 415 416:success 417 if defined SUCCESSFUL_BUILDS ( 418 echo. 419 echo. 420 echo Build complete. 421 echo. 422 echo The following configurations were built and tested successfully: 423 echo. 424 echo %SUCCESSFUL_BUILDS% 425 echo. 426 ) 427 cd /d %SAVED_PATH% 428 endlocal 429 exit /B 0 430