## @file\r
# process depex section generation\r
#\r
-# Copyright (c) 2007, Intel Corporation\r
+# Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>\r
#\r
-# All rights reserved. This program and the accompanying materials\r
+# This program and the accompanying materials\r
# are licensed and made available under the terms and conditions of the BSD License\r
# which accompanies this distribution. The full text of the license may be found at\r
# http://opensource.org/licenses/bsd-license.php\r
\r
def __FindGuidValue(self, CName):\r
for Arch in GenFdsGlobalVariable.ArchList:\r
- for PkgDb in GenFdsGlobalVariable.WorkSpace.PackageList:\r
+ for PkgDb in GenFdsGlobalVariable.WorkSpace.GetPackageList(GenFdsGlobalVariable.ActivePlatform, \r
+ Arch, \r
+ GenFdsGlobalVariable.TargetName, \r
+ GenFdsGlobalVariable.ToolChainTag):\r
if CName in PkgDb.Ppis:\r
return PkgDb.Ppis[CName]\r
if CName in PkgDb.Protocols:\r
# @retval tuple (Generated file name list, section alignment)\r
#\r
def GenSection(self, OutputPath, ModuleName, SecNum, keyStringList, FfsFile = None, Dict = {}):\r
+ \r
+ if self.ExpressionProcessed == False:\r
+ self.Expression = self.Expression.replace("\n", " ").replace("\r", " ")\r
+ ExpList = self.Expression.split()\r
+ ExpGuidDict = {}\r
\r
- self.Expression = self.Expression.replace("\n", " ").replace("\r", " ")\r
- ExpList = self.Expression.split()\r
- ExpGuidDict = {}\r
+ for Exp in ExpList:\r
+ if Exp.upper() not in ('AND', 'OR', 'NOT', 'TRUE', 'FALSE', 'SOR', 'BEFORE', 'AFTER', 'END'):\r
+ GuidStr = self.__FindGuidValue(Exp)\r
+ if GuidStr == None:\r
+ EdkLogger.error("GenFds", RESOURCE_NOT_AVAILABLE,\r
+ "Depex GUID %s could not be found in build DB! (ModuleName: %s)" % (Exp, ModuleName))\r
\r
- for Exp in ExpList:\r
- if Exp.upper() not in ('AND', 'OR', 'NOT', 'TRUE', 'FALSE', 'SOR', 'BEFORE', 'AFTER', 'END'):\r
- GuidStr = self.__FindGuidValue(Exp)\r
- if GuidStr == None:\r
- EdkLogger.error("GenFds", RESOURCE_NOT_AVAILABLE,\r
- "Depex GUID %s could not be found in build DB! (ModuleName: %s)" % (Exp, ModuleName))\r
+ ExpGuidDict[Exp] = GuidStr\r
\r
- ExpGuidDict[Exp] = GuidStr\r
+ for Item in ExpGuidDict:\r
+ self.Expression = self.Expression.replace(Item, ExpGuidDict[Item])\r
\r
- for Item in ExpGuidDict:\r
- self.Expression = self.Expression.replace(Item, ExpGuidDict[Item])\r
+ self.Expression = self.Expression.strip()\r
+ self.ExpressionProcessed = True\r
\r
- self.Expression = self.Expression.strip()\r
- ModuleType = (self.DepexType.startswith('PEI') and ['PEIM'] or ['DXE_DRIVER'])[0]\r
- if self.DepexType.startswith('SMM'):\r
- ModuleType = 'SMM_DRIVER'\r
- InputFile = os.path.join (OutputPath, ModuleName + 'SEC' + SecNum + '.dpx')\r
- InputFile = os.path.normpath(InputFile)\r
+ if self.DepexType == 'PEI_DEPEX_EXP':\r
+ ModuleType = 'PEIM'\r
+ SecType = 'PEI_DEPEX'\r
+ elif self.DepexType == 'DXE_DEPEX_EXP':\r
+ ModuleType = 'DXE_DRIVER'\r
+ SecType = 'DXE_DEPEX'\r
+ elif self.DepexType == 'SMM_DEPEX_EXP':\r
+ ModuleType = 'DXE_SMM_DRIVER'\r
+ SecType = 'SMM_DEPEX'\r
+ else:\r
+ EdkLogger.error("GenFds", FORMAT_INVALID,\r
+ "Depex type %s is not valid for module %s" % (self.DepexType, ModuleName))\r
\r
- Dpx = DependencyExpression(self.Expression, ModuleType)\r
- Dpx.Generate(InputFile)\r
+ InputFile = os.path.join (OutputPath, ModuleName + 'SEC' + SecNum + '.depex')\r
+ InputFile = os.path.normpath(InputFile)\r
+ Depex = DependencyExpression(self.Expression, ModuleType)\r
+ Depex.Generate(InputFile)\r
\r
- OutputFile = os.path.join (OutputPath, ModuleName + 'SEC' + SecNum + '.depex')\r
- if self.DepexType.startswith('SMM'):\r
- OutputFile = os.path.join (OutputPath, ModuleName + 'SEC' + SecNum + '.smm')\r
+ OutputFile = os.path.join (OutputPath, ModuleName + 'SEC' + SecNum + '.dpx')\r
OutputFile = os.path.normpath(OutputFile)\r
- SecType = (self.DepexType.startswith('PEI') and ['PEI_DEPEX'] or ['DXE_DEPEX'])[0]\r
- if self.DepexType.startswith('SMM'):\r
- SecType = 'SMM_DEPEX'\r
- \r
+\r
GenFdsGlobalVariable.GenerateSection(OutputFile, [InputFile], Section.Section.SectionType.get (SecType))\r
FileList = [OutputFile]\r
return FileList, self.Alignment\r