From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.88, mailfrom: bob.c.feng@intel.com) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by groups.io with SMTP; Mon, 17 Jun 2019 01:50:38 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Jun 2019 01:50:37 -0700 X-ExtLoop1: 1 Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga002.jf.intel.com with ESMTP; 17 Jun 2019 01:50:37 -0700 Received: from fmsmsx154.amr.corp.intel.com (10.18.116.70) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 17 Jun 2019 01:50:37 -0700 Received: from shsmsx153.ccr.corp.intel.com (10.239.6.53) by FMSMSX154.amr.corp.intel.com (10.18.116.70) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 17 Jun 2019 01:50:36 -0700 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.104]) by SHSMSX153.ccr.corp.intel.com ([169.254.12.76]) with mapi id 14.03.0439.000; Mon, 17 Jun 2019 16:50:35 +0800 From: "Bob Feng" To: "Shi, Steven" , "devel@edk2.groups.io" CC: "Gao, Liming" , "Rodriguez, Christian" Subject: Re: [PATCH v3 1/1] BaseTools: Cannot store library cache of different arch together Thread-Topic: [PATCH v3 1/1] BaseTools: Cannot store library cache of different arch together Thread-Index: AQHVJOT3+vgeF2DumEOI4dmrrdvgK6afiaGA Date: Mon, 17 Jun 2019 08:50:34 +0000 Message-ID: <08650203BA1BD64D8AD9B6D5D74A85D1601527C0@SHSMSX101.ccr.corp.intel.com> References: <20190617081618.23488-1-steven.shi@intel.com> <20190617081618.23488-2-steven.shi@intel.com> In-Reply-To: <20190617081618.23488-2-steven.shi@intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: bob.c.feng@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Bob Feng =20 -----Original Message----- From: Shi, Steven=20 Sent: Monday, June 17, 2019 4:16 PM To: devel@edk2.groups.io Cc: Gao, Liming ; Feng, Bob C ;= Rodriguez, Christian Subject: [PATCH v3 1/1] BaseTools: Cannot store library cache of different = arch together https://bugzilla.tianocore.org/show_bug.cgi?id=3D1895 Build cache cannot store cache for the same library modules in different ar= ch together. E.g. Both the below IA32 and X64 arch BaseLib caches should ex= ist 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() a= nd only one can exist. This is why the Basetool can only store one arch cac= he for library. This patch adds the arch string into the PlatformAutoGen and ModuleAutoGen = __hash_ definitions and ensure the different platform and module AutoGen ob= jects have different __hash_ values. Cc: Liming Gao Cc: Bob Feng Cc: Christian Rodriguez Signed-off-by: Steven Shi --- 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): =20 return True =20 + ## 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 =3D [] self.ConstPcd =3D {} =20 + ## 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)) =20 def __repr__(self): return "%s [%s]" % (self.MetaFile, self.Arch) -- 2.17.1.windows.2