#\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
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
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
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
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
\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
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
\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
\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
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
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
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
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
# @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
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
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