From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx.groups.io with SMTP id smtpd.web09.4876.1642589528733428368 for ; Wed, 19 Jan 2022 02:52:09 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=mWvM30Ht; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: steven.shi@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1642589528; x=1674125528; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=IFmWsor/OezpGnUIKLcRoQZQ+hBjmEvtFUvkNwG2ewg=; b=mWvM30HtmHScbjiy/tdATN5tBTAx+JllHrY/B2QypxZPVYeFwY1K119D dRPCC/VOwtNOrHUlZCNP+qdL0PqlWAf26TmNIX7xUKeSmKdMq4O1H0eQ1 XX7yreSNBbL4oiXn9nWrzM0wfM2+tiN19dKSYIeuZ/FWw0+2v2LvWnh8y 0acia7tuD7wFcXxDhythrUGK6fB7faHrn1qT6u+1dpomD9ZFeE3Ydh4t/ Hauai0NjPlvF6htEzFXdm1Fpjie3pTsDvXq6z71HlVuLFgZZer7ferx51 myto3d2QUmO8JgoWNsw0zV7WY/0+MUJeBPUyRkfMOquftTHv3vYN3s5b0 g==; X-IronPort-AV: E=McAfee;i="6200,9189,10231"; a="242600984" X-IronPort-AV: E=Sophos;i="5.88,299,1635231600"; d="scan'208";a="242600984" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Jan 2022 02:52:07 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,299,1635231600"; d="scan'208";a="518126369" Received: from orsmsx604.amr.corp.intel.com ([10.22.229.17]) by orsmga007.jf.intel.com with ESMTP; 19 Jan 2022 02:52:07 -0800 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX604.amr.corp.intel.com (10.22.229.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Wed, 19 Jan 2022 02:52:07 -0800 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Wed, 19 Jan 2022 02:52:07 -0800 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.172) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Wed, 19 Jan 2022 02:52:06 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GyUHaPy+TbsxfFTMsYd3gpfdvQNH0niDJhvnRrtocSbhOFqy58wwNnUM2T4y1dT7hDuo/b0j/7lkq7AIH9x/KzaE5vCHV0EZD0o1Z6rm8DH6a+WUNhyTKU2mubcC6iI4bUySXGefj94OOUZ9GiEHTAWttlU7Tu1rQK8tiHiwMorg37D/mY8D8ANwLrNVCHXQKONjuABNS07fVyNwnTclx/Xb4oXpfEEkoXj6kgTq+kw8ePBzITfSNKHi64hfCooNsCdd5aTAsM6Z/NxwHTO3fTf97/Jh2ZQsVeNijtbWXAxcDX30RaqEjnkp93Jg47dPff69ttyLy954YWsIX/aMWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LY/xrAjZLb9QUwL9DGxn5klIqJ8SHzjdHHyd/OIB9NE=; b=TD6VqQNd5iXsDyXOlygd3u5EECvFXBv/qqOEvZzbtGeN4HY2PxKfCC9glDPsWZRLm8NgpMV2IrU5FXbkS5a//duT1pll8A/W5Gpb01w4aJZdI60CK36BXSIKTXkvvcsyJCgVMV9AIImLno+NvHLPF9OQLT/I7b+ylXPA5KJFrdMhSR4OlO/ml7UijTGIXlHRtm3Y6nGzAH+Q6aQ9JO1SJOFbapFgdDrKDHNfBJbQhbKkd7jLk45SU9nyFB35anQG9OC+R8Y9KYfxY5DuFC1VD/gVoykTL2WqXmDuGh4lsXyvdgAOCIuYJ1p1gkqhjAh9nnn4v3lr6760bk7SwDW4aw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from DM4PR11MB5549.namprd11.prod.outlook.com (2603:10b6:5:388::7) by DM4PR11MB5469.namprd11.prod.outlook.com (2603:10b6:5:399::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.10; Wed, 19 Jan 2022 10:52:05 +0000 Received: from DM4PR11MB5549.namprd11.prod.outlook.com ([fe80::2cb5:24ec:fe40:2d47]) by DM4PR11MB5549.namprd11.prod.outlook.com ([fe80::2cb5:24ec:fe40:2d47%9]) with mapi id 15.20.4909.008; Wed, 19 Jan 2022 10:52:05 +0000 From: "Steven Shi" To: "ardb@kernel.org" , "leif@nuviainc.com" , "Chang, Abner" , "Schaefer, Daniel" CC: "Feng, Bob C" , "Chen, Christine" , "devel@edk2.groups.io" Subject: Re: [edk2-devel] [PATCH 1/1] BaseTools: Enable GNU make parallel jobs by default Thread-Topic: [edk2-devel] [PATCH 1/1] BaseTools: Enable GNU make parallel jobs by default Thread-Index: AQHYC7CZtCtf+TIGrEy9klq04pFW+6xnSlkQgALi9wA= Date: Wed, 19 Jan 2022 10:52:05 +0000 Message-ID: References: <20220117144251.1087-1-steven.shi@intel.com> <20220117144251.1087-2-steven.shi@intel.com> In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.200.16 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 8dfbe92b-a08c-49a5-aa94-08d9db39bb9f x-ms-traffictypediagnostic: DM4PR11MB5469:EE_ x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2512; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Yi6Vxu989MW9oztW+nHr7ACQLD6qhetYPqgBLLubMCAOPkHyfjEu8NuZdnRO6NytFe5JR400P1q40ydDDIndVxl8bgpCTCSSswOuDVM19TbcHZ+kKY2hya1vtH3QBOASnIAmgCwXWYzD8BzgDB93YnxoevXe6DDi5ZW5XMSlDRCf+14CST6gGT6K35dgPUljZWTK6XuodrV7j0WXO4S5NcSZOJT/0C1k/knpQUnNWuq958MrQE6edEV9TARIn41lDI0zNXkRS3kpN3mZHAo80BXDiYelB2ASNO1pzxZpsrTgL/05tCnZgnrmcnbG9BpxXVstUoWOPdUVenKW+DEv7t+aKbeGVpw8m3sEH8wo9VyplaZGhDJULZm17GO2m9efcrt6kfIqTUcvF8FBXhnZu3Uwmhfx1MlghYNzQyn/LGv4/HZ5Aga21cvAyD0bmSrlZDA0RLu2QdSUQYm6JwA8mywanaSO880eagZOrryKeg5LOjG3CfuLDwSdT5v5JnUAProvPFfWfUocvmHzYBdHfMQHilYx8rseSIdN/gzF0WujmoRUTG18eCMwP1gEDF3Y26naX0Hw74JK9zlL3WXETRdDb2vBP1f9wT5VyFTCBvoXPdyiJy52E+MezP2CtkY72UTDU8oQ6ul/9z3N+kwPYzv7M7JnYcHcxzGrbSgh2k4LyRL77nx5IBu9SFHuhhudauyY10yW0PB4QQgOsMlBw7P+IAm8r2Syr9SXzJY2+TIniDkzECH09Ex2dc7dpzcPcpPPkD2b0VfI0zhe6j10qQafEsXiHlk8ogLp7r5ovHdsDlkDGuFHa1Tbk0+xUeKJ8Abq/B6H2xLyPBa/aVGIpg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR11MB5549.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(2906002)(33656002)(6506007)(82960400001)(4326008)(64756008)(966005)(7696005)(83380400001)(53546011)(5660300002)(110136005)(66556008)(86362001)(52536014)(66946007)(38100700002)(66476007)(76116006)(122000001)(9686003)(71200400001)(316002)(8676002)(8936002)(55016003)(38070700005)(26005)(66446008)(54906003)(508600001)(186003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?67F+iRESjEnkW8DkDbA28f6MYiUTn1dWNnLSBV9UTdNE6c0unp8pTT7xTnqb?= =?us-ascii?Q?BnbBPCfKbWtXbgU/bMVt1Qm5w4OLECKmvqbnjH5FLWu04BB3GrFU4w861Niq?= =?us-ascii?Q?HuX6KKd+x5+Kf3MszOqLnRTezsd77PW2iqjWF5ch8TIt1obg8Pj+Cr15x7L0?= =?us-ascii?Q?HDa//HBftecu3eOyc5+Vcjt5L1NLQQTQrxoEqYf8GwPVxfaaA97zXIisb4cA?= =?us-ascii?Q?GBtqXhHYsQ79D5KdO0zbt5r8hd9qfRt3mlKplzwzB4+njItCk39P31NGPQ+8?= =?us-ascii?Q?7ucJqBIJI211H67UTnYPQ8KSeItwxUOquoFWId2LQtpYfXb5DE8GV2je57hL?= =?us-ascii?Q?k/Ifu1DbehrgFqq9J6xXzq+Rav/3bBlBH+mLR2nkju4vsG6fVbhJEkCyx5mN?= =?us-ascii?Q?nwkBzrp7hWjhin8eEh/pI9UbhRkB3UHHY3UYZd6EOPWCNWGhEpYcNOXlSHzY?= =?us-ascii?Q?UX70QAQZlxvvSqO2Lm/HkEQZN3N/KU9EPH1KqqmNDhPtezGoA/8agKC40/QP?= =?us-ascii?Q?dwtb5w2FjGxW3MS3xqoRpKk/ABcLcByHwBG8tsmbASt9Umw91+fyCY4pVFaR?= =?us-ascii?Q?ltuUr4xks0NW5wbwWxARJunh8PqlaHgdXa9OVePd8XBnH0W+iQmy9nDr0yZh?= =?us-ascii?Q?K8rhOlSFEir/RjTvqEPkd/DuRFBVOmVJBfhhyQbG0rIIjD/dIySj2htnmyCg?= =?us-ascii?Q?FurxMTqiaasUIYEvkwxReSVUk6Uj4VUtwXsWdYQnCfv808/NcGfPxnLtQ9+U?= =?us-ascii?Q?1L3udNjCY02W7/K10haUxjr/FAhdC6o02Klo6uWt55F2lu39OnIyM7Sntxpn?= =?us-ascii?Q?cT0O63iSyuabg6Z8qH0JXw8ciJXpQr/iP75n3JTtxB1FirA0FdbVaiMGM3az?= =?us-ascii?Q?GJxVkod7BarWPjxFL3ft/nGJ+nfkAV8nWiBUbKDWU1uTcmPU0erJRjSQnx5r?= =?us-ascii?Q?y5KTu/oTOUIGE09DMvqxp1al2wprqhgbrdwmRYpfj2hURNPkH60YTuRkFj1A?= =?us-ascii?Q?5UFJLXYcOdARP56k5mqv9DmzvvieSvgxbdGGwhw2ayVvr2DrFLUsKfUxxu4G?= =?us-ascii?Q?1pHKlSnMJ3MryyxuSxYykvACptbURQgsaajStsuBfPPEiDN81e8y1+11g85x?= =?us-ascii?Q?Apn01z8BETm+cSbxLVde64gCC3ZoiR1ASrRSVQKE2zeW6F4wbaKmGLNaxEpi?= =?us-ascii?Q?UfP4EtSfM6TjjtfF1bGTWLt1JxuxrCOuQGULVespR/j2Ls8AmqnJDM+bGffi?= =?us-ascii?Q?RngkEfdjy27atNwmkxnua39eSBzmgWNhLOq3NEuTy66D1TPeZqYOKqcVYKWr?= =?us-ascii?Q?W6MU5ffVVAIOE2YYt3xtnGjYe3e8RQb9rKqmmbwxNOigjh3jtWpRL32Zep+N?= =?us-ascii?Q?dVzRKrZgrdZZ1laXG+tSCNJfg631j/JDjjLdOPJBOEhLPMw5dWfyX6oJ57gn?= =?us-ascii?Q?sqHN7leGfr1CS76eSZIlX6jSPXTj86juABAmvHzElfh1hbBI2f9wOJA+gHXF?= =?us-ascii?Q?s7WcHY/TaGtiOQNpN+tc+ZgZFdRQ8ulHRnxL41yYmkk2UmMNN4+y4vkv++7S?= =?us-ascii?Q?r7cRCUchW16KKYgKR2xxx6AW2a01VOX0kRTukBrE690pkiT4SKUonszmsVwq?= =?us-ascii?Q?WVYidJsDDI8jcGTaVsBr0JQ=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5549.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8dfbe92b-a08c-49a5-aa94-08d9db39bb9f X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Jan 2022 10:52:05.6276 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: zPrE/WvVNQibeP4haiOkUW+yPi485O/jAz8xbopO+pI1wGAIJIrPpBYqt/Sr/NeUCj+W/C6xlrHh8UHSusIQmg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR11MB5469 Return-Path: steven.shi@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hello Ard, Leif, Abner, Daniel, Are you ok to enable the GNU make "--jobs" option in GCC5 toolchain by defa= ult? Thanks Steven Shi > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Steven > Shi > Sent: Monday, January 17, 2022 10:54 PM > To: ardb@kernel.org; leif@nuviainc.com; Chang, Abner > ; Schaefer, Daniel > Cc: Feng, Bob C ; Chen, Christine > ; devel@edk2.groups.io > Subject: Re: [edk2-devel] [PATCH 1/1] BaseTools: Enable GNU make parallel > jobs by default >=20 > Hello Ard, Leif, Abner, Daniel, > I changed the GNU make flag to enable the "--jobs" option in GCC5 toolcha= in > by default for all architectures. Please verify whether this change has i= mpact > to the ARM and RISCV GCC5 builds. Thanks! >=20 >=20 > Thanks > Steven Shi >=20 > > -----Original Message----- > > From: Shi, Steven > > Sent: Monday, January 17, 2022 10:43 PM > > To: devel@edk2.groups.io > > Cc: Feng, Bob C ; Chen, Christine > > ; ardb@kernel.org; leif@nuviainc.com; Chang, > > Abner ; Schaefer, Daniel > > ; Shi, Steven > > Subject: [PATCH 1/1] BaseTools: Enable GNU make parallel jobs by defaul= t > > > > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3807 > > > > * Enable GNU make parallel jobs support(--jobs flag) by > > default in GCC5 and CLANGPDB toolchains. This gmake flag > > can save full features bios linux build time by +20%. > > * Explictly distinguish and define the MS nmake flag and > > GNU gmake flag in the toolchain which might support > > both, e.g. CLANGPDB can use nmake in Windows and gmake > > in Linux. General make flags cannot work for such hybrid > > make usage scenario. > > > > Signed-off-by: Steven Shi > > --- > > BaseTools/Conf/tools_def.template | 4 ++++ > > BaseTools/Source/Python/AutoGen/GenMake.py | 5 +++-- > > BaseTools/Source/Python/AutoGen/PlatformAutoGen.py | 12 > > +++++++++++- > > 3 files changed, 18 insertions(+), 3 deletions(-) > > > > diff --git a/BaseTools/Conf/tools_def.template > > b/BaseTools/Conf/tools_def.template > > index 2e6b382ab623..84af08cca6ae 100755 > > --- a/BaseTools/Conf/tools_def.template > > +++ b/BaseTools/Conf/tools_def.template > > @@ -2283,6 +2283,8 @@ RELEASE_GCC49_AARCH64_DLINK_XIPFLAGS =3D - > z > > common-page-size=3D0x20 > > *_GCC5_*_*_FAMILY =3D GCC > > > > > > > > *_GCC5_*_MAKE_PATH =3D DEF(GCC_HOST_PREFIX)make > > > > +*_GCC5_*_GMAKE_FLAGS =3D --jobs > > > > +*_GCC5_*_NMAKE_FLAGS =3D /nologo > > > > *_GCC5_*_*_DLL =3D ENV(GCC5_DLL) > > > > *_GCC5_*_ASL_PATH =3D DEF(UNIX_IASL_BIN) > > > > > > > > @@ -2742,6 +2744,8 @@ RELEASE_CLANG38_AARCH64_DLINK_FLAGS =3D > > DEF(CLANG38_AARCH64_DLINK_FLAGS) -flto -Wl > > *_CLANGPDB_*_*_FAMILY =3D GCC > > > > *_CLANGPDB_*_*_BUILDRULEFAMILY =3D CLANGPDB > > > > *_CLANGPDB_*_MAKE_PATH =3D ENV(CLANG_HOST_BIN)make > > > > +*_CLANGPDB_*_GMAKE_FLAGS =3D --jobs > > > > +*_CLANGPDB_*_NMAKE_FLAGS =3D /nologo > > > > *_CLANGPDB_*_*_DLL =3D ENV(CLANGPDB_DLL) > > > > *_CLANGPDB_*_ASL_PATH =3D DEF(UNIX_IASL_BIN) > > > > > > > > diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py > > b/BaseTools/Source/Python/AutoGen/GenMake.py > > index e55efff059f9..c6636d99fc7d 100755 > > --- a/BaseTools/Source/Python/AutoGen/GenMake.py > > +++ b/BaseTools/Source/Python/AutoGen/GenMake.py > > @@ -732,10 +732,11 @@ cleanlib: > > Src, Dst =3D CopyCmd > > > > Src =3D self.ReplaceMacro(Src) > > > > Dst =3D self.ReplaceMacro(Dst) > > > > + Efi =3D Src[:-3] + 'efi' > > > > if Dst not in self.ResultFileList: > > > > self.ResultFileList.append(Dst) > > > > if '%s :' %(Dst) not in self.BuildTargetList: > > > > - self.BuildTargetList.append("%s : %s" %(Dst,Sr= c)) > > > > + self.BuildTargetList.append("%s : %s" %(Dst, E= fi)) > > > > self.BuildTargetList.append('\t' + > > self._CP_TEMPLATE_[self._Platform] %{'Src': Src, 'Dst': Dst}) > > > > > > > > FfsCmdList =3D Cmd[0] > > > > @@ -778,7 +779,7 @@ cleanlib: > > SecDepsFileList.append(SecCmdList[inde= x + 1]) > > > > index =3D index + 1 > > > > if CmdName =3D=3D 'Trim': > > > > - SecDepsFileList.append(os.path.join('$(DEB= UG_DIR)', > > os.path.basename(OutputFile).replace('offset', 'efi'))) > > > > + SecDepsFileList.append(os.path.join('$(OUT= PUT_DIR)', > > os.path.basename(OutputFile).replace('offset', 'efi'))) > > > > if OutputFile.endswith('.ui') or OutputFile.en= dswith('.ver'): > > > > SecDepsFileList.append(os.path.join('$(MOD= ULE_DIR)', > > '$(MODULE_FILE)')) > > > > self.FfsOutputFileList.append((OutputFile, ' > > '.join(SecDepsFileList), SecCmdStr)) > > > > diff --git a/BaseTools/Source/Python/AutoGen/PlatformAutoGen.py > > b/BaseTools/Source/Python/AutoGen/PlatformAutoGen.py > > index 592d4824a4b3..632c960c8d3d 100644 > > --- a/BaseTools/Source/Python/AutoGen/PlatformAutoGen.py > > +++ b/BaseTools/Source/Python/AutoGen/PlatformAutoGen.py > > @@ -893,7 +893,17 @@ class PlatformAutoGen(AutoGen): > > RetVal[Tool] =3D OrderedDict() > > > > if Attr not in RetVal[Tool]: > > > > RetVal[Tool][Attr] =3D Value > > > > - > > > > + if 'NMAKE' in RetVal.keys() or 'GMAKE' in RetVal.keys(): > > > > + if RetVal['MAKE']['PATH'] =3D=3D "nmake": > > > > + if 'FLAGS' in RetVal['MAKE'].keys(): > > > > + RetVal['MAKE']['FLAGS'] +=3D ' ' + RetVal['NMAKE']= ['FLAGS'] > > > > + else: > > > > + RetVal['MAKE']['FLAGS'] =3D RetVal['NMAKE']['FLAGS= '] > > > > + else: > > > > + if 'FLAGS' in RetVal['MAKE'].keys(): > > > > + RetVal['MAKE']['FLAGS'] +=3D ' ' + RetVal['GMAKE']= ['FLAGS'] > > > > + else: > > > > + RetVal['MAKE']['FLAGS'] =3D RetVal['GMAKE']['FLAGS= '] > > > > ToolsDef =3D '' > > > > if GlobalData.gOptions.SilentMode and "MAKE" in RetVal: > > > > if "FLAGS" not in RetVal["MAKE"]: > > > > -- > > 2.22.0.windows.1 >=20 >=20 >=20 >=20 >=20