when user don't set TOOL_CHAIN_TAG and TARGET by –D Flag, then GenFds
would report failure for format:
FILE DATA = $(OUTPUT_DIRECTORY)/$(TARGET)_$(TOOL_CHAIN_TAG)/testfile
so this patch enhance to get the TOOL_CHAIN_TAG and TARGET value by
following priority (high to low): 1. the Macro value set by -D Flag;
2. Get the value by the -t/-b option. 3. get the value from target.txt
file. Besides, this patch also remove the error checking for missing
-t/-b option.

Cc: Liming Gao <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Yonghong Zhu <[email protected]>
---
 BaseTools/Source/Python/GenFds/GenFds.py | 32 +++++++++++++++++++++++++++-----
 1 file changed, 27 insertions(+), 5 deletions(-)

diff --git a/BaseTools/Source/Python/GenFds/GenFds.py 
b/BaseTools/Source/Python/GenFds/GenFds.py
index 672d103..68232c5 100644
--- a/BaseTools/Source/Python/GenFds/GenFds.py
+++ b/BaseTools/Source/Python/GenFds/GenFds.py
@@ -117,17 +117,13 @@ def main():
         else:
             EdkLogger.error("GenFds", OPTION_MISSING, "Missing FDF filename")
 
         if (Options.BuildTarget):
             GenFdsGlobalVariable.TargetName = Options.BuildTarget
-        else:
-            EdkLogger.error("GenFds", OPTION_MISSING, "Missing build target")
 
         if (Options.ToolChain):
             GenFdsGlobalVariable.ToolChainTag = Options.ToolChain
-        else:
-            EdkLogger.error("GenFds", OPTION_MISSING, "Missing tool chain tag")
 
         if (Options.activePlatform):
             ActivePlatform = Options.activePlatform
             ActivePlatform = 
GenFdsGlobalVariable.ReplaceWorkspaceMacro(ActivePlatform)
 
@@ -159,11 +155,27 @@ def main():
             # Get standard WORKSPACE/Conf, use the absolute path to the 
WORKSPACE/Conf
             ConfDirectoryPath = mws.join(GenFdsGlobalVariable.WorkSpaceDir, 
'Conf')
         GenFdsGlobalVariable.ConfDir = ConfDirectoryPath
         BuildConfigurationFile = 
os.path.normpath(os.path.join(ConfDirectoryPath, "target.txt"))
         if os.path.isfile(BuildConfigurationFile) == True:
-            TargetTxtClassObject.TargetTxtClassObject(BuildConfigurationFile)
+            TargetTxt = TargetTxtClassObject.TargetTxtClassObject()
+            TargetTxt.LoadTargetTxtFile(BuildConfigurationFile)
+            # if no build target given in command line, get it from target.txt
+            if not GenFdsGlobalVariable.TargetName:
+                BuildTargetList = 
TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TARGET]
+                if len(BuildTargetList) != 1:
+                    EdkLogger.error("GenFds", OPTION_VALUE_INVALID, 
ExtraData="Only allows one instance for Target.")
+                GenFdsGlobalVariable.TargetName = BuildTargetList[0]
+
+            # if no tool chain given in command line, get it from target.txt
+            if not GenFdsGlobalVariable.ToolChainTag:
+                ToolChainList = 
TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG]
+                if ToolChainList == None or len(ToolChainList) == 0:
+                    EdkLogger.error("GenFds", RESOURCE_NOT_AVAILABLE, 
ExtraData="No toolchain given. Don't know how to build.")
+                if len(ToolChainList) != 1:
+                    EdkLogger.error("GenFds", OPTION_VALUE_INVALID, 
ExtraData="Only allows one instance for ToolChain.")
+                GenFdsGlobalVariable.ToolChainTag = ToolChainList[0]
         else:
             EdkLogger.error("GenFds", FILE_NOT_FOUND, 
ExtraData=BuildConfigurationFile)
 
         #Set global flag for build mode
         GlobalData.gIgnoreSource = Options.IgnoreSources
@@ -174,10 +186,12 @@ def main():
                     Pair = Pair[1:]
                 if Pair.endswith('"'):
                     Pair = Pair[:-1]
                 List = Pair.split('=')
                 if len(List) == 2:
+                    if not List[1].strip():
+                        EdkLogger.error("GenFds", OPTION_VALUE_INVALID, 
ExtraData="No Value given for Macro %s" %List[0])
                     if List[0].strip() == "EFI_SOURCE":
                         GlobalData.gEfiSource = List[1].strip()
                         GlobalData.gGlobalDefines["EFI_SOURCE"] = 
GlobalData.gEfiSource
                         continue
                     elif List[0].strip() == "EDK_SOURCE":
@@ -190,10 +204,18 @@ def main():
                         GlobalData.gCommandLineDefines[List[0].strip()] = 
List[1].strip()
                 else:
                     GlobalData.gCommandLineDefines[List[0].strip()] = "TRUE"
         os.environ["WORKSPACE"] = Workspace
 
+        # Use the -t and -b option as gGlobalDefines's TOOLCHAIN and TARGET if 
they are not defined
+        if "TARGET" not in GlobalData.gGlobalDefines.keys():
+            GlobalData.gGlobalDefines["TARGET"] = 
GenFdsGlobalVariable.TargetName
+        if "TOOLCHAIN" not in GlobalData.gGlobalDefines.keys():
+            GlobalData.gGlobalDefines["TOOLCHAIN"] = 
GenFdsGlobalVariable.ToolChainTag
+        if "TOOL_CHAIN_TAG" not in GlobalData.gGlobalDefines.keys():
+            GlobalData.gGlobalDefines['TOOL_CHAIN_TAG'] = 
GenFdsGlobalVariable.ToolChainTag
+
         """call Workspace build create database"""
         GlobalData.gDatabasePath = 
os.path.normpath(os.path.join(ConfDirectoryPath, GlobalData.gDatabasePath))
         BuildWorkSpace = WorkspaceDatabase(GlobalData.gDatabasePath)
         BuildWorkSpace.InitDatabase()
         
-- 
2.6.1.windows.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to