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