\r
if (Options.BuildTarget):\r
GenFdsGlobalVariable.TargetName = Options.BuildTarget\r
- else:\r
- EdkLogger.error("GenFds", OPTION_MISSING, "Missing build target")\r
\r
if (Options.ToolChain):\r
GenFdsGlobalVariable.ToolChainTag = Options.ToolChain\r
- else:\r
- EdkLogger.error("GenFds", OPTION_MISSING, "Missing tool chain tag")\r
\r
if (Options.activePlatform):\r
ActivePlatform = Options.activePlatform\r
# This also handles someone specifying the Conf directory in the workspace. Using --conf=Conf\r
ConfDirectoryPath = os.path.join(GenFdsGlobalVariable.WorkSpaceDir, ConfDirectoryPath)\r
else:\r
- # Get standard WORKSPACE/Conf, use the absolute path to the WORKSPACE/Conf\r
- ConfDirectoryPath = mws.join(GenFdsGlobalVariable.WorkSpaceDir, 'Conf')\r
+ if "CONF_PATH" in os.environ.keys():\r
+ ConfDirectoryPath = os.path.normcase(os.environ["CONF_PATH"])\r
+ else:\r
+ # Get standard WORKSPACE/Conf, use the absolute path to the WORKSPACE/Conf\r
+ ConfDirectoryPath = mws.join(GenFdsGlobalVariable.WorkSpaceDir, 'Conf')\r
GenFdsGlobalVariable.ConfDir = ConfDirectoryPath\r
BuildConfigurationFile = os.path.normpath(os.path.join(ConfDirectoryPath, "target.txt"))\r
if os.path.isfile(BuildConfigurationFile) == True:\r
- TargetTxtClassObject.TargetTxtClassObject(BuildConfigurationFile)\r
+ TargetTxt = TargetTxtClassObject.TargetTxtClassObject()\r
+ TargetTxt.LoadTargetTxtFile(BuildConfigurationFile)\r
+ # if no build target given in command line, get it from target.txt\r
+ if not GenFdsGlobalVariable.TargetName:\r
+ BuildTargetList = TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TARGET]\r
+ if len(BuildTargetList) != 1:\r
+ EdkLogger.error("GenFds", OPTION_VALUE_INVALID, ExtraData="Only allows one instance for Target.")\r
+ GenFdsGlobalVariable.TargetName = BuildTargetList[0]\r
+\r
+ # if no tool chain given in command line, get it from target.txt\r
+ if not GenFdsGlobalVariable.ToolChainTag:\r
+ ToolChainList = TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG]\r
+ if ToolChainList == None or len(ToolChainList) == 0:\r
+ EdkLogger.error("GenFds", RESOURCE_NOT_AVAILABLE, ExtraData="No toolchain given. Don't know how to build.")\r
+ if len(ToolChainList) != 1:\r
+ EdkLogger.error("GenFds", OPTION_VALUE_INVALID, ExtraData="Only allows one instance for ToolChain.")\r
+ GenFdsGlobalVariable.ToolChainTag = ToolChainList[0]\r
else:\r
EdkLogger.error("GenFds", FILE_NOT_FOUND, ExtraData=BuildConfigurationFile)\r
\r
Pair = Pair[:-1]\r
List = Pair.split('=')\r
if len(List) == 2:\r
+ if not List[1].strip():\r
+ EdkLogger.error("GenFds", OPTION_VALUE_INVALID, ExtraData="No Value given for Macro %s" %List[0])\r
if List[0].strip() == "EFI_SOURCE":\r
GlobalData.gEfiSource = List[1].strip()\r
GlobalData.gGlobalDefines["EFI_SOURCE"] = GlobalData.gEfiSource\r
GlobalData.gCommandLineDefines[List[0].strip()] = "TRUE"\r
os.environ["WORKSPACE"] = Workspace\r
\r
+ # Use the -t and -b option as gGlobalDefines's TOOLCHAIN and TARGET if they are not defined\r
+ if "TARGET" not in GlobalData.gGlobalDefines.keys():\r
+ GlobalData.gGlobalDefines["TARGET"] = GenFdsGlobalVariable.TargetName\r
+ if "TOOLCHAIN" not in GlobalData.gGlobalDefines.keys():\r
+ GlobalData.gGlobalDefines["TOOLCHAIN"] = GenFdsGlobalVariable.ToolChainTag\r
+ if "TOOL_CHAIN_TAG" not in GlobalData.gGlobalDefines.keys():\r
+ GlobalData.gGlobalDefines['TOOL_CHAIN_TAG'] = GenFdsGlobalVariable.ToolChainTag\r
+\r
"""call Workspace build create database"""\r
GlobalData.gDatabasePath = os.path.normpath(os.path.join(ConfDirectoryPath, GlobalData.gDatabasePath))\r
BuildWorkSpace = WorkspaceDatabase(GlobalData.gDatabasePath)\r
Value = '0'\r
return Value\r
\r
- \r
+## FindExtendTool()\r
+#\r
+# Find location of tools to process data\r
+#\r
+# @param KeyStringList Filter for inputs of section generation\r
+# @param CurrentArchList Arch list\r
+# @param NameGuid The Guid name\r
+#\r
+def FindExtendTool(KeyStringList, CurrentArchList, NameGuid):\r
+ # if user not specify filter, try to deduce it from global data.\r
+ if KeyStringList == None or KeyStringList == []:\r
+ Target = GenFdsGlobalVariable.TargetName\r
+ ToolChain = GenFdsGlobalVariable.ToolChainTag\r
+ ToolDb = ToolDefClassObject.ToolDefDict(GenFdsGlobalVariable.ConfDir).ToolsDefTxtDatabase\r
+ if ToolChain not in ToolDb['TOOL_CHAIN_TAG']:\r
+ EdkLogger.error("GenFds", GENFDS_ERROR, "Can not find external tool because tool tag %s is not defined in tools_def.txt!" % ToolChain)\r
+ KeyStringList = [Target + '_' + ToolChain + '_' + CurrentArchList[0]]\r
+ for Arch in CurrentArchList:\r
+ if Target + '_' + ToolChain + '_' + Arch not in KeyStringList:\r
+ KeyStringList.append(Target + '_' + ToolChain + '_' + Arch)\r
+\r
+ if GenFdsGlobalVariable.GuidToolDefinition:\r
+ if NameGuid in GenFdsGlobalVariable.GuidToolDefinition.keys():\r
+ return GenFdsGlobalVariable.GuidToolDefinition[NameGuid]\r
+\r
+ ToolDefinition = ToolDefClassObject.ToolDefDict(GenFdsGlobalVariable.ConfDir).ToolsDefTxtDictionary\r
+ ToolPathTmp = None\r
+ ToolOption = None\r
+ for ToolDef in ToolDefinition.items():\r
+ if NameGuid == ToolDef[1]:\r
+ KeyList = ToolDef[0].split('_')\r
+ Key = KeyList[0] + \\r
+ '_' + \\r
+ KeyList[1] + \\r
+ '_' + \\r
+ KeyList[2]\r
+ if Key in KeyStringList and KeyList[4] == 'GUID':\r
+\r
+ ToolPath = ToolDefinition.get(Key + \\r
+ '_' + \\r
+ KeyList[3] + \\r
+ '_' + \\r
+ 'PATH')\r
+\r
+ ToolOption = ToolDefinition.get(Key + \\r
+ '_' + \\r
+ KeyList[3] + \\r
+ '_' + \\r
+ 'FLAGS')\r
+ if ToolPathTmp == None:\r
+ ToolPathTmp = ToolPath\r
+ else:\r
+ if ToolPathTmp != ToolPath:\r
+ EdkLogger.error("GenFds", GENFDS_ERROR, "Don't know which tool to use, %s or %s ?" % (ToolPathTmp, ToolPath))\r
+\r
+ GenFdsGlobalVariable.GuidToolDefinition[NameGuid] = (ToolPathTmp, ToolOption)\r
+ return ToolPathTmp, ToolOption\r
+\r
## Parse command line options\r
#\r
# Using standard Python module optparse to parse command line option of this tool.\r