Steven:
  With this fix, I find modules, libraries targets both work. Do you verify
other build targets?

Thanks
Liming
> -----邮件原件-----
> 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 Steven Shi
> 发送时间: 2021年2月26日 14:07
> 收件人: devel@edk2.groups.io
> 抄送: Steven Shi <steven....@intel.com>; Bob Feng <bob.c.f...@intel.com>;
> Liming Gao <gaolim...@byosoft.com.cn>
> 主题: [edk2-devel] [PATCH] BaseTools: Fix build failure of "modules"
option
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3238
> 
> The "modules" option in build command is to build all modules
> only but not to generate the final FV image. The option doesn't
> work now and report makefile missing build failure. This patch
> fix this issue.
> 
> Signed-off-by: Steven Shi <steven....@intel.com>
> Cc: Bob Feng <bob.c.f...@intel.com>
> Cc: Liming Gao <gaolim...@byosoft.com.cn>
> ---
>  BaseTools/Source/Python/build/build.py | 45 +++++++-------------------
>  1 file changed, 11 insertions(+), 34 deletions(-)
> 
> diff --git a/BaseTools/Source/Python/build/build.py
> b/BaseTools/Source/Python/build/build.py
> index c4cfe38ad9..810881c146 100755
> --- a/BaseTools/Source/Python/build/build.py
> +++ b/BaseTools/Source/Python/build/build.py
> @@ -368,7 +368,7 @@ class ModuleMakeUnit(BuildUnit):
>      def __init__(self, Obj, BuildCommand,Target):
>          Dependency = [ModuleMakeUnit(La, BuildCommand,Target) for La
> in Obj.LibraryAutoGenList]
>          BuildUnit.__init__(self, Obj, BuildCommand, Target, Dependency,
> Obj.MakeFileDir)
> -        if Target in [None, "", "all"]:
> +        if Target in [None, "", "all", "modules"]:
>              self.Target = "tbuild"
> 
>  ## The smallest platform unit that can be built by nmake/make command in
> multi-thread build mode
> @@ -868,14 +868,14 @@ class Build():
>                      # CanSkipbyPreMakeCache and
> CreateCodeFile/CreateMakeFile.
>                      RetVal = PcdMa.SourceFileList
>                      # Force cache miss for PCD driver
> -                    if GlobalData.gUseHashCache and not
> GlobalData.gBinCacheDest and self.Target in [None, "", "all"]:
> +                    if GlobalData.gUseHashCache and not
> GlobalData.gBinCacheDest and self.Target in [None, "", "all", "modules"]:
>                          cqueue.put((PcdMa.MetaFile.Path,
> PcdMa.Arch, "PreMakeCache", False))
> 
>                      PcdMa.CreateCodeFile(False)
>                      PcdMa.CreateMakeFile(False,GenFfsList =
> DataPipe.Get("FfsCommand").get((PcdMa.MetaFile.Path, PcdMa.Arch),[]))
>                      PcdMa.CreateAsBuiltInf()
>                      # Force cache miss for PCD driver
> -                    if GlobalData.gBinCacheSource and self.Target in
> [None, "", "all"]:
> +                    if GlobalData.gBinCacheSource and self.Target in
> [None, "", "all", "modules"]:
>                          cqueue.put((PcdMa.MetaFile.Path,
> PcdMa.Arch, "MakeCache", False))
> 
>              self.AutoGenMgr.join()
> @@ -1212,7 +1212,7 @@ class Build():
>          if FfsCommand is None:
>              FfsCommand = {}
>          # skip file generation for cleanxxx targets, run and fds target
> -        if Target not in ['clean', 'cleanlib', 'cleanall', 'run', 'fds']:
> +        if Target not in ['cleanall', 'run', 'fds']:
>              # for target which must generate AutoGen code and makefile
>              mqueue = mp.Queue()
>              for m in AutoGenObject.GetAllModuleInfo:
> @@ -1224,6 +1224,10 @@ class Build():
>              AutoGenObject.DataPipe.DataContainer =
> {"LibraryBuildDirectoryList":AutoGenObject.LibraryBuildDirectoryList}
>              AutoGenObject.DataPipe.DataContainer =
> {"ModuleBuildDirectoryList":AutoGenObject.ModuleBuildDirectoryList}
>              AutoGenObject.DataPipe.DataContainer =
> {"FdsCommandDict": AutoGenObject.Workspace.GenFdsCommandDict}
> +            # Fetch the MakeFileName.
> +            self.MakeFileName = AutoGenObject.MakeFileName
> +            if not self.MakeFileName:
> +                self.MakeFileName = AutoGenObject.MakeFile
>              self.Progress.Start("Generating makefile and code")
>              data_pipe_file = os.path.join(AutoGenObject.BuildDir,
> "GlobalVar_%s_%s.bin" % (str(AutoGenObject.Guid),AutoGenObject.Arch))
>              AutoGenObject.DataPipe.dump(data_pipe_file)
> @@ -1285,33 +1289,6 @@ class Build():
>                  LaunchCommand(NewBuildCommand,
> AutoGenObject.MakeFileDir,LibAutoGen)
>              return True
> 
> -        # build module
> -        if Target == 'modules':
> -            DirList = []
> -            for Lib in AutoGenObject.LibraryAutoGenList:
> -                if not Lib.IsBinaryModule:
> -
> DirList.append((os.path.join(AutoGenObject.BuildDir, Lib.BuildDir),Lib))
> -            for Lib, LibAutoGen in DirList:
> -                NewBuildCommand = BuildCommand + ['-f',
> os.path.normpath(os.path.join(Lib, self.MakeFileName)), 'pbuild']
> -                LaunchCommand(NewBuildCommand,
> AutoGenObject.MakeFileDir,LibAutoGen)
> -
> -            DirList = []
> -            for ModuleAutoGen in AutoGenObject.ModuleAutoGenList:
> -                if not ModuleAutoGen.IsBinaryModule:
> -
> DirList.append((os.path.join(AutoGenObject.BuildDir,
> ModuleAutoGen.BuildDir),ModuleAutoGen))
> -            for Mod,ModAutoGen in DirList:
> -                NewBuildCommand = BuildCommand + ['-f',
> os.path.normpath(os.path.join(Mod, self.MakeFileName)), 'pbuild']
> -                LaunchCommand(NewBuildCommand,
> AutoGenObject.MakeFileDir,ModAutoGen)
> -            self.CreateAsBuiltInf()
> -            if GlobalData.gBinCacheDest:
> -                self.GenDestCache()
> -            elif GlobalData.gUseHashCache and not
> GlobalData.gBinCacheSource:
> -                # Only for --hash
> -                # Update PreMakeCacheChain files
> -                self.GenLocalPreMakeCache()
> -            self.BuildModules = []
> -            return True
> -
>          # cleanlib
>          if Target == 'cleanlib':
>              for Lib in AutoGenObject.LibraryBuildDirectoryList:
> @@ -1881,7 +1858,7 @@ class Build():
>                                  Ma.Workspace = Wa
>                              MaList.append(Ma)
> 
> -                            if GlobalData.gUseHashCache and not
> GlobalData.gBinCacheDest and self.Target in [None, "", "all"]:
> +                            if GlobalData.gUseHashCache and not
> GlobalData.gBinCacheDest and self.Target in [None, "", "all", "modules"]:
>                                  if Ma.CanSkipbyPreMakeCache():
>                                      continue
>                                  else:
> @@ -1907,7 +1884,7 @@ class Build():
>                                  if self.Target == "genmake":
>                                      return True
> 
> -                                if GlobalData.gBinCacheSource and
> self.Target in [None, "", "all"]:
> +                                if GlobalData.gBinCacheSource and
> self.Target in [None, "", "all", "modules"]:
>                                      if Ma.CanSkipbyMakeCache():
>                                          continue
>                                      else:
> @@ -2423,7 +2400,7 @@ class Build():
>          self.MakeCacheMiss = set()
>          self.MakeCacheHit = set()
>          if not self.ModuleFile:
> -            if not self.SpawnMode or self.Target not in ["", "all"]:
> +            if not self.SpawnMode or self.Target not in ["", "all",
> "modules"]:
>                  self.SpawnMode = False
>                  self._BuildPlatform()
>              else:
> --
> 2.28.0.windows.1
> 
> 
> 
> 
> 





-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#72514): https://edk2.groups.io/g/devel/message/72514
Mute This Topic: https://groups.io/mt/81164351/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to