Mike:
  I suggest to call BaseTools\set_vsprefix_envs.bat to setup VS environment. 
Its input parameter is VS2012, VS2013, VS2015, VS2017, VS2019. If so, we don't 
need to add VS installation path in Build python script. 

Thanks
Liming
> -----Original Message-----
> From: Kinney, Michael D <michael.d.kin...@intel.com>
> Sent: Thursday, January 30, 2020 10:38 AM
> To: devel@edk2.groups.io
> Cc: Feng, Bob C <bob.c.f...@intel.com>; Gao, Liming <liming....@intel.com>
> Subject: [Patch] BaseTools/Build: Fix Structured PCD app host env issues
> 
> https://bugzilla.tianocore.org/show_bug.cgi?id=2495
> https://bugzilla.tianocore.org/show_bug.cgi?id=2496
> 
> Structured PCD processing requires a host POSIX build
> environment.  If the Structure PCD application can not
> be built using the default environment under Windows, then
> retry the build after setting up the host environment for
> the current tool chain tag.
> 
> Also reduce the build dependencies for the Structured PCD
> application to increase compiler compatibility.
> 
> Cc: Bob Feng <bob.c.f...@intel.com>
> Cc: Liming Gao <liming....@intel.com>
> Signed-off-by: Michael D Kinney <michael.d.kin...@intel.com>
> ---
>  .../Source/Python/Workspace/DscBuildData.py   | 35 +++++++++++++++----
>  1 file changed, 28 insertions(+), 7 deletions(-)
> 
> diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py 
> b/BaseTools/Source/Python/Workspace/DscBuildData.py
> index c65a0dd346..bc3f32bb1d 100644
> --- a/BaseTools/Source/Python/Workspace/DscBuildData.py
> +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py
> @@ -91,9 +91,6 @@ WindowsCFLAGS = 'CFLAGS = $(CFLAGS) /wd4200 /wd4034 /wd4101 
> '
>  LinuxCFLAGS = 'BUILD_CFLAGS += -Wno-pointer-to-int-cast -Wno-unused-variable 
> '
>  PcdMakefileEnd = '''
>  !INCLUDE $(BASE_TOOLS_PATH)\Source\C\Makefiles\ms.common
> -
> -LIBS = $(LIB_PATH)\Common.lib
> -
>  !INCLUDE $(BASE_TOOLS_PATH)\Source\C\Makefiles\ms.app
>  '''
> 
> @@ -2637,10 +2634,10 @@ class DscBuildData(PlatformBuildClassObject):
> 
>          MakeApp = PcdMakefileHeader
>          if sys.platform == "win32":
> -            MakeApp = MakeApp + 'APPFILE = %s\%s.exe\n' % (self.OutputPath, 
> PcdValueInitName) + 'APPNAME = %s\n' %
> (PcdValueInitName) + 'OBJECTS = %s\%s.obj\n' % (self.OutputPath, 
> PcdValueInitName) + 'INC = '
> +            MakeApp = MakeApp + 'APPFILE = %s\%s.exe\n' % (self.OutputPath, 
> PcdValueInitName) + 'APPNAME = %s\n' %
> (PcdValueInitName) + 'OBJECTS = %s\%s.obj %s.obj\n' % (self.OutputPath, 
> PcdValueInitName,
> os.path.normpath(mws.join(GlobalData.gGlobalDefines["EDK_TOOLS_PATH"], 
> "Source/C/Common/PcdValueCommon"))) + 'INC = '
>          else:
>              MakeApp = MakeApp + PcdGccMakefile
> -            MakeApp = MakeApp + 'APPFILE = %s/%s\n' % (self.OutputPath, 
> PcdValueInitName) + 'APPNAME = %s\n' % (PcdValueInitName)
> + 'OBJECTS = %s/%s.o\n' % (self.OutputPath, PcdValueInitName) + \
> +            MakeApp = MakeApp + 'APPFILE = %s/%s\n' % (self.OutputPath, 
> PcdValueInitName) + 'APPNAME = %s\n' %
> (PcdValueInitName) + 'OBJECTS = %s/%s.o %s.o\n' % (self.OutputPath, 
> PcdValueInitName,
> os.path.normpath(mws.join(GlobalData.gGlobalDefines["EDK_TOOLS_PATH"], 
> "Source/C/Common/PcdValueCommon"))) + \
>                        'include $(MAKEROOT)/Makefiles/app.makefile\n' + 
> 'INCLUDE +='
> 
>          IncSearchList = []
> @@ -2723,8 +2720,8 @@ class DscBuildData(PlatformBuildClassObject):
>                      
> IncludeFileFullPaths.append(os.path.normpath(includefullpath))
>                      break
>          SearchPathList = []
> -        
> SearchPathList.append(os.path.normpath(mws.join(GlobalData.gWorkspace, 
> "BaseTools/Source/C/Include")))
> -        
> SearchPathList.append(os.path.normpath(mws.join(GlobalData.gWorkspace, 
> "BaseTools/Source/C/Common")))
> +        
> SearchPathList.append(os.path.normpath(mws.join(GlobalData.gGlobalDefines["EDK_TOOLS_PATH"],
> "BaseTools/Source/C/Include")))
> +        
> SearchPathList.append(os.path.normpath(mws.join(GlobalData.gGlobalDefines["EDK_TOOLS_PATH"],
> "BaseTools/Source/C/Common")))
>          SearchPathList.extend(str(item) for item in IncSearchList)
>          IncFileList = GetDependencyList(IncludeFileFullPaths, SearchPathList)
>          for include_file in IncFileList:
> @@ -2743,9 +2740,33 @@ class DscBuildData(PlatformBuildClassObject):
>          else:
>              Dest_PcdValueInitExe = os.path.join(self.OutputPath, 
> PcdValueInitName) +".exe"
>          Messages = ''
> +
> +        VsDevCmd = {
> +            "VS2019"   : '"C:\\Program Files (x86)\\Microsoft Visual 
> Studio\\2019\\Enterprise\\Common7\\Tools\\VsDevCmd.bat"',
> +            "VS2017"   : '"C:\\Program Files (x86)\\Microsoft Visual 
> Studio\\2017\\Enterprise\\Common7\\Tools\\VsDevCmd.bat"',
> +            "VS2015"   : '"C:\\Program Files (x86)\\Microsoft Visual Studio 
> 14.0\\Common7\\Tools\\VsDevCmd.bat"',
> +            "VS2015x86": '"C:\\Program Files (x86)\\Microsoft Visual Studio 
> 14.0\\Common7\\Tools\\VsDevCmd.bat"',
> +            "VS2013"   : '"C:\\Program Files (x86)\\Microsoft Visual Studio 
> 12.0\\Common7\\Tools\\VsDevCmd.bat"',
> +            "VS2013x86": '"C:\\Program Files (x86)\\Microsoft Visual Studio 
> 12.0\\Common7\\Tools\\VsDevCmd.bat"',
> +            "VS2012"   : '"C:\\Program Files (x86)\\Microsoft Visual Studio 
> 11.0\\Common7\\Tools\\VsDevCmd.bat"',
> +            "VS2012x86": '"C:\\Program Files (x86)\\Microsoft Visual Studio 
> 11.0\\Common7\\Tools\\VsDevCmd.bat"',
> +            "VS2010"   : '"C:\\Program Files (x86)\\Microsoft Visual Studio 
> 10.0\\VC\\vcvarsall.bat" x86',
> +            "VS2010x86": '"C:\\Program Files (x86)\\Microsoft Visual Studio 
> 10.0\\VC\\vcvarsall.bat" x86'
> +        }
> +
>          if sys.platform == "win32":
>              MakeCommand = 'nmake -f %s' % (MakeFileName)
>              returncode, StdOut, StdErr = DscBuildData.ExecuteCommand 
> (MakeCommand)
> +            if returncode != 0:
> +                #
> +                # If the nmake command failed, then lookup and run the VS
> +                # Development Environment script for the current ToolChain 
> and
> +                # try the nmake command again.
> +                #
> +                if self._Toolchain in VsDevCmd:
> +                    MakeCommand = VsDevCmd[self._Toolchain] + '&' + 
> MakeCommand
> +                    if os.path.exists (MakeCommand.split('"')[1]):
> +                        returncode, StdOut, StdErr = 
> DscBuildData.ExecuteCommand (MakeCommand)
>              Messages = StdOut
>          else:
>              MakeCommand = 'make -f %s' % (MakeFileName)
> --
> 2.21.0.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#53598): https://edk2.groups.io/g/devel/message/53598
Mute This Topic: https://groups.io/mt/70263619/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to