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