build_all/windows/build.cmd (190 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% 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% set cmake-root=%build-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_e2e_tests=OFF set CMAKE_run_sfc_tests=OFF set CMAKE_run_longhaul_tests=OFF set CMAKE_run_unittests=OFF set CMAKE_DIR=iotsdk_win32 set make=yes set build_traceabilitytool=0 set prov_auth=OFF set use_edge_modules=OFF set no_uploadtoblob=OFF :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-e2e-tests" goto arg-run-e2e-tests if "%1" equ "--run-sfc-tests" goto arg-run-sfc-tests if "%1" equ "--run-longhaul-tests" goto arg-longhaul-tests if "%1" equ "--run-unittests" goto arg-run-unittests if "%1" equ "--cmake-root" goto arg-cmake-root if "%1" equ "--no-make" goto arg-no-make if "%1" equ "--build-traceabilitytool" goto arg-build-traceabilitytool if "%1" equ "--provisioning" goto arg-provisioning if "%1" equ "--use-edge-modules" goto arg-edge-modules if "%1" equ "--no-uploadtoblob" goto arg-uploadtoblob 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 echo setting build-config to %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=iotsdk_x64 ) else if %build-platform% == arm ( set CMAKE_DIR=iotsdk_arm ) goto args-continue :arg-run-e2e-tests set CMAKE_run_e2e_tests=ON goto args-continue :arg-run-sfc-tests set CMAKE_run_sfc_tests=ON goto args-continue :arg-longhaul-tests set CMAKE_run_longhaul_tests=ON goto args-continue :arg-run-unittests set CMAKE_run_unittests=ON goto args-continue :arg-cmake-root shift if "%1" equ "" call :usage && exit /b 1 set cmake-root=%1 goto args-continue :arg-no-make set make=no goto args-continue :arg-build-traceabilitytool set build_traceabilitytool=1 goto args-continue :arg-provisioning set prov_auth=ON goto args-continue :arg-edge-modules set use_edge_modules=ON goto args-continue :arg-uploadtoblob set no_uploadtoblob=ON goto args-continue :args-continue shift goto args-loop :args-done if %make% == no ( rem No point running tests if we are not building the code set CMAKE_run_e2e_tests=OFF set CMAKE_run_sfc_tests=OFF set CMAKE_run_longhaul_tests=OFF ) rem ----------------------------------------------------------------------------- rem -- build with CMAKE and run tests rem ----------------------------------------------------------------------------- if EXIST %cmake-root%\cmake ( rmdir /s/q %cmake-root%\cmake rem no error checking ) echo CMAKE Output Path: %cmake-root%\cmake rd /Q /S %cmake-root%\cmake mkdir %cmake-root%\cmake rem no error checking pushd %cmake-root%\cmake call %build-root%\jenkins\windows_c_VsDevCmd.cmd %build-platform% where cmake cmake --version if %build-platform% == x64 ( echo ***Running CMAKE for Win64*** cmake -LAH -Drun_longhaul_tests:BOOL=%CMAKE_run_longhaul_tests% -Drun_e2e_tests:BOOL=%CMAKE_run_e2e_tests% -Ddont_use_uploadtoblob:BOOL=%no_uploadtoblob% -Drun_sfc_tests:BOOL=%CMAKE_run_sfc_tests% -Duse_cppunittest:BOOL=OFF -Drun_unittests:BOOL=%CMAKE_run_unittests% %build-root% -Duse_prov_client:BOOL=%prov_auth% -G %VSVERSION% -A x64 -Duse_edge_modules=%use_edge_modules% -DCMAKE_BUILD_TYPE=%build-config% if not !ERRORLEVEL!==0 exit /b !ERRORLEVEL! ) else if %build-platform% == arm ( echo ***Running CMAKE for ARM*** cmake -LAH -Drun_longhaul_tests:BOOL=%CMAKE_run_longhaul_tests% -Drun_e2e_tests:BOOL=%CMAKE_run_e2e_tests% -Ddont_use_uploadtoblob:BOOL=%no_uploadtoblob% -Drun_sfc_tests:BOOL=%CMAKE_run_sfc_tests% -Drun_unittests:BOOL=%CMAKE_run_unittests% %build-root% -Duse_prov_client:BOOL=%prov_auth% -G %VSVERSION% -A ARM -Duse_edge_modules=%use_edge_modules% -DCMAKE_BUILD_TYPE=%build-config% if not !ERRORLEVEL!==0 exit /b !ERRORLEVEL! ) else ( echo ***Running CMAKE for Win32*** cmake -LAH -Drun_longhaul_tests:BOOL=%CMAKE_run_longhaul_tests% -Drun_e2e_tests:BOOL=%CMAKE_run_e2e_tests% -Ddont_use_uploadtoblob:BOOL=%no_uploadtoblob% -Drun_sfc_tests:BOOL=%CMAKE_run_sfc_tests% -Drun_unittests:BOOL=%CMAKE_run_unittests% %build-root% -Duse_prov_client:BOOL=%prov_auth% -G %VSVERSION% -A Win32 -Duse_edge_modules=%use_edge_modules% -DCMAKE_BUILD_TYPE=%build-config% if not !ERRORLEVEL!==0 exit /b !ERRORLEVEL! ) if %make%==yes ( echo build-config is %build-config% msbuild /m azure_iot_sdks.sln "-p:Configuration=%build-config%" if !ERRORLEVEL! neq 0 exit /b !ERRORLEVEL! ) popd if %build_traceabilitytool%==1 ( rem invoke the traceabilitytool here instead of the second build step in Jenkins windows_c job msbuild /m %build-root%\tools\traceabilitytool\traceabilitytool.sln if !ERRORLEVEL! neq 0 exit /b !ERRORLEVEL! ) 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 :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-e2e-tests run end-to-end tests echo --run-longhaul-tests run long-haul tests echo --cmake-root Directory to place the cmake files used for building the project echo --no-make Surpress building the code echo --build-traceabilitytool Builds an internal tool (traceabilitytool) to check for requirements/code/test consistency echo --run-unittests Run unit tests echo --provisioning Use Provisiong service goto :eof rem ----------------------------------------------------------------------------- rem -- helper subroutines rem ----------------------------------------------------------------------------- :_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