From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.126, mailfrom: zhijux.fan@intel.com) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by groups.io with SMTP; Tue, 09 Apr 2019 00:51:20 -0700 X-Amp-Result: UNSCANNABLE X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Apr 2019 00:51:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,328,1549958400"; d="dat'59?scan'59,208,59";a="138719337" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga008.fm.intel.com with ESMTP; 09 Apr 2019 00:51:18 -0700 Received: from fmsmsx123.amr.corp.intel.com (10.18.125.38) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 9 Apr 2019 00:51:17 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx123.amr.corp.intel.com (10.18.125.38) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 9 Apr 2019 00:51:16 -0700 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.164]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.93]) with mapi id 14.03.0415.000; Tue, 9 Apr 2019 15:51:15 +0800 From: zhijux.fan@intel.com To: "devel@edk2.groups.io" CC: "Gao, Liming" , "Feng, Bob C" Subject: [edk2][PATCH V3] BaseTools:GenMakeFile Complete the task using CC Tool multithreading Thread-Topic: [edk2][PATCH V3] BaseTools:GenMakeFile Complete the task using CC Tool multithreading Thread-Index: AdTuqOaGMv/1J3lHQ5iISsPwEUmNng== Date: Tue, 9 Apr 2019 07:51:14 +0000 Message-ID: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: zhijux.fan@intel.com X-Groupsio-MsgNum: 38701 Content-Type: multipart/mixed; boundary="_000_FAD0D7E0AE0FA54D987F6E72435CAFD50AF49952SHSMSX101ccrcor_" Content-Language: en-US --_000_FAD0D7E0AE0FA54D987F6E72435CAFD50AF49952SHSMSX101ccrcor_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable CC_FLAGS "/Mp" enables multithreading with CC Tool. In order to adapt to this change, I made some changes to other tools Cc: Bob Feng Cc: Liming Gao Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Zhiju.Fan --- BaseTools/Conf/tools_def.template | 48 +++++++++--------- BaseTools/Source/Python/AutoGen/GenMake.py | 81 ++++++++++++++++++++++++++= +--- 2 files changed, 98 insertions(+), 31 deletions(-) diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.t= emplate index abda2164a6..30c00c2d31 100755 --- a/BaseTools/Conf/tools_def.template +++ b/BaseTools/Conf/tools_def.template @@ -1810,9 +1810,9 @@ NOOPT_VS2012xASL_X64_DLINK_FLAGS =3D /NOLOGO /NODE= FAULTLIB /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- /W4 = /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- /W4 = /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- /GR- /GF -NOOPT_VS2012x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 = /Gs32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Z7 /Od + DEBUG_VS2012x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 = /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Z7 /MP +RELEASE_VS2012x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 = /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /MP +NOOPT_VS2012x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 = /Gs32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Z7 /Od /MP =20 DEBUG_VS2012x86_IA32_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /coff /Zd /Z= i RELEASE_VS2012x86_IA32_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /coff /Zd @@ -1842,9 +1842,9 @@ NOOPT_VS2012x86_IA32_DLINK_FLAGS =3D /NOLOGO /NODEF= AULTLIB /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 /MP +RELEASE_VS2012x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D= UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /MP +NOOPT_VS2012x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D= UNICODE /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Z7 /Od /MP =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 /NODE= FAULTLIB /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- /W4 = /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- /W4 = /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /Gw -NOOPT_VS2013x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 = /Gs32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Z7 /Od + DEBUG_VS2013x86_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 /MP +RELEASE_VS2013x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 = /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /Gw /MP +NOOPT_VS2013x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 = /Gs32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Z7 /Od /MP =20 DEBUG_VS2013x86_IA32_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /coff /Zd /Z= i RELEASE_VS2013x86_IA32_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /coff /Zd @@ -2308,9 +2308,9 @@ NOOPT_VS2013x86_IA32_DLINK_FLAGS =3D /NOLOGO /NODEF= AULTLIB /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 /MP +RELEASE_VS2013x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D= UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Gw /MP +NOOPT_VS2013x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D= UNICODE /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Z7 /Od /MP =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 /NODE= FAULTLIB /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- /W4 = /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- /W4 = /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /Gw -NOOPT_VS2015x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 = /Gs32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Z7 /Od + DEBUG_VS2015x86_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 /MP +RELEASE_VS2015x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 = /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /Gw /MP +NOOPT_VS2015x86_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 = /Gs32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Z7 /Od /MP =20 DEBUG_VS2015x86_IA32_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /coff /Zd /Z= i RELEASE_VS2015x86_IA32_ASM_FLAGS =3D /nologo /c /WX /W3 /Cx /coff /Zd @@ -2778,9 +2778,9 @@ NOOPT_VS2015x86_IA32_DLINK_FLAGS =3D /NOLOGO /NODEF= AULTLIB /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 /MP +RELEASE_VS2015x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D= UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Gw /MP +NOOPT_VS2015x86_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D= UNICODE /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Z7 /Od /MP =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 /N= ODEFAULTLIB /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 /Gs= 32768 /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 /Gs= 32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /Gw -NOOPT_VS2017_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 /Gs= 32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Z7 /Od + DEBUG_VS2017_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 /Gs= 32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Z7 /Gw /MP +RELEASE_VS2017_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 /Gs= 32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /Gw /MP +NOOPT_VS2017_IA32_CC_FLAGS =3D /nologo /arch:IA32 /c /WX /GS- /W4 /Gs= 32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Z7 /Od /MP =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 /NODEFAUL= TLIB /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 UN= ICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Z7 /Gw -RELEASE_VS2017_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D UN= ICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Gw -NOOPT_VS2017_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D UN= ICODE /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Z7 /Od + DEBUG_VS2017_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D UN= ICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Z7 /Gw /MP +RELEASE_VS2017_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D UN= ICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Gw /MP +NOOPT_VS2017_X64_CC_FLAGS =3D /nologo /c /WX /GS- /W4 /Gs32768 /D UN= ICODE /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Z7 /Od /MP =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/Source/= Python/AutoGen/GenMake.py index b441817b52..f5880bd47f 100644 --- a/BaseTools/Source/Python/AutoGen/GenMake.py +++ b/BaseTools/Source/Python/AutoGen/GenMake.py @@ -435,7 +435,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 +518,9 @@ cleanlib: # Remove duplicated include path, if any if Attr =3D=3D "FLAGS": Value =3D RemoveDupOption(Value, IncPrefix, MyAgo.= IncludePathList) + if self._AutoGenObject.BuildRuleFamily =3D=3D TAB_= COMPILER_MSFT and Tool =3D=3D 'CC' and '/GM' in Value: + Value =3D Value.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 +621,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.ObjTarge= tDict.keys()).index(Type), NewLine)) + BcTargetList =3D [] =20 MakefileName =3D self._FILE_NAME_[self._FileType] @@ -927,6 +935,10 @@ cleanlib: for File in DepSet: self.CommonFileDependency.append(self.PlaceMacro(File.Path, se= lf.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 +946,7 @@ cleanlib: NewDepSet =3D set(FileDependencyDict[File]) NewDepSet -=3D DepSet FileDependencyDict[File] =3D ["$(COMMON_DEPS)"] + list(NewDepS= et) + DependencyDict[File] =3D list(NewDepSet) =20 # Convert target description object to target string in makefile for Type in self._AutoGenObject.Targets: @@ -945,11 +958,21 @@ cleanlib: self.ListFileMacros[T.ListFileMacro] =3D [] if T.GenIncListFile and T.IncListFileMacro not in self.Lis= tFileMacros: self.ListFileMacros[T.IncListFileMacro] =3D [] + if self._AutoGenObject.BuildRuleFamily =3D=3D TAB_COMPILER= _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.Ma= cros)) # Add inclusion-dependencies if len(T.Inputs) =3D=3D 1 and T.Inputs[0] in FileDependenc= yDict: for F in FileDependencyDict[T.Inputs[0]]: @@ -973,12 +996,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.Ma= cros), - "cmd" : "\n\t".join(T.Commands), - "deps" : Deps - } - self.BuildTargetList.append(self._BUILD_TARGET_TEMPLATE.Re= place(TargetDict)) + if self._AutoGenObject.BuildRuleFamily =3D=3D TAB_COMPILER= _MSFT and Type =3D=3D TAB_C_CODE_FILE: + T, CmdTarget, CmdTargetDict, CmdCppDict =3D self.Parse= rCCodeFile(T, Type, CmdSumDict, CmdTargetDict, CmdCppDict, DependencyDict) + TargetDict =3D {"target": self.PlaceMacro(T.Target.Pat= h, self.Macros), "cmd": "\n\t".join(T.Commands),"deps": CCodeDeps} + CmdLine =3D self._BUILD_TARGET_TEMPLATE.Replace(Target= Dict).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.Pat= h, self.Macros), "cmd": "\n\t".join(T.Commands),"deps": Deps} + self.BuildTargetList.append(self._BUILD_TARGET_TEMPLAT= E.Replace(TargetDict)) + + def ParserCCodeFile(self, T, Type, CmdSumDict, CmdTargetDict, CmdCppDi= ct, 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.Macro= s) + if Path not in (self.CommonFileDependency + Cm= dCppDict[item.Target.SubDir]): + CmdCppDict[item.Target.SubDir].append(Path= ) + if T.Commands: + CommandList =3D T.Commands[:] + for Item in CommandList[:]: + SingleCommandList =3D Item.split() + if len(SingleCommandList) > 0 and '$(CC)' in SingleCommand= List[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, CmdS= ign) + else: + CmdTargetDict[CmdSign] =3D "%s %s" % (CmdTargetDic= t[CmdSign], SingleCommandList[-1]) + Index =3D CommandList.index(Item) + CommandList.pop(Index) + if SingleCommandList[-1].endswith("%s%s.c" % (TAB_SLAS= H, 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'.join= (Cpplist), CmdTargetDict[CmdSign]) + else: + T.Commands.pop(Index) + return T, CmdSumDict, CmdTargetDict, CmdCppDict =20 ## For creating makefile targets for dependent libraries def ProcessDependentLibrary(self): --=20 2.14.1.windows.1 --_000_FAD0D7E0AE0FA54D987F6E72435CAFD50AF49952SHSMSX101ccrcor_ Content-Disposition: attachment; filename="winmail.dat" Content-Transfer-Encoding: base64 Content-Type: application/ms-tnef; name="winmail.dat" eJ8+IsBmAQaQCAAEAAAAAAABAAEAAQeQBgAIAAAA5AQAAAAAAADoAAEJgAEAIQAAADMyQjkxNjMw MzFFRjNDNEQ5QzY2MDRDOUY1RTVBRTQ2ADQHAQ2ABAACAAAAAgACAAEFgAMADgAAAOMHBAAJAAcA MwAOAAIAQQEBIIADAA4AAADjBwQACQAHADMADgACAEEBAQiABwAYAAAASVBNLk1pY3Jvc29mdCBN YWlsLk5vdGUAMQgBBIABAFcAAABbZWRrMl1bUEFUQ0ggVjNdIEJhc2VUb29sczpHZW5NYWtlRmls ZSBDb21wbGV0ZSB0aGUgdGFzayB1c2luZyBDQyBUb29sICBtdWx0aXRocmVhZGluZwBFHgELgAEA IQAAADMyQjkxNjMwMzFFRjNDNEQ5QzY2MDRDOUY1RTVBRTQ2ADQHAQOQBgD0HAAAMAAAAAIBfwAB AAAASAAAADxGQUQwRDdFMEFFMEZBNTREOTg3RjZFNzI0MzVDQUZENTBBRjQ5OTUyQFNIU01TWDEw MS5jY3IuY29ycC5pbnRlbC5jb20+AAsAHw4BAAAAAgEJEAEAAADmEwAA4hMAABlNAABMWkZ1qj/8 HGEACmZiaWQEAABjY8BwZzEyNTIA/gND8HRleHQB9wKkA+MCAARjaArAc2V0MCDvB20CgwBQEU0y CoAGtAKAln0KgAjIOwliMTkOwL8JwxZyCjIWcQKAFWIqCbBzCfAEkGF0BbIOUANgc6JvAYAgRXgR wW4YMF0GUnYEkBe2AhByAMB0fQhQbhoxECAFwAWgG2RkmiADUiAQIheyXHYIkOR3awuAZDUdUwTw B0ANF3AwCnEX8mJrbWsGcwGQACAgQk1fQuBFR0lOfQr8AfEL8QAgQ0NfRkxBR4EF8CIvTXAiIAnw BwGgHnAEIG11bHRptHRoCXBhDeAZwCAD8BcjYCGREkBvBvAuXGz1C4BlCoBJA6AFsASBHMD0byAj oGEFMSXRI2AEAOMb0BmjLCBJIwAjoBng3xkgB4Am1QQgJdFvI2Alo48G8A4AJOQk1UNjOh+wsG9i IEYJ8CPgPAbgoGIuYy5mKvFAC4CnECAksAWgbT4p+UwHcGkjwkdhJeA8JOAtYi4+Zy3AK+8qUAIh BRBidfkcQS11HcAEkCqAB2AAcF5vCFAJcCGQL9ZpAiAgjkEJwgeAAjAgMS4AUHEk5FNpZxhQMGAZ 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 EB7waWXhZmyT5yzzIeAJkHNzZ7YZAdgCNnkoo7XHLeOAzHUyLjQxNNxwLocQAdBvd82w8DHMdcx1 fX3MwN6AAAAfAEIAAQAAABgAAABGAGEAbgAsACAAWgBoAGkAagB1AFgAAAAfAGUAAQAAACoAAAB6 AGgAaQBqAHUAeAAuAGYAYQBuAEAAaQBuAHQAZQBsAC4AYwBvAG0AAAAAAB8AZAABAAAACgAAAFMA TQBUAFAAAAAAAAIBQQABAAAAZAAAAAAAAACBKx+kvqMQGZ1uAN0BD1QCAAAAgEYAYQBuACwAIABa AGgAaQBqAHUAWAAAAFMATQBUAFAAAAB6AGgAaQBqAHUAeAAuAGYAYQBuAEAAaQBuAHQAZQBsAC4A YwBvAG0AAAAfAAJdAQAAACoAAAB6AGgAaQBqAHUAeAAuAGYAYQBuAEAAaQBuAHQAZQBsAC4AYwBv AG0AAAAAAB8A5V8BAAAAMgAAAHMAaQBwADoAegBoAGkAagB1AHgALgBmAGEAbgBAAGkAbgB0AGUA bAAuAGMAbwBtAAAAAAAfABoMAQAAABgAAABGAGEAbgAsACAAWgBoAGkAagB1AFgAAAAfAB8MAQAA ACoAAAB6AGgAaQBqAHUAeAAuAGYAYQBuAEAAaQBuAHQAZQBsAC4AYwBvAG0AAAAAAB8AHgwBAAAA CgAAAFMATQBUAFAAAAAAAAIBGQwBAAAAZAAAAAAAAACBKx+kvqMQGZ1uAN0BD1QCAAAAgEYAYQBu ACwAIABaAGgAaQBqAHUAWAAAAFMATQBUAFAAAAB6AGgAaQBqAHUAeAAuAGYAYQBuAEAAaQBuAHQA ZQBsAC4AYwBvAG0AAAAfAAFdAQAAACoAAAB6AGgAaQBqAHUAeAAuAGYAYQBuAEAAaQBuAHQAZQBs AC4AYwBvAG0AAAAAAB8A+D8BAAAAGAAAAEYAYQBuACwAIABaAGgAaQBqAHUAWAAAAB8AI0ABAAAA KgAAAHoAaABpAGoAdQB4AC4AZgBhAG4AQABpAG4AdABlAGwALgBjAG8AbQAAAAAAHwAiQAEAAAAK AAAAUwBNAFQAUAAAAAAAAgH5PwEAAABkAAAAAAAAAIErH6S+oxAZnW4A3QEPVAIAAACARgBhAG4A LAAgAFoAaABpAGoAdQBYAAAAUwBNAFQAUAAAAHoAaABpAGoAdQB4AC4AZgBhAG4AQABpAG4AdABl AGwALgBjAG8AbQAAAB8ACV0BAAAAKgAAAHoAaABpAGoAdQB4AC4AZgBhAG4AQABpAG4AdABlAGwA LgBjAG8AbQAAAAAACwBAOgEAAAAfABoAAQAAABIAAABJAFAATQAuAE4AbwB0AGUAAAAAAAMA8T8J BAAACwBAOgEAAAADAP0/5AQAAAIBCzABAAAAEAAAADK5FjAx7zxNnGYEyfXlrkYDABcAAQAAAEAA OQAAxVcBqe7UAUAACDDoIXsBqe7UAR8AAICGAwIAAAAAAMAAAAAAAABGAQAAAB4AAABhAGMAYwBl AHAAdABsAGEAbgBnAHUAYQBnAGUAAAAAAAEAAAAMAAAAZQBuAC0AVQBTAAAAHwA3AAEAAACuAAAA WwBlAGQAawAyAF0AWwBQAEEAVABDAEgAIABWADMAXQAgAEIAYQBzAGUAVABvAG8AbABzADoARwBl AG4ATQBhAGsAZQBGAGkAbABlACAAQwBvAG0AcABsAGUAdABlACAAdABoAGUAIAB0AGEAcwBrACAA dQBzAGkAbgBnACAAQwBDACAAVABvAG8AbAAgACAAbQB1AGwAdABpAHQAaAByAGUAYQBkAGkAbgBn AAAAAAAfAD0AAQAAAAIAAAAAAAAAAwA2AAAAAAACAXEAAQAAABYAAAAB1O6o5oYy//UneUdDmIhK w/ARSY2eAAAfAHAAAQAAAK4AAABbAGUAZABrADIAXQBbAFAAQQBUAEMASAAgAFYAMwBdACAAQgBh AHMAZQBUAG8AbwBsAHMAOgBHAGUAbgBNAGEAawBlAEYAaQBsAGUAIABDAG8AbQBwAGwAZQB0AGUA IAB0AGgAZQAgAHQAYQBzAGsAIAB1AHMAaQBuAGcAIABDAEMAIABUAG8AbwBsACAAIABtAHUAbAB0 AGkAdABoAHIAZQBhAGQAaQBuAGcAAAAAAB8ANRABAAAAkAAAADwARgBBAEQAMABEADcARQAwAEEA RQAwAEYAQQA1ADQARAA5ADgANwBGADYARQA3ADIANAAzADUAQwBBAEYARAA1ADAAQQBGADQAOQA5 ADUAMgBAAFMASABTAE0AUwBYADEAMAAxAC4AYwBjAHIALgBjAG8AcgBwAC4AaQBuAHQAZQBsAC4A YwBvAG0APgAAAAMA3j+fTgAAQAAHMML9cwGp7tQBAgELAAEAAAAQAAAAMrkWMDHvPE2cZgTJ9eWu RgMAJgAAAAAAAgFHAAEAAAAyAAAAYz1VUzthPU1DSTtwPUludGVsO2w9U0hTTVNYMTAxLTE5MDQw OTA3NTExNFotODE0MwAAAAIBEDABAAAARgAAAAAAAAAmd705O+w4SaSmFT3LpXtCBwD60Nfgrg+l TZh/bnJDXK/VAAAARBFeAACmk2g2iHZsS6dK0+tHmkxkAAAJVI89AAAAAB8A+j8BAAAAGAAAAEYA YQBuACwAIABaAGgAaQBqAHUAWAAAAAMACVkBAAAACwAAgAggBgAAAAAAwAAAAAAAAEYAAAAAgoUA AAAAAAADAACACCAGAAAAAADAAAAAAAAARgAAAADrhQAACQQAAAMADTT9PwAAHwAAgIYDAgAAAAAA wAAAAAAAAEYBAAAAIAAAAHgALQBtAHMALQBoAGEAcwAtAGEAdAB0AGEAYwBoAAAAAQAAAAIAAAAA AAAAHwAAgIYDAgAAAAAAwAAAAAAAAEYBAAAAIgAAAHgALQBvAHIAaQBnAGkAbgBhAHQAaQBuAGcA LQBpAHAAAAAAAAEAAAAgAAAAWwAxADAALgAyADMAOQAuADEAMgA3AC4ANAAwAF0AAACk2w== --_000_FAD0D7E0AE0FA54D987F6E72435CAFD50AF49952SHSMSX101ccrcor_--