- # we need information in platform description file to determine how to build\r
- self.Platform = self.BuildDatabase[self.PlatformFile, 'COMMON']\r
- if not self.Fdf:\r
- self.Fdf = self.Platform.FlashDefinition\r
- \r
- LoadFixAddressString = None\r
- if TAB_FIX_LOAD_TOP_MEMORY_ADDRESS in GlobalData.gGlobalDefines:\r
- LoadFixAddressString = GlobalData.gGlobalDefines[TAB_FIX_LOAD_TOP_MEMORY_ADDRESS]\r
- else:\r
- LoadFixAddressString = self.Platform.LoadFixAddress\r
-\r
- if LoadFixAddressString != None and LoadFixAddressString != '':\r
- try:\r
- if LoadFixAddressString.upper().startswith('0X'):\r
- self.LoadFixAddress = int (LoadFixAddressString, 16)\r
- else:\r
- self.LoadFixAddress = int (LoadFixAddressString)\r
- except:
- EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS %s is not valid dec or hex string" % (LoadFixAddressString))\r
- if self.LoadFixAddress < 0:\r
- EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS is set to the invalid negative value %s" % (LoadFixAddressString))\r
- if self.LoadFixAddress != 0xFFFFFFFFFFFFFFFF and self.LoadFixAddress % 0x1000 != 0:\r
- EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS is set to the invalid unaligned 4K value %s" % (LoadFixAddressString))\r
-\r
- if self.SkuId == None or self.SkuId == '':\r
- self.SkuId = self.Platform.SkuName\r
-\r
- # check FD/FV build target\r
- if self.Fdf == None or self.Fdf == "":\r
- if self.FdList != []:\r
- EdkLogger.info("No flash definition file found. FD [%s] will be ignored." % " ".join(self.FdList))\r
- self.FdList = []\r
- if self.FvList != []:\r
- EdkLogger.info("No flash definition file found. FV [%s] will be ignored." % " ".join(self.FvList))\r
- self.FvList = []\r
- else:\r
- FdfParserObj = FdfParser(str(self.Fdf))\r
- FdfParserObj.ParseFile()\r
- for fvname in self.FvList:\r
- if fvname.upper() not in FdfParserObj.Profile.FvDict.keys():\r
- EdkLogger.error("build", OPTION_VALUE_INVALID,\r
- "No such an FV in FDF file: %s" % fvname)\r
-\r
- #\r
- # Merge Arch\r
- #\r
- if self.ArchList == None or len(self.ArchList) == 0:\r
- ArchList = set(self.Platform.SupArchList)\r
- else:\r
- ArchList = set(self.ArchList) & set(self.Platform.SupArchList)\r
- if len(ArchList) == 0:\r
- EdkLogger.error("build", PARAMETER_INVALID,\r
- ExtraData = "Active platform supports [%s] only, but [%s] is given."\r
- % (" ".join(self.Platform.SupArchList), " ".join(self.ArchList)))\r
- elif len(ArchList) != len(self.ArchList):\r
- SkippedArchList = set(self.ArchList).symmetric_difference(set(self.Platform.SupArchList))\r
- EdkLogger.verbose("\nArch [%s] is ignored because active platform supports [%s] but [%s] is specified !"\r
- % (" ".join(SkippedArchList), " ".join(self.Platform.SupArchList), " ".join(self.ArchList)))\r
- self.ArchList = tuple(ArchList)\r
-\r
- # Merge build target\r
- if self.BuildTargetList == None or len(self.BuildTargetList) == 0:\r
- BuildTargetList = self.Platform.BuildTargets\r
- else:\r
- BuildTargetList = list(set(self.BuildTargetList) & set(self.Platform.BuildTargets))\r
- if BuildTargetList == []:\r
- EdkLogger.error("build", PARAMETER_INVALID, "Active platform only supports [%s], but [%s] is given"\r
- % (" ".join(self.Platform.BuildTargets), " ".join(self.BuildTargetList)))\r
- self.BuildTargetList = BuildTargetList\r
-\r