Reviewed-by: Bob Feng <bob.c.f...@intel.com> 

-----Original Message-----
From: Shi, Steven 
Sent: Monday, June 17, 2019 4:16 PM
To: devel@edk2.groups.io
Cc: Gao, Liming <liming....@intel.com>; Feng, Bob C <bob.c.f...@intel.com>; 
Rodriguez, Christian <christian.rodrig...@intel.com>
Subject: [PATCH v3 1/1] BaseTools: Cannot store library cache of different arch 
together

https://bugzilla.tianocore.org/show_bug.cgi?id=1895

Build cache cannot store cache for the same library modules in different arch 
together. E.g. Both the below IA32 and X64 arch BaseLib caches should exist 
after build Ovmf3264, but now only the one in X64 arch exist.
The reason is the current Basetool use a set() to same all library AutoGen 
objects, but the different arch lib AutoGen objects have same __hash_ value 
which comes from the lib MetaFile(The path of module file):
    def __hash__(self):
        return hash(self.MetaFile)

So the different arch lib AutoGen objects are duplicated one to the set() and 
only one can exist. This is why the Basetool can only store one arch cache for 
library.

This patch adds the arch string into the PlatformAutoGen and ModuleAutoGen 
__hash_ definitions and ensure the different platform and module AutoGen 
objects have different __hash_ values.

Cc: Liming Gao <liming....@intel.com>
Cc: Bob Feng <bob.c.f...@intel.com>
Cc: Christian Rodriguez <christian.rodrig...@intel.com>
Signed-off-by: Steven Shi <steven....@intel.com>
---
 BaseTools/Source/Python/AutoGen/AutoGen.py | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py 
b/BaseTools/Source/Python/AutoGen/AutoGen.py
index 3f41fbb507..79203d8105 100644
--- a/BaseTools/Source/Python/AutoGen/AutoGen.py
+++ b/BaseTools/Source/Python/AutoGen/AutoGen.py
@@ -1166,6 +1166,17 @@ class PlatformAutoGen(AutoGen):
 
         return True
 
+    ## hash() operator of PlatformAutoGen
+    #
+    #  The platform file path and arch string will be used to represent
+    #  hash value of this object
+    #
+    #   @retval   int Hash value of the platform file path and arch
+    #
+    @cached_class_function
+    def __hash__(self):
+        return hash((self.MetaFile, self.Arch))
+
     @cached_class_function
     def __repr__(self):
         return "%s [%s]" % (self.MetaFile, self.Arch) @@ -2579,6 +2590,16 @@ 
class ModuleAutoGen(AutoGen):
         self.ReferenceModules = []
         self.ConstPcd                  = {}
 
+    ## hash() operator of ModuleAutoGen
+    #
+    #  The module file path and arch string will be used to represent
+    #  hash value of this object
+    #
+    #   @retval   int Hash value of the module file path and arch
+    #
+    @cached_class_function
+    def __hash__(self):
+        return hash((self.MetaFile, self.Arch))
 
     def __repr__(self):
         return "%s [%s]" % (self.MetaFile, self.Arch)
--
2.17.1.windows.2


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#42500): https://edk2.groups.io/g/devel/message/42500
Mute This Topic: https://groups.io/mt/32092690/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to