]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools/GenFds: enhance to get TOOL_CHAIN_TAG and TARGET value
authorYonghong Zhu <yonghong.zhu@intel.com>
Fri, 6 May 2016 07:20:23 +0000 (15:20 +0800)
committerYonghong Zhu <yonghong.zhu@intel.com>
Wed, 25 May 2016 05:43:54 +0000 (13:43 +0800)
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 <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
BaseTools/Source/Python/GenFds/GenFds.py

index 672d1038702228931384bb03cf8eaf2105e8e3f2..68232c5e6d74fd8fee7dd0f7b2022bb0d1a6dfc7 100644 (file)
@@ -119,13 +119,9 @@ def main():
 \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
@@ -161,7 +157,23 @@ def main():
         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
@@ -176,6 +188,8 @@ def main():
                     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
@@ -192,6 +206,14 @@ def main():
                     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