build_all/windows/build.cmd (197 lines of code) (raw):
@REM Copyright (c) Microsoft. All rights reserved.
@REM Licensed under the MIT license. See LICENSE file in the project root for full license information.
@setlocal EnableExtensions EnableDelayedExpansion
@echo off
set current-path=%~dp0
rem // remove trailing slash
set current-path=%current-path:~0,-1%
echo Current Path: %current-path%
set build-root=%current-path%\..\..
rem // resolve to fully qualified path
for %%i in ("%build-root%") do set build-root=%%~fi
set repo_root=%build-root%\..\..
rem // resolve to fully qualified path
for %%i in ("%repo_root%") do set repo_root=%%~fi
echo Build Root: %build-root%
echo Repo Root: %repo_root%
rem -----------------------------------------------------------------------------
rem -- check prerequisites
rem -----------------------------------------------------------------------------
rem -----------------------------------------------------------------------------
rem -- parse script arguments
rem -----------------------------------------------------------------------------
rem // default build options
set build-clean=0
set build-config=Debug
set build-platform=Win32
set CMAKE_run_unittests=OFF
set CMAKE_DIR=umqtt_win32
set MAKE_NUGET_PKG=no
:args-loop
if "%1" equ "" goto args-done
if "%1" equ "-c" goto arg-build-clean
if "%1" equ "--clean" goto arg-build-clean
if "%1" equ "--config" goto arg-build-config
if "%1" equ "--platform" goto arg-build-platform
if "%1" equ "--run-unittests" goto arg-run-unittests
if "%1" equ "--make_nuget" goto arg-build-nuget
call :usage && exit /b 1
:arg-build-clean
set build-clean=1
goto args-continue
:arg-build-config
shift
if "%1" equ "" call :usage && exit /b 1
set build-config=%1
goto args-continue
:arg-build-platform
shift
if "%1" equ "" call :usage && exit /b 1
set build-platform=%1
if %build-platform% == x64 (
set CMAKE_DIR=umqtt_x64
) else if %build-platform% == arm (
set CMAKE_DIR=umqtt_arm
)
goto args-continue
:arg-run-unittests
set CMAKE_run_unittests=ON
goto args-continue
:arg-build-nuget
shift
if "%1" equ "" call :usage && exit /b 1
set MAKE_NUGET_PKG=%1
set CMAKE_run_unittests=OFF
goto args-continue
:args-continue
shift
goto args-loop
:args-done
rem -----------------------------------------------------------------------------
rem -- build with CMAKE and run tests
rem -----------------------------------------------------------------------------
echo CMAKE Output Path: %build-root%\cmake\%CMAKE_DIR%
if EXIST %build-root%\cmake\%CMAKE_DIR% (
rmdir /s/q %build-root%\cmake\%CMAKE_DIR%
rem no error checking
)
echo %build-root%\cmake\%CMAKE_DIR%
mkdir %build-root%\cmake\%CMAKE_DIR%
pushd %build-root%\cmake\%CMAKE_DIR%
echo ***checking msbuild***
where msbuild
if %MAKE_NUGET_PKG% == yes (
echo ***Running CMAKE for Win32***
cmake %build-root% -LAH -Duse_cppunittest:BOOL=OFF -Drun_unittests:BOOL=%CMAKE_run_unittests%
if not !ERRORLEVEL!==0 exit /b !ERRORLEVEL!
popd
echo ***Running CMAKE for Win64***
if EXIST %build-root%\cmake\umqtt_x64 (
rmdir /s/q %build-root%\cmake\umqtt_x64
)
mkdir %build-root%\cmake\umqtt_x64
pushd %build-root%\cmake\umqtt_x64
cmake -LAH -Duse_cppunittest:BOOL=OFF -Drun_unittests:BOOL=%CMAKE_run_unittests% %build-root% -A x64
if not !ERRORLEVEL!==0 exit /b !ERRORLEVEL!
popd
echo ***Running CMAKE for ARM***
if EXIST %build-root%\cmake\umqtt_arm (
rmdir /s/q %build-root%\cmake\umqtt_arm
)
mkdir %build-root%\cmake\umqtt_arm
pushd %build-root%\cmake\umqtt_arm
echo ***Running CMAKE for ARM***
cmake -LAH -Duse_cppunittest:BOOL=OFF -Drun_unittests:BOOL=%CMAKE_run_unittests% %build-root% -A ARM
if not !ERRORLEVEL!==0 exit /b !ERRORLEVEL!
) else if %build-platform% == Win32 (
echo ***Running CMAKE for Win32***
cmake -LAH -Duse_cppunittest:BOOL=OFF %build-root% -Drun_unittests:BOOL=%CMAKE_run_unittests% -A Win32 -G %VSVERSION%
if not !ERRORLEVEL!==0 exit /b !ERRORLEVEL!
) else if %build-platform% == arm (
echo ***Running CMAKE for ARM***
cmake -LAH -Duse_cppunittest:BOOL=OFF -Drun_unittests:BOOL=%CMAKE_run_unittests% %build-root% -A ARM -G %VSVERSION%
if not !ERRORLEVEL!==0 exit /b !ERRORLEVEL!
) else (
echo ***Running CMAKE for Win64***
cmake -LAH -Duse_cppunittest:BOOL=OFF -Drun_unittests:BOOL=%CMAKE_run_unittests% %build-root% -A x64 -G %VSVERSION%
if not !ERRORLEVEL!==0 exit /b !ERRORLEVEL!
)
if %MAKE_NUGET_PKG% == yes (
echo ***Building all configurations***
msbuild /m %build-root%\cmake\umqtt_win32\umqtt.sln /p:Configuration=Release
msbuild /m %build-root%\cmake\umqtt_win32\umqtt.sln /p:Configuration=Debug
if not !ERRORLEVEL!==0 exit /b !ERRORLEVEL!
msbuild /m %build-root%\cmake\umqtt_x64\umqtt.sln /p:Configuration=Release
msbuild /m %build-root%\cmake\umqtt_x64\umqtt.sln /p:Configuration=Debug
if not !ERRORLEVEL!==0 exit /b !ERRORLEVEL!
msbuild /m %build-root%\cmake\umqtt_arm\umqtt.sln /p:Configuration=Release
msbuild /m %build-root%\cmake\umqtt_arm\umqtt.sln /p:Configuration=Debug
if not !ERRORLEVEL!==0 exit /b !ERRORLEVEL!
) else (
rem msbuild /m umqtt.sln
call :_run-msbuild "Build" umqtt.sln %2 %3
if not !ERRORLEVEL!==0 exit /b !ERRORLEVEL!
echo Build Config: %build-config%
echo Build Platform: %build-platform%
if %build-platform% neq arm (
echo Build Platform: %build-platform%
if "%build-config%" == "Debug" (
ctest -C "debug" -V
if not !ERRORLEVEL!==0 exit /b !ERRORLEVEL!
)
)
)
popd
goto :eof
rem -----------------------------------------------------------------------------
rem -- subroutines
rem -----------------------------------------------------------------------------
:clean-a-solution
call :_run-msbuild "Clean" %1 %2 %3
goto :eof
:build-a-solution
call :_run-msbuild "Build" %1 %2 %3
goto :eof
:run-unit-tests
call :_run-tests %1 "UnitTests"
goto :eof
:usage
echo build.cmd [options]
echo options:
echo -c, --clean delete artifacts from previous build before building
echo --config ^<value^> [Debug] build configuration (e.g. Debug, Release)
echo --platform ^<value^> [Win32] build platform (e.g. Win32, x64, arm, ...)
echo --run-unittests run the unit tests
echo --make_nuget ^<value^> [no] generates the binaries to be used for nuget packaging (e.g. yes, no)
goto :eof
rem -----------------------------------------------------------------------------
rem -- helper subroutines
rem -----------------------------------------------------------------------------
echo build config: %build-config%
echo platform: %build-platform%
:_run-msbuild
rem // optionally override configuration|platform
setlocal EnableExtensions
set build-target=
if "%~1" neq "Build" set "build-target=/t:%~1"
if "%~3" neq "" set build-config=%~3
if "%~4" neq "" set build-platform=%~4
msbuild /m %build-target% "/p:Configuration=%build-config%;Platform=%build-platform%" %2
if not !ERRORLEVEL!==0 exit /b !ERRORLEVEL!
goto :eof
:_run-tests
rem // discover tests
set test-dlls-list=
set test-dlls-path=%build-root%\%~1\build\windows\%build-platform%\%build-config%
for /f %%i in ('dir /b %test-dlls-path%\*%~2*.dll') do set test-dlls-list="%test-dlls-path%\%%i" !test-dlls-list!
if "%test-dlls-list%" equ "" (
echo No unit tests found in %test-dlls-path%
exit /b 1
)
rem // run tests
echo Test DLLs: %test-dlls-list%
echo.
vstest.console.exe %test-dlls-list%
if not !ERRORLEVEL!==0 exit /b !ERRORLEVEL!
goto :eof
echo done