From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.20; helo=mga02.intel.com; envelope-from=liming.gao@intel.com; receiver=edk2-devel@lists.01.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 5BB49211DF24C for ; Tue, 19 Mar 2019 00:30:33 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Mar 2019 00:30:32 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,497,1544515200"; d="scan'208";a="143210924" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga002.jf.intel.com with ESMTP; 19 Mar 2019 00:30:32 -0700 Received: from fmsmsx113.amr.corp.intel.com (10.18.116.7) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 19 Mar 2019 00:30:32 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by FMSMSX113.amr.corp.intel.com (10.18.116.7) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 19 Mar 2019 00:30:31 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.74]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.80]) with mapi id 14.03.0415.000; Tue, 19 Mar 2019 15:30:29 +0800 From: "Gao, Liming" To: "Feng, Bob C" , "edk2-devel@lists.01.org" Thread-Topic: [edk2] [Patch] BaseTools: Remove EDK_GLOBAL related logic Thread-Index: AQHU3AV3Gw44+sR5AkKdwFsCp0wpsqYSkgEg Date: Tue, 19 Mar 2019 07:30:28 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E40706F@SHSMSX104.ccr.corp.intel.com> References: <20190316143447.24152-1-bob.c.feng@intel.com> In-Reply-To: <20190316143447.24152-1-bob.c.feng@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [Patch] BaseTools: Remove EDK_GLOBAL related logic X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Mar 2019 07:30:33 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Bob: Some platform still specifies EDK_GLOBAL, such as https://github.com/tian= ocore/edk2-platforms/blob/devel-MinPlatform/Platform/Intel/PurleyOpenBoardP= kg/BoardMtOlympus/PlatformPkg.dsc. Please update them first.=20 Thanks Liming >-----Original Message----- >From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of >Feng, Bob C >Sent: Saturday, March 16, 2019 10:35 PM >To: edk2-devel@lists.01.org >Cc: Gao, Liming >Subject: [edk2] [Patch] BaseTools: Remove EDK_GLOBAL related logic > >BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1350 > >Macros defined using EDK_GLOBAL are only valid when processing >EDK libraries and components. > >Contributed-under: TianoCore Contribution Agreement 1.1 >Signed-off-by: Bob Feng >Cc: Liming Gao >--- > BaseTools/Source/Python/Common/DataType.py | 1 - > BaseTools/Source/Python/Common/GlobalData.py | 3 +-- > .../Python/CommonDataClass/DataClass.py | 1 - > .../Ecc/MetaFileWorkspace/MetaFileParser.py | 19 ++---------------- > .../Source/Python/UPT/Library/Parsing.py | 2 +- > .../Source/Python/UPT/Logger/StringTable.py | 2 -- > .../Source/Python/Workspace/InfBuildData.py | 1 - > .../Source/Python/Workspace/MetaFileParser.py | 20 ++----------------- > 8 files changed, 6 insertions(+), 43 deletions(-) > >diff --git a/BaseTools/Source/Python/Common/DataType.py >b/BaseTools/Source/Python/Common/DataType.py >index 798c0e353d..99bb60c852 100644 >--- a/BaseTools/Source/Python/Common/DataType.py >+++ b/BaseTools/Source/Python/Common/DataType.py >@@ -415,11 +415,10 @@ TAB_DSC_DEFINES_RT_BASE_ADDRESS =3D >'RtBaseAddress' > TAB_DSC_DEFINES_RFC_LANGUAGES =3D 'RFC_LANGUAGES' > TAB_DSC_DEFINES_ISO_LANGUAGES =3D 'ISO_LANGUAGES' > TAB_DSC_DEFINES_DEFINE =3D 'DEFINE' > TAB_DSC_DEFINES_VPD_TOOL_GUID =3D 'VPD_TOOL_GUID' > TAB_FIX_LOAD_TOP_MEMORY_ADDRESS =3D >'FIX_LOAD_TOP_MEMORY_ADDRESS' >-TAB_DSC_DEFINES_EDKGLOBAL =3D 'EDK_GLOBAL' > TAB_DSC_PREBUILD =3D 'PREBUILD' > TAB_DSC_POSTBUILD =3D 'POSTBUILD' > # > # TargetTxt Definitions > # >diff --git a/BaseTools/Source/Python/Common/GlobalData.py >b/BaseTools/Source/Python/Common/GlobalData.py >index f117998b0b..9f42484dc1 100644 >--- a/BaseTools/Source/Python/Common/GlobalData.py >+++ b/BaseTools/Source/Python/Common/GlobalData.py >@@ -26,11 +26,10 @@ gPlatformDefines =3D {} > gPlatformPcds =3D {} > # PCDs with type that are not fixed at build and feature flag > gPlatformOtherPcds =3D {} > gActivePlatform =3D None > gCommandLineDefines =3D {} >-gEdkGlobal =3D {} > gOverrideDir =3D {} > gCommandMaxLength =3D 4096 > # for debug trace purpose when problem occurs > gProcessingFile =3D '' > gBuildingModule =3D '' >@@ -40,11 +39,11 @@ gDefaultStores =3D [] > # definition for a MACRO name. used to create regular expressions below. > _MacroNamePattern =3D "[A-Z][A-Z0-9_]*" > > ## Regular expression for matching macro used in DSC/DEC/INF file inclusi= on > gMacroRefPattern =3D re.compile("\$\(({})\)".format(_MacroNamePattern), >re.UNICODE) >-gMacroDefPattern =3D re.compile("^(DEFINE|EDK_GLOBAL)[ \t]+") >+gMacroDefPattern =3D re.compile("^(DEFINE)[ \t]+") > gMacroNamePattern =3D re.compile("^{}$".format(_MacroNamePattern)) > > # definition for a GUID. used to create regular expressions below. > _HexChar =3D r"[0-9a-fA-F]" > _GuidPattern =3D r"{Hex}{{8}}-{Hex}{{4}}-{Hex}{{4}}-{Hex}{{4}}- >{Hex}{{12}}".format(Hex=3D_HexChar) >diff --git a/BaseTools/Source/Python/CommonDataClass/DataClass.py >b/BaseTools/Source/Python/CommonDataClass/DataClass.py >index 2d93f79b09..ec5bb194f4 100644 >--- a/BaseTools/Source/Python/CommonDataClass/DataClass.py >+++ b/BaseTools/Source/Python/CommonDataClass/DataClass.py >@@ -105,11 +105,10 @@ MODEL_META_DATA_PACKAGE =3D 5011 > MODEL_META_DATA_NMAKE =3D 5012 > MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSEIF =3D 5013 > MODEL_META_DATA_CONDITIONAL_STATEMENT_ENDIF =3D 5014 > MODEL_META_DATA_COMPONENT_SOURCE_OVERRIDE_PATH =3D 5015 > MODEL_META_DATA_COMMENT =3D 5016 >-MODEL_META_DATA_GLOBAL_DEFINE =3D 5017 > MODEL_META_DATA_SECTION_HEADER =3D 5100 > MODEL_META_DATA_SUBSECTION_HEADER =3D 5200 > MODEL_META_DATA_TAIL_COMMENT =3D 5300 > > MODEL_EXTERNAL_DEPENDENCY =3D 10000 >diff --git >a/BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.py >b/BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.py >index 862974894a..cba1f40837 100644 >--- a/BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.py >+++ b/BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.py >@@ -40,11 +40,11 @@ from Common.LongFilePathSupport import >CodecOpenLongFilePath > ## A decorator used to parse macro definition > def ParseMacro(Parser): > def MacroParser(self): > Match =3D GlobalData.gMacroDefPattern.match(self._CurrentLine) > if not Match: >- # Not 'DEFINE/EDK_GLOBAL' statement, call decorated method >+ # Not 'DEFINE' statement, call decorated method > Parser(self) > return > > TokenList =3D GetSplitValueList(self._CurrentLine[Match.end(1):], >TAB_EQUAL_SPLIT, 1) > # Syntax check >@@ -81,20 +81,10 @@ def ParseMacro(Parser): > SectionDictKey =3D self._SectionType, self._Scope[0][0], >self._Scope[0][1] > if SectionDictKey not in self._SectionsMacroDict: > self._SectionsMacroDict[SectionDictKey] =3D {} > SectionLocalMacros =3D self._SectionsMacroDict[SectionDic= tKey] > SectionLocalMacros[Name] =3D Value >- # EDK_GLOBAL defined macros >- elif not isinstance(self, DscParser): >- EdkLogger.error('Parser', FORMAT_INVALID, "EDK_GLOBAL can onl= y be >used in .dsc file", >- ExtraData=3Dself._CurrentLine, File=3Dself.Me= taFile, >Line=3Dself._LineIndex+1) >- elif self._SectionType !=3D MODEL_META_DATA_HEADER: >- EdkLogger.error('Parser', FORMAT_INVALID, "EDK_GLOBAL can onl= y be >used under [Defines] section", >- ExtraData=3Dself._CurrentLine, File=3Dself.Me= taFile, >Line=3Dself._LineIndex+1) >- elif (Name in self._FileLocalMacros) and (self._FileLocalMacros[N= ame] !=3D >Value): >- EdkLogger.error('Parser', FORMAT_INVALID, "EDK_GLOBAL defined= a >macro with the same name and different value as one defined by 'DEFINE'", >- ExtraData=3Dself._CurrentLine, File=3Dself.Me= taFile, >Line=3Dself._LineIndex+1) > > self._ValueList =3D [Type, Name, Value] > > return MacroParser > >@@ -740,11 +730,10 @@ class DscParser(MetaFileParser): > TAB_PCDS_DYNAMIC_EX_VPD_NULL.upper() : >MODEL_PCD_DYNAMIC_EX_VPD, > TAB_COMPONENTS.upper() : >MODEL_META_DATA_COMPONENT, > TAB_COMPONENTS_SOURCE_OVERRIDE_PATH.upper() : >MODEL_META_DATA_COMPONENT_SOURCE_OVERRIDE_PATH, > TAB_DSC_DEFINES.upper() : MODEL_META_DATA_H= EADER, > TAB_DSC_DEFINES_DEFINE : MODEL_META_DATA_D= EFINE, >- TAB_DSC_DEFINES_EDKGLOBAL : >MODEL_META_DATA_GLOBAL_DEFINE, > TAB_INCLUDE.upper() : MODEL_META_DATA_I= NCLUDE, > TAB_IF.upper() : >MODEL_META_DATA_CONDITIONAL_STATEMENT_IF, > TAB_IF_DEF.upper() : >MODEL_META_DATA_CONDITIONAL_STATEMENT_IFDEF, > TAB_IF_N_DEF.upper() : >MODEL_META_DATA_CONDITIONAL_STATEMENT_IFNDEF, > TAB_ELSE_IF.upper() : >MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSEIF, >@@ -1101,25 +1090,23 @@ class DscParser(MetaFileParser): > ## Override parent's method since we'll do all macro replacements in >parser > def _GetMacros(self): > Macros =3D dict( [('ARCH', 'IA32'), ('FAMILY', TAB_COMPILER_MSFT)= , >('TOOL_CHAIN_TAG', 'VS2008x86'), ('TARGET', 'DEBUG')]) > Macros.update(self._FileLocalMacros) > Macros.update(self._GetApplicableSectionMacro()) >- Macros.update(GlobalData.gEdkGlobal) > Macros.update(GlobalData.gPlatformDefines) > Macros.update(GlobalData.gCommandLineDefines) > # PCD cannot be referenced in macro definition >- if self._ItemType not in [MODEL_META_DATA_DEFINE, >MODEL_META_DATA_GLOBAL_DEFINE]: >+ if self._ItemType !=3D MODEL_META_DATA_DEFINE: > Macros.update(self._Symbols) > return Macros > > def _PostProcess(self): > Processer =3D { > MODEL_META_DATA_SECTION_HEADER : >self.__ProcessSectionHeader, > MODEL_META_DATA_SUBSECTION_HEADER : >self.__ProcessSubsectionHeader, > MODEL_META_DATA_HEADER : self.__Pr= ocessDefine, > MODEL_META_DATA_DEFINE : self.__Pr= ocessDefine, >- MODEL_META_DATA_GLOBAL_DEFINE : >self.__ProcessDefine, > MODEL_META_DATA_INCLUDE : self.__Pr= ocessDirective, > MODEL_META_DATA_CONDITIONAL_STATEMENT_IF : >self.__ProcessDirective, > MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSE : >self.__ProcessDirective, > MODEL_META_DATA_CONDITIONAL_STATEMENT_IFDEF : >self.__ProcessDirective, > MODEL_META_DATA_CONDITIONAL_STATEMENT_IFNDEF : >self.__ProcessDirective, >@@ -1274,12 +1261,10 @@ class DscParser(MetaFileParser): > SectionDictKey =3D self._SectionType, self._Scope[0][0], >self._Scope[0][1] > if SectionDictKey not in self._SectionsMacroDict: > self._SectionsMacroDict[SectionDictKey] =3D {} > SectionLocalMacros =3D self._SectionsMacroDict[SectionDic= tKey] > SectionLocalMacros[Name] =3D Value >- elif self._ItemType =3D=3D MODEL_META_DATA_GLOBAL_DEFINE: >- GlobalData.gEdkGlobal[Name] =3D Value > > # > # Keyword in [Defines] section can be used as Macros > # > if (self._ItemType =3D=3D MODEL_META_DATA_HEADER) and >(self._SectionType =3D=3D MODEL_META_DATA_HEADER): >diff --git a/BaseTools/Source/Python/UPT/Library/Parsing.py >b/BaseTools/Source/Python/UPT/Library/Parsing.py >index f7e995b93e..683d10a2ed 100644 >--- a/BaseTools/Source/Python/UPT/Library/Parsing.py >+++ b/BaseTools/Source/Python/UPT/Library/Parsing.py >@@ -895,11 +895,11 @@ def MacroParser(Line, FileName, SectionType, >FileLocalMacros): > LineContent =3D Line[0] > LineNo =3D Line[1] > Match =3D MacroDefPattern.match(LineContent) > if not Match: > # >- # Not 'DEFINE/EDK_GLOBAL' statement, call decorated method >+ # Not 'DEFINE' statement, call decorated method > # > return None, None > > TokenList =3D GetSplitValueList(LineContent[Match.end(1):], \ > DataType.TAB_EQUAL_SPLIT, 1) >diff --git a/BaseTools/Source/Python/UPT/Logger/StringTable.py >b/BaseTools/Source/Python/UPT/Logger/StringTable.py >index d815d9cf89..4d47beee01 100644 >--- a/BaseTools/Source/Python/UPT/Logger/StringTable.py >+++ b/BaseTools/Source/Python/UPT/Logger/StringTable.py >@@ -448,12 +448,10 @@ ERR_MACRONAME_NOGIVEN =3D _("No MACRO >name given") > ERR_MACROVALUE_NOGIVEN =3D _("No MACRO value given") > ERR_MACRONAME_INVALID =3D _("Incorrect MACRO name: %s") > ERR_MACROVALUE_INVALID =3D _("Incorrect MACRO value: %s") > ERR_NAME_ONLY_DEFINE =3D _( > "This variable can only be defined via environment variable: %s") >-ERR_EDK_GLOBAL_SAMENAME =3D _( >- "EDK_GLOBAL defined a macro with the same name as one defined by >'DEFINE'") > ERR_SECTIONNAME_INVALID =3D _( > "An incorrect section name was found: %s. 'The correct file is '%s' .= ") > ERR_CHECKFILE_NOTFOUND =3D _( > "Can't find file '%s' defined in section '%s'") > ERR_INVALID_NOTFOUND =3D _( >diff --git a/BaseTools/Source/Python/Workspace/InfBuildData.py >b/BaseTools/Source/Python/Workspace/InfBuildData.py >index 6148ab0d30..985822ce4a 100644 >--- a/BaseTools/Source/Python/Workspace/InfBuildData.py >+++ b/BaseTools/Source/Python/Workspace/InfBuildData.py >@@ -669,11 +669,10 @@ class InfBuildData(ModuleBuildClassObject): > RetVal =3D [] > if self._SourceOverridePath: > RetVal.append(self._SourceOverridePath) > > Macros =3D self._Macros >- Macros['PROCESSOR'] =3D GlobalData.gEdkGlobal.get('PROCESSOR', >self._Arch) > RecordList =3D self._RawData[MODEL_EFI_INCLUDE, self._Arch, >self._Platform] > for Record in RecordList: > File =3D NormPath(Record[0], Macros) > if File[0] =3D=3D '.': > File =3D os.path.join(self._ModuleDir, File) >diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py >b/BaseTools/Source/Python/Workspace/MetaFileParser.py >index e5fb3f5473..f6ebfe3b2e 100644 >--- a/BaseTools/Source/Python/Workspace/MetaFileParser.py >+++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py >@@ -46,11 +46,11 @@ CODEPattern =3D re.compile(r"{CODE\([a-fA-F0- >9Xx\{\},\s]*\)}") > ## A decorator used to parse macro definition > def ParseMacro(Parser): > def MacroParser(self): > Match =3D GlobalData.gMacroDefPattern.match(self._CurrentLine) > if not Match: >- # Not 'DEFINE/EDK_GLOBAL' statement, call decorated method >+ # Not 'DEFINE' statement, call decorated method > Parser(self) > return > > TokenList =3D GetSplitValueList(self._CurrentLine[Match.end(1):], >TAB_EQUAL_SPLIT, 1) > # Syntax check >@@ -92,21 +92,10 @@ def ParseMacro(Parser): > elif self._SectionType =3D=3D MODEL_META_DATA_HEADER: > self._FileLocalMacros[Name] =3D Value > else: > self._ConstructSectionMacroDict(Name, Value) > >- # EDK_GLOBAL defined macros >- elif not isinstance(self, DscParser): >- EdkLogger.error('Parser', FORMAT_INVALID, "EDK_GLOBAL can onl= y be >used in .dsc file", >- ExtraData=3Dself._CurrentLine, File=3Dself.Me= taFile, >Line=3Dself._LineIndex + 1) >- elif self._SectionType !=3D MODEL_META_DATA_HEADER: >- EdkLogger.error('Parser', FORMAT_INVALID, "EDK_GLOBAL can onl= y be >used under [Defines] section", >- ExtraData=3Dself._CurrentLine, File=3Dself.Me= taFile, >Line=3Dself._LineIndex + 1) >- elif (Name in self._FileLocalMacros) and (self._FileLocalMacros[N= ame] !=3D >Value): >- EdkLogger.error('Parser', FORMAT_INVALID, "EDK_GLOBAL defined= a >macro with the same name and different value as one defined by 'DEFINE'", >- ExtraData=3Dself._CurrentLine, File=3Dself.Me= taFile, >Line=3Dself._LineIndex + 1) >- > self._ValueList =3D [Type, Name, Value] > > return MacroParser > > ## Base class of parser >@@ -865,11 +854,10 @@ class DscParser(MetaFileParser): > TAB_PCDS_DYNAMIC_EX_VPD_NULL.upper() : >MODEL_PCD_DYNAMIC_EX_VPD, > TAB_COMPONENTS.upper() : >MODEL_META_DATA_COMPONENT, > TAB_COMPONENTS_SOURCE_OVERRIDE_PATH.upper() : >MODEL_META_DATA_COMPONENT_SOURCE_OVERRIDE_PATH, > TAB_DSC_DEFINES.upper() : MODEL_META_DATA_H= EADER, > TAB_DSC_DEFINES_DEFINE : MODEL_META_DATA_D= EFINE, >- TAB_DSC_DEFINES_EDKGLOBAL : >MODEL_META_DATA_GLOBAL_DEFINE, > TAB_INCLUDE.upper() : MODEL_META_DATA_I= NCLUDE, > TAB_IF.upper() : >MODEL_META_DATA_CONDITIONAL_STATEMENT_IF, > TAB_IF_DEF.upper() : >MODEL_META_DATA_CONDITIONAL_STATEMENT_IFDEF, > TAB_IF_N_DEF.upper() : >MODEL_META_DATA_CONDITIONAL_STATEMENT_IFNDEF, > TAB_ELSE_IF.upper() : >MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSEIF, >@@ -1323,15 +1311,14 @@ class DscParser(MetaFileParser): > @property > def _Macros(self): > Macros =3D {} > Macros.update(self._FileLocalMacros) > Macros.update(self._GetApplicableSectionMacro()) >- Macros.update(GlobalData.gEdkGlobal) > Macros.update(GlobalData.gPlatformDefines) > Macros.update(GlobalData.gCommandLineDefines) > # PCD cannot be referenced in macro definition >- if self._ItemType not in [MODEL_META_DATA_DEFINE, >MODEL_META_DATA_GLOBAL_DEFINE]: >+ if self._ItemType !=3D MODEL_META_DATA_DEFINE: > Macros.update(self._Symbols) > if GlobalData.BuildOptionPcd: > for Item in GlobalData.BuildOptionPcd: > if isinstance(Item, tuple): > continue >@@ -1344,11 +1331,10 @@ class DscParser(MetaFileParser): > Processer =3D { > MODEL_META_DATA_SECTION_HEADER : >self.__ProcessSectionHeader, > MODEL_META_DATA_SUBSECTION_HEADER : >self.__ProcessSubsectionHeader, > MODEL_META_DATA_HEADER : self.__Pr= ocessDefine, > MODEL_META_DATA_DEFINE : self.__Pr= ocessDefine, >- MODEL_META_DATA_GLOBAL_DEFINE : >self.__ProcessDefine, > MODEL_META_DATA_INCLUDE : self.__Pr= ocessDirective, > MODEL_META_DATA_CONDITIONAL_STATEMENT_IF : >self.__ProcessDirective, > MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSE : >self.__ProcessDirective, > MODEL_META_DATA_CONDITIONAL_STATEMENT_IFDEF : >self.__ProcessDirective, > MODEL_META_DATA_CONDITIONAL_STATEMENT_IFNDEF : >self.__ProcessDirective, >@@ -1530,12 +1516,10 @@ class DscParser(MetaFileParser): > if self._ItemType =3D=3D MODEL_META_DATA_DEFINE: > if self._SectionType =3D=3D MODEL_META_DATA_HEADER: > self._FileLocalMacros[Name] =3D Value > else: > self._ConstructSectionMacroDict(Name, Value) >- elif self._ItemType =3D=3D MODEL_META_DATA_GLOBAL_DEFINE: >- GlobalData.gEdkGlobal[Name] =3D Value > > # > # Keyword in [Defines] section can be used as Macros > # > if (self._ItemType =3D=3D MODEL_META_DATA_HEADER) and >(self._SectionType =3D=3D MODEL_META_DATA_HEADER): >-- >2.18.0.windows.1 > >_______________________________________________ >edk2-devel mailing list >edk2-devel@lists.01.org >https://lists.01.org/mailman/listinfo/edk2-devel