6be0d67dde
Now, a msbdir can be passed in externally, which is useful in case Visual Studio is installed in an atypical location. Also had to make use of Delayed Expansion for the set commands within the conditional statements; otherwise, they would not resolve their values properly. Not sure if this is specific to different versions of Windows or Command prompt, but it bit me. https://stackoverflow.com/questions/10558316/example-of-delayed-expansion-in-batch-file This change could easily be moved to the other platforms if needed.
103 lines
3.9 KiB
Batchfile
103 lines
3.9 KiB
Batchfile
@echo off
|
|
rem %1 = architecture
|
|
rem %2 = library type (LIB|DLL)
|
|
rem %3 = platform (Win32|x64)
|
|
rem %4 = configuration (Release|Debug)
|
|
rem %5 = Windows SDK Version
|
|
rem %6 = build tests (|+tests)
|
|
|
|
setlocal ENABLEDELAYEDEXPANSION
|
|
|
|
rem Visual Studio version (2013, 2015 or 2017)
|
|
set vs_version=2017
|
|
|
|
rem find the MSBUILD installation directory
|
|
if NOT DEFINED msbdir (
|
|
if "%vs_version%" EQU "2013" (
|
|
set msbdir="C:\Program Files (x86)\MSBuild\12.0\Bin"
|
|
) else if "%vs_version%" EQU "2015" (
|
|
set msbdir="C:\Program Files (x86)\MSBuild\14.0\Bin"
|
|
) else if "%vs_version%" EQU "2017" (
|
|
set vsw_exe="%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
|
|
for /f "usebackq tokens=*" %%i in (`!vsw_exe! -latest -products * -requires Microsoft.Component.MSBuild -property installationPath`) do (
|
|
set InstallDir=%%i
|
|
)
|
|
if exist "!InstallDir!\MSBuild\15.0\Bin\MSBuild.exe" (
|
|
set msbdir="!InstallDir!\MSBuild\15.0\Bin"
|
|
)
|
|
) else (
|
|
echo "Visual Studio %vs_version% is not supported" & exit /b %errorlevel%
|
|
)
|
|
)
|
|
|
|
if "%4" NEQ "" if "%3" NEQ "" if "%2" NEQ "" if "%1" NEQ "" goto cont
|
|
call :get_architectures -
|
|
echo usage: msbuild architecture=^<%architectures:|=^|%^> library_type=^<LIB^|DLL^> platform=^<Win32^|x64^> configuration=^<Release^|Debug^> [Windows_SDK_Version=^<n^>] [+tests]
|
|
goto :eof
|
|
|
|
:cont
|
|
rem example use: msbuild sandybridge_ivybridge dll x64 release
|
|
|
|
if not exist "lib_mpir_%1" (call :get_architectures & call :seterr & echo ERROR: architecture is one of ^(%architectures%^) ^(not %1^) & exit /b %errorlevel%)
|
|
if /i "%2" EQU "DLL" (set libp=dll) else (if /i "%2" EQU "LIB" (set libp=lib) else ((call :seterr & echo ERROR: library type is "lib" or "dll" ^(not "%2"^) & exit /b %errorlevel%)))
|
|
if /i "%3" EQU "x64" (set plat=x64) else (if /i "%3" EQU "Win32" (set plat=win32) else (call :seterr & echo ERROR: platform is "Win32" or "x64" ^(not "%3"^) & exit /b %errorlevel%))
|
|
if /i "%4" EQU "Debug" (set conf=Debug) else (if /i "%4" EQU "Release" (set conf=Release) else (call :seterr & echo ERROR: configuration is "Release" or "Debug" ^(not "%4"^) & exit /b %errorlevel%))
|
|
if /i "%5" NEQ "" if "%5" EQU "+tests" (set run_tests=y) else (set win_sdk=%5)
|
|
if /i "%6" NEQ "" if "%6" EQU "+tests" (set run_tests=y)
|
|
|
|
set src=%libp%_mpir_%1
|
|
|
|
rem This is the Visual Studio build directory (within the MPIR directory)
|
|
set srcdir=.
|
|
|
|
echo !msbdir!\msbuild.exe /p:Platform=%plat% /p:Configuration=%conf% /p:"Windows%20SDK%20Version=%win_sdk%" %srcdir%\%src%\%src%.vcxproj
|
|
!msbdir!\msbuild.exe /p:Platform=%plat% /p:Configuration=%conf% /p:"Windows%20SDK%20Version=%win_sdk%" %srcdir%\%src%\%src%.vcxproj
|
|
if %errorlevel% NEQ 0 (echo ERROR: msbuild failed for main project with exit code %errorlevel% & exit /b %errorlevel%)
|
|
|
|
if /i "%libp%" == "LIB" (
|
|
!msbdir!\msbuild.exe /p:Platform=%plat% /p:Configuration=%conf% /p:"Windows%20SDK%20Version=%win_sdk%" %srcdir%\lib_mpir_cxx\lib_mpir_cxx.vcxproj
|
|
if %errorlevel% NEQ 0 (echo ERROR: msbuild failed for lib project with exit code %errorlevel% & exit /b %errorlevel%)
|
|
)
|
|
|
|
if /i "%run_tests%" NEQ "" (
|
|
for /d %%d in (.\mpir-tests\*) do (
|
|
for %%f in (%%d\*.vcxproj) do (
|
|
!msbdir!\msbuild.exe /property:SolutionDir=..\..\ /property:OutDir=..\..\%plat%\%conf%\ /p:Platform=%plat% /p:Configuration=%conf% /p:"Windows%20SDK%20Version=%win_sdk%" %%f
|
|
if %errorlevel% NEQ 0 (echo ERROR: msbuild failed for test project %%f with exit code %errorlevel% & exit /b %errorlevel%)
|
|
)
|
|
)
|
|
)
|
|
|
|
:get_architectures
|
|
set architectures=
|
|
for /d %%a in (lib_mpir_*) do (call :add_architecture %%a %1)
|
|
goto :eof
|
|
|
|
:add_architecture
|
|
set xx=%1
|
|
set arch=%xx:~9%
|
|
if /i "%arch%" EQU "cxx" goto :eof
|
|
if _%2_ == __ (
|
|
set "delim= "
|
|
set arch=%arch%
|
|
) else (
|
|
set delim=^|
|
|
)
|
|
|
|
if "%architectures%" == "" (
|
|
set "architectures=%arch%"
|
|
) else (
|
|
set "architectures=%architectures%%delim%%arch%"
|
|
)
|
|
goto :eof
|
|
|
|
:set_arch
|
|
set arch=%1
|
|
goto :eof
|
|
|
|
:clrerr
|
|
exit /b 0
|
|
|
|
:seterr
|
|
exit /b 1
|