mirror of
https://github.com/simh/simh.git
synced 2026-01-11 23:52:58 +00:00
build_vstudio.bat converts the .vcproj files from Visual Studio 2008 to .vcxproj when used with newer versions of Visual Studio and configures it to build XP-compatible binaries using the v141_xp toolset. However, this toolset is deprecated and may not be present when using Visual Studio 2022. The script intends to edit the .vcxproj files only in the case where it exists; however, due to a logic error it actually does this unconditionally. This causes the build to fail on VS2022 when the XP toolset is not present.
211 lines
11 KiB
Batchfile
211 lines
11 KiB
Batchfile
@echo off
|
|
:: Rebuild all of SIMH simulators using Visual Studio
|
|
::
|
|
:: If this procedure is not invoked from a Developer command prompt
|
|
:: then the VS2008 tools are preferred if VS2008 is installed,
|
|
:: otherwise the installed Visual Studio tools will be used
|
|
:: prefering newer Visual Studio versions over older ones.
|
|
::
|
|
:: If this is invoked with Visual Studio 2022 installed along with
|
|
:: the "C++ for Windows XP Support for VS 2017 (v141) tools" option
|
|
:: installed, then the project files will be converted, if needed
|
|
:: to leverage the available support so that the executables created
|
|
:: will run on all versions of Windows from XP onward.
|
|
::
|
|
:: If this procedure is invoked from a Developer command prompt
|
|
:: then the tool chain provided with the command prompt is used
|
|
:: to build the simh projects.
|
|
::
|
|
:: A single argument to this procedure may be the word Debug, which
|
|
:: will cause Debug binaries to be built rather than the Release
|
|
:: binaries which is the default.
|
|
::
|
|
:: The default is to build all simulators mentioned in the simh solution.
|
|
:: Optionally, individual simulators may be built by listing the specific
|
|
:: simulator names on the command line invoking this procedure.
|
|
::
|
|
:: Individual simulator sources are in .\simulator_name
|
|
:: Individual simulator executables are produced in .\BIN\NT\Win32-{Debug or Release}\
|
|
::
|
|
::
|
|
|
|
:: Initialize target variables
|
|
set _BUILD_CONFIG=Release
|
|
set _BUILD_PROJECTS=
|
|
set _REBUILD_PROJECTS=
|
|
set _BUILD_PROJECT_DIR=%~dp0Visual Studio Projects\
|
|
:_CheckArg
|
|
if "%1" == "" goto _DoneArgs
|
|
if /i "%1" == "Debug" set _BUILD_CONFIG=Debug& shift & goto _CheckArg
|
|
if /i "%1" == "Release" set _BUILD_CONFIG=Release& shift & goto _CheckArg
|
|
call :GetFileName "%_BUILD_PROJECT_DIR%%1.vcproj" _BUILD_PROJECT
|
|
if exist "%_BUILD_PROJECT_DIR%%1.vcproj" set _BUILD_PROJECTS=%_BUILD_PROJECTS%;%_BUILD_PROJECT%
|
|
if exist "%_BUILD_PROJECT_DIR%%1.vcproj" set _REBUILD_PROJECTS=%_REBUILD_PROJECTS%;%_BUILD_PROJECT%:Rebuild
|
|
if exist "%_BUILD_PROJECT_DIR%%1.vcproj" shift & goto _CheckArg
|
|
echo ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR
|
|
echo ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR
|
|
echo **
|
|
echo ** No such project: %1
|
|
echo **
|
|
echo ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR
|
|
echo ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR
|
|
exit /b 1
|
|
|
|
:_DoneArgs
|
|
set _VC_VER=
|
|
call :FindVCVersion _VC_VER
|
|
if not "%_VC_VER%" == "" goto GotVC
|
|
if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" call "%ProgramFiles(x86)%\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
|
|
call :FindVCVersion _VC_VER
|
|
if not "%_VC_VER%" == "" goto GotVC
|
|
if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars32.bat" call "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars32.bat"
|
|
call :FindVCVersion _VC_VER
|
|
if not "%_VC_VER%" == "" goto GotVC
|
|
if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvars32.bat" call "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvars32.bat"
|
|
call :FindVCVersion _VC_VER
|
|
if not "%_VC_VER%" == "" goto GotVC
|
|
if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars32.bat" call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars32.bat"
|
|
call :FindVCVersion _VC_VER
|
|
if not "%_VC_VER%" == "" goto GotVC
|
|
if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat" call "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat"
|
|
call :FindVCVersion _VC_VER
|
|
if not "%_VC_VER%" == "" goto GotVC
|
|
if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat" call "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
|
|
call :FindVCVersion _VC_VER
|
|
if not "%_VC_VER%" == "" goto GotVC
|
|
if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" call "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86
|
|
call :FindVCVersion _VC_VER
|
|
if not "%_VC_VER%" == "" goto GotVC
|
|
if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" call "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86
|
|
call :FindVCVersion _VC_VER
|
|
if not "%_VC_VER%" == "" goto GotVC
|
|
if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" call "%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
|
|
call :FindVCVersion _VC_VER
|
|
if not "%_VC_VER%" == "" goto GotVC
|
|
|
|
echo ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR **
|
|
echo ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR **
|
|
echo ** **
|
|
echo ** I can't find a Visual Studio version installed **
|
|
echo ** in the default location on this system. **
|
|
echo ** **
|
|
echo ** If you haven't installed any version of Visual **
|
|
echo ** Studio yet, you must install one before this **
|
|
echo ** procedure can be used. The earliest Visual **
|
|
echo ** Studio version that is supported is VS2008 which **
|
|
echo ** can be downloaded and installed from: **
|
|
echo ** **
|
|
echo http://download.microsoft.com/download/E/8/E/E8EEB394-7F42-4963-A2D8-29559B738298/VS2008ExpressWithSP1ENUX1504728.iso
|
|
echo ** **
|
|
echo ** Newer versions of Visual Studio are also **
|
|
echo ** supported, but the initial build will have to **
|
|
echo ** convert the VS2008 project definitions. **
|
|
echo ** **
|
|
echo ** If you installed a version of Visual Studio C++ **
|
|
echo ** in a non default location, then you must invoke **
|
|
echo ** this procedure from a developer command prompt **
|
|
echo ** for the version of Visual Studio you have **
|
|
echo ** installed. **
|
|
echo ** **
|
|
echo ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR **
|
|
echo ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR ** ERROR **
|
|
exit /b 1
|
|
|
|
:WhichInPath
|
|
if "%~$PATH:1" EQU "" exit /B 1
|
|
set %2=%~$PATH:1
|
|
exit /B 0
|
|
|
|
:FindVCVersion
|
|
call :WhichInPath cl.exe _VC_CL_
|
|
for /f "tokens=3-9 delims=\" %%a in ("%_VC_CL_%") do call :VCCheck _VC_VER_NUM_ "%%a" "%%b" "%%c" "%%d" "%%e" "%%f" "%%g"
|
|
for /f "delims=." %%a in ("%_VC_VER_NUM_%") do set %1=%%a
|
|
set _VC_CL=
|
|
exit /B 0
|
|
|
|
:VCCheck
|
|
set _VC_TMP=%1
|
|
:_VCCheck_Next
|
|
shift
|
|
set _VC_TMP_=%~1
|
|
if "%_VC_TMP_%" equ "" goto _VCCheck_Done
|
|
if "%_VC_TMP_:~0,24%" EQU "Microsoft Visual Studio " set %_VC_TMP%=%_VC_TMP_:Microsoft Visual Studio =%
|
|
call :IsNumeric _VC_NUM_ %_VC_TMP_%
|
|
if "%_VC_NUM_%" neq "" set %_VC_TMP%=%~1
|
|
if "%_VC_NUM_%" neq "" goto _VCCheck_Done
|
|
goto _VCCheck_Next
|
|
:_VCCheck_Done
|
|
set _VC_TMP_=
|
|
set _VC_TMP=
|
|
set _VC_NUM_=
|
|
exit /B 0
|
|
|
|
:IsNumeric
|
|
set _Numeric_TMP_=%~1
|
|
set _Numeric_Test_=%2
|
|
set _Numeric_Test_=%_Numeric_Test_:~0,1%
|
|
set %_Numeric_TMP_%=
|
|
if "%_Numeric_Test_%"=="0" set %_Numeric_TMP_%=1
|
|
if "%_Numeric_Test_%"=="1" set %_Numeric_TMP_%=1
|
|
if "%_Numeric_Test_%"=="2" set %_Numeric_TMP_%=1
|
|
if "%_Numeric_Test_%"=="3" set %_Numeric_TMP_%=1
|
|
if "%_Numeric_Test_%"=="4" set %_Numeric_TMP_%=1
|
|
if "%_Numeric_Test_%"=="5" set %_Numeric_TMP_%=1
|
|
if "%_Numeric_Test_%"=="6" set %_Numeric_TMP_%=1
|
|
if "%_Numeric_Test_%"=="7" set %_Numeric_TMP_%=1
|
|
if "%_Numeric_Test_%"=="8" set %_Numeric_TMP_%=1
|
|
if "%_Numeric_Test_%"=="9" set %_Numeric_TMP_%=1
|
|
set _Numeric_TMP_=
|
|
set _Numeric_Test_=
|
|
exit /B 0
|
|
|
|
:GetFileName
|
|
set %2=%~n1
|
|
exit /B 0
|
|
|
|
:GotVC
|
|
set _BUILD_PARALLEL=8
|
|
if %_BUILD_PARALLEL% GTR %NUMBER_OF_PROCESSORS% set _BUILD_PARALLEL=%NUMBER_OF_PROCESSORS%
|
|
set _SLN_FILE=%_BUILD_PROJECT_DIR%Simh.sln
|
|
if exist "%_BUILD_PROJECT_DIR%Simh-%_VC_VER%.sln" set _SLN_FILE=%_BUILD_PROJECT_DIR%Simh-%_VC_VER%.sln
|
|
SET _X_SLN_VERSION=
|
|
echo _SLN_FILE=%_SLN_FILE%
|
|
for /F "usebackq tokens=8" %%a in (`findstr /C:"Microsoft Visual Studio Solution File, Format Version" "%_SLN_FILE%"`) do SET _X_SLN_VERSION=%%a
|
|
|
|
if not "%_VC_VER%" == "9" goto _DoMSBuild
|
|
if "%_BUILD_PROJECTS%" == "" vcbuild /nologo /M%_BUILD_PARALLEL% /useenv /rebuild "%_SLN_FILE%" "%_BUILD_CONFIG%|Win32" & goto :EOF
|
|
|
|
set _BUILD_PROJECTS=%_BUILD_PROJECTS:~1%
|
|
:_NextProject
|
|
set _BUILD_PROJECT=
|
|
for /f "tokens=1* delims=;" %%a in ("%_BUILD_PROJECTS%") do set _BUILD_PROJECT=%%a& set _BUILD_PROJECTS=%%b
|
|
if "%_BUILD_PROJECT%" == "" goto :EOF
|
|
echo.
|
|
echo Building %_BUILD_PROJECT%
|
|
vcbuild /nologo /useenv /rebuild "%_BUILD_PROJECT_DIR%%_BUILD_PROJECT%.vcproj" "%_BUILD_CONFIG%|Win32"
|
|
goto _NextProject
|
|
|
|
:_DoMSBuild
|
|
if "%_X_SLN_VERSION%" == "10.00" set _NEW_SLN_FILE=%_BUILD_PROJECT_DIR%Simh-%_VC_VER%.sln
|
|
if "%_X_SLN_VERSION%" == "10.00" copy /y "%_SLN_FILE%" "%_NEW_SLN_FILE%" >NUL & echo Converting the VS2008 projects to VS%_VC_VER%, this will take several (3-5) minutes & DevEnv /Upgrade "%_NEW_SLN_FILE%" & set _SLN_FILE=%_NEW_SLN_FILE%
|
|
set _NEW_SLN_FILE=
|
|
if not "%_VC_VER%" == "2022" goto _RunBuild
|
|
if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VC\v150\Platforms\x64\PlatformToolsets\v141_xp" goto _DoXPConvert
|
|
if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v150\Platforms\x64\PlatformToolsets\v141_xp" goto _DoXPConvert
|
|
if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v150\Platforms\x64\PlatformToolsets\v141_xp" goto _DoXPConvert
|
|
goto _RunBuild
|
|
|
|
:_DoXPConvert
|
|
set _X_PROJS_CONVERTED=
|
|
for /F "usebackq tokens=1" %%a in (`findstr /C:"<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>" "%_BUILD_PROJECT_DIR%BuildROMs.vcxproj"`) do set _X_PROJS_CONVERTED=%%a
|
|
if not "%_X_PROJS_CONVERTED%" == "" goto _RunBuild
|
|
echo Converting the VS2022 projects to generate XP compatible binaries
|
|
Powershell -NoLogo -File "%~dp0\Visual Studio Projects\ConvertToXPProject.ps1" "%~dp0\Visual Studio Projects\*.vcxproj"
|
|
set _X_PROJS_CONVERTED=
|
|
:_RunBuild
|
|
if "%_BUILD_PROJECTS%" == "" MSBuild /nologo "%_SLN_FILE%" /maxCpuCount:%_BUILD_PARALLEL% /Target:Rebuild /Property:Configuration=%_BUILD_CONFIG% /Property:Platform=Win32 /fileLogger "/fileLoggerParameters:LogFile=%_BUILD_PROJECT_DIR%Build-VS%_VC_VER%.log" & goto :EOF
|
|
set _BUILD_PROJECTS=%_BUILD_PROJECTS:~1%
|
|
set _REBUILD_PROJECTS=%_REBUILD_PROJECTS:~1%
|
|
MSBuild /nologo "%_SLN_FILE%" /maxCpuCount:%_BUILD_PARALLEL% /Target:%_REBUILD_PROJECTS% /Property:Configuration=%_BUILD_CONFIG% /Property:Platform=Win32 "/fileLoggerParameters:LogFile=%_BUILD_PROJECT_DIR%Build-VS%_VC_VER%.log" & goto :EOF
|
|
set _SLN_FILE=
|