]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/AutoGen/AutoGen.py
BaseTools: Fix the bug for CArray PCD override in command line
[mirror_edk2.git] / BaseTools / Source / Python / AutoGen / AutoGen.py
index 3d3dfefdbc974014f54491da7f63e2f3f139a807..736c1ae976333f3b3c345866555f006929ae4efe 100644 (file)
@@ -62,10 +62,10 @@ gMakeTypeMap = {"MSFT":"nmake", "GCC":"gmake"}
 \r
 \r
 ## Build rule configuration file\r
-gDefaultBuildRuleFile = 'Conf/build_rule.txt'\r
+gDefaultBuildRuleFile = 'build_rule.txt'\r
 \r
 ## Tools definition configuration file\r
-gDefaultToolsDefFile = 'Conf/tools_def.txt'\r
+gDefaultToolsDefFile = 'tools_def.txt'\r
 \r
 ## Build rule default version\r
 AutoGenReqBuildRuleVerNum = "0.1"\r
@@ -416,7 +416,7 @@ class WorkspaceAutoGen(AutoGen):
                             if HasTokenSpace:\r
                                 if (PcdItem.TokenCName, PcdItem.TokenSpaceGuidCName) == (TokenCName, TokenSpaceGuidCName):\r
                                     PcdDatumType = PcdItem.DatumType\r
-                                    NewValue = self._BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue)\r
+                                    NewValue = BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue)\r
                                     FoundFlag = True\r
                             else:\r
                                 if PcdItem.TokenCName == TokenCName:\r
@@ -425,7 +425,7 @@ class WorkspaceAutoGen(AutoGen):
                                             TokenSpaceGuidCNameList.append(PcdItem.TokenSpaceGuidCName)\r
                                             PcdDatumType = PcdItem.DatumType\r
                                             TokenSpaceGuidCName = PcdItem.TokenSpaceGuidCName\r
-                                            NewValue = self._BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue)\r
+                                            NewValue = BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue)\r
                                             FoundFlag = True\r
                                         else:\r
                                             EdkLogger.error(\r
@@ -504,6 +504,22 @@ class WorkspaceAutoGen(AutoGen):
                                 SourcePcdDict['FixedAtBuild'].append((BuildData.Pcds[key].TokenCName, BuildData.Pcds[key].TokenSpaceGuidCName))\r
                 else:\r
                     pass\r
+            #\r
+            # A PCD can only use one type for all source modules\r
+            #\r
+            for i in SourcePcdDict_Keys:\r
+                for j in SourcePcdDict_Keys:\r
+                    if i != j:\r
+                        IntersectionList = list(set(SourcePcdDict[i]).intersection(set(SourcePcdDict[j])))\r
+                        if len(IntersectionList) > 0:\r
+                            EdkLogger.error(\r
+                            'build',\r
+                            FORMAT_INVALID,\r
+                            "Building modules from source INFs, following PCD use %s and %s access method. It must be corrected to use only one access method." % (i, j),\r
+                            ExtraData="%s" % '\n\t'.join([str(P[1]+'.'+P[0]) for P in IntersectionList])\r
+                            )\r
+                    else:\r
+                        pass\r
 \r
             #\r
             # intersection the BinaryPCD for Mixed PCD\r
@@ -681,31 +697,6 @@ class WorkspaceAutoGen(AutoGen):
                 print >> file, f\r
         return True\r
 \r
-    def _BuildOptionPcdValueFormat(self, TokenSpaceGuidCName, TokenCName, PcdDatumType, Value):\r
-        if PcdDatumType == 'VOID*':\r
-            if Value.startswith('L'):\r
-                if not Value[1]:\r
-                    EdkLogger.error('build', OPTION_VALUE_INVALID, 'For Void* type PCD, when specify the Value in the command line, please use the following format: "string", L"string", B"{...}"')\r
-                Value = Value[0] + '"' + Value[1:] + '"'\r
-            elif Value.startswith('B'):\r
-                if not Value[1]:\r
-                    EdkLogger.error('build', OPTION_VALUE_INVALID, 'For Void* type PCD, when specify the Value in the command line, please use the following format: "string", L"string", B"{...}"')\r
-                Value = Value[1:]\r
-            else:\r
-                if not Value[0]:\r
-                    EdkLogger.error('build', OPTION_VALUE_INVALID, 'For Void* type PCD, when specify the Value in the command line, please use the following format: "string", L"string", B"{...}"')\r
-                Value = '"' + Value + '"'\r
-\r
-        IsValid, Cause = CheckPcdDatum(PcdDatumType, Value)\r
-        if not IsValid:\r
-            EdkLogger.error('build', FORMAT_INVALID, Cause, ExtraData="%s.%s" % (TokenSpaceGuidCName, TokenCName))\r
-        if PcdDatumType == 'BOOLEAN':\r
-            Value = Value.upper()\r
-            if Value == 'TRUE' or Value == '1':\r
-                Value = '1'\r
-            elif Value == 'FALSE' or Value == '0':\r
-                Value = '0'\r
-        return  Value\r
 \r
     def _GetMetaFiles(self, Target, Toolchain, Arch):\r
         AllWorkSpaceMetaFiles = set()\r
@@ -726,8 +717,8 @@ class WorkspaceAutoGen(AutoGen):
         #\r
         # add build_rule.txt & tools_def.txt\r
         #\r
-        AllWorkSpaceMetaFiles.add(gDefaultBuildRuleFile)\r
-        AllWorkSpaceMetaFiles.add(gDefaultToolsDefFile)\r
+        AllWorkSpaceMetaFiles.add(os.path.join(GlobalData.gConfDirectory, gDefaultBuildRuleFile))\r
+        AllWorkSpaceMetaFiles.add(os.path.join(GlobalData.gConfDirectory, gDefaultToolsDefFile))\r
 \r
         # add BuildOption metafile\r
         #\r
@@ -2743,10 +2734,7 @@ class ModuleAutoGen(AutoGen):
         if self._FixedAtBuildPcds:\r
             return self._FixedAtBuildPcds\r
         for Pcd in self.ModulePcdList:\r
-            if self.IsLibrary:\r
-                if not (Pcd.Pending == False and Pcd.Type == "FixedAtBuild"):\r
-                    continue\r
-            elif Pcd.Type != "FixedAtBuild":\r
+            if Pcd.Type != "FixedAtBuild":\r
                 continue\r
             if Pcd not in self._FixedAtBuildPcds:\r
                 self._FixedAtBuildPcds.append(Pcd)\r
@@ -3925,6 +3913,13 @@ class ModuleAutoGen(AutoGen):
                 else:\r
                     continue\r
                 PcdValue = ''\r
+                if Pcd.DatumType == 'BOOLEAN':\r
+                    BoolValue = Pcd.DefaultValue.upper()\r
+                    if BoolValue == 'TRUE':\r
+                        Pcd.DefaultValue = '1'\r
+                    elif BoolValue == 'FALSE':\r
+                        Pcd.DefaultValue = '0'\r
+\r
                 if Pcd.DatumType != 'VOID*':\r
                     HexFormat = '0x%02x'\r
                     if Pcd.DatumType == 'UINT16':\r