Edk2Setup: Support different VS tool chain setup

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1693

This patch is to update edksetup with additional option:
VS2017 VS2015 VS2013 VS2012 to setup different VS environment.
And will report error if the specified VS tool is not installed.
For VS2017, also consider the case that only VS2017 build tool
is installed.

Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
Reviewed-by: Bob Feng <bob.c.feng@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
Dandan Bi 2019-06-12 11:28:46 +08:00 committed by Liming Gao
parent 541d6017e2
commit 6759212fa6
4 changed files with 144 additions and 15 deletions

View File

@ -8,7 +8,12 @@
@echo off @echo off
goto :main set SCRIPT_ERROR=0
if "%1"=="" goto main
if /I "%1"=="VS2017" goto VS2017Vars
if /I "%1"=="VS2015" goto VS2015Vars
if /I "%1"=="VS2013" goto VS2013Vars
if /I "%1"=="VS2012" goto VS2012Vars
:set_vsvars :set_vsvars
for /f "usebackq tokens=1* delims=: " %%i in (`%*`) do ( for /f "usebackq tokens=1* delims=: " %%i in (`%*`) do (
@ -26,6 +31,10 @@ if defined VCINSTALLDIR goto :EOF
goto :EOF goto :EOF
:ToolNotInstall
set SCRIPT_ERROR=1
goto :EOF
REM NOTE: This file will find the most recent Visual Studio installation REM NOTE: This file will find the most recent Visual Studio installation
REM apparent from the environment. REM apparent from the environment.
REM To use an older version, modify your environment set up. REM To use an older version, modify your environment set up.
@ -33,11 +42,32 @@ REM (Or invoke the relevant vsvars32 file beforehand).
:main :main
if defined VCINSTALLDIR goto :done if defined VCINSTALLDIR goto :done
if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" call :set_vsvars "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" :VS2017Vars
if exist "%ProgramFiles%\Microsoft Visual Studio\Installer\vswhere.exe" call :set_vsvars "%ProgramFiles%\Microsoft Visual Studio\Installer\vswhere.exe" if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" (
if defined VS140COMNTOOLS call :read_vsvars "%VS140COMNTOOLS%" if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\BuildTools" (
if defined VS120COMNTOOLS call :read_vsvars "%VS120COMNTOOLS%" call :set_vsvars "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -products Microsoft.VisualStudio.Product.BuildTools
if defined VS110COMNTOOLS call :read_vsvars "%VS110COMNTOOLS%" ) else (
call :set_vsvars "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
)
)
if exist "%ProgramFiles%\Microsoft Visual Studio\Installer\vswhere.exe" (
if exist "%ProgramFiles%\Microsoft Visual Studio\2017\BuildTools" (
call :set_vsvars "%ProgramFiles%\Microsoft Visual Studio\Installer\vswhere.exe" -products Microsoft.VisualStudio.Product.BuildTools
) else (
call :set_vsvars "%ProgramFiles%\Microsoft Visual Studio\Installer\vswhere.exe"
)
)
if /I "%1"=="VS2017" goto ToolNotInstall
:VS2015Vars
if defined VS140COMNTOOLS (call :read_vsvars "%VS140COMNTOOLS%") else (if /I "%1"=="VS2015" goto ToolNotInstall)
:VS2013Vars
if defined VS120COMNTOOLS ( call :read_vsvars "%VS120COMNTOOLS%") else (if /I "%1"=="VS2013" goto ToolNotInstall)
:VS2012Vars
if defined VS110COMNTOOLS (call :read_vsvars "%VS110COMNTOOLS%") else (if /I "%1"=="VS2012" goto ToolNotInstall)
if defined VS100COMNTOOLS call :read_vsvars "%VS100COMNTOOLS%" if defined VS100COMNTOOLS call :read_vsvars "%VS100COMNTOOLS%"
if defined VS90COMNTOOLS call :read_vsvars "%VS90COMNTOOLS%" if defined VS90COMNTOOLS call :read_vsvars "%VS90COMNTOOLS%"
if defined VS80COMNTOOLS call :read_vsvars "%VS80COMNTOOLS%" if defined VS80COMNTOOLS call :read_vsvars "%VS80COMNTOOLS%"

View File

@ -10,6 +10,18 @@
@echo off @echo off
pushd . pushd .
set SCRIPT_ERROR=0
goto main
:ToolNotInstall
set SCRIPT_ERROR=1
goto :EOF
:main
if /I "%1"=="VS2017" goto SetVS2017
if /I "%1"=="VS2015" goto SetVS2015
if /I "%1"=="VS2013" goto SetVS2013
if /I "%1"=="VS2012" goto SetVS2012
if defined VS71COMNTOOLS ( if defined VS71COMNTOOLS (
if not defined VS2003_PREFIX ( if not defined VS2003_PREFIX (
@ -47,6 +59,7 @@ if defined VS100COMNTOOLS (
) )
) )
:SetVS2012
if defined VS110COMNTOOLS ( if defined VS110COMNTOOLS (
if not defined VS2012_PREFIX ( if not defined VS2012_PREFIX (
set "VS2012_PREFIX=%VS110COMNTOOLS:~0,-14%" set "VS2012_PREFIX=%VS110COMNTOOLS:~0,-14%"
@ -57,8 +70,12 @@ if defined VS110COMNTOOLS (
if not defined WINSDK71x86_PREFIX ( if not defined WINSDK71x86_PREFIX (
set "WINSDK71x86_PREFIX=c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\" set "WINSDK71x86_PREFIX=c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\"
) )
) else (
if /I "%1"=="VS2012" goto ToolNotInstall
) )
if /I "%1"=="VS2012" goto SetWinDDK
:SetVS2013
if defined VS120COMNTOOLS ( if defined VS120COMNTOOLS (
if not defined VS2013_PREFIX ( if not defined VS2013_PREFIX (
set "VS2013_PREFIX=%VS120COMNTOOLS:~0,-14%" set "VS2013_PREFIX=%VS120COMNTOOLS:~0,-14%"
@ -69,8 +86,12 @@ if defined VS120COMNTOOLS (
if not defined WINSDK8x86_PREFIX ( if not defined WINSDK8x86_PREFIX (
set "WINSDK8x86_PREFIX=c:\Program Files (x86)\Windows Kits\8.0\bin\" set "WINSDK8x86_PREFIX=c:\Program Files (x86)\Windows Kits\8.0\bin\"
) )
) else (
if /I "%1"=="VS2013" goto ToolNotInstall
) )
if /I "%1"=="VS2013" goto SetWinDDK
:SetVS2015
if defined VS140COMNTOOLS ( if defined VS140COMNTOOLS (
if not defined VS2015_PREFIX ( if not defined VS2015_PREFIX (
set "VS2015_PREFIX=%VS140COMNTOOLS:~0,-14%" set "VS2015_PREFIX=%VS140COMNTOOLS:~0,-14%"
@ -81,19 +102,35 @@ if defined VS140COMNTOOLS (
if not defined WINSDK81x86_PREFIX ( if not defined WINSDK81x86_PREFIX (
set "WINSDK81x86_PREFIX=c:\Program Files (x86)\Windows Kits\8.1\bin\" set "WINSDK81x86_PREFIX=c:\Program Files (x86)\Windows Kits\8.1\bin\"
) )
) else (
if /I "%1"=="VS2015" goto ToolNotInstall
) )
if /I "%1"=="VS2015" goto SetWinDDK
@REM set VS2017 :SetVS2017
if not defined VS150COMNTOOLS ( if not defined VS150COMNTOOLS (
if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" ( if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" (
for /f "usebackq tokens=1* delims=: " %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"`) do ( if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\BuildTools" (
if /i "%%i"=="installationPath" call "%%j\VC\Auxiliary\Build\vcvars32.bat" for /f "usebackq tokens=1* delims=: " %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -products Microsoft.VisualStudio.Product.BuildTools`) do (
)
) else if exist "%ProgramFiles%\Microsoft Visual Studio\Installer\vswhere.exe" (
for /f "usebackq tokens=1* delims=: " %%i in (`"%ProgramFiles%\Microsoft Visual Studio\Installer\vswhere.exe"`) do (
if /i "%%i"=="installationPath" call "%%j\VC\Auxiliary\Build\vcvars32.bat" if /i "%%i"=="installationPath" call "%%j\VC\Auxiliary\Build\vcvars32.bat"
) )
) else ( ) else (
for /f "usebackq tokens=1* delims=: " %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"`) do (
if /i "%%i"=="installationPath" call "%%j\VC\Auxiliary\Build\vcvars32.bat"
)
)
) else if exist "%ProgramFiles%\Microsoft Visual Studio\Installer\vswhere.exe" (
if exist "%ProgramFiles%\Microsoft Visual Studio\2017\BuildTools" (
for /f "usebackq tokens=1* delims=: " %%i in (`"%ProgramFiles%\Microsoft Visual Studio\Installer\vswhere.exe" -products Microsoft.VisualStudio.Product.BuildTools`) do (
if /i "%%i"=="installationPath" call "%%j\VC\Auxiliary\Build\vcvars32.bat"
)
) else (
for /f "usebackq tokens=1* delims=: " %%i in (`"%ProgramFiles%\Microsoft Visual Studio\Installer\vswhere.exe"`) do (
if /i "%%i"=="installationPath" call "%%j\VC\Auxiliary\Build\vcvars32.bat"
)
)
) else (
if /I "%1"=="VS2017" goto ToolNotInstall
goto SetWinDDK goto SetWinDDK
) )
) )

View File

@ -11,6 +11,7 @@
@echo off @echo off
pushd . pushd .
set SCRIPT_ERROR=0
@REM ############################################################## @REM ##############################################################
@REM # You should not have to modify anything below this line @REM # You should not have to modify anything below this line
@ -41,6 +42,30 @@ if /I "%1"=="/?" goto Usage
set FORCE_REBUILD=TRUE set FORCE_REBUILD=TRUE
goto loop goto loop
) )
if /I "%1"=="VS2017" (
shift
set VS2017=TRUE
set VSTool=VS2017
goto loop
)
if /I "%1"=="VS2015" (
shift
set VS2015=TRUE
set VSTool=VS2015
goto loop
)
if /I "%1"=="VS2013" (
shift
set VS2013=TRUE
set VSTool=VS2013
goto loop
)
if /I "%1"=="VS2012" (
shift
set VS2012=TRUE
set VSTool=VS2012
goto loop
)
if "%1"=="" goto setup_workspace if "%1"=="" goto setup_workspace
if exist %1 ( if exist %1 (
if not defined BASE_TOOLS_PATH ( if not defined BASE_TOOLS_PATH (
@ -151,7 +176,27 @@ IF NOT exist "%EDK_TOOLS_PATH%\set_vsprefix_envs.bat" (
@echo. @echo.
goto end goto end
) )
call %EDK_TOOLS_PATH%\set_vsprefix_envs.bat if defined VS2017 (
call %EDK_TOOLS_PATH%\set_vsprefix_envs.bat VS2017
) else if defined VS2015 (
call %EDK_TOOLS_PATH%\set_vsprefix_envs.bat VS2015
call %EDK_TOOLS_PATH%\get_vsvars.bat VS2015
) else if defined VS2013 (
call %EDK_TOOLS_PATH%\set_vsprefix_envs.bat VS2013
call %EDK_TOOLS_PATH%\get_vsvars.bat VS2013
) else if defined VS2012 (
call %EDK_TOOLS_PATH%\set_vsprefix_envs.bat VS2012
call %EDK_TOOLS_PATH%\get_vsvars.bat VS2012
) else (
call %EDK_TOOLS_PATH%\set_vsprefix_envs.bat
call %EDK_TOOLS_PATH%\get_vsvars.bat
)
if %SCRIPT_ERROR% NEQ 0 (
@echo.
@echo !!! ERROR !!! %VSTool% is not installed !!!
@echo.
goto end
)
if not defined CONF_PATH ( if not defined CONF_PATH (
set CONF_PATH=%WORKSPACE%\Conf set CONF_PATH=%WORKSPACE%\Conf
@ -365,7 +410,7 @@ goto end
goto end goto end
) )
) )
call "%EDK_TOOLS_PATH%\get_vsvars.bat"
if not defined VCINSTALLDIR ( if not defined VCINSTALLDIR (
@echo. @echo.
@echo !!! ERROR !!!! Cannot find Visual Studio, required to build C tools !!! @echo !!! ERROR !!!! Cannot find Visual Studio, required to build C tools !!!
@ -399,7 +444,7 @@ goto end
:Usage :Usage
@echo. @echo.
echo Usage: "%0 [-h | -help | --help | /h | /help | /?] [ Rebuild | ForceRebuild ] [Reconfig] [base_tools_path [edk_tools_path]]" echo Usage: "%0 [-h | -help | --help | /h | /help | /?] [ Rebuild | ForceRebuild ] [Reconfig] [base_tools_path [edk_tools_path]] [VS2017] [VS2015] [VS2013] [VS2012]"
@echo. @echo.
@echo base_tools_path BaseTools project path, BASE_TOOLS_PATH will be set to this path. @echo base_tools_path BaseTools project path, BASE_TOOLS_PATH will be set to this path.
@echo edk_tools_path EDK_TOOLS_PATH will be set to this path. @echo edk_tools_path EDK_TOOLS_PATH will be set to this path.
@ -408,11 +453,20 @@ goto end
@echo ForceRebuild If sources are available, rebuild all tools regardless of @echo ForceRebuild If sources are available, rebuild all tools regardless of
@echo whether they have been updated or not. @echo whether they have been updated or not.
@echo Reconfig Reinstall target.txt, tools_def.txt and build_rule.txt. @echo Reconfig Reinstall target.txt, tools_def.txt and build_rule.txt.
@echo VS2012 Set the env for VS2012 build.
@echo VS2013 Set the env for VS2013 build.
@echo VS2015 Set the env for VS2015 build.
@echo VS2017 Set the env for VS2017 build.
@echo. @echo.
:end :end
set REBUILD= set REBUILD=
set FORCE_REBUILD= set FORCE_REBUILD=
set RECONFIG= set RECONFIG=
set VS2017=
set VS2015=
set VS2013=
set VS2012=
set VSTool=
popd popd

View File

@ -133,15 +133,23 @@ if defined CYGWIN_HOME (
:cygwin_done :cygwin_done
if /I "%1"=="Rebuild" shift if /I "%1"=="Rebuild" shift
if /I "%1"=="ForceRebuild" shift if /I "%1"=="ForceRebuild" shift
if /I "%1"=="VS2017" shift
if /I "%1"=="VS2015" shift
if /I "%1"=="VS2013" shift
if /I "%1"=="VS2012" shift
if "%1"=="" goto end if "%1"=="" goto end
:Usage :Usage
@echo. @echo.
@echo Usage: "%0 [-h | -help | --help | /h | /help | /?] [Reconfig] [Rebuild] [ForceRebuild]" @echo Usage: "%0 [-h | -help | --help | /h | /help | /?] [Reconfig] [Rebuild] [ForceRebuild] [VS2017] [VS2015] [VS2013] [VS2012]"
@echo. @echo.
@echo Reconfig Reinstall target.txt, tools_def.txt and build_rule.txt. @echo Reconfig Reinstall target.txt, tools_def.txt and build_rule.txt.
@echo Rebuild Perform incremental rebuild of BaseTools binaries. @echo Rebuild Perform incremental rebuild of BaseTools binaries.
@echo ForceRebuild Force a full rebuild of BaseTools binaries. @echo ForceRebuild Force a full rebuild of BaseTools binaries.
@echo VS2012 Set the env for VS2012 build.
@echo VS2013 Set the env for VS2013 build.
@echo VS2015 Set the env for VS2015 build.
@echo VS2017 Set the env for VS2017 build.
@echo. @echo.
@echo Note that target.template, tools_def.template and build_rules.template @echo Note that target.template, tools_def.template and build_rules.template
@echo will only be copied to target.txt, tools_def.txt and build_rule.txt @echo will only be copied to target.txt, tools_def.txt and build_rule.txt