• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1@echo off
2rem *************************************************************************************************
3rem   usage:
4rem      AutoBuildForWindows.bat Configuration [-winsdk_version=winsdk_version] [-vc_version=vc_version]
5rem      --For debug  version:
6rem          Win32-C-Only:      AutoBuildForWindows.bat  Win32-Debug-C
7rem          Win32-ASM:         AutoBuildForWindows.bat  Win32-Debug-ASM
8rem          Win64-C-Only:      AutoBuildForWindows.bat  Win64-Debug-C
9rem          Win64-ASM:         AutoBuildForWindows.bat  Win64-Debug-ASM
10rem          ARM64-C-Only:      AutoBuildForWindows.bat  ARM64-Debug-C
11rem          ARM64-ASM:         AutoBuildForWindows.bat  ARM64-Debug-ASM
12rem      --For release version:
13rem          Win32-C-Only:      AutoBuildForWindows.bat  Win32-Release-C
14rem          Win32-ASM:         AutoBuildForWindows.bat  Win32-Release-ASM
15rem          Win64-C-Only:      AutoBuildForWindows.bat  Win64-Release-C
16rem          Win64-ASM:         AutoBuildForWindows.bat  Win64-Release-ASM
17rem          ARM64-C-Only:      AutoBuildForWindows.bat  ARM64-Release-C
18rem          ARM64-ASM:         AutoBuildForWindows.bat  ARM64-Release-ASM
19rem      --For debug and release version:
20rem          Win32-C-Only:      AutoBuildForWindows.bat  Win32-All-C
21rem          Win32-ASM:         AutoBuildForWindows.bat  Win32-All-ASM
22rem          Win64-C-Only:      AutoBuildForWindows.bat  Win64-All-C
23rem          Win64-ASM:         AutoBuildForWindows.bat  Win64-All-ASM
24rem          ARM64-C-Only:      AutoBuildForWindows.bat  ARM64-All-C
25rem          ARM64-ASM:         AutoBuildForWindows.bat  ARM64-All-ASM
26rem      --For default:
27rem         AutoBuildForWindows.bat
28rem           Win32-Release-ASM
29rem
30rem      --lib/dll files will be copied to folder .\bin
31rem         --win32 folder bin\Win32
32rem         --win64 folder bin\x64
33rem         --arm64 folder bin\ARM64
34rem
35rem      [winsdk_version] : full Windows 10 SDK number (e.g. 10.0.17763.0)
36rem      [vc_version] : Specify a VC++ version
37rem                     VC16 for VC++ 2019
38rem                     VC15 for VC++ 2017
39rem
40rem   Environment:
41rem        ----MinGW
42rem           --install MinGW tools
43rem           --more detail, please refer to http://www.mingw.org/
44rem
45rem   2015/03/15 huashi@cisco.com
46rem *************************************************************************************************
47
48set "OPENH264_BUILD_ARGS_LIST=%*"
49call :BasicSetting
50call :PathSetting
51call :SetBuildOption %1
52if not %ERRORLEVEL%==0 (
53    echo not suppot option!
54    goto :ErrorReturn
55)
56call :ParseAdditionalArgs
57call :EnvSetting     %1
58call :BuildResultInit
59call :RunBuild
60call :OutputBuildResult
61call :GetFinalReturnCode
62echo  ReturnCode is %ReturnCode%
63cd %WorkingDir%
64goto :End
65
66:RunBuild
67    for %%j in ( %aConfigurationList% ) do  (
68        set BuildFlag=0
69        call :Build       %%j
70        call :BuildCheck  %%j
71        call :CopyDll     %%j
72  )
73goto :EOF
74
75
76rem function for setting
77rem ***********************************************
78:BasicSetting
79  set DllFile=openh264.dll
80  set LibFile=openh264.lib
81  set PDBFile=openh264.pdb
82  set UTDllFile=ut.dll
83  set UTBinFile=codec_unittest.exe
84  set EncBinFile=h264enc.exe
85  set DecBinFile=h264dec.exe
86goto :EOF
87
88:PathSetting
89  set WorkingDir=%cd%
90  cd ..
91  set RootDir=%cd%
92  set BinDir=%RootDir%\bin
93  cd %WorkingDir%
94goto :EOF
95
96:EnvSetting
97  set MinGWPath=C:\MinGW\bin
98  set MsysPath=C:\MinGW\msys\1.0\bin
99
100  set VC16BuildToolsPath=C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC
101  set VC16CommunityPath=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC
102  set VC16ProfessionalPath=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC
103  set VC16EnterprisePath=C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC
104  if exist "%VC16BuildToolsPath%" set VC16PATH=%VC16BuildToolsPath%
105  if exist "%VC16CommunityPath%" set VC16PATH=%VC16CommunityPath%
106  if exist "%VC16ProfessionalPath%" set VC16PATH=%VC16ProfessionalPath%
107  if exist "%VC16EnterprisePath%" set VC16PATH=%VC16EnterprisePath%
108
109  set GitPath=C:\Program Files (x86)\Git\bin
110  set VC15BuildToolsPath=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC
111  set VC15CommunityPath=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC
112  set VC15ProfessionalPath=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC
113  set VC15EnterprisePath=C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC
114  if exist "%VC15BuildToolsPath%" set VC15PATH=%VC15BuildToolsPath%
115  if exist "%VC15CommunityPath%" set VC15PATH=%VC15CommunityPath%
116  if exist "%VC15ProfessionalPath%" set VC15PATH=%VC15ProfessionalPath%
117  if exist "%VC15EnterprisePath%" set VC15PATH=%VC15EnterprisePath%
118
119  set VC14Path=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
120  set VC12Path=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC
121  set VC11Path=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC
122  set VC10Path=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC
123  set VC9Path=C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC
124
125  if exist "%VC9Path%"     set VCPATH=%VC9Path%
126  if exist "%VC10Path%"    set VCPATH=%VC10Path%
127  if exist "%VC11Path%"    set VCPATH=%VC11Path%
128  if exist "%VC12Path%"    set VCPATH=%VC12Path%
129  if exist "%VC14Path%"    set VCPATH=%VC14Path%
130  set VCVARSPATH=%VCPATH%
131  if exist "%VC15Path%"    set VCVARSPATH=%VC15Path%\Auxiliary\Build
132  if exist "%VC16Path%"    set VCVARSPATH=%VC16Path%\Auxiliary\Build
133
134  if /I "%OPENH264_VC_VERSION%" == "VC15" (
135    set VCPATH=
136    set "VCVARSPATH=%VC15Path%\Auxiliary\Build"
137) else if /I "%OPENH264_VC_VERSION%" == "VC12" (
138    set "VCPATH=%VC12Path%"
139	set "VCVARSPATH=%VCPATH%"
140)
141
142  set GasScriptPath=%VCPATH%\bin
143
144  if "%VCPATH%" NEQ "" (
145    set "VCPATH_BIN=%VCPATH%\bin"
146)
147  if "%vArcType%" == "arm64" (
148    set "CLANG_BIN=%VC16PATH%\tools\llvm\bin\"
149)
150
151  if "%vArcType%" =="i386"   set "PATH=%MinGWPath%;%MsysPath%;%VCPATH_BIN%;%GitPath%;%PATH%"
152  if "%vArcType%" =="x86_64" set "PATH=%MinGWPath%;%MsysPath%;%VCPATH_BIN%;%GitPath%;%PATH%"
153  if "%vArcType%" =="arm64"  set "PATH=%MinGWPath%;%MsysPath%;%VCPATH_BIN%;%GitPath%;%CLANG_BIN%;%PATH%"
154
155  if "%vArcType%" =="i386"   call "%VCVARSPATH%\vcvarsall.bat" x86 %OPENH264_WINSDK_VERSION%
156  if "%vArcType%" =="x86_64" call "%VCVARSPATH%\vcvarsall.bat" x64 %OPENH264_WINSDK_VERSION%
157  if "%vArcType%" =="arm64"  (
158	if "%vEnable64BitFlag%" == "Yes" (
159		call "%VCVARSPATH%\vcvarsall.bat" amd64_arm64 %OPENH264_WINSDK_VERSION%
160	)
161	if "%vEnable64BitFlag%" == "No" (
162		call "%VCVARSPATH%\vcvarsall.bat" x86_arm64 %OPENH264_WINSDK_VERSION%
163	)
164  )
165
166  echo PATH is %PATH%
167  echo LIB  is %LIB%
168goto :EOF
169
170:SetBuildOption
171  if "aaa%1"=="aaa" (
172      set aConfigurationList=Release
173      set vArcType=i386
174      set vOSType=msvc
175      set vEnable64BitFlag=No
176      set vASMFlag=Yes
177      echo default setting
178  ) else if "%1"=="Win32-Debug-C" (
179      set aConfigurationList=Debug
180      set vArcType=i386
181      set vOSType=msvc
182      set vEnable64BitFlag=No
183      set vASMFlag=No
184      echo Win32-Debug-C setting
185  )  else if "%1"=="Win32-Release-C" (
186      set aConfigurationList=Release
187      set vArcType=i386
188      set vOSType=msvc
189      set vEnable64BitFlag=No
190      set vASMFlag=No
191      echo Win32-Release-C setting
192  )  else if "%1"=="Win64-Debug-C" (
193      set aConfigurationList=Debug
194      set vArcType=x86_64
195      set vOSType=msvc
196      set vEnable64BitFlag=Yes
197      set vASMFlag=No
198      echo All-C setting
199  )  else if "%1"=="Win64-Release-C" (
200      set aConfigurationList=Release
201      set vArcType=x86_64
202      set vOSType=msvc
203      set vEnable64BitFlag=Yes
204      set vASMFlag=No
205      echo Win64-Release-C setting
206  )  else if "%1"=="ARM64-Debug-C" (
207      set aConfigurationList=Debug
208      set vArcType=arm64
209      set vOSType=msvc
210      set vEnable64BitFlag=No
211      set vASMFlag=No
212      echo ARM64-Debug-C setting
213  )  else if "%1"=="ARM64-Release-C" (
214      set aConfigurationList=Release
215      set vArcType=arm64
216      set vOSType=msvc
217      set vEnable64BitFlag=No
218      set vASMFlag=No
219      echo ARM64-Release-C setting
220  )   else if "%1"=="Win32-All-C" (
221      set aConfigurationList=Debug Release
222      set vArcType=i386
223      set vOSType=msvc
224      set vEnable64BitFlag=No
225      set vASMFlag=No
226      echo Win32-All-C setting
227  )  else if "%1"=="Win64-All-C" (
228      set aConfigurationList=Debug Release
229      set vArcType=x86_64
230      set vOSType=msvc
231      set vEnable64BitFlag=Yes
232      set vASMFlag=No
233      echo All-C setting
234  )  else if "%1"=="ARM64-All-C" (
235      set aConfigurationList=Debug Release
236      set vArcType=arm64
237      set vOSType=msvc
238      set vEnable64BitFlag=No
239      set vASMFlag=No
240      echo ARM64-All-C setting
241  )  else if "%1"=="Win32-Debug-ASM" (
242      set aConfigurationList=Debug
243      set vArcType=i386
244      set vOSType=msvc
245      set vEnable64BitFlag=No
246      set vASMFlag=Yes
247      echo Win32-Debug-ASM setting
248  )  else if "%1"=="Win32-Release-ASM" (
249      set aConfigurationList=Release
250      set vArcType=i386
251      set vOSType=msvc
252      set vEnable64BitFlag=No
253      set vASMFlag=Yes
254      echo Win32-Release-ASM setting
255  )  else if "%1"=="Win64-Debug-ASM" (
256      set aConfigurationList=Debug
257      set vArcType=x86_64
258      set vOSType=msvc
259      set vEnable64BitFlag=Yes
260      set vASMFlag=Yes
261      echo All-ASM setting
262  )  else if "%1"=="Win64-Release-ASM" (
263      set aConfigurationList=Release
264      set vArcType=x86_64
265      set vOSType=msvc
266      set vEnable64BitFlag=Yes
267      set vASMFlag=Yes
268      echo Win64-Release-ASM setting
269  )  else if "%1"=="ARM64-Debug-ASM" (
270      set aConfigurationList=Debug
271      set vArcType=arm64
272      set vOSType=msvc
273      set vEnable64BitFlag=No
274      set vASMFlag=Yes
275      echo ARM64-Debug-ASM setting
276  )  else if "%1"=="ARM64-Release-ASM" (
277      set aConfigurationList=Release
278      set vArcType=arm64
279      set vOSType=msvc
280      set vEnable64BitFlag=No
281      set vASMFlag=Yes
282      echo ARM64-Release-ASM setting
283  )   else if "%1"=="Win32-All-ASM" (
284      set aConfigurationList=Debug Release
285      set vArcType=i386
286      set vOSType=msvc
287      set vEnable64BitFlag=No
288      set vASMFlag=Yes
289      echo Win32-All-ASM setting
290  )  else if "%1"=="Win64-All-ASM" (
291      set aConfigurationList=Debug Release
292      set vArcType=x86_64
293      set vOSType=msvc
294      set vEnable64BitFlag=Yes
295      set vASMFlag=Yes
296      echo All-ASM setting
297  )  else if "%1"=="ARM64-All-ASM" (
298      set aConfigurationList=Debug Release
299      set vArcType=arm64
300      set vOSType=msvc
301      set vEnable64BitFlag=No
302      set vASMFlag=Yes
303      echo ARM64-All-ASM setting
304  )  else (
305      call :help
306      goto :ErrorReturn
307  )
308  echo aConfigurationList is %aConfigurationList%
309  echo vArcType is           %vArcType%
310  echo vOSType  is           %vOSType%
311  echo vEnable64BitFlag is   %vEnable64BitFlag%
312  echo vASMFlag is           %vASMFlag%
313goto :EOF
314
315rem function for build result
316rem ***********************************************
317:BuildResultInit
318  set BuildDebugFlag=0
319  set BuildReleaseFlag=0
320  set BuildDebugInfo=NULL
321  set BuildReleaseInfo=NULL
322goto :EOF
323
324:OutputBuildResult
325  echo  BuildDebugFlag   =%BuildDebugFlag%
326  echo  BuildReleaseFlag =%BuildReleaseFlag%
327  echo  BuildDebugInfo   =%BuildDebugInfo%
328  echo  BuildReleaseInfo =%BuildReleaseInfo%
329  goto :EOF
330
331:BuildCheck
332  set vConfiguration=%1
333  if not %BuildFlag%==0 (
334    if "%vConfiguration%"=="Debug" (
335      set BuildDebugFlag=1
336      set BuildDebugInfo="build debug--failed"
337    ) else (
338      set BuildReleaseFlag=1
339      set BuildReleaseInfo="build release--failed"
340    )
341  ) else (
342    if "%vConfiguration%"=="Debug" (
343      set BuildDebugFlag=0
344      set BuildDebugInfo="build debug--succeed"
345    ) else (
346      set BuildReleaseFlag=0
347      set BuildReleaseInfo="build release--succeed"
348    )
349  )
350goto :EOF
351
352:GetFinalReturnCode
353  set aBuildFlagList=%BuildDebugFlag%  %BuildReleaseFlag%
354  echo  aBuildFlagList is %aBuildFlagList%
355  set ReturnCode=0
356  for %%k in (%aBuildFlagList%) do  (
357    if not %%k == 0 (
358      set ReturnCode=1
359    )
360  )
361goto :EOF
362
363rem function for help
364rem ***********************************************
365:help
366  echo *******************************************************************************
367  echo   usage:
368  echo      AutoBuildForWindows.bat Configuration  [-winsdk_version=winsdk_version] [-vc_version=vc_version]
369  echo      --For debug  version:
370  echo          Win32-C-Only:      AutoBuildForWindows.bat  Win32-Debug-C
371  echo          Win32-ASM:         AutoBuildForWindows.bat  Win32-Debug-ASM
372  echo          Win64-C-Only:      AutoBuildForWindows.bat  Win64-Debug-C
373  echo          Win64-ASM:         AutoBuildForWindows.bat  Win64-Debug-ASM
374  echo          ARM64-C-Only:      AutoBuildForWindows.bat  ARM64-Debug-C
375  echo          ARM64-ASM:         AutoBuildForWindows.bat  ARM64-Debug-ASM
376  echo      --For release version:
377  echo          Win32-C-Only:      AutoBuildForWindows.bat  Win32-Release-C
378  echo          Win32-ASM:         AutoBuildForWindows.bat  Win32-Release-ASM
379  echo          Win64-C-Only:      AutoBuildForWindows.bat  Win64-Release-C
380  echo          Win64-ASM:         AutoBuildForWindows.bat  Win64-Release-ASM
381  echo          ARM64-C-Only:      AutoBuildForWindows.bat  ARM64-Release-C
382  echo          ARM64-ASM:         AutoBuildForWindows.bat  ARM64-Release-ASM
383  echo      --For debug and release version:
384  echo          Win32-C-Only:      AutoBuildForWindows.bat  Win32-All-C
385  echo          Win32-ASM:         AutoBuildForWindows.bat  Win32-All-ASM
386  echo          Win64-C-Only:      AutoBuildForWindows.bat  Win64-All-C
387  echo          Win64-ASM:         AutoBuildForWindows.bat  Win64-All-ASM
388  echo          ARM64-C-Only:      AutoBuildForWindows.bat  ARM64-All-C
389  echo          ARM64-ASM:         AutoBuildForWindows.bat  ARM64-All-ASM
390  echo      --For default:
391  echo         AutoBuildForWindows.bat
392  echo           Win32-Release-ASM
393  echo      [winsdk_version] : full Windows 10 SDK number (e.g. 10.0.17763.0)
394  echo      [vc_version] : Specify a VC++ version
395  echo                     VC16 for VC++ 2019
396  echo                     VC15 for VC++ 2017
397
398  echo *******************************************************************************
399goto :EOF
400
401rem function for build
402rem ***********************************************
403:Build
404  set vConfiguration=%1
405  cd  %RootDir%
406  echo "make OS=%vOSType%  ARCH=%vArcType% USE_ASM=%vASMFlag% BUILDTYPE=%vConfiguration% clean"
407  echo "make OS=%vOSType%  ARCH=%vArcType% USE_ASM=%vASMFlag% BUILDTYPE=%vConfiguration% %NATIVE_OPTIONS%"
408  echo "make OS=%vOSType%  ARCH=%vArcType% USE_ASM=%vASMFlag% BUILDTYPE=%vConfiguration% %NATIVE_OPTIONS% plugin"
409  make OS=%vOSType%  ARCH=%vArcType% USE_ASM=%vASMFlag% BUILDTYPE=%vConfiguration% clean
410  make OS=%vOSType%  ARCH=%vArcType% USE_ASM=%vASMFlag% BUILDTYPE=%vConfiguration% %NATIVE_OPTIONS%
411  make OS=%vOSType%  ARCH=%vArcType% USE_ASM=%vASMFlag% BUILDTYPE=%vConfiguration% %NATIVE_OPTIONS% plugin
412  if not %ERRORLEVEL%==0 (
413    set BuildFlag=1
414  )
415  cd %WorkingDir%
416goto :EOF
417
418:CopyDll
419  set vConfiguration=%1
420  set vBuildOption=%2
421  cd %RootDir%
422  if "%vArcType%"=="arm64" (
423    set vBinDirName=ARM64
424  ) else if "%vArcType%"=="i386" (
425    set vBinDirName=Win32
426  ) else (
427    set vBinDirName=x64
428  )
429  set ArchDestDir=%BinDir%\%vBinDirName%
430  set FullDestDir=%BinDir%\%vBinDirName%\%vConfiguration%
431  echo copying dll files to destination folder...
432  echo FullDestDir is %FullDestDir%
433  if not exist %ArchDestDir% md %ArchDestDir%
434  if exist %FullDestDir% (
435    rd /s /q %FullDestDir%
436  )
437  md %FullDestDir%
438
439  echo current dir is:
440  cd
441  set DestDir=bin/%vBinDirName%/%vConfiguration%
442  echo DestDir is %DestDir%
443  set aFileList=%DllFile% %LibFile% %PDBFile% %UTBinFile% %EncBinFile% %DecBinFile%
444  for %%k in (%aFileList%) do (
445    bash -c "cp -f  %%k  %DestDir%"
446  )
447  cd %WorkingDir%
448goto :EOF
449
450:ParseAdditionalArgs
451	for /F "tokens=1,* delims= " %%a in ("%OPENH264_BUILD_ARGS_LIST%") do (
452	    if "%%a" == "--" (
453		    set "NATIVE_OPTIONS=%%b"
454		    set "OPENH264_BUILD_ARGS_LIST="
455		) else (
456		    call :ParseArgument %%a
457		    set "OPENH264_BUILD_ARGS_LIST=%%b"
458		)
459		goto :ParseAdditionalArgs
460)
461goto :EOF
462
463:ParseArgument
464	if /I "%1" == "-winsdk_version" (
465		set OPENH264_WINSDK_VERSION=%2
466)
467	if /I "%1" == "-vc_version" (
468		set OPENH264_VC_VERSION=%2
469)
470goto :EOF
471
472:ErrorReturn
473  endlocal
474exit /b 2
475
476:End
477  endlocal
478exit /b %ReturnCode%
479