+ Pa = PlatformAutoGen(Wa, self.PlatformFile, BuildTarget, ToolChain, Arch)\r
+ for Module in Pa.Platform.Modules:\r
+ if self.ModuleFile.Dir == Module.Dir and self.ModuleFile.Name == Module.Name:\r
+ Ma = ModuleAutoGen(Wa, Module, BuildTarget, ToolChain, Arch, self.PlatformFile)\r
+ if Ma is None: continue\r
+ MaList.append(Ma)\r
+ if Ma.CanSkipbyHash():\r
+ self.HashSkipModules.append(Ma)\r
+ continue\r
+ # Not to auto-gen for targets 'clean', 'cleanlib', 'cleanall', 'run', 'fds'\r
+ if self.Target not in ['clean', 'cleanlib', 'cleanall', 'run', 'fds']:\r
+ # for target which must generate AutoGen code and makefile\r
+ if not self.SkipAutoGen or self.Target == 'genc':\r
+ self.Progress.Start("Generating code")\r
+ Ma.CreateCodeFile(True)\r
+ self.Progress.Stop("done!")\r
+ if self.Target == "genc":\r
+ return True\r
+ if not self.SkipAutoGen or self.Target == 'genmake':\r
+ self.Progress.Start("Generating makefile")\r
+ if CmdListDict and self.Fdf and (Module.File, Arch) in CmdListDict:\r
+ Ma.CreateMakeFile(True, CmdListDict[Module.File, Arch])\r
+ del CmdListDict[Module.File, Arch]\r
+ else:\r
+ Ma.CreateMakeFile(True)\r
+ self.Progress.Stop("done!")\r
+ if self.Target == "genmake":\r
+ return True\r
+ self.BuildModules.append(Ma)\r
+ self.AutoGenTime += int(round((time.time() - AutoGenStart)))\r
+ MakeStart = time.time()\r
+ for Ma in self.BuildModules:\r
+ if not Ma.IsBinaryModule:\r
+ Bt = BuildTask.New(ModuleMakeUnit(Ma, self.Target))\r
+ # Break build if any build thread has error\r
+ if BuildTask.HasError():\r
+ # we need a full version of makefile for platform\r
+ ExitFlag.set()\r
+ BuildTask.WaitForComplete()\r
+ Pa.CreateMakeFile(False)\r
+ EdkLogger.error("build", BUILD_ERROR, "Failed to build module", ExtraData=GlobalData.gBuildingModule)\r
+ # Start task scheduler\r
+ if not BuildTask.IsOnGoing():\r
+ BuildTask.StartScheduler(self.ThreadNumber, ExitFlag)\r
+\r
+ # in case there's an interruption. we need a full version of makefile for platform\r
+ Pa.CreateMakeFile(False)\r
+ if BuildTask.HasError():\r
+ EdkLogger.error("build", BUILD_ERROR, "Failed to build module", ExtraData=GlobalData.gBuildingModule)\r
+ self.MakeTime += int(round((time.time() - MakeStart)))\r
+\r
+ MakeContiue = time.time()\r
+ ExitFlag.set()\r
+ BuildTask.WaitForComplete()\r
+ self.CreateAsBuiltInf()\r
+ self.MakeTime += int(round((time.time() - MakeContiue)))\r
+ if BuildTask.HasError():\r
+ EdkLogger.error("build", BUILD_ERROR, "Failed to build module", ExtraData=GlobalData.gBuildingModule)\r