diff options
Diffstat (limited to 'BaseTools/Source/Python/AutoGen')
-rw-r--r-- | BaseTools/Source/Python/AutoGen/AutoGen.py | 22 | ||||
-rw-r--r-- | BaseTools/Source/Python/AutoGen/GenC.py | 25 | ||||
-rw-r--r-- | BaseTools/Source/Python/AutoGen/GenMake.py | 9 |
3 files changed, 44 insertions, 12 deletions
diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py index 2def474b17..700b689a54 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -2184,13 +2184,19 @@ class ModuleAutoGen(AutoGen): def _GetBuildOptionIncPathList(self):
if self._BuildOptionIncPathList == None:
#
- # Regular expression for finding Include Directories, the difference between MSFT and INTEL/GCC
+ # Regular expression for finding Include Directories, the difference between MSFT and INTEL/GCC/RVCT
# is the former use /I , the Latter used -I to specify include directories
#
if self.PlatformInfo.ToolChainFamily in ('MSFT'):
gBuildOptIncludePattern = re.compile(r"(?:.*?)/I[ \t]*([^ ]*)", re.MULTILINE|re.DOTALL)
- elif self.PlatformInfo.ToolChainFamily in ('INTEL', 'GCC'):
+ elif self.PlatformInfo.ToolChainFamily in ('INTEL', 'GCC', 'RVCT'):
gBuildOptIncludePattern = re.compile(r"(?:.*?)-I[ \t]*([^ ]*)", re.MULTILINE|re.DOTALL)
+ else:
+ #
+ # New ToolChainFamily, don't known whether there is option to specify include directories
+ #
+ self._BuildOptionIncPathList = []
+ return self._BuildOptionIncPathList
BuildOptionIncPathList = []
for Tool in ('CC', 'PP', 'VFRPP', 'ASLPP', 'ASLCC', 'APP', 'ASM'):
@@ -2200,7 +2206,17 @@ class ModuleAutoGen(AutoGen): except KeyError:
FlagOption = ''
- IncPathList = [NormPath(Path, self.Macros) for Path in gBuildOptIncludePattern.findall(FlagOption)]
+ if self.PlatformInfo.ToolChainFamily != 'RVCT':
+ IncPathList = [NormPath(Path, self.Macros) for Path in gBuildOptIncludePattern.findall(FlagOption)]
+ else:
+ #
+ # RVCT may specify a list of directory seperated by commas
+ #
+ IncPathList = []
+ for Path in gBuildOptIncludePattern.findall(FlagOption):
+ PathList = GetSplitList(Path, TAB_COMMA_SPLIT)
+ IncPathList += [NormPath(PathEntry, self.Macros) for PathEntry in PathList]
+
#
# EDK II modules must not reference header files outside of the packages they depend on or
# within the module's directory tree. Report error if violation.
diff --git a/BaseTools/Source/Python/AutoGen/GenC.py b/BaseTools/Source/Python/AutoGen/GenC.py index c6b65f4924..561114d141 100644 --- a/BaseTools/Source/Python/AutoGen/GenC.py +++ b/BaseTools/Source/Python/AutoGen/GenC.py @@ -310,9 +310,18 @@ gAutoGenHPrologueString = TemplateString(""" #ifndef _${File}_${Guid} #define _${File}_${Guid} +#ifdef __cplusplus +extern "C" { +#endif + """) gAutoGenHEpilogueString = """ + +#ifdef __cplusplus +} +#endif + #endif """ @@ -917,7 +926,7 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): "No generated token number for %s.%s\n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName), ExtraData="[%s]" % str(Info)) TokenNumber = PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] - AutoGenH.Append('\n#define %s %d\n' % (PcdTokenName, TokenNumber)) + AutoGenH.Append('\n#define %s %dU\n' % (PcdTokenName, TokenNumber)) EdkLogger.debug(EdkLogger.DEBUG_3, "Creating code for " + Pcd.TokenCName + "." + Pcd.TokenSpaceGuidCName) if Pcd.Type not in gItemTypeStringDatabase: @@ -960,9 +969,9 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): if Pcd.DatumType == 'BOOLEAN': BoolValue = Value.upper() if BoolValue == 'TRUE': - Value = 1 + Value = '1U' elif BoolValue == 'FALSE': - Value = 0 + Value = '0U' if Pcd.DatumType in ['UINT64', 'UINT32', 'UINT16', 'UINT8']: try: @@ -994,6 +1003,8 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): EdkLogger.error("build", AUTOGEN_ERROR, "Too large PCD value for datum type [%s] of PCD %s.%s" % (Pcd.DatumType, Pcd.TokenSpaceGuidCName, Pcd.TokenCName), ExtraData="[%s]" % str(Info)) + if not Value.endswith('U'): + Value += 'U' elif Pcd.DatumType == 'UINT16': if ValueNumber < 0: EdkLogger.error("build", AUTOGEN_ERROR, @@ -1003,6 +1014,8 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): EdkLogger.error("build", AUTOGEN_ERROR, "Too large PCD value for datum type [%s] of PCD %s.%s" % (Pcd.DatumType, Pcd.TokenSpaceGuidCName, Pcd.TokenCName), ExtraData="[%s]" % str(Info)) + if not Value.endswith('U'): + Value += 'U' elif Pcd.DatumType == 'UINT8': if ValueNumber < 0: EdkLogger.error("build", AUTOGEN_ERROR, @@ -1012,6 +1025,8 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): EdkLogger.error("build", AUTOGEN_ERROR, "Too large PCD value for datum type [%s] of PCD %s.%s" % (Pcd.DatumType, Pcd.TokenSpaceGuidCName, Pcd.TokenCName), ExtraData="[%s]" % str(Info)) + if not Value.endswith('U'): + Value += 'U' if Pcd.DatumType == 'VOID*': if Pcd.MaxDatumSize == None or Pcd.MaxDatumSize == '': EdkLogger.error("build", AUTOGEN_ERROR, @@ -1131,7 +1146,7 @@ def CreateLibraryPcdCode(Info, AutoGenC, AutoGenH, Pcd): Type = '(VOID *)' Array = '[]' - AutoGenH.Append('#define _PCD_TOKEN_%s %d\n' % (TokenCName, TokenNumber)) + AutoGenH.Append('#define _PCD_TOKEN_%s %dU\n' % (TokenCName, TokenNumber)) PcdItemType = Pcd.Type #if PcdItemType in gDynamicPcd: @@ -1405,6 +1420,8 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase): # if Pcd.DatumType == "UINT64": ValueList.append(Sku.DefaultValue + "ULL") + elif Pcd.DatumType in ("UINT32", "UINT16", "UINT8"): + ValueList.append(Sku.DefaultValue + "U") else: ValueList.append(Sku.DefaultValue) diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/Python/AutoGen/GenMake.py index 478ab0f01b..b34977d7a9 100644 --- a/BaseTools/Source/Python/AutoGen/GenMake.py +++ b/BaseTools/Source/Python/AutoGen/GenMake.py @@ -1312,17 +1312,16 @@ ${END}\t@cd $(BUILD_DIR)\n if PlatformInfo.FdfFile != None and PlatformInfo.FdfFile != "": FdfFileList = [PlatformInfo.FdfFile] # macros passed to GenFds - # MacroList.append('"%s=%s"' % ("WORKSPACE", GlobalData.gWorkspace)) - MacroList.append('"%s=%s"' % ("EFI_SOURCE", GlobalData.gEfiSource)) - MacroList.append('"%s=%s"' % ("EDK_SOURCE", GlobalData.gEdkSource)) + MacroList.append('"%s=%s"' % ("EFI_SOURCE", GlobalData.gEfiSource.replace('\\', '\\\\'))) + MacroList.append('"%s=%s"' % ("EDK_SOURCE", GlobalData.gEdkSource.replace('\\', '\\\\'))) for MacroName in GlobalData.gGlobalDefines: if GlobalData.gGlobalDefines[MacroName] != "": - MacroList.append('"%s=%s"' % (MacroName, GlobalData.gGlobalDefines[MacroName])) + MacroList.append('"%s=%s"' % (MacroName, GlobalData.gGlobalDefines[MacroName].replace('\\', '\\\\'))) else: MacroList.append('"%s"' % MacroName) for MacroName in GlobalData.gCommandLineDefines: if GlobalData.gCommandLineDefines[MacroName] != "": - MacroList.append('"%s=%s"' % (MacroName, GlobalData.gCommandLineDefines[MacroName])) + MacroList.append('"%s=%s"' % (MacroName, GlobalData.gCommandLineDefines[MacroName].replace('\\', '\\\\'))) else: MacroList.append('"%s"' % MacroName) else: |