blob: 849357fcc016e5d09c5d61623b9ef037d6f7f294 [file] [log] [blame]
lh9ed821d2023-04-07 01:36:19 -07001@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