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