]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py
BaseTools:Replace PlatformInfo with PlatformAutoGen for Moudle
[mirror_edk2.git] / BaseTools / Source / Python / GenFds / GenFdsGlobalVariable.py
index e867693d7c88cca9d1b60e949925eb9bb9b6e49c..3dc73c8f61f9bd068778cbf7dca4fbeb7b81aade 100644 (file)
@@ -3,13 +3,7 @@
 #\r
 #  Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
 #\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
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 #\r
 \r
 ##\r
@@ -28,13 +22,14 @@ from Common.BuildToolError import COMMAND_FAILURE,GENFDS_ERROR
 from Common import EdkLogger\r
 from Common.Misc import SaveFileOnChange\r
 \r
-from Common.TargetTxtClassObject import TargetTxtClassObject\r
-from Common.ToolDefClassObject import ToolDefClassObject, ToolDefDict\r
-from AutoGen.BuildEngine import BuildRule\r
+from Common.TargetTxtClassObject import TargetTxt\r
+from Common.ToolDefClassObject import ToolDef\r
+from AutoGen.BuildEngine import BuildRuleObj\r
 import Common.DataType as DataType\r
 from Common.Misc import PathClass\r
 from Common.LongFilePathSupport import OpenLongFilePath as open\r
 from Common.MultipleWorkspace import MultipleWorkspace as mws\r
+import Common.GlobalData as GlobalData\r
 \r
 ## Global variables\r
 #\r
@@ -50,13 +45,11 @@ class GenFdsGlobalVariable:
     WorkSpace = None\r
     WorkSpaceDir = ''\r
     ConfDir = ''\r
-    EdkSourceDir = ''\r
     OutputDirFromDscDict = {}\r
     TargetName = ''\r
     ToolChainTag = ''\r
     RuleDict = {}\r
     ArchList = None\r
-    VtfDict = {}\r
     ActivePlatform = None\r
     FvAddressFileName = ''\r
     VerboseMode = False\r
@@ -76,7 +69,7 @@ class GenFdsGlobalVariable:
     SecCmdList = []\r
     CopyList   = []\r
     ModuleFile = ''\r
-    EnableGenfdsMultiThread = False\r
+    EnableGenfdsMultiThread = True\r
 \r
     #\r
     # The list whose element are flags to indicate if large FFS or SECTION files exist in FV.\r
@@ -102,31 +95,21 @@ class GenFdsGlobalVariable:
     def _LoadBuildRule():\r
         if GenFdsGlobalVariable.__BuildRuleDatabase:\r
             return GenFdsGlobalVariable.__BuildRuleDatabase\r
-        BuildConfigurationFile = os.path.normpath(os.path.join(GenFdsGlobalVariable.ConfDir, "target.txt"))\r
-        TargetTxt = TargetTxtClassObject()\r
-        if os.path.isfile(BuildConfigurationFile) == True:\r
-            TargetTxt.LoadTargetTxtFile(BuildConfigurationFile)\r
-            if DataType.TAB_TAT_DEFINES_BUILD_RULE_CONF in TargetTxt.TargetTxtDictionary:\r
-                BuildRuleFile = TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_BUILD_RULE_CONF]\r
-            if not BuildRuleFile:\r
-                BuildRuleFile = 'Conf/build_rule.txt'\r
-            GenFdsGlobalVariable.__BuildRuleDatabase = BuildRule(BuildRuleFile)\r
-            ToolDefinitionFile = TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF]\r
-            if ToolDefinitionFile == '':\r
-                ToolDefinitionFile = "Conf/tools_def.txt"\r
-            if os.path.isfile(ToolDefinitionFile):\r
-                ToolDef = ToolDefClassObject()\r
-                ToolDef.LoadToolDefFile(ToolDefinitionFile)\r
-                ToolDefinition = ToolDef.ToolsDefTxtDatabase\r
-                if DataType.TAB_TOD_DEFINES_BUILDRULEFAMILY in ToolDefinition \\r
-                   and GenFdsGlobalVariable.ToolChainTag in ToolDefinition[DataType.TAB_TOD_DEFINES_BUILDRULEFAMILY] \\r
-                   and ToolDefinition[DataType.TAB_TOD_DEFINES_BUILDRULEFAMILY][GenFdsGlobalVariable.ToolChainTag]:\r
-                    GenFdsGlobalVariable.BuildRuleFamily = ToolDefinition[DataType.TAB_TOD_DEFINES_BUILDRULEFAMILY][GenFdsGlobalVariable.ToolChainTag]\r
-\r
-                if DataType.TAB_TOD_DEFINES_FAMILY in ToolDefinition \\r
-                   and GenFdsGlobalVariable.ToolChainTag in ToolDefinition[DataType.TAB_TOD_DEFINES_FAMILY] \\r
-                   and ToolDefinition[DataType.TAB_TOD_DEFINES_FAMILY][GenFdsGlobalVariable.ToolChainTag]:\r
-                    GenFdsGlobalVariable.ToolChainFamily = ToolDefinition[DataType.TAB_TOD_DEFINES_FAMILY][GenFdsGlobalVariable.ToolChainTag]\r
+        GenFdsGlobalVariable.__BuildRuleDatabase = BuildRuleObj\r
+        ToolDefinitionFile = TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF]\r
+        if ToolDefinitionFile == '':\r
+            ToolDefinitionFile = "Conf/tools_def.txt"\r
+        if os.path.isfile(ToolDefinitionFile):\r
+            ToolDefinition = ToolDef.ToolsDefTxtDatabase\r
+            if DataType.TAB_TOD_DEFINES_BUILDRULEFAMILY in ToolDefinition \\r
+               and GenFdsGlobalVariable.ToolChainTag in ToolDefinition[DataType.TAB_TOD_DEFINES_BUILDRULEFAMILY] \\r
+               and ToolDefinition[DataType.TAB_TOD_DEFINES_BUILDRULEFAMILY][GenFdsGlobalVariable.ToolChainTag]:\r
+                GenFdsGlobalVariable.BuildRuleFamily = ToolDefinition[DataType.TAB_TOD_DEFINES_BUILDRULEFAMILY][GenFdsGlobalVariable.ToolChainTag]\r
+\r
+            if DataType.TAB_TOD_DEFINES_FAMILY in ToolDefinition \\r
+               and GenFdsGlobalVariable.ToolChainTag in ToolDefinition[DataType.TAB_TOD_DEFINES_FAMILY] \\r
+               and ToolDefinition[DataType.TAB_TOD_DEFINES_FAMILY][GenFdsGlobalVariable.ToolChainTag]:\r
+                GenFdsGlobalVariable.ToolChainFamily = ToolDefinition[DataType.TAB_TOD_DEFINES_FAMILY][GenFdsGlobalVariable.ToolChainTag]\r
         return GenFdsGlobalVariable.__BuildRuleDatabase\r
 \r
     ## GetBuildRules\r
@@ -217,12 +200,12 @@ class GenFdsGlobalVariable:
 \r
         if not Inf.IsBinaryModule:\r
             for File in Inf.Sources:\r
-                if File.TagName in {"", "*", GenFdsGlobalVariable.ToolChainTag} and \\r
-                    File.ToolChainFamily in {"", "*", GenFdsGlobalVariable.ToolChainFamily}:\r
+                if File.TagName in {"", DataType.TAB_STAR, GenFdsGlobalVariable.ToolChainTag} and \\r
+                    File.ToolChainFamily in {"", DataType.TAB_STAR, GenFdsGlobalVariable.ToolChainFamily}:\r
                     FileList.append((File, DataType.TAB_UNKNOWN_FILE))\r
 \r
         for File in Inf.Binaries:\r
-            if File.Target in {DataType.TAB_COMMON, '*', GenFdsGlobalVariable.TargetName}:\r
+            if File.Target in {DataType.TAB_COMMON, DataType.TAB_STAR, GenFdsGlobalVariable.TargetName}:\r
                 FileList.append((File, File.Type))\r
 \r
         for File, FileType in FileList:\r
@@ -341,7 +324,6 @@ class GenFdsGlobalVariable:
         GenFdsGlobalVariable.ToolChainTag = GlobalData.gGlobalDefines["TOOL_CHAIN_TAG"]\r
         GenFdsGlobalVariable.TargetName = GlobalData.gGlobalDefines["TARGET"]\r
         GenFdsGlobalVariable.ActivePlatform = GlobalData.gActivePlatform\r
-        GenFdsGlobalVariable.EdkSourceDir = GlobalData.gGlobalDefines["EDK_SOURCE"]\r
         GenFdsGlobalVariable.ConfDir  = GlobalData.gConfDirectory\r
         GenFdsGlobalVariable.EnableGenfdsMultiThread = GlobalData.gEnableGenfdsMultiThread\r
         for Arch in ArchList:\r
@@ -504,6 +486,10 @@ class GenFdsGlobalVariable:
 \r
             SaveFileOnChange(CommandFile, ' '.join(Cmd), False)\r
             if IsMakefile:\r
+                if GlobalData.gGlobalDefines.get("FAMILY") == "MSFT":\r
+                    Cmd = ['if', 'exist', Input[0]] + Cmd\r
+                else:\r
+                    Cmd = ['-test', '-e', Input[0], "&&"] + Cmd\r
                 if ' '.join(Cmd).strip() not in GenFdsGlobalVariable.SecCmdList:\r
                     GenFdsGlobalVariable.SecCmdList.append(' '.join(Cmd).strip())\r
             elif GenFdsGlobalVariable.NeedsUpdate(Output, list(Input) + [CommandFile]):\r
@@ -545,7 +531,10 @@ class GenFdsGlobalVariable:
 \r
         Cmd += ("-o", Output)\r
         for I in range(0, len(Input)):\r
-            Cmd += ("-i", Input[I])\r
+            if MakefilePath:\r
+                Cmd += ("-oi", Input[I])\r
+            else:\r
+                Cmd += ("-i", Input[I])\r
             if SectionAlign and SectionAlign[I]:\r
                 Cmd += ("-n", SectionAlign[I])\r
 \r
@@ -574,9 +563,9 @@ class GenFdsGlobalVariable:
         if BaseAddress:\r
             Cmd += ("-r", BaseAddress)\r
 \r
-        if not ForceRebase:\r
+        if ForceRebase == False:\r
             Cmd += ("-F", "FALSE")\r
-        else:\r
+        elif ForceRebase == True:\r
             Cmd += ("-F", "TRUE")\r
 \r
         if Capsule:\r
@@ -725,8 +714,8 @@ class GenFdsGlobalVariable:
             return\r
         if PopenObject.returncode != 0 or GenFdsGlobalVariable.VerboseMode or GenFdsGlobalVariable.DebugLevel != -1:\r
             GenFdsGlobalVariable.InfLogger ("Return Value = %d" % PopenObject.returncode)\r
-            GenFdsGlobalVariable.InfLogger (out)\r
-            GenFdsGlobalVariable.InfLogger (error)\r
+            GenFdsGlobalVariable.InfLogger(out.decode(encoding='utf-8', errors='ignore'))\r
+            GenFdsGlobalVariable.InfLogger(error.decode(encoding='utf-8', errors='ignore'))\r
             if PopenObject.returncode != 0:\r
                 print("###", cmd)\r
                 EdkLogger.error("GenFds", COMMAND_FAILURE, errorMess)\r
@@ -758,7 +747,6 @@ class GenFdsGlobalVariable:
             return None\r
 \r
         Dict = {'$(WORKSPACE)': GenFdsGlobalVariable.WorkSpaceDir,\r
-                '$(EDK_SOURCE)': GenFdsGlobalVariable.EdkSourceDir,\r
 #                '$(OUTPUT_DIRECTORY)': GenFdsGlobalVariable.OutputDirFromDsc,\r
                 '$(TARGET)': GenFdsGlobalVariable.TargetName,\r
                 '$(TOOL_CHAIN_TAG)': GenFdsGlobalVariable.ToolChainTag,\r
@@ -795,7 +783,10 @@ class GenFdsGlobalVariable:
     def GetPcdValue (PcdPattern):\r
         if PcdPattern is None:\r
             return None\r
-        PcdPair = PcdPattern.lstrip('PCD(').rstrip(')').strip().split('.')\r
+        if PcdPattern.startswith('PCD('):\r
+            PcdPair = PcdPattern[4:].rstrip(')').strip().split('.')\r
+        else:\r
+            PcdPair = PcdPattern.strip().split('.')\r
         TokenSpace = PcdPair[0]\r
         TokenCName = PcdPair[1]\r
 \r
@@ -838,7 +829,7 @@ class GenFdsGlobalVariable:
 #  @param  NameGuid         The Guid name\r
 #\r
 def FindExtendTool(KeyStringList, CurrentArchList, NameGuid):\r
-    ToolDb = ToolDefDict(GenFdsGlobalVariable.ConfDir).ToolsDefTxtDatabase\r
+    ToolDb = ToolDef.ToolsDefTxtDatabase\r
     # if user not specify filter, try to deduce it from global data.\r
     if KeyStringList is None or KeyStringList == []:\r
         Target = GenFdsGlobalVariable.TargetName\r
@@ -854,15 +845,15 @@ def FindExtendTool(KeyStringList, CurrentArchList, NameGuid):
         if NameGuid in GenFdsGlobalVariable.GuidToolDefinition:\r
             return GenFdsGlobalVariable.GuidToolDefinition[NameGuid]\r
 \r
-    ToolDefinition = ToolDefDict(GenFdsGlobalVariable.ConfDir).ToolsDefTxtDictionary\r
+    ToolDefinition = ToolDef.ToolsDefTxtDictionary\r
     ToolPathTmp = None\r
     ToolOption = None\r
     ToolPathKey = None\r
     ToolOptionKey = None\r
     KeyList = None\r
-    for ToolDef in ToolDefinition.items():\r
-        if NameGuid.lower() == ToolDef[1].lower():\r
-            KeyList = ToolDef[0].split('_')\r
+    for tool_def in ToolDefinition.items():\r
+        if NameGuid.lower() == tool_def[1].lower():\r
+            KeyList = tool_def[0].split('_')\r
             Key = KeyList[0] + \\r
                   '_' + \\r
                   KeyList[1] + \\r
@@ -893,7 +884,7 @@ def FindExtendTool(KeyStringList, CurrentArchList, NameGuid):
             for Index in range(2, -1, -1):\r
                 for Key in list(BuildOption.keys()):\r
                     List = Key.split('_')\r
-                    if List[Index] == '*':\r
+                    if List[Index] == DataType.TAB_STAR:\r
                         for String in ToolDb[ToolList[Index]]:\r
                             if String in [Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag]:\r
                                 List[Index] = String\r