!INCLUDE $(BASE_TOOLS_PATH)\Source\C\Makefiles\ms.app\r
'''\r
\r
+AppTarget = '''\r
+all: $(APPFILE)\r
+$(APPFILE): $(OBJECTS)\r
+%s\r
+'''\r
+\r
PcdGccMakefile = '''\r
MAKEROOT ?= $(EDK_TOOLS_PATH)/Source/C\r
LIBS = -lCommon\r
self._VpdToolGuid = None\r
self._MacroDict = None\r
self.DefaultStores = None\r
+ self.UsedStructurePcd = None\r
\r
## handle Override Path of Module\r
def _HandleOverridePath(self):\r
EdkLogger.error("build", FORMAT_INVALID, Cause, ExtraData="%s.%s" % (TokenSpaceGuidCName, TokenCName))\r
GlobalData.BuildOptionPcd[i] = (TokenSpaceGuidCName, TokenCName, FieldName, pcdvalue, ("build command options", 1))\r
\r
+ if GlobalData.BuildOptionPcd:\r
+ for pcd in GlobalData.BuildOptionPcd:\r
+ (TokenSpaceGuidCName, TokenCName, FieldName, pcdvalue, _) = pcd\r
for BuildData in self._Bdb._CACHE_.values():\r
+ if BuildData.Arch != self.Arch:\r
+ continue\r
if BuildData.MetaFile.Ext == '.dec' or BuildData.MetaFile.Ext == '.dsc':\r
continue\r
for key in BuildData.Pcds:\r
if isinstance(self._DecPcds.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName), None), StructurePcd):\r
self._DecPcds.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName)).PcdValueFromComm = NoFiledValues[(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)][0]\r
else:\r
- if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES:\r
- Pcd.PcdValueFromComm = NoFiledValues[(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)][0]\r
- Pcd.DefaultValue = NoFiledValues[(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)][0]\r
- else:\r
- Pcd.PcdValueFromComm = StringToArray(NoFiledValues[(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)][0])\r
- Pcd.DefaultValue = StringToArray(NoFiledValues[(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)][0])\r
+ Pcd.PcdValueFromComm = NoFiledValues[(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)][0]\r
+ Pcd.DefaultValue = NoFiledValues[(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)][0]\r
for sku in Pcd.SkuInfoList:\r
SkuInfo = Pcd.SkuInfoList[sku]\r
if SkuInfo.DefaultValue:\r
- if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES:\r
- SkuInfo.DefaultValue = NoFiledValues[(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)][0]\r
- else:\r
- SkuInfo.DefaultValue = StringToArray(NoFiledValues[(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)][0])\r
+ SkuInfo.DefaultValue = NoFiledValues[(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)][0]\r
else:\r
- if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES:\r
- SkuInfo.HiiDefaultValue = NoFiledValues[(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)][0]\r
- else:\r
- SkuInfo.HiiDefaultValue = StringToArray(NoFiledValues[(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)][0])\r
+ SkuInfo.HiiDefaultValue = NoFiledValues[(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)][0]\r
for defaultstore in SkuInfo.DefaultStoreDict:\r
- if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES:\r
- SkuInfo.DefaultStoreDict[defaultstore] = NoFiledValues[(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)][0]\r
- else:\r
- SkuInfo.DefaultStoreDict[defaultstore] = StringToArray(NoFiledValues[(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)][0])\r
+ SkuInfo.DefaultStoreDict[defaultstore] = NoFiledValues[(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)][0]\r
if Pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII]]:\r
if Pcd.DatumType == TAB_VOID:\r
if not Pcd.MaxDatumSize:\r
else:\r
PcdInDec = self.DecPcds.get((Name, Guid))\r
if PcdInDec:\r
- if PcdInDec.DatumType in TAB_PCD_NUMERIC_TYPES:\r
- PcdInDec.PcdValueFromComm = NoFiledValues[(Guid, Name)][0]\r
- else:\r
- PcdInDec.PcdValueFromComm = StringToArray(NoFiledValues[(Guid, Name)][0])\r
+ PcdInDec.PcdValueFromComm = NoFiledValues[(Guid, Name)][0]\r
if PcdInDec.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD],\r
self._PCD_TYPE_STRING_[MODEL_PCD_PATCHABLE_IN_MODULE],\r
self._PCD_TYPE_STRING_[MODEL_PCD_FEATURE_FLAG],\r
self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC],\r
self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX]]:\r
self.Pcds[Name, Guid] = copy.deepcopy(PcdInDec)\r
- if PcdInDec.DatumType in TAB_PCD_NUMERIC_TYPES:\r
- self.Pcds[Name, Guid].DefaultValue = NoFiledValues[( Guid, Name)][0]\r
- else:\r
- self.Pcds[Name, Guid].DefaultValue = StringToArray(NoFiledValues[( Guid, Name)][0])\r
+ self.Pcds[Name, Guid].DefaultValue = NoFiledValues[( Guid, Name)][0]\r
if PcdInDec.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC],\r
self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX]]:\r
- if PcdInDec.DatumType in TAB_PCD_NUMERIC_TYPES:\r
- self.Pcds[Name, Guid].SkuInfoList = {TAB_DEFAULT:SkuInfoClass(TAB_DEFAULT, self.SkuIds[TAB_DEFAULT][0], '', '', '', '', '', NoFiledValues[( Guid, Name)][0])}\r
- else:\r
- self.Pcds[Name, Guid].SkuInfoList = {TAB_DEFAULT:SkuInfoClass(TAB_DEFAULT, self.SkuIds[TAB_DEFAULT][0], '', '', '', '', '', StringToArray(NoFiledValues[( Guid, Name)][0]))}\r
+ self.Pcds[Name, Guid].SkuInfoList = {TAB_DEFAULT:SkuInfoClass(TAB_DEFAULT, self.SkuIds[TAB_DEFAULT][0], '', '', '', '', '', NoFiledValues[( Guid, Name)][0])}\r
return AllPcds\r
\r
def OverrideByFdfOverAll(self,AllPcds):\r
else:\r
str_pcd_obj_str.DefaultFromDSC = {skuname:{defaultstore: str_pcd_obj.SkuInfoList[skuname].DefaultStoreDict.get(defaultstore, str_pcd_obj.SkuInfoList[skuname].DefaultValue) for defaultstore in DefaultStores} for skuname in str_pcd_obj.SkuInfoList}\r
S_pcd_set[Pcd] = str_pcd_obj_str\r
+ self.FilterStrcturePcd(S_pcd_set)\r
if S_pcd_set:\r
GlobalData.gStructurePcd[self.Arch] = S_pcd_set\r
for stru_pcd in S_pcd_set.values():\r
\r
map(self.FilterSkuSettings, [Pcds[pcdkey] for pcdkey in Pcds if Pcds[pcdkey].Type in DynamicPcdType])\r
return Pcds\r
+ #Filter the StrucutrePcd that is not used by any module in dsc file and fdf file.\r
+ def FilterStrcturePcd(self, S_pcd_set):\r
+ if not self.UsedStructurePcd:\r
+ FdfInfList = []\r
+ if GlobalData.gFdfParser:\r
+ FdfInfList = GlobalData.gFdfParser.Profile.InfList\r
+ FdfModuleList = [PathClass(NormPath(Inf), GlobalData.gWorkspace, Arch=self._Arch) for Inf in FdfInfList]\r
+ AllModulePcds = set()\r
+ ModuleSet = set(self._Modules.keys() + self.LibraryInstances + FdfModuleList)\r
+ for ModuleFile in ModuleSet:\r
+ ModuleData = self._Bdb[ModuleFile, self._Arch, self._Target, self._Toolchain]\r
+ AllModulePcds = AllModulePcds | set(ModuleData.Pcds.keys())\r
+\r
+ self.UsedStructurePcd = AllModulePcds\r
+ UnusedStruPcds = set(S_pcd_set.keys()) - self.UsedStructurePcd\r
+ for (Token, TokenSpaceGuid) in UnusedStruPcds:\r
+ del S_pcd_set[(Token, TokenSpaceGuid)]\r
\r
## Retrieve non-dynamic PCD settings\r
#\r
IsArray = IsFieldValueAnArray(FieldList[FieldName][0])\r
if IsArray:\r
try:\r
- FieldValue = ValueExpressionEx(FieldList[FieldName][0], TAB_VOID, self._GuidDict)(True)\r
+ FieldList[FieldName][0] = ValueExpressionEx(FieldList[FieldName][0], TAB_VOID, self._GuidDict)(True)\r
except BadExpression:\r
EdkLogger.error('Build', FORMAT_INVALID, "Invalid value format for %s. From %s Line %d " %\r
(".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldName)), FieldList[FieldName][1], FieldList[FieldName][2]))\r
try:\r
- if IsArray:\r
- Value, ValueSize = ParseFieldValue (FieldValue)\r
- else:\r
- Value, ValueSize = ParseFieldValue (FieldList[FieldName][0])\r
+ Value, ValueSize = ParseFieldValue (FieldList[FieldName][0])\r
except Exception:\r
EdkLogger.error('Build', FORMAT_INVALID, "Invalid value format for %s. From %s Line %d " % (".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldName)), FieldList[FieldName][1], FieldList[FieldName][2]))\r
if isinstance(Value, str):\r
\r
MakeApp = PcdMakefileHeader\r
if sys.platform == "win32":\r
- MakeApp = MakeApp + 'APPNAME = %s\n' % (PcdValueInitName) + 'OBJECTS = %s\%s.obj\n' % (self.OutputPath, PcdValueInitName) + 'INC = '\r
+ MakeApp = MakeApp + 'APPFILE = %s\%s.exe\n' % (self.OutputPath, PcdValueInitName) + 'APPNAME = %s\n' % (PcdValueInitName) + 'OBJECTS = %s\%s.obj\n' % (self.OutputPath, PcdValueInitName) + 'INC = '\r
else:\r
MakeApp = MakeApp + PcdGccMakefile\r
- MakeApp = MakeApp + 'APPNAME = %s\n' % (PcdValueInitName) + 'OBJECTS = %s/%s.o\n' % (self.OutputPath, PcdValueInitName) + \\r
+ MakeApp = MakeApp + 'APPFILE = %s/%s\n' % (self.OutputPath, PcdValueInitName) + 'APPNAME = %s\n' % (PcdValueInitName) + 'OBJECTS = %s/%s.o\n' % (self.OutputPath, PcdValueInitName) + \\r
'include $(MAKEROOT)/Makefiles/app.makefile\n' + 'INCLUDE +='\r
\r
IncSearchList = []\r
\r
if Target == "*" or Target == self._Target:\r
if Tag == "*" or Tag == self._Toolchain:\r
- if Arch == "*" or Arch == self.Arch:\r
+ if Arch == "*":\r
if Tool not in BuildOptions:\r
BuildOptions[Tool] = OrderedDict()\r
if Attr != "FLAGS" or Attr not in BuildOptions[Tool] or self.BuildOptions[Options].startswith('='):\r
\r
if sys.platform == "win32":\r
MakeApp = MakeApp + PcdMakefileEnd\r
+ MakeApp = MakeApp + AppTarget % ("""\tcopy $(APPLICATION) $(APPFILE) /y """)\r
+ else:\r
+ MakeApp = MakeApp + AppTarget % ("""\tcp $(APPLICATION) $(APPFILE) """)\r
MakeApp = MakeApp + '\n'\r
IncludeFileFullPaths = []\r
for includefile in IncludeFiles:\r
OutputValueFile = os.path.join(self.OutputPath, 'Output.txt')\r
SaveFileOnChange(InputValueFile, InitByteValue, False)\r
\r
- PcdValueInitExe = PcdValueInitName\r
+ Dest_PcdValueInitExe = PcdValueInitName\r
if not sys.platform == "win32":\r
- PcdValueInitExe = os.path.join(os.getenv("EDK_TOOLS_PATH"), 'Source', 'C', 'bin', PcdValueInitName)\r
+ Dest_PcdValueInitExe = os.path.join(self.OutputPath, PcdValueInitName)\r
else:\r
- PcdValueInitExe = os.path.join(os.getenv("EDK_TOOLS_PATH"), 'Bin', 'Win32', PcdValueInitName) +".exe"\r
-\r
+ Dest_PcdValueInitExe = os.path.join(self.OutputPath, PcdValueInitName) +".exe"\r
Messages = ''\r
if sys.platform == "win32":\r
MakeCommand = 'nmake -f %s' % (MakeFileName)\r
MakeCommand = 'make -f %s' % (MakeFileName)\r
returncode, StdOut, StdErr = DscBuildData.ExecuteCommand (MakeCommand)\r
Messages = StdErr\r
+\r
Messages = Messages.split('\n')\r
MessageGroup = []\r
if returncode != 0:\r
else:\r
EdkLogger.error('Build', COMMAND_FAILURE, 'Can not execute command: %s' % MakeCommand)\r
\r
- if DscBuildData.NeedUpdateOutput(OutputValueFile, PcdValueInitExe, InputValueFile):\r
- Command = PcdValueInitExe + ' -i %s -o %s' % (InputValueFile, OutputValueFile)\r
+ if DscBuildData.NeedUpdateOutput(OutputValueFile, Dest_PcdValueInitExe, InputValueFile):\r
+ Command = Dest_PcdValueInitExe + ' -i %s -o %s' % (InputValueFile, OutputValueFile)\r
returncode, StdOut, StdErr = DscBuildData.ExecuteCommand (Command)\r
if returncode != 0:\r
EdkLogger.warn('Build', COMMAND_FAILURE, 'Can not collect output from command: %s' % Command)\r