## Regular expression for matching C style #include "XXX.asl" in asl file\r
gAslCIncludePattern = re.compile(r'^(\s*)#include\s*[<"]\s*([-\\/\w.]+)\s*([>"])', re.MULTILINE)\r
## Patterns used to convert EDK conventions to EDK2 ECP conventions\r
-gImportCodePatterns = [\r
- [\r
- re.compile('^(\s*)\(\*\*PeiServices\)\.PciCfg\s*=\s*([^;\s]+);', re.MULTILINE),\r
- '''\\1{\r
-\\1 STATIC EFI_PEI_PPI_DESCRIPTOR gEcpPeiPciCfgPpiList = {\r
-\\1 (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
-\\1 &gEcpPeiPciCfgPpiGuid,\r
-\\1 \\2\r
-\\1 };\r
-\\1 (**PeiServices).InstallPpi (PeiServices, &gEcpPeiPciCfgPpiList);\r
-\\1}'''\r
- ],\r
-\r
- [\r
- re.compile('^(\s*)\(\*PeiServices\)->PciCfg\s*=\s*([^;\s]+);', re.MULTILINE),\r
- '''\\1{\r
-\\1 STATIC EFI_PEI_PPI_DESCRIPTOR gEcpPeiPciCfgPpiList = {\r
-\\1 (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
-\\1 &gEcpPeiPciCfgPpiGuid,\r
-\\1 \\2\r
-\\1 };\r
-\\1 (**PeiServices).InstallPpi (PeiServices, &gEcpPeiPciCfgPpiList);\r
-\\1}'''\r
- ],\r
-\r
- [\r
- re.compile("(\s*).+->Modify[\s\n]*\(", re.MULTILINE),\r
- '\\1PeiLibPciCfgModify ('\r
- ],\r
-\r
- [\r
- re.compile("(\W*)gRT->ReportStatusCode[\s\n]*\(", re.MULTILINE),\r
- '\\1EfiLibReportStatusCode ('\r
- ],\r
-\r
- [\r
- re.compile('#include\s+EFI_GUID_DEFINITION\s*\(FirmwareFileSystem\)', re.MULTILINE),\r
- '#include EFI_GUID_DEFINITION (FirmwareFileSystem)\n#include EFI_GUID_DEFINITION (FirmwareFileSystem2)'\r
- ],\r
-\r
- [\r
- re.compile('gEfiFirmwareFileSystemGuid', re.MULTILINE),\r
- 'gEfiFirmwareFileSystem2Guid'\r
- ],\r
-\r
- [\r
- re.compile('EFI_FVH_REVISION', re.MULTILINE),\r
- 'EFI_FVH_PI_REVISION'\r
- ],\r
-\r
- [\r
- re.compile("(\s*)\S*CreateEvent\s*\([\s\n]*EFI_EVENT_SIGNAL_READY_TO_BOOT[^,]*,((?:[^;]+\n)+)(\s*\));", re.MULTILINE),\r
- '\\1EfiCreateEventReadyToBoot (\\2\\3;'\r
- ],\r
-\r
- [\r
- re.compile("(\s*)\S*CreateEvent\s*\([\s\n]*EFI_EVENT_SIGNAL_LEGACY_BOOT[^,]*,((?:[^;]+\n)+)(\s*\));", re.MULTILINE),\r
- '\\1EfiCreateEventLegacyBoot (\\2\\3;'\r
- ],\r
-# [\r
-# re.compile("(\W)(PEI_PCI_CFG_PPI)(\W)", re.MULTILINE),\r
-# '\\1ECP_\\2\\3'\r
-# ]\r
-]\r
\r
## file cache to avoid circular include in ASL file\r
gIncludedAslFile = []\r
fStringIO.close ()\r
fInputfile.close ()\r
\r
-## Trim EDK source code file(s)\r
-#\r
-#\r
-# @param Source File or directory to be trimmed\r
-# @param Target File or directory to store the trimmed content\r
-#\r
-def TrimEdkSources(Source, Target):\r
- if os.path.isdir(Source):\r
- for CurrentDir, Dirs, Files in os.walk(Source):\r
- if '.svn' in Dirs:\r
- Dirs.remove('.svn')\r
- elif "CVS" in Dirs:\r
- Dirs.remove("CVS")\r
-\r
- for FileName in Files:\r
- Dummy, Ext = os.path.splitext(FileName)\r
- if Ext.upper() not in ['.C', '.H']: continue\r
- if Target is None or Target == '':\r
- TrimEdkSourceCode(\r
- os.path.join(CurrentDir, FileName),\r
- os.path.join(CurrentDir, FileName)\r
- )\r
- else:\r
- TrimEdkSourceCode(\r
- os.path.join(CurrentDir, FileName),\r
- os.path.join(Target, CurrentDir[len(Source)+1:], FileName)\r
- )\r
- else:\r
- TrimEdkSourceCode(Source, Target)\r
-\r
-## Trim one EDK source code file\r
-#\r
-# Do following replacement:\r
-#\r
-# (**PeiServices\).PciCfg = <*>;\r
-# => {\r
-# STATIC EFI_PEI_PPI_DESCRIPTOR gEcpPeiPciCfgPpiList = {\r
-# (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
-# &gEcpPeiPciCfgPpiGuid,\r
-# <*>\r
-# };\r
-# (**PeiServices).InstallPpi (PeiServices, &gEcpPeiPciCfgPpiList);\r
-#\r
-# <*>Modify(<*>)\r
-# => PeiLibPciCfgModify (<*>)\r
-#\r
-# gRT->ReportStatusCode (<*>)\r
-# => EfiLibReportStatusCode (<*>)\r
-#\r
-# #include <LoadFile\.h>\r
-# => #include <FvLoadFile.h>\r
-#\r
-# CreateEvent (EFI_EVENT_SIGNAL_READY_TO_BOOT, <*>)\r
-# => EfiCreateEventReadyToBoot (<*>)\r
-#\r
-# CreateEvent (EFI_EVENT_SIGNAL_LEGACY_BOOT, <*>)\r
-# => EfiCreateEventLegacyBoot (<*>)\r
-#\r
-# @param Source File to be trimmed\r
-# @param Target File to store the trimmed content\r
-#\r
-def TrimEdkSourceCode(Source, Target):\r
- EdkLogger.verbose("\t%s -> %s" % (Source, Target))\r
- CreateDirectory(os.path.dirname(Target))\r
-\r
- try:\r
- f = open (Source, 'r')\r
- except:\r
- EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Source)\r
- # read whole file\r
- Lines = f.read()\r
- f.close()\r
-\r
- NewLines = None\r
- for Re, Repl in gImportCodePatterns:\r
- if NewLines is None:\r
- NewLines = Re.sub(Repl, Lines)\r
- else:\r
- NewLines = Re.sub(Repl, NewLines)\r
-\r
- # save all lines if trimmed\r
- if Source == Target and NewLines == Lines:\r
- return\r
-\r
- try:\r
- f = open (Target, 'w')\r
- except:\r
- EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Target)\r
- f.write(NewLines)\r
- f.close()\r
-\r
\r
## Parse command line options\r
#\r
help="The input file is EFI image"),\r
make_option("-a", "--asl-file", dest="FileType", const="Asl", action="store_const",\r
help="The input file is ASL file"),\r
- make_option("-8", "--Edk-source-code", dest="FileType", const="EdkSourceCode", action="store_const",\r
- help="The input file is source code for Edk to be trimmed for ECP"),\r
-\r
make_option("-c", "--convert-hex", dest="ConvertHex", action="store_true",\r
help="Convert standard hex format (0xabcd) to MASM format (abcdh)"),\r
\r
if CommandOptions.OutputFile is None:\r
CommandOptions.OutputFile = os.path.splitext(InputFile)[0] + '.iii'\r
TrimAslFile(InputFile, CommandOptions.OutputFile, CommandOptions.IncludePathFile)\r
- elif CommandOptions.FileType == "EdkSourceCode":\r
- TrimEdkSources(InputFile, CommandOptions.OutputFile)\r
elif CommandOptions.FileType == "VfrOffsetBin":\r
GenerateVfrBinSec(CommandOptions.ModuleName, CommandOptions.DebugDir, CommandOptions.OutputFile)\r
else :\r