e0d137c8b3e3e7763988c790ab35d300a3b29119
[mirror/winof/.git] / WinOF / BuildRelease.bat
1 @echo off\r
2 setlocal\r
3 rem\r
4 rem EXAMPLE - Build entire openIB-windows release & WIX installers (.msi) files.\r
5 rem           Binary release is constructed in WinOF\Wix\OS\bin.\r
6 rem           Processor architecture specific WIX installers are constructed\r
7 rem           in %IDIR%\r
8 rem\r
9 rem BuildRelease option\r
10 rem  option == all | allnoforce | compile | compilenoforce | makebin | msi |\r
11 rem            sign | wix | clean | msi-label | msi-del | msi-dir {OPENIB_REV}\r
12 \r
13 rem This script is an 'example' of a one-command entire IB stack build to\r
14 rem single-file installer; used to build a WinOF releases.\r
15 rem Script is designed to be invoked from the <whatever>\gen1\trunk folder with\r
16 rem <whatever>\gen1\trunk\WinOF\Wix\* present.\r
17 rem\r
18 rem Verify the following env vars are suitible for your system configuration.\r
19 rem     _DDK, _PSDK, SVN, IDIR\r
20 \r
21 if "%1" == "" goto usage\r
22 if "%1" == "/?" goto usage\r
23 if "%1" == "-h" goto usage\r
24 if "%1" == "all" goto OK\r
25 if "%1" == "allnoforce" goto OK\r
26 if "%1" == "compile" goto OK\r
27 if "%1" == "compilenoforce" goto OK\r
28 if "%1" == "makebin" goto OK\r
29 if "%1" == "msi" goto OK\r
30 if "%1" == "sign" goto OK\r
31 if "%1" == "wix" goto OK\r
32 if "%1" == "clean" goto OK\r
33 if "%1" == "msi-label" goto OK\r
34 if "%1" == "msi-del" goto OK\r
35 if "%1" == "msi-dir" goto OK\r
36 \r
37 echo Unknown arg '%1' ?\r
38 \r
39 :usage\r
40 \r
41 echo "usage: BuildRelease command {OPENIB_REV value}"\r
42 echo where 'command' may be:\r
43 echo    all - force recompile, install binaries to WIX tree, sign drivers and\r
44 echo          build installers.\r
45 \r
46 echo    allnoforce - recompile only if needed, install binaries to WIX tree,\r
47 echo                 sign drivers and build installers.\r
48 echo    compile - force a recompile/link of everything then exit.\r
49 echo    compilenoforce - recompile/link only if needed then exit.\r
50 echo    makebin - assumes binaries are built, will installs binaries to WIX tree\r
51 echo              then exit.\r
52 echo    msi - assumes binaries are installed in WIX tree, signs drivers and\r
53 echo          create installers (.msi files) in IDIR.\r
54 echo    sign - assumes binaries are built and installed, sign drivers, exit.\r
55 echo    wix - build .msi installers, assumes (drivers signed) .cat files exist\r
56 echo    clean - remove build artifacts for a clean build: .obj, .sys, ...\r
57 echo    msi-label {OPENIB_REV}\r
58 echo           rename WOF_os*_arch*.msi to WOF_os*_arch*_svn#.msi \r
59 echo           Uniquely identify installers just created.\r
60 echo           If OPENIB_REV arg used, then rename WOF_os*_arch*argVal.msi\r
61 echo           otherwise, use SVN# from path.\r
62 echo    msi-del - del %windir%\temp\WOF_os*_arch*.msi\r
63 echo    msi-dir - del %windir%\temp\WOF_os*_arch*.msi\r
64 echo :\r
65 echo    {OPENIB_REV}\r
66 echo       optional, if set then OPENIB_REV is assigned this value.\r
67 echo            example: BuildRelease all 1414\r
68 \r
69 exit /B 1 \r
70 \r
71 :OK\r
72 \r
73 if not "%WDM_INC_PATH%" == "" (\r
74     echo %0: Error - %0 unable to run from WDK window,\r
75     echo     use %comspec%\r
76     exit /B 1\r
77 )\r
78 \r
79 rem assumes %CD% == '<...>\gen1\trunk'\r
80 set BSE=%CD%\r
81 set WIX=%CD%\WinOF\WIX\r
82 \r
83 rem Use Wix V2 binaries.\r
84 rem set WIX_BIN=wix-2.0.5325.0-binaries\r
85 set WIX_BIN=wix-2.0.5805.0-binaries\r
86 \r
87 set RBIN_WLH=%WIX%\wlh\bin%\r
88 set RBIN_WNET=%WIX%\wnet\bin%\r
89 set RBIN_WXP=%WIX%\wxp\bin%\r
90 \r
91 rem remove build artifacts\r
92 if "%1" == "clean" (\r
93     echo Removing build artifacts and folders...\r
94     call %CD%\etc\clean-build.bat\r
95     if exist %WIX%\wlh\bin (\r
96                 echo Removing %WIX%\wlh\bin\r
97                 rmdir /Q /S %WIX%\wlh\bin\r
98     )\r
99     if exist %WIX%\wnet\bin (\r
100                 echo Removing %WIX%\wnet\bin\r
101                 rmdir /Q /S %WIX%\wnet\bin\r
102     )\r
103     if exist %WIX%\wxp\bin (\r
104                 echo Removing %WIX%\wxp\bin\r
105                 rmdir /Q /S %WIX%\wxp\bin\r
106     )\r
107     exit /B 0\r
108 )\r
109 \r
110 rem Driver Signing Certificate filename, assumes %WIX%\%CERTFILE% is valid.\r
111 rem set CERTFILE=noCert\r
112 set CERTFILE=MSCV-VSClass3.cer\r
113 set SW_PUBLISHER="OpenFabrics Alliance"\r
114 \r
115 rem A Digital driver signing certificate store name may be required.\r
116 \r
117 if "%1" == "all" goto chk_cert\r
118 if "%1" == "msi" goto chk_cert\r
119 if "%1" == "sign" goto chk_cert\r
120 \r
121 goto cert_OK\r
122 \r
123 :chk_cert\r
124     if "%CERTFILE%" == "noCert" set /P CERTFILE=[Enter Certificate FileName] \r
125     if "%CERTFILE%" == "" (\r
126         echo %0\r
127         echo %0: Err - driver signing certificate filename required.\r
128         echo %0: see certmgr.exe\r
129         exit /B 1\r
130     )\r
131 )\r
132 \r
133 :cert_OK\r
134 \r
135 rem Use this WDK\r
136 \r
137 set _DDK=%SystemDrive%\WinDDK\6001.18001\r
138 \r
139 if NOT EXIST %_DDK% (\r
140     echo Missing WDK @ %_DDK%\r
141     exit /B 1\r
142 )\r
143 \r
144 rem Platform SDK path - watchout for missing LoadPerf.h (installsp.c)\r
145 set _PSDK=%SystemDrive%\progra~1\mi2578~1\r
146 \r
147 rem set this to be the current svn commit number; overrides svn in path\r
148 rem processing. Additionally if set to 'latest' code expects ..\..\..\latest.txt\r
149 rem to contain the SVN number to use.\r
150 rem set USE_SVN=1748\r
151 set USE_SVN=latest\r
152 \r
153 rem setup value for OPENIB_REV assignment.\r
154 if "%2" == "" (\r
155     rem Determine SVN value from current path.\r
156     rem WARNING - SVN value depends on the path '\openIB-windows-svn\XXX\gen1',\r
157     rem where SVN is set to XXX\r
158     rem  substring[23rd...26th] chars (offset counting) == xxxx\r
159     rem Note - OPENIB_REV is assigned SVN in a child script.\r
160 \r
161     if "%USE_SVN%" == "" (\r
162         set SVN=%CD:~22,4%\r
163     ) else (\r
164         if "%USE_SVN%" == "latest" (\r
165 rem                     set /P SVN=<F:\openIB-windows-svn\latest.txt\r
166                         set /P SVN=< ..\..\..\latest.txt\r
167                 ) else (\r
168                         set SVN=%USE_SVN%\r
169                 )\r
170     )\r
171     set LBL=_svn.!SVN!\r
172 ) else (\r
173     set SVN=%2\r
174     set LBL=%2\r
175 )\r
176 \r
177 if NOT EXIST "%WIX%\build-all-MSI.bat" (\r
178     echo %0 - Missing .msi installer build script\r
179     echo    %WIX%\build-all-MSI.bat\r
180     exit /B 1\r
181 )\r
182 \r
183 rem WIX Installer files (.msi) destination folder - set for local environment.\r
184 set IDIR=%SystemRoot%\temp\r
185 \r
186 if "%1" == "msi-label" (\r
187     pushd %IDIR%\r
188     if exist WOF_wxp_x86.msi (\r
189         if exist WOF_wxp_x86%LBL%.msi del /F/Q WOF_wxp_x86%LBL%.msi\r
190         rename WOF_wxp_x86.msi WOF_wxp_x86%LBL%.msi\r
191     )\r
192 \r
193     if exist WOF_wnet_x86.msi (\r
194         if exist WOF_wnet_x86%LBL%.msi del /F/Q WOF_wnet_x86%LBL%.msi\r
195         rename WOF_wnet_x86.msi WOF_wnet_x86%LBL%.msi\r
196     )\r
197     if exist WOF_wnet_x64.msi (\r
198         if exist WOF_wnet_x64%LBL%.msi del /F/Q WOF_wnet_x64%LBL%.msi\r
199         rename WOF_wnet_x64.msi WOF_wnet_x64%LBL%.msi\r
200     )\r
201     if exist WOF_wnet_ia64.msi (\r
202        if exist WOF_wnet_ia64%LBL%.msi del /F/Q WOF_wnet_ia64%LBL%.msi\r
203        rename WOF_wnet_ia64.msi WOF_wnet_ia64%LBL%.msi\r
204     )\r
205 \r
206     if exist WOF_wlh_x86.msi (\r
207         if exist WOF_wlh_x86%LBL%.msi del /F/Q WOF_wlh_x86%LBL%.msi\r
208         rename WOF_wlh_x86.msi WOF_wlh_x86%LBL%.msi\r
209     )\r
210     if exist WOF_wlh_x64.msi  (\r
211         if exist WOF_wlh_x64%LBL%.msi del /F/Q WOF_wlh_x64%LBL%.msi\r
212         rename WOF_wlh_x64.msi WOF_wlh_x64%LBL%.msi\r
213     )\r
214     if exist WOF_wlh_ia64.msi  (\r
215         if exist WOF_wlh_ia64%LBL%.msi del /F/Q WOF_wlh_ia64%LBL%.msi\r
216         rename WOF_wlh_ia64.msi WOF_wlh_ia64%LBL%.msi\r
217     )\r
218     dir WOF_*%LBL%.msi\r
219     popd\r
220     exit /B 0\r
221 )\r
222 \r
223 if "%1" == "msi-del" (\r
224     echo Deleting WOF_{wxp,wnet,wlh}_{x86,x64,ia64}%LBL%.msi\r
225     pushd %IDIR%\r
226     if exist WOF_wxp_x86%LBL%.msi del /F/P WOF_wxp_x86%LBL%.msi\r
227 \r
228     if exist WOF_wnet_x86%LBL%.msi del /F/P WOF_wnet_x86%LBL%.msi\r
229     if exist WOF_wnet_x64%LBL%.msi del /F/P WOF_wnet_x64%LBL%.msi\r
230     if exist WOF_wnet_ia64%LBL%.msi del /F/P WOF_wnet_ia64%LBL%.msi\r
231 \r
232     if exist WOF_wlh_x86%LBL%.msi del /F/P WOF_wlh_x86%LBL%.msi\r
233     if exist WOF_wlh_x64%LBL%.msi del /F/P WOF_wlh_x64%LBL%.msi\r
234     if exist WOF_wlh_ia64%LBL%.msi del /F/P WOF_wlh_ia64%LBL%.msi\r
235 \r
236     dir /N/OD WOF_*.msi\r
237     popd\r
238     exit /B 0\r
239 )\r
240 \r
241 if "%1" == "msi-dir" (\r
242     pushd %IDIR%\r
243     dir /N/OD WOF_*.msi\r
244     popd\r
245     exit /B 0\r
246 )\r
247 \r
248 echo %0 - Building with WDK @ %_DDK%\r
249 echo Building for OPENIB_REV %SVN%, installer files (.msi) @ %IDIR%\r
250 echo   Drivers signed using Certificate '%CERTFILE%'\r
251 \r
252 rem pause thoughtfully.\r
253 if exist %windir%\system32\timeout.exe (\r
254     timeout /T 10\r
255 ) else (\r
256     pause\r
257 )\r
258 \r
259 if NOT EXIST "%IDIR%" (\r
260     echo %0 - Missing Installer file destination folder\r
261         echo %0     %IDIR%\r
262     exit /B 1\r
263 )\r
264 \r
265 rem Verify WIX 2.0 toolset is available - if not, download from\r
266 rem http://sourceforge.net/project/showfiles.php?group_id=105970&package_id=114109\r
267 rem   select wix-2.0.5805.0-binaries.zip download and unzip to\r
268 rem   <...>\gen1\trunk\WinOF\WIX\WIX_tools\\r
269 rem\r
270 if NOT EXIST %WIX%\WIX_tools\%WIX_BIN% (\r
271     echo %0 - Missing WIX tools @ %WIX%\WIX_tools\%WIX_BIN% \r
272     exit /B 1\r
273 )\r
274 \r
275 if NOT EXIST etc\makebin.bat (\r
276     echo %0 - Missing etc\makebin.bat, script must run from gen1\trunk\r
277     exit /B 1\r
278 )\r
279 set STIME=%TIME%\r
280 \r
281 rem skip build - assumes binaries already built and installed.\r
282 \r
283 if "%1" == "wix" (\r
284     set MSI_CMD=msi\r
285     goto mk_msi\r
286 )\r
287 \r
288 if "%1" == "makebin" goto InstallBin\r
289 \r
290 rem poor man's OR\r
291 if "%1" == "sign" (\r
292     set MSI_CMD=%1\r
293     goto do_msi_chk\r
294 ) else (\r
295     set MSI_CMD=all\r
296 )\r
297 if "%1" == "msi" goto do_msi_chk\r
298 goto compile\r
299 \r
300 :do_msi_chk\r
301 \r
302 rem make sure building a msi has files to work with.\r
303 if not EXIST "%RBIN_WLH%"  goto InstallBin\r
304 if not EXIST "%RBIN_WNET%" goto InstallBin\r
305 if not EXIST "%RBIN_WXP%"  goto InstallBin\r
306 goto mk_msi\r
307 \r
308 :compile\r
309 \r
310 set OPS=-wgcPM 3\r
311 if "%1" == "allnoforce" (\r
312     rem Compile everything only if needed.\r
313     set OPS=-wgPM 3\r
314 )\r
315 if "%1" == "compilenoforce" (\r
316     rem Compile everything only if needed.\r
317     set OPS=-wgPM 3\r
318 )\r
319 \r
320 if "%1" == "all" (\r
321     echo Removing build artifacts and folders...\r
322     call %CD%\etc\clean-build.bat\r
323     if exist %WIX%\wlh\bin (\r
324                 echo Removing %WIX%\wlh\bin\r
325                 rmdir /Q /S %WIX%\wlh\bin\r
326     )\r
327     if exist %WIX%\wnet\bin (\r
328                 echo Removing %WIX%\wnet\bin\r
329                 rmdir /Q /S %WIX%\wnet\bin\r
330     )\r
331     if exist %WIX%\wxp\bin (\r
332                 echo Removing %WIX%\wxp\bin\r
333                 rmdir /Q /S %WIX%\wxp\bin\r
334     )\r
335 )\r
336 \r
337 rem ************ Setup Env for Building \r
338 \r
339 set WDK_PATH=%_DDK%\r
340 set WINOF_PATH=%CD%\r
341 set OPENIB_REV=%SVN%\r
342 set PLATFORM_SDK_PATH=%_PSDK%\r
343 \r
344 rem ********* Compile for WLH - Windows Server 2008 & Vista\r
345 rem WLH x64\r
346 echo %0 - Build WLH x64 Checked\r
347 %COMSPEC% /C "call %BSE%\etc\bldwo.bat chk x64 2008 %OPS%"\r
348 if ERRORLEVEL 1 exit /B 1\r
349 echo %0 - Build WLH x64 Free\r
350 %COMSPEC% /C "call %BSE%\etc\bldwo.bat fre x64 2008 %OPS%"\r
351 if ERRORLEVEL 1 exit /B 1\r
352 \r
353 rem WLH x86\r
354 \r
355 echo %0 - Build WLH x86 Checked\r
356 %COMSPEC% /C "call %BSE%\etc\bldwo.bat chk x86 2008 %OPS%"\r
357 if ERRORLEVEL 1 exit /B 1\r
358 echo %0 - Build WLH x86 Free\r
359 %COMSPEC% /C "call %BSE%\etc\bldwo.bat fre x86 2008 %OPS%"\r
360 if ERRORLEVEL 1 exit /B 1\r
361 \r
362 rem WLH ia64\r
363 echo %0 - Build WLH ia64 Checked\r
364 %COMSPEC% /C "call %BSE%\etc\bldwo.bat chk ia64 2008 %OPS%"\r
365 if ERRORLEVEL 1 exit /B 1\r
366 echo %0 - Build WLH ia64 Free\r
367 %COMSPEC% /C "call %BSE%\etc\bldwo.bat fre ia64 2008 %OPS%"\r
368 if ERRORLEVEL 1 exit /B 1\r
369 \r
370 \r
371 rem ********* WXP - Windows XP - x86 only\r
372 \r
373 echo %0 - Build XP x86 Checked\r
374 %COMSPEC% /C "call %BSE%\etc\bldwo.bat chk x86 xp %OPS%"\r
375 if ERRORLEVEL 1 exit /B 1\r
376 \r
377 echo %0 - Build XP x86 Free\r
378 %COMSPEC% /C "call %BSE%\etc\bldwo.bat fre x86 xp %OPS%"\r
379 if ERRORLEVEL 1 exit /B 1\r
380 \r
381 \r
382 rem ********* WNET - Windows Server 2003\r
383 echo %0 - Build WNET x64 Checked\r
384 %COMSPEC% /C "call %BSE%\etc\bldwo.bat chk x64 2003 %OPS%"\r
385 if ERRORLEVEL 1 exit /B 1\r
386 echo %0 - Build WNET x64 Free\r
387 %COMSPEC% /C "call %BSE%\etc\bldwo.bat fre x64 2003 %OPS%"\r
388 if ERRORLEVEL 1 exit /B 1\r
389 \r
390 echo %0 - Build WNET x86 Checked\r
391 %COMSPEC% /C "call %BSE%\etc\bldwo.bat chk x86 2003 %OPS%"\r
392 if ERRORLEVEL 1 exit /B 1\r
393 echo %0 - Build WNET x86 Free\r
394 %COMSPEC% /C "call %BSE%\etc\bldwo.bat fre x86 2003 %OPS%"\r
395 if ERRORLEVEL 1 exit /B 1\r
396 \r
397 echo %0 - Build WNET ia64 Checked\r
398 %COMSPEC% /C "call %BSE%\etc\bldwo.bat chk ia64 2003 %OPS%"\r
399 if ERRORLEVEL 1 exit /B 1\r
400 echo %0 - Build WNET ia64 Free\r
401 %COMSPEC% /C "call %BSE%\etc\bldwo.bat fre ia64 2003 %OPS%"\r
402 if ERRORLEVEL 1 exit /B 1\r
403 \r
404 if "%1" == "compile" goto finito\r
405 if "%1" == "compilenoforce" goto finito\r
406 \r
407 rem Install binaries into WIX environment, build msi installers.\r
408 \r
409 :InstallBin\r
410 \r
411 echo Create binary release tree - suitible for WinOF-WIX installer build.\r
412 \r
413 if EXIST "%RBIN_WLH%"  (rmdir /S /Q %RBIN_WLH% &  echo %0 - removed %RBIN_WLH%)\r
414 if EXIST "%RBIN_WNET%" (rmdir /S /Q %RBIN_WNET% & echo %0 - removed %RBIN_WNET%)\r
415 if EXIST "%RBIN_WXP%"  (rmdir /S /Q %RBIN_WXP% &  echo %0 - removed %RBIN_WXP%)\r
416 \r
417 mkdir %RBIN_WLH%\r
418 mkdir %RBIN_WNET%\r
419 mkdir %RBIN_WXP%\r
420 \r
421 if EXIST "%BSE%\etc\makebin.bat" (\r
422     call %BSE%\etc\makebin.bat %BSE% %RBIN_WLH% wlh\r
423     if ERRORLEVEL 1 (\r
424         echo %0: Err in makebin.bat %BSE% %RBIN_WLH% wlh\r
425         exit /B 1\r
426     )\r
427     call %BSE%\etc\makebin.bat %BSE% %RBIN_WNET% wnet\r
428     if ERRORLEVEL 1 (\r
429         echo %0: Err in makebin.bat %BSE% %RBIN_WNET% wnet\r
430         exit /B 1\r
431     )\r
432     call %BSE%\etc\makebin.bat %BSE% %RBIN_WXP% wxp\r
433     if ERRORLEVEL 1 (\r
434         echo %0: Err in makebin.bat %BSE% %RBIN_WXP% wxp\r
435         exit /B 1\r
436     )\r
437 )\r
438 \r
439 if "%1" == "makebin" goto finito\r
440 \r
441 :mk_msi\r
442 \r
443 echo %0 - Drivers Signed with %CERTFILE%\r
444 echo   Binary releases created in\r
445 echo     %RBIN_WLH%\r
446 echo     %RBIN_WNET%\r
447 echo     %RBIN_WXP%\r
448 \r
449 rem build WIX installers --> see WinOF\WIX\r
450 \r
451 %COMSPEC% /V:on /E:on /C "%_DDK%\bin\setenv.bat %_DDK% fre X64 WNET & cd /D %WIX% & build-all-MSI %MSI_CMD% %CERTFILE% %SW_PUBLISHER% %IDIR%"\r
452 \r
453 \r
454 :finito\r
455 \r
456 echo .\r
457 echo %0: Finished %0 %*\r
458 echo %0:   Started  %STIME%\r
459 echo %0:   Finished %TIME%\r
460 \r
461 endlocal\r
462 @echo on\r