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.151, mailfrom: liming.gao@intel.com) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by groups.io with SMTP; Mon, 08 Apr 2019 17:21:18 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 08 Apr 2019 17:21:18 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,327,1549958400"; d="scan'208";a="289875461" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by orsmga004.jf.intel.com with ESMTP; 08 Apr 2019 17:21:17 -0700 Received: from fmsmsx155.amr.corp.intel.com (10.18.116.71) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 8 Apr 2019 17:21:17 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by FMSMSX155.amr.corp.intel.com (10.18.116.71) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 8 Apr 2019 17:21:17 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.92]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.42]) with mapi id 14.03.0415.000; Tue, 9 Apr 2019 08:21:15 +0800 From: "Liming Gao" To: "Fan, ZhijuX" , "devel@edk2.groups.io" CC: "Feng, Bob C" Subject: Re: [edk2][PATCH V2] BaseTools:GenMakeFile Complete the task using CC Tool multithreading Thread-Topic: [edk2][PATCH V2] BaseTools:GenMakeFile Complete the task using CC Tool multithreading Thread-Index: AdTp8xhmBurI1H5ATVS/a1VUyOZDeAEdsheA Date: Tue, 9 Apr 2019 00:21:14 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E420B48@SHSMSX104.ccr.corp.intel.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMDIxODRmMGUtZjIxYy00ODNiLTgwNjItNWUwYjFlYWM0MGZhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiZ0MyamtJOEdYS28yS1dvdXJxeWI3SjdDZnpabXZZRTQ0TSt5cUFRdTlzaDhxMEtKd0drSGtZbXljXC9CRVdiMkUifQ== x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: liming.gao@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Zhiju: Why use /MP1? Can use /MP? Besides, if build_rule.txt is not updated to new one, build tool is updat= ed. What will happen? Thanks Liming > -----Original Message----- > From: Fan, ZhijuX > Sent: Wednesday, April 3, 2019 3:59 PM > To: edk2-devel@lists.01.org > Cc: Gao, Liming ; Feng, Bob C > Subject: [edk2][PATCH V2] BaseTools:GenMakeFile Complete the task using C= C Tool multithreading >=20 > CC_FLAGS "/Mp" enables multithreading with CC Tool. > In order to adapt to this change, I made some changes to other tools >=20 > Cc: Bob Feng > Cc: Liming Gao > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Zhiju.Fan > --- > BaseTools/Conf/build_rule.template | 2 +- > BaseTools/Conf/tools_def.template | 48 ++++++++--------- > BaseTools/Source/Python/AutoGen/GenMake.py | 83 ++++++++++++++++++++++++= +++--- > 3 files changed, 101 insertions(+), 32 deletions(-) >=20 > diff --git a/BaseTools/Conf/build_rule.template b/BaseTools/Conf/build_ru= le.template > index e56b1d9c59..4fc042f457 100755 > --- a/BaseTools/Conf/build_rule.template > +++ b/BaseTools/Conf/build_rule.template > @@ -129,7 +129,7 @@ > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj >=20 > > - "$(CC)" /Fo${dst} $(CC_FLAGS) $(INC) ${src} > + "$(CC)" /Fo${d_path}\ $(CC_FLAGS) $(INC) ${src} >=20 > > # For RVCTCYGWIN CC_FLAGS must be first to work around pathing i= ssues > diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def= .template > index abda2164a6..f65df7dbd9 100755 > --- a/BaseTools/Conf/tools_def.template > +++ b/BaseTools/Conf/tools_def.template > @@ -1810,9 +1810,9 @@ NOOPT_VS2012xASL_X64_DLINK_FLAGS =3D /NOLOGO /NO= DEFAULTLIB /IGNORE:4001 /OPT:RE > *_VS2012x86_IA32_ASM_PATH =3D DEF(VS2012x86_BIN)\ml.exe >=20 > *_VS2012x86_IA32_MAKE_FLAGS =3D /nologo > - DEBUG_VS2012x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h > /EHs-c- /GR- /GF /Gy /Z7 > -RELEASE_VS2012x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- > /GR- /GF > -NOOPT_VS2012x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF > /Gy /Z7 /Od > + DEBUG_VS2012x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h > /EHs-c- /GR- /GF /Gy /Z7 /MP1 > +RELEASE_VS2012x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- > /GR- /GF /MP1 > +NOOPT_VS2012x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF > /Gy /Z7 /Od /MP1 >=20 > DEBUG_VS2012x86_IA32_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /coff /Zd = /Zi > RELEASE_VS2012x86_IA32_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /coff /Zd > @@ -1842,9 +1842,9 @@ NOOPT_VS2012x86_IA32_DLINK_FLAGS =3D /NOLOGO /NOD= EFAULTLIB /IGNORE:4001 /OPT:REF > *_VS2012x86_X64_DLINK_PATH =3D DEF(VS2012x86_BINX64)\link.exe > *_VS2012x86_X64_ASLDLINK_PATH =3D DEF(VS2012x86_BINX64)\link.exe >=20 > - DEBUG_VS2012x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- > /GF /Z7 > -RELEASE_VS2012x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- > /GF > -NOOPT_VS2012x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Z7 > /Od > + DEBUG_VS2012x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- > /GR- /GF /Z7 /MP1 > +RELEASE_VS2012x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- > /GF /MP1 > +NOOPT_VS2012x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Z7 > /Od /MP1 >=20 > DEBUG_VS2012x86_X64_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /Zd /Zi > RELEASE_VS2012x86_X64_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /Zd > @@ -2276,9 +2276,9 @@ NOOPT_VS2013xASL_X64_DLINK_FLAGS =3D /NOLOGO /NO= DEFAULTLIB /IGNORE:4001 /OPT:RE > *_VS2013x86_IA32_ASM_PATH =3D DEF(VS2013x86_BIN)\ml.exe >=20 > *_VS2013x86_IA32_MAKE_FLAGS =3D /nologo > - DEBUG_VS2013x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h > /EHs-c- /GR- /GF /Gy /Z7 /Gw > -RELEASE_VS2013x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- > /GR- /GF /Gw > -NOOPT_VS2013x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF > /Gy /Z7 /Od > + DEBUG_VS2013x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h > /EHs-c- /GR- /GF /Gy /Z7 /Gw /MP1 > +RELEASE_VS2013x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- > /GR- /GF /Gw /MP1 > +NOOPT_VS2013x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF > /Gy /Z7 /Od /MP1 >=20 > DEBUG_VS2013x86_IA32_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /coff /Zd = /Zi > RELEASE_VS2013x86_IA32_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /coff /Zd > @@ -2308,9 +2308,9 @@ NOOPT_VS2013x86_IA32_DLINK_FLAGS =3D /NOLOGO /NOD= EFAULTLIB /IGNORE:4001 /OPT:REF > *_VS2013x86_X64_DLINK_PATH =3D DEF(VS2013x86_BINX64)\link.exe > *_VS2013x86_X64_ASLDLINK_PATH =3D DEF(VS2013x86_BINX64)\link.exe >=20 > - DEBUG_VS2013x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- > /GF /Z7 /Gw > -RELEASE_VS2013x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- > /GF /Gw > -NOOPT_VS2013x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Z7 > /Od > + DEBUG_VS2013x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- > /GR- /GF /Z7 /Gw /MP1 > +RELEASE_VS2013x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- > /GF /Gw /MP1 > +NOOPT_VS2013x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Z7 > /Od /MP1 >=20 > DEBUG_VS2013x86_X64_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /Zd /Zi > RELEASE_VS2013x86_X64_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /Zd > @@ -2746,9 +2746,9 @@ NOOPT_VS2015xASL_X64_DLINK_FLAGS =3D /NOLOGO /NO= DEFAULTLIB /IGNORE:4001 /OPT:RE > *_VS2015x86_IA32_ASM_PATH =3D DEF(VS2015x86_BIN)\ml.exe >=20 > *_VS2015x86_IA32_MAKE_FLAGS =3D /nologo > - DEBUG_VS2015x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h > /EHs-c- /GR- /GF /Gy /Z7 /Gw > -RELEASE_VS2015x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- > /GR- /GF /Gw > -NOOPT_VS2015x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF > /Gy /Z7 /Od > + DEBUG_VS2015x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h > /EHs-c- /GR- /GF /Gy /Z7 /Gw /MP1 > +RELEASE_VS2015x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- > /GR- /GF /Gw /MP1 > +NOOPT_VS2015x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W= 4 /Gs32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF > /Gy /Z7 /Od /MP1 >=20 > DEBUG_VS2015x86_IA32_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /coff /Zd = /Zi > RELEASE_VS2015x86_IA32_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /coff /Zd > @@ -2778,9 +2778,9 @@ NOOPT_VS2015x86_IA32_DLINK_FLAGS =3D /NOLOGO /NOD= EFAULTLIB /IGNORE:4001 /OPT:REF > *_VS2015x86_X64_DLINK_PATH =3D DEF(VS2015x86_BINX64)\link.exe > *_VS2015x86_X64_ASLDLINK_PATH =3D DEF(VS2015x86_BINX64)\link.exe >=20 > - DEBUG_VS2015x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- > /GF /Z7 /Gw > -RELEASE_VS2015x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- > /GF /Gw > -NOOPT_VS2015x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Z7 > /Od > + DEBUG_VS2015x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- > /GR- /GF /Z7 /Gw /MP1 > +RELEASE_VS2015x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- > /GF /Gw /MP1 > +NOOPT_VS2015x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 = /D UNICODE /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Z7 > /Od /MP1 >=20 > DEBUG_VS2015x86_X64_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /Zd /Zi > RELEASE_VS2015x86_X64_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /Zd > @@ -2976,9 +2976,9 @@ NOOPT_VS2015x86xASL_X64_DLINK_FLAGS =3D /NOLOGO = /NODEFAULTLIB /IGNORE:4001 /OPT > *_VS2017_IA32_ASM_PATH =3D DEF(VS2017_BIN_IA32)\ml.exe >=20 > *_VS2017_IA32_MAKE_FLAGS =3D /nologo > - DEBUG_VS2017_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 /= Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- > /GR- /GF /Gy /Z7 /Gw > -RELEASE_VS2017_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 /= Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- > /GR- /GF /Gw > -NOOPT_VS2017_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 /= Gs32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF /Gy > /Z7 /Od > + DEBUG_VS2017_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 /= Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- > /GR- /GF /Gy /Z7 /Gw /MP1 > +RELEASE_VS2017_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 /= Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- > /GR- /GF /Gw /MP1 > +NOOPT_VS2017_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 /= Gs32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF /Gy > /Z7 /Od /MP1 >=20 > DEBUG_VS2017_IA32_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /coff /Zd /Zi > RELEASE_VS2017_IA32_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /coff /Zd > @@ -3006,9 +3006,9 @@ NOOPT_VS2017_IA32_DLINK_FLAGS =3D /NOLOGO /NODEFA= ULTLIB /IGNORE:4001 /OPT:REF /O > *_VS2017_X64_DLINK_PATH =3D DEF(VS2017_BIN_X64)\link.exe > *_VS2017_X64_ASLDLINK_PATH =3D DEF(VS2017_BIN_X64)\link.exe >=20 > - DEBUG_VS2017_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D = UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- > /GF /Z7 /Gw > -RELEASE_VS2017_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D = UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF > /Gw > -NOOPT_VS2017_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D = UNICODE /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Z7 /Od > + DEBUG_VS2017_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D = UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- > /GF /Z7 /Gw /MP1 > +RELEASE_VS2017_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D = UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF > /Gw /MP1 > +NOOPT_VS2017_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D = UNICODE /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Z7 /Od > /MP1 >=20 > DEBUG_VS2017_X64_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /Zd /Zi > RELEASE_VS2017_X64_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /Zd > diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Sourc= e/Python/AutoGen/GenMake.py > index b441817b52..10db56dbc4 100644 > --- a/BaseTools/Source/Python/AutoGen/GenMake.py > +++ b/BaseTools/Source/Python/AutoGen/GenMake.py > @@ -19,6 +19,7 @@ import sys > import string > import re > import os.path as path > +import multiprocessing > from Common.LongFilePathSupport import OpenLongFilePath as open > from Common.MultipleWorkspace import MultipleWorkspace as mws > from Common.BuildToolError import * > @@ -435,7 +436,7 @@ cleanlib: > self.CommonFileDependency =3D [] > self.FileListMacros =3D {} > self.ListFileMacros =3D {} > - > + self.ObjTargetDict =3D {} > self.FileCache =3D {} > self.LibraryBuildCommandList =3D [] > self.LibraryFileList =3D [] > @@ -518,6 +519,10 @@ cleanlib: > # Remove duplicated include path, if any > if Attr =3D=3D "FLAGS": > Value =3D RemoveDupOption(Value, IncPrefix, MyAg= o.IncludePathList) > + if self._AutoGenObject.BuildRuleFamily =3D=3D TA= B_COMPILER_MSFT and Tool =3D=3D 'CC': > + ThreadNumber =3D GlobalData.gOptions.ThreadN= umber if GlobalData.gOptions.ThreadNumber else > multiprocessing.cpu_count() > + Value =3D Value.replace('/MP1', '%s%d' % ('/= MP', ThreadNumber)).replace(' /GM', '') > + MyAgo.BuildOption[Tool][Attr] =3D Value > if Tool =3D=3D "OPTROM" and PCI_COMPRESS_Flag: > ValueList =3D Value.split() > if ValueList: > @@ -618,6 +623,11 @@ cleanlib: > False > ) >=20 > + # Generate objlist used to create .obj file > + for Type in self.ObjTargetDict: > + NewLine =3D ' '.join(list(self.ObjTargetDict[Type])) > + FileMacroList.append("OBJLIST_%s =3D %s" % (list(self.ObjTar= getDict.keys()).index(Type), NewLine)) > + > BcTargetList =3D [] >=20 > MakefileName =3D self._FILE_NAME_[self._FileType] > @@ -927,6 +937,10 @@ cleanlib: > for File in DepSet: > self.CommonFileDependency.append(self.PlaceMacro(File.Path, = self.Macros)) >=20 > + CmdSumDict =3D {} > + CmdTargetDict =3D {} > + CmdCppDict =3D {} > + DependencyDict =3D FileDependencyDict.copy() > for File in FileDependencyDict: > # skip non-C files > if File.Ext not in [".c", ".C"] or File.Name =3D=3D "AutoGen= .c": > @@ -934,6 +948,7 @@ cleanlib: > NewDepSet =3D set(FileDependencyDict[File]) > NewDepSet -=3D DepSet > FileDependencyDict[File] =3D ["$(COMMON_DEPS)"] + list(NewDe= pSet) > + DependencyDict[File] =3D list(NewDepSet) >=20 > # Convert target description object to target string in makefile > for Type in self._AutoGenObject.Targets: > @@ -945,11 +960,21 @@ cleanlib: > self.ListFileMacros[T.ListFileMacro] =3D [] > if T.GenIncListFile and T.IncListFileMacro not in self.L= istFileMacros: > self.ListFileMacros[T.IncListFileMacro] =3D [] > + if self._AutoGenObject.BuildRuleFamily =3D=3D TAB_COMPIL= ER_MSFT and Type =3D=3D TAB_C_CODE_FILE: > + NewFile =3D self.PlaceMacro(str(T), self.Macros) > + if self.ObjTargetDict.get(T.Target.SubDir): > + self.ObjTargetDict[T.Target.SubDir].add(NewFile) > + else: > + self.ObjTargetDict[T.Target.SubDir] =3D set() > + self.ObjTargetDict[T.Target.SubDir].add(NewFile) >=20 > Deps =3D [] > + CCodeDeps =3D [] > # Add force-dependencies > for Dep in T.Dependencies: > Deps.append(self.PlaceMacro(str(Dep), self.Macros)) > + if Dep !=3D '$(MAKE_FILE)': > + CCodeDeps.append(self.PlaceMacro(str(Dep), self.= Macros)) > # Add inclusion-dependencies > if len(T.Inputs) =3D=3D 1 and T.Inputs[0] in FileDepende= ncyDict: > for F in FileDependencyDict[T.Inputs[0]]: > @@ -973,12 +998,56 @@ cleanlib: > if Type in [TAB_OBJECT_FILE, TAB_STATIC_LIBRARY]: > Deps.append("$(%s)" % T.ListFileMacro) >=20 > - TargetDict =3D { > - "target" : self.PlaceMacro(T.Target.Path, self.= Macros), > - "cmd" : "\n\t".join(T.Commands), > - "deps" : Deps > - } > - self.BuildTargetList.append(self._BUILD_TARGET_TEMPLATE.= Replace(TargetDict)) > + if self._AutoGenObject.BuildRuleFamily =3D=3D TAB_COMPIL= ER_MSFT and Type =3D=3D TAB_C_CODE_FILE: > + T, CmdTarget, CmdTargetDict, CmdCppDict =3D self.Par= serCCodeFile(T, Type, CmdSumDict, CmdTargetDict, > CmdCppDict, DependencyDict) > + TargetDict =3D {"target": self.PlaceMacro(T.Target.P= ath, self.Macros), "cmd": "\n\t".join(T.Commands),"deps": > CCodeDeps} > + CmdLine =3D self._BUILD_TARGET_TEMPLATE.Replace(Targ= etDict).rstrip().replace('\t$(OBJLIST', '$(OBJLIST') > + if T.Commands: > + CmdLine =3D '%s%s' %(CmdLine, TAB_LINE_BREAK) > + if CCodeDeps or CmdLine: > + self.BuildTargetList.append(CmdLine) > + else: > + TargetDict =3D {"target": self.PlaceMacro(T.Target.P= ath, self.Macros), "cmd": "\n\t".join(T.Commands),"deps": Deps} > + self.BuildTargetList.append(self._BUILD_TARGET_TEMPL= ATE.Replace(TargetDict)) > + > + def ParserCCodeFile(self, T, Type, CmdSumDict, CmdTargetDict, CmdCpp= Dict, DependencyDict): > + if not CmdSumDict: > + for item in self._AutoGenObject.Targets[Type]: > + CmdSumDict[item.Target.SubDir] =3D item.Target.BaseName > + for CppPath in item.Inputs: > + Path =3D self.PlaceMacro(CppPath.Path, self.Macros) > + if CmdCppDict.get(item.Target.SubDir): > + CmdCppDict[item.Target.SubDir].append(Path) > + else: > + CmdCppDict[item.Target.SubDir] =3D ['$(MAKE_FILE= )', Path] > + if CppPath.Path in DependencyDict: > + for Temp in DependencyDict[CppPath.Path]: > + Path =3D self.PlaceMacro(Temp.Path, self.Mac= ros) > + if Path not in (self.CommonFileDependency + = CmdCppDict[item.Target.SubDir]): > + CmdCppDict[item.Target.SubDir].append(Pa= th) > + if T.Commands: > + CommandList =3D T.Commands[:] > + for Item in CommandList[:]: > + SingleCommandList =3D Item.split() > + if len(SingleCommandList) > 0 and '$(CC)' in SingleComma= ndList[0]: > + for Temp in SingleCommandList: > + if Temp.startswith('/Fo'): > + CmdSign =3D '%s%s' % (Temp.rsplit(TAB_SLASH,= 1)[0], TAB_SLASH) > + break > + else: continue > + if CmdSign not in list(CmdTargetDict.keys()): > + CmdTargetDict[CmdSign] =3D Item.replace(Temp, Cm= dSign) > + else: > + CmdTargetDict[CmdSign] =3D "%s %s" % (CmdTargetD= ict[CmdSign], SingleCommandList[-1]) > + Index =3D CommandList.index(Item) > + CommandList.pop(Index) > + if SingleCommandList[-1].endswith("%s%s.c" % (TAB_SL= ASH, CmdSumDict[CmdSign.lstrip('/Fo').rsplit(TAB_SLASH, > 1)[0]])): > + Cpplist =3D CmdCppDict[T.Target.SubDir] > + Cpplist.insert(0, '$(OBJLIST_%d): $(COMMON_DEPS)= ' % list(self.ObjTargetDict.keys()).index(T.Target.SubDir)) > + T.Commands[Index] =3D '%s\n\t%s' % (' \\\n\t'.jo= in(Cpplist), CmdTargetDict[CmdSign]) > + else: > + T.Commands.pop(Index) > + return T, CmdSumDict, CmdTargetDict, CmdCppDict >=20 > ## For creating makefile targets for dependent libraries > def ProcessDependentLibrary(self): > -- > 2.14.1.windows.1