From d5d56f1bc5e7bcebd08ad55e940fb907ea0af365 Mon Sep 17 00:00:00 2001 From: lgao4 Date: Thu, 4 Mar 2010 05:29:52 +0000 Subject: [PATCH] Sync EDKII BaseTools to BaseTools project r1911. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10177 6f19259b-4bc3-4df7-8a09-765794883524 --- BaseTools/Bin/Win32/BootSectImage.exe | Bin 393216 -> 393216 bytes BaseTools/Bin/Win32/EfiLdrImage.exe | Bin 421888 -> 421888 bytes BaseTools/Bin/Win32/EfiRom.exe | Bin 446464 -> 446464 bytes BaseTools/Bin/Win32/GenBootSector.exe | Bin 425984 -> 425984 bytes BaseTools/Bin/Win32/GenCrc32.exe | Bin 425984 -> 425984 bytes BaseTools/Bin/Win32/GenFds.exe | Bin 1465182 -> 1466321 bytes BaseTools/Bin/Win32/GenFfs.exe | Bin 430080 -> 430080 bytes BaseTools/Bin/Win32/GenFv.exe | Bin 475136 -> 475136 bytes BaseTools/Bin/Win32/GenFw.exe | Bin 479232 -> 479232 bytes BaseTools/Bin/Win32/GenPage.exe | Bin 421888 -> 421888 bytes BaseTools/Bin/Win32/GenSec.exe | Bin 446464 -> 446464 bytes BaseTools/Bin/Win32/GenVtf.exe | Bin 446464 -> 446464 bytes BaseTools/Bin/Win32/LzmaCompress.exe | Bin 397312 -> 397312 bytes BaseTools/Bin/Win32/Split.exe | Bin 425984 -> 425984 bytes BaseTools/Bin/Win32/TianoCompress.exe | Bin 434176 -> 434176 bytes BaseTools/Bin/Win32/VfrCompile.exe | Bin 1183744 -> 1183744 bytes BaseTools/Bin/Win32/VolInfo.exe | Bin 471040 -> 471040 bytes BaseTools/Bin/Win32/build.exe | Bin 2733693 -> 2735442 bytes BaseTools/Conf/build_rule.template | 2 +- BaseTools/Conf/tools_def.template | 23 ++++---- BaseTools/ReadMe.txt | 33 ++--------- .../Source/Python/Common/FdfParserLite.py | 37 ++++++------ BaseTools/Source/Python/GenFds/FdfParser.py | 38 ++++++------ BaseTools/Source/Python/GenFds/GenFds.py | 6 +- .../Source/Python/Workspace/MetaFileParser.py | 54 +++++++++++++++--- BaseTools/Source/Python/build/BuildReport.py | 48 +++++++++------- BaseTools/Source/Python/build/build.py | 13 ++++- BaseTools/gcc/mingw-gcc-build.py | 8 +-- 28 files changed, 148 insertions(+), 114 deletions(-) diff --git a/BaseTools/Bin/Win32/BootSectImage.exe b/BaseTools/Bin/Win32/BootSectImage.exe index 06cdd4e0f35b441ed356426ab460f4b199a90f01..cb7cf6a44c338cc13bf3fd1ca8ba8083d1dda715 100755 GIT binary patch delta 61 zcmZo@kZ5R-nDBtPOsT)|aqDBo*2he(kD0eVX88yf+kX8a3-2C*|8~|q=XmA4_S~;K Qx$j;4v+ZBzvhpMW0DR#crT_o{ delta 61 zcmZo@kZ5R-nDBtPoT;<%aqDBo*2he(kD0eVX88yf+kX8a3-2BQzZ=It&ais!G=X=Y Q@XWmyQ?`GZ%gU1k0DUAKDgXcg diff --git a/BaseTools/Bin/Win32/EfiLdrImage.exe b/BaseTools/Bin/Win32/EfiLdrImage.exe index 6c80b40eb4e10f61829e9917e6a6dd8dea0e0f49..558b09a694fe57ed9b024a7ce9c6573415bc33ff 100755 GIT binary patch delta 64 zcmZp8AldLha>4`V8m0cm$E}YUTOTvEK4xxx%(C?{>&F0)@b>G0ta~2_bewz|IN|vP U-zoMDQo9yg`D|Ze#1>-<00jgd*8l(j delta 64 zcmZp8AldLha>4`V3Z~A+$E}YUTOTvEK4xxx%(C?{>&F0)@b>G0ta~2_gp_wr-MuW- UXW3I(;o5%}*|sk+VvDf_0O;o)5&!@I diff --git a/BaseTools/Bin/Win32/EfiRom.exe b/BaseTools/Bin/Win32/EfiRom.exe index a36b64accb17e29fd6c4fc31c135d2dc07c19b29..5967c544138b80b0c8a6ebe0ef4aacbdbbd081be 100755 GIT binary patch delta 64 zcmZozAl%$2k;qBKavi^M_U^4lB*5>!Z Uz7rm&&&uG{JGA{t5t~db00gKXT>t<8 delta 64 zcmZozAl%$2k;qBKavi^M_V60MLm>XB` U&}?Pnl4b?a-!*4Ip}ubEq4vuu6M`ZE9|y#09~>)v|;J|T;itmRGj T+O>C@<93_S`0ZN^*nIo}(19In delta 64 zcmZo@kZNd)v|;Z-nv!42omD THpP5@fvuyp$`Y-?_y#0D0>(K`SvStxCogd!t UTl)CV#uT4zAGfbDVhiyF0PDvepa1{> delta 64 zcmZo@kZNdpP5@fvuyp$`Y-?_y#0D0>(K`SH}tIay6nz) Tue#s2+JYy&Z2KA`wh&(c#Ht+) diff --git a/BaseTools/Bin/Win32/GenFds.exe b/BaseTools/Bin/Win32/GenFds.exe index d9b51693c5ddbf36f64bf0ae91ceadc61dd92246..6dcfc846983c109270c1b4e16a6f948cc5e63b13 100755 GIT binary patch delta 20225 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 U_mnv{uAT?3vut1D#1`WV0M(8iZ~y=R delta 64 zcmZozAl0xyYQh8NTBgp%$E}YUTOTvEK4xxx%(C?{>&FC;@b>G8ta~2_thbr7Z?o!8 U?}Z(EuS-(CI@VvwFBlggL Uzm7lB*B1((>)n3m5SvOZ02L%5OaK4? delta 64 zcmZo@kZov?o$!LWj;XWpb?a-!*4Ip}ubEq4vuu6M`tkutc>DE-tY04ph-a{~Y!CNv UUVdG(a=ozn((QK+v8mJo0L?!gl>h($ diff --git a/BaseTools/Bin/Win32/GenFw.exe b/BaseTools/Bin/Win32/GenFw.exe index 7a816a2e9de49e350cd4f02ce24d9b268afcb7a1..8773b715c5bdf5fcfa49cd18def7037c23293330 100755 GIT binary patch delta 64 zcmZozAltA&cEShdsY?BgpIbjOwti-6{mk6@nPux|)`wu>?bkoD+CCI`aC_c{Iz3IV TosoC!?wPL5+OBe$?M@8<8!I5C delta 64 zcmZozAltA&cEShd2Byx&&#j*sTR$_ker9g{%(C?}>qD^c_Uj*6Z66BAO}5THVjSYI T>DupIZ{zKAwyRubyHf)I_P`&< diff --git a/BaseTools/Bin/Win32/GenPage.exe b/BaseTools/Bin/Win32/GenPage.exe index 0dd72b849a449cfcf23a4eea12ea58cbd65b4726..8a3005c1fda598c1a862cb7ab7926104b3ca140d 100755 GIT binary patch delta 64 zcmZp8AldLha>4`VsY?Bgk6RxzwmxQReazhYm}To@){g-o;qBK0S@%8=Sg#uWU0h+7 Ud;jUm?>`+91-CCTVvDf_0Qv|XQ2+n{ delta 64 zcmZp8AldLha>4`V2Byx&$E}YUTOTvEK4xxx%(C?{>&F0)@b>G0ta~2_coOV delta 64 zcmZozAl&FQo;qBKavaWp~5XN}zT75sK U_XN*PpHw;wj&Gk*#Fi5a0MmCK0{{R3 diff --git a/BaseTools/Bin/Win32/GenVtf.exe b/BaseTools/Bin/Win32/GenVtf.exe index ee60e62d324e720340660fe623705acecc410733..d0ba8e18074a7f04d17750444503987408d51b32 100755 GIT binary patch delta 64 zcmZozAl&pco;qBKKvi3d{aKH1ga(Cwr UkDbpMudvGGsBAB3X6x|*0PnXRm;e9( diff --git a/BaseTools/Bin/Win32/LzmaCompress.exe b/BaseTools/Bin/Win32/LzmaCompress.exe index 5397a5c5e5e438df86f76b8c81ef5d552ebf5d49..f34c530eff9bf18f626dedbc963a2cedfa770b8e 100644 GIT binary patch delta 64 zcmZozAknZuV!{LFg-ZR6k6RxzwmxQReazhYm}To@){hDx;qBKIS?6vPU^!Z#ymecl U^Nu~`F_X5LT5oT;%vxgu0Lw=mo&W#< delta 64 zcmZozAknZuV!{LFR;JFz$E}YUTOTvEK4xxx%(C?{>qiBU@b>G9taCRC%r+6&{BhAI U_l}jn4Av>m+OxgoGHZnky3x-=hn}Rt)H1%KQp&}X4(3g^D82R@Dare=BdBGaa#Y UUb<;V-}x)gUvHOjVtZl>0P`px@&Et; delta 64 zcmZo@kZNdpP5@fvuyp$`Y{0{y#0A1tLg)RmpQY)z1(`x UZC0mw*_+GXy0^Px# delta 64 zcmZoTAk}a{YQh8NcBan8$E}YUTOTvEK4xxx%(C?{>&FI=@b>GCtY;qxEPZ)=t*vCP U`;3Us+SiS)HErLL#O7lQ0QJ-#6951J diff --git a/BaseTools/Bin/Win32/VfrCompile.exe b/BaseTools/Bin/Win32/VfrCompile.exe index dfbff8c173d00c9e3ec7f3d810f310a5f1aed8f2..1431841561210bed85cd27f9dda1a0c8b7192d42 100755 GIT binary patch delta 105 zcmZoz;L)(aW5NsO^Gf}VuUlU;w!UU+ea+nZnx*wMYwK&a*4ONsT#={e5Tg6kVD#Z%a;liXJZz^8qnG5DRQi(G#5W F5CGa*EC>Jq delta 105 zcmZoz;L)(aW5NsO=}euCuUlU;w!UU+ea+nZnx*wMYwK&a*4ON;a`eBT)bV delta 77 zcmZp8Ak*+bX2K2TcBan8+pV`5TW>S9-ezvS&9e12E9XOy@b>2qS(m;MIKF?@)UI>+ h4xL}t>Yh>1=GZ>x99xYdn_Fs;b2qBa;9C diff --git a/BaseTools/Bin/Win32/build.exe b/BaseTools/Bin/Win32/build.exe index 5bf71358a9a0c5109c765a1044396290a6fe35f5..0803c85e5288be225c009b151314a8ff6f5f0fef 100755 GIT binary patch delta 26910 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%0A04?Anu%z+FHwa(cT=U(VA!Db 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 SRNn{P4*A@+d#?3iJ^v5!liPX# diff --git a/BaseTools/Conf/build_rule.template b/BaseTools/Conf/build_rule.template index 0f2921c714..8a7663db27 100644 --- a/BaseTools/Conf/build_rule.template +++ b/BaseTools/Conf/build_rule.template @@ -304,7 +304,7 @@ "$(MTOC)" -subsystem $(MODULE_TYPE) $(MTOC_FLAGS) ${src} $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff # create symbol file for GDB debug -$(DSYMUTIL) ${src} - GenFw -e $(MODULE_TYPE) -o ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff + GenFw --xip -e $(MODULE_TYPE) -o ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff $(CP) ${dst} $(OUTPUT_DIR) $(CP) ${dst} $(BIN_DIR) -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR) diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template index e797f15c53..2dbc776d94 100644 --- a/BaseTools/Conf/tools_def.template +++ b/BaseTools/Conf/tools_def.template @@ -137,8 +137,8 @@ DEFINE ICC_WIN_ASLCC_FLAGS = /Y- /TC /WX- /Od /Dmain=ReferenceAcpiTable DEFINE ICC_WIN_ASLDLINK_FLAGS = /NODEFAULTLIB /ENTRY:ReferenceAcpiTable /SUBSYSTEM:CONSOLE /NODEFAULTLIB:libmmt /NODEFAULTLIB:libirc DEFINE IPHONE_TOOLS = /Developer/Platforms/iPhoneOS.platform/Developer -DEFINE RVCT31_TOOLS_PATH = c:/Program Files/ARM/RVCT/Programs/3.1/569/win_32-pentium -DEFINE RVCT31CYGWIN_TOOLS_PATH = /cygdrive/c/Program Files/ARM/RVCT/Programs/3.1/569/win_32-pentium +DEFINE RVCT31_TOOLS_PATH = c:/Program Files/ARM/RVCT/Programs/3.1/761/win_32-pentium +DEFINE RVCT31CYGWIN_TOOLS_PATH = /cygdrive/c/Program Files/ARM/RVCT/Programs/3.1/761/win_32-pentium # Update to the location of the gcc executables DEFINE ARMGCC_BIN = / @@ -1745,6 +1745,7 @@ DEFINE GCC44_ASM_FLAGS = DEF(GCC_ASM_FLAGS) *_CYGGCC_IA32_ASLPP_PATH = DEF(CYGWIN_BINIA32)gcc *_CYGGCC_IA32_ASLDLINK_PATH = DEF(CYGWIN_BINIA32)ld *_CYGGCC_IA32_RC_PATH = DEF(CYGWIN_BINIA32)objcopy +*_CYGGCC_IA32_OBJECT_PATH = DEF(CYGWIN_BINIA32)objcopy *_CYGGCC_IA32_CC_FLAGS = DEF(GCC_IA32_CC_FLAGS) *_CYGGCC_IA32_RC_FLAGS = DEF(GCC_IA32_RC_FLAGS) @@ -1763,6 +1764,7 @@ DEFINE GCC44_ASM_FLAGS = DEF(GCC_ASM_FLAGS) *_CYGGCC_X64_ASLPP_PATH = DEF(CYGWIN_BINX64)gcc *_CYGGCC_X64_ASLDLINK_PATH = DEF(CYGWIN_BINX64)ld *_CYGGCC_X64_RC_PATH = DEF(CYGWIN_BINX64)objcopy +*_CYGGCC_X64_OBJECT_PATH = DEF(CYGWIN_BINX64)objcopy *_CYGGCC_X64_CC_FLAGS = DEF(GCC_X64_CC_FLAGS) *_CYGGCC_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS) @@ -1782,6 +1784,7 @@ DEFINE GCC44_ASM_FLAGS = DEF(GCC_ASM_FLAGS) *_CYGGCC_IPF_OBJCOPY_PATH = DEF(CYGWIN_BINIPF)objcopy *_CYGGCC_IPF_SYMRENAME_PATH = DEF(CYGWIN_BINIPF)objcopy *_CYGGCC_IPF_RC_PATH = DEF(CYGWIN_BINIPF)objcopy +*_CYGGCC_IPF_OBJECT_PATH = DEF(CYGWIN_BINIPF)objcopy *_CYGGCC_IPF_CC_FLAGS = DEF(GCC_IPF_CC_FLAGS) *_CYGGCC_IPF_DLINK_FLAGS = DEF(GCC_IPF_DLINK_FLAGS) @@ -2757,8 +2760,8 @@ RELEASE_XCODE32_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -mthumb-inter # # Use default values, or override in DSC file # -*_RVCT31_ARM_ARCHCC_FLAGS = --thumb --cpu 7-A -*_RVCT31_ARM_ARCHASM_FLAGS = --cpu 7-A +*_RVCT31_ARM_ARCHCC_FLAGS = --thumb --cpu ARM1176JZF-S +*_RVCT31_ARM_ARCHASM_FLAGS = --cpu ARM1176JZF-S *_RVCT31_ARM_ARCHDLINK_FLAGS = *_RVCT31_ARM_PLATFORM_FLAGS = @@ -2771,8 +2774,8 @@ RELEASE_RVCT31_ARM_DLINK_FLAGS = $(ARCHDLINK_FLAGS) --entry $(IMAGE_ENTRY_PO *_RVCT31_ARM_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -E -DVFRCOMPILE --preinclude $(DEST_DIR_DEBUG)/$(MODULE_NAME)StrDefs.h *_RVCT31_ARM_MAKE_PATH = nmake *_RVCT31_ARM_SLINK_FLAGS = --partial -o - DEBUG_RVCT31_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -g -Ospace -c --no_autoinline --asm --gnu --apcs /interwork --signed_chars --no_unaligned_access --split_sections --enum_is_int --preinclude AutoGen.h --diag_warning 167 -RELEASE_RVCT31_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -Ospace -c --no_autoinline --asm --gnu --apcs /interwork --signed_chars --no_unaligned_access --split_sections --enum_is_int --preinclude AutoGen.h --diag_warning 167 + DEBUG_RVCT31_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -c -g -O2 --no_autoinline --asm --gnu --apcs /interwork --signed_chars --no_unaligned_access --split_sections --enum_is_int --preinclude AutoGen.h --diag_warning 167 +RELEASE_RVCT31_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -c --no_autoinline --asm --gnu --apcs /interwork --signed_chars --no_unaligned_access --split_sections --enum_is_int --preinclude AutoGen.h --diag_warning 167 ################## # ARM definitions @@ -2807,8 +2810,8 @@ RELEASE_RVCT31_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -Ospac # # Use default values, or override in DSC file # -*_RVCT31CYGWIN_ARM_ARCHCC_FLAGS = --thumb --cpu 7-A -*_RVCT31CYGWIN_ARM_ARCHASM_FLAGS = --cpu 7-A +*_RVCT31CYGWIN_ARM_ARCHCC_FLAGS = --thumb --cpu ARM1176JZF-S +*_RVCT31CYGWIN_ARM_ARCHASM_FLAGS = --cpu ARM1176JZF-S *_RVCT31CYGWIN_ARM_ARCHDLINK_FLAGS = *_RVCT31CYGWIN_ARM_PLATFORM_FLAGS = @@ -2820,8 +2823,8 @@ RELEASE_RVCT31CYGWIN_ARM_DLINK_FLAGS = "$(DLINKPATH_FLAG)" $(ARCHDLINK_FLAGS *_RVCT31CYGWIN_ARM_VFRPP_FLAGS = "$(CCPATH_FLAG)" $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -E -DVFRCOMPILE --preinclude `cygpath -m $(DEST_DIR_DEBUG)/$(MODULE_NAME)StrDefs.h` *_RVCT31CYGWIN_ARM_MAKE_PATH = make *_RVCT31CYGWIN_ARM_SLINK_FLAGS = "$(SLINKPATH_FLAG)" --partial -o - DEBUG_RVCT31CYGWIN_ARM_CC_FLAGS = "$(CCPATH_FLAG)" $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -c -g -Ospace --no_autoinline --asm --gnu --apcs /interwork --signed_chars --no_unaligned_access --split_sections --preinclude AutoGen.h --diag_warning 167 -RELEASE_RVCT31CYGWIN_ARM_CC_FLAGS = "$(CCPATH_FLAG)" $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -c -Ospace --no_autoinline --asm --gnu --apcs /interwork --signed_chars --no_unaligned_access --split_sections --preinclude AutoGen.h --diag_warning 167 + DEBUG_RVCT31CYGWIN_ARM_CC_FLAGS = "$(CCPATH_FLAG)" $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -c -g -O2 --no_autoinline --asm --gnu --apcs /interwork --signed_chars --no_unaligned_access --split_sections --preinclude AutoGen.h --diag_warning 167 +RELEASE_RVCT31CYGWIN_ARM_CC_FLAGS = "$(CCPATH_FLAG)" $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -c --no_autoinline --asm --gnu --apcs /interwork --signed_chars --no_unaligned_access --split_sections --preinclude AutoGen.h --diag_warning 167 ################## # ARM definitions diff --git a/BaseTools/ReadMe.txt b/BaseTools/ReadMe.txt index 82b3d5883f..37691e98fd 100644 --- a/BaseTools/ReadMe.txt +++ b/BaseTools/ReadMe.txt @@ -66,7 +66,7 @@ Notes: or modules because the AutoGen.* files have been be removed. The "makefile" itself cannot generate AutoGen.* files. Only "build" command can. 3) All .exe binary file including C and python tools are generated from: - r1707 \BaseTools\Source\ + r1707 VfrCompiler tool update + r1911 \BaseTools\Source\. Brief usage for Migration Tool MigrationMsa2Inf.exe: 1. Command line format: @@ -125,30 +125,7 @@ Brief usage for Migration Tool MigrationMsa2Inf.exe: f. When tool generates [LibraryClasses] section, the recommended library instances are lost. (No impact to build) 7. Pyton Source - r682 \BaseTools\Source\Python\MigrationMsa2Inf - - -Brief Usage for PcdSyntax Update: -Usage: - PcdSyntaxUpdate.exe -It searches all INF, DEC and DSC file under and update them with the following rules: -1. Update INF files to conform to INF spec 0.44: - a. Rename PCD section name: e.g. [PcdsFeatureFlag] -> [FeaturePcd] - b. Adjust PCD section item format: e.g. PcdDebugClearMemoryValue|gEfiMdePkgTokenSpaceGuid -> gEfiMdePkgTokenSpaceGuid.PcdDebugClearMemoryValue - c. Update the syntax of binary INF file (not PCD related) -2. Update DEC files to confirm to DEC spec 0.36 - Adjust PCD section item format: e.g. PcdWinNtPhysicalDisk|0x00001000|gEfiNt32PkgTokenSpaceGuid|VOID*|L"E:RW;245760;512"-> gEfiNt32PkgTokenSpaceGuid.PcdWinNtFlashFvRecoverySize|0x0|UINT32|0x00001011 -3. Update DSC files to confirm to DSC spec - a. Adjust string/array typed PCD item format: e.g. PcdWinNtMemorySizeForSecMain|gEfiNt32PkgTokenSpaceGuid|L"64!64"|12 -> gEfiNt32PkgTokenSpaceGuid.PcdWinNtMemorySizeForSecMain|L"64!64"|VOID*|12 - b. Adjust non-string/array typed PCD item format: e.g. PcdWinNtBootMode|gEfiNt32PkgTokenSpaceGuid|1 -> gEfiNt32PkgTokenSpaceGuid.PcdWinNtBootMode|1 - c. Update the override library class in [Components] section: e.g. - { - PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf - } - To - { - PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf - } + BaseTools\Source\Python\MigrationMsa2Inf Brief usage for Migration Tool Spd2Dec.exe: 1. Command line format: @@ -164,7 +141,7 @@ Brief usage for Migration Tool Spd2Dec.exe: Example a & b are equivalent to migrate Nt32 package SPD file from EDKII to EDKII' snytax. 6. Pyton Source - r777 \BaseTools\Source\Python\spd2Dec + BaseTools\Source\Python\spd2dec Brief usage for Migration Tool Fpd2Dsc.exe: 1. Command line format: @@ -188,6 +165,6 @@ Brief usage for Migration Tool Fpd2Dsc.exe: b. If MSA file which is corresponds to module guid could not be found in currect workspace, tool will dump the module guid. 7. Pyton Source - r767 \BaseTools\Source\Python\Fpd2Dsc + BaseTools\Source\Python\fpd2dsc -10-Sep-2009 +4-Mar-2010 diff --git a/BaseTools/Source/Python/Common/FdfParserLite.py b/BaseTools/Source/Python/Common/FdfParserLite.py index e9b69ff1b9..eb7b0d7514 100644 --- a/BaseTools/Source/Python/Common/FdfParserLite.py +++ b/BaseTools/Source/Python/Common/FdfParserLite.py @@ -1,7 +1,7 @@ ## @file # parse FDF file # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -383,7 +383,22 @@ class FdfParser(object): while Offset <= EndPos[1]: self.Profile.FileLinesList[EndPos[0]][Offset] = Value Offset += 1 - + + + def __GetMacroName(self): + if not self.__GetNextToken(): + raise Warning("expected Macro name", self.FileName, self.CurrentLineNumber) + MacroName = self.__Token + NotFlag = False + if MacroName.startswith('!'): + NotFlag = True + MacroName = MacroName[1:].strip() + + if not MacroName.startswith('$(') or not MacroName.endswith(')'): + raise Warning("Macro name expected(Please use '$(%(Token)s)' if '%(Token)s' is a macro.)" % {"Token" : MacroName}, + self.FileName, self.CurrentLineNumber) + MacroName = MacroName[2:-1] + return MacroName, NotFlag ## PreprocessFile() method # @@ -554,14 +569,7 @@ class FdfParser(object): IfList.append([IfStartPos, None, None]) CondLabel = self.__Token - if not self.__GetNextToken(): - raise Warning("expected Macro name At Line ", self.FileName, self.CurrentLineNumber) - MacroName = self.__Token - NotFlag = False - if MacroName.startswith('!'): - NotFlag = True - MacroName = MacroName[1:] - + MacroName, NotFlag = self.__GetMacroName() NotDefineFlag = False if CondLabel == '!ifndef': NotDefineFlag = True @@ -615,14 +623,7 @@ class FdfParser(object): self.__WipeOffArea.append((IfList[-1][0], ElseStartPos)) IfList[-1] = [ElseStartPos, True, IfList[-1][2]] if self.__Token == '!elseif': - if not self.__GetNextToken(): - raise Warning("expected Macro name At Line ", self.FileName, self.CurrentLineNumber) - MacroName = self.__Token - NotFlag = False - if MacroName.startswith('!'): - NotFlag = True - MacroName = MacroName[1:] - + MacroName, NotFlag = self.__GetMacroName() if not self.__GetNextOp(): raise Warning("expected !endif At Line ", self.FileName, self.CurrentLineNumber) diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py b/BaseTools/Source/Python/GenFds/FdfParser.py index 4ce2761243..92d6ab64ba 100644 --- a/BaseTools/Source/Python/GenFds/FdfParser.py +++ b/BaseTools/Source/Python/GenFds/FdfParser.py @@ -1,7 +1,7 @@ ## @file # parse FDF file # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -415,6 +415,21 @@ class FdfParser: Offset += 1 + def __GetMacroName(self): + if not self.__GetNextToken(): + raise Warning("expected Macro name", self.FileName, self.CurrentLineNumber) + MacroName = self.__Token + NotFlag = False + if MacroName.startswith('!'): + NotFlag = True + MacroName = MacroName[1:].strip() + + if not MacroName.startswith('$(') or not MacroName.endswith(')'): + raise Warning("Macro name expected(Please use '$(%(Token)s)' if '%(Token)s' is a macro.)" % {"Token" : MacroName}, + self.FileName, self.CurrentLineNumber) + MacroName = MacroName[2:-1] + return MacroName, NotFlag + ## PreprocessFile() method # # Preprocess file contents, replace comments with spaces. @@ -545,6 +560,7 @@ class FdfParser: self.Rewind() + ## PreprocessIncludeFile() method # # Preprocess file contents, replace !include statements with file contents. @@ -583,15 +599,8 @@ class FdfParser: IfStartPos = (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - len(self.__Token)) IfList.append([IfStartPos, None, None]) CondLabel = self.__Token - - if not self.__GetNextToken(): - raise Warning("expected Macro name", self.FileName, self.CurrentLineNumber) - MacroName = self.__Token - NotFlag = False - if MacroName.startswith('!'): - NotFlag = True - MacroName = MacroName[1:] - + + MacroName, NotFlag = self.__GetMacroName() NotDefineFlag = False if CondLabel == '!ifndef': NotDefineFlag = True @@ -645,14 +654,7 @@ class FdfParser: self.__WipeOffArea.append((IfList[-1][0], ElseStartPos)) IfList[-1] = [ElseStartPos, True, IfList[-1][2]] if self.__Token == '!elseif': - if not self.__GetNextToken(): - raise Warning("expected Macro name", self.FileName, self.CurrentLineNumber) - MacroName = self.__Token - NotFlag = False - if MacroName.startswith('!'): - NotFlag = True - MacroName = MacroName[1:] - + MacroName, NotFlag = self.__GetMacroName() if not self.__GetNextOp(): raise Warning("expected !endif", self.FileName, self.CurrentLineNumber) diff --git a/BaseTools/Source/Python/GenFds/GenFds.py b/BaseTools/Source/Python/GenFds/GenFds.py index 1285103f5e..d586346168 100644 --- a/BaseTools/Source/Python/GenFds/GenFds.py +++ b/BaseTools/Source/Python/GenFds/GenFds.py @@ -196,10 +196,8 @@ def main(): if (Options.outputDir): OutputDirFromCommandLine = GenFdsGlobalVariable.ReplaceWorkspaceMacro(Options.outputDir) - if not os.path.isabs (Options.outputDir): - Options.outputDir = os.path.join(GenFdsGlobalVariable.WorkSpaceDir, Options.outputDir) - if os.path.normcase (Options.outputDir).find(Workspace) != 0: - EdkLogger.error("GenFds", FILE_NOT_FOUND, "OutputDir doesn't exist in Workspace!") + if not os.path.isabs (OutputDirFromCommandLine): + OutputDirFromCommandLine = os.path.join(GenFdsGlobalVariable.WorkSpaceDir, OutputDirFromCommandLine) for Arch in ArchList: GenFdsGlobalVariable.OutputDirDict[Arch] = OutputDirFromCommandLine else: diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py b/BaseTools/Source/Python/Workspace/MetaFileParser.py index cf165ff507..4c7ea03516 100644 --- a/BaseTools/Source/Python/Workspace/MetaFileParser.py +++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py @@ -1,7 +1,7 @@ ## @file # This file is used to parse meta files # -# Copyright (c) 2008, Intel Corporation +# Copyright (c) 2008 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -40,6 +40,28 @@ class MetaFileParser(object): # data type (file content) for specific file type DataType = {} + # Parser objects used to implement singleton + MetaFiles = {} + + ## Factory method + # + # One file, one parser object. This factory method makes sure that there's + # only one object constructed for one meta file. + # + # @param Class class object of real AutoGen class + # (InfParser, DecParser or DscParser) + # @param FilePath The path of meta file + # @param *args The specific class related parameters + # @param **kwargs The specific class related dict parameters + # + def __new__(Class, FilePath, *args, **kwargs): + if FilePath in Class.MetaFiles: + return Class.MetaFiles[FilePath] + else: + ParserObject = super(MetaFileParser, Class).__new__(Class) + Class.MetaFiles[FilePath] = ParserObject + return ParserObject + ## Constructor of MetaFileParser # # Initialize object of MetaFileParser @@ -52,6 +74,9 @@ class MetaFileParser(object): # @param From ID from which the data comes (for !INCLUDE directive) # def __init__(self, FilePath, FileType, Table, Macros=None, Owner=-1, From=-1): + # prevent re-initialization + if hasattr(self, "_Table"): + return self._Table = Table self._FileType = FileType self.MetaFile = FilePath @@ -596,7 +621,9 @@ class DscParser(MetaFileParser): continue self._CurrentLine = Line self._LineIndex = Index - + if self._InSubsection and self._Owner == -1: + self._Owner = self._LastItem + # section header if Line[0] == TAB_SECTION_START and Line[-1] == TAB_SECTION_END: self._SectionHeaderParser() @@ -644,8 +671,6 @@ class DscParser(MetaFileParser): if self._InSubsection: SectionType = self._SubsectionType SectionName = self._SubsectionName - if self._Owner == -1: - self._Owner = self._LastItem else: SectionType = self._SectionType SectionName = self._SectionName @@ -774,13 +799,24 @@ class DscParser(MetaFileParser): else: self._Enabled = len(self._Eval) - ## Evaludate the value of expression in "if/ifdef/ifndef" directives + ## Evaluate the Token for its value; for now only macros are supported. + def _EvaluateToken(self, TokenName, Expression): + if TokenName.startswith("$(") and TokenName.endswith(")"): + Name = TokenName[2:-1] + return self._Macros.get(Name) + else: + EdkLogger.error('Parser', FORMAT_INVALID, "Unknown operand '%(Token)s', " + "please use '$(%(Token)s)' if '%(Token)s' is a macro" % {"Token" : TokenName}, + File=self.MetaFile, Line=self._LineIndex+1, ExtraData=Expression) + + ## Evaluate the value of expression in "if/ifdef/ifndef" directives def _Evaluate(self, Expression): TokenList = Expression.split() TokenNumber = len(TokenList) # one operand, guess it's just a macro name if TokenNumber == 1: - return TokenList[0] in self._Macros + TokenValue = self._EvaluateToken(TokenList[0], Expression) + return TokenValue != None # two operands, suppose it's "!xxx" format elif TokenNumber == 2: Op = TokenList[0] @@ -794,8 +830,8 @@ class DscParser(MetaFileParser): return self._OP_[Op](Value) # three operands elif TokenNumber == 3: - Name = TokenList[0] - if Name not in self._Macros: + TokenValue = self._EvaluateToken(TokenList[0], Expression) + if TokenValue == None: return False Value = TokenList[2] if Value[0] in ["'", '"'] and Value[-1] in ["'", '"']: @@ -804,7 +840,7 @@ class DscParser(MetaFileParser): if Op not in self._OP_: EdkLogger.error('Parser', FORMAT_INVALID, "Unsupported operator [%s]" % Op, File=self.MetaFile, Line=self._LineIndex+1, ExtraData=Expression) - return self._OP_[Op](self._Macros[Name], Value) + return self._OP_[Op](TokenValue, Value) else: EdkLogger.error('Parser', FORMAT_INVALID, File=self.MetaFile, Line=self._LineIndex+1, ExtraData=Expression) diff --git a/BaseTools/Source/Python/build/BuildReport.py b/BaseTools/Source/Python/build/BuildReport.py index 23e819e5ca..eac21d1495 100644 --- a/BaseTools/Source/Python/build/BuildReport.py +++ b/BaseTools/Source/Python/build/BuildReport.py @@ -667,31 +667,31 @@ class PcdReport(object): if DecDefaultValue == None: DecMatch = True else: - DecMatch = (DecDefaultValue == PcdValue) + DecMatch = (DecDefaultValue.strip() == PcdValue.strip()) if InfDefaultValue == None: InfMatch = True else: - InfMatch = (InfDefaultValue == PcdValue) + InfMatch = (InfDefaultValue.strip() == PcdValue.strip()) if DscDefaultValue == None: DscMatch = True else: - DscMatch = (DscDefaultValue == PcdValue) + DscMatch = (DscDefaultValue.strip() == PcdValue.strip()) # # Report PCD item according to their override relationship # if DecMatch and InfMatch: - FileWrite(File, ' %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue)) + FileWrite(File, ' %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue.strip())) else: if DscMatch: if (Pcd.TokenCName, Key) in self.FdfPcdSet: - FileWrite(File, ' *F %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue)) + FileWrite(File, ' *F %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue.strip())) else: - FileWrite(File, ' *P %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue)) + FileWrite(File, ' *P %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue.strip())) else: - FileWrite(File, ' *M %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue)) + FileWrite(File, ' *M %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue.strip())) if TypeName in ('DYNHII', 'DEXHII', 'DYNVPD', 'DEXVPD'): for SkuInfo in Pcd.SkuInfoList.values(): @@ -701,13 +701,13 @@ class PcdReport(object): FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset)) if not DscMatch and DscDefaultValue != None: - FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', DscDefaultValue)) + FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', DscDefaultValue.strip())) if not InfMatch and InfDefaultValue != None: - FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', InfDefaultValue)) + FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', InfDefaultValue.strip())) if not DecMatch and DecDefaultValue != None: - FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', DecDefaultValue)) + FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', DecDefaultValue.strip())) if ModulePcdSet == None: ModuleOverride = self.ModulePcdOverride.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName), {}) @@ -717,10 +717,10 @@ class PcdReport(object): ModulePcdDefaultValueNumber = int(ModuleDefault.strip(), 0) Match = (ModulePcdDefaultValueNumber == PcdValueNumber) else: - Match = (ModuleDefault == PcdValue) + Match = (ModuleDefault.strip() == PcdValue.strip()) if Match: continue - FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, ModuleDefault)) + FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, ModuleDefault.strip())) if ModulePcdSet == None: FileWrite(File, gSectionEnd) @@ -1283,8 +1283,9 @@ class PlatformReport(object): # # @param self The object pointer # @param Wa Workspace context information + # @param MaList The list of modules in the platform build # - def __init__(self, Wa, ReportType): + def __init__(self, Wa, MaList, ReportType): self._WorkspaceDir = Wa.WorkspaceDir self.PlatformName = Wa.Name self.PlatformDscPath = Wa.Platform @@ -1299,7 +1300,7 @@ class PlatformReport(object): self.PcdReport = PcdReport(Wa) self.FdReportList = [] - if "FLASH" in ReportType and Wa.FdfProfile: + if "FLASH" in ReportType and Wa.FdfProfile and MaList == None: for Fd in Wa.FdfProfile.FdDict: self.FdReportList.append(FdReport(Wa.FdfProfile.FdDict[Fd], Wa)) @@ -1308,9 +1309,13 @@ class PlatformReport(object): self.PredictionReport = PredictionReport(Wa) self.ModuleReportList = [] - for Pa in Wa.AutoGenObjectList: - for ModuleKey in Pa.Platform.Modules: - self.ModuleReportList.append(ModuleReport(Pa.Platform.Modules[ModuleKey].M, ReportType)) + if MaList != None: + for Ma in MaList: + self.ModuleReportList.append(ModuleReport(Ma, ReportType)) + else: + for Pa in Wa.AutoGenObjectList: + for ModuleKey in Pa.Platform.Modules: + self.ModuleReportList.append(ModuleReport(Pa.Platform.Modules[ModuleKey].M, ReportType)) @@ -1386,10 +1391,11 @@ class BuildReport(object): # # @param self The object pointer # @param Wa Workspace context information + # @param MaList The list of modules in the platform build # - def AddPlatformReport(self, Wa): + def AddPlatformReport(self, Wa, MaList=None): if self.ReportFile: - self.ReportList.append(Wa) + self.ReportList.append((Wa, MaList)) ## # Generates the final report. @@ -1407,8 +1413,8 @@ class BuildReport(object): except IOError: EdkLogger.error(None, FILE_OPEN_FAILURE, ExtraData=self.ReportFile) try: - for Wa in self.ReportList: - PlatformReport(Wa, self.ReportType).GenerateReport(File, BuildDuration, self.ReportType) + for (Wa, MaList) in self.ReportList: + PlatformReport(Wa, MaList, self.ReportType).GenerateReport(File, BuildDuration, self.ReportType) EdkLogger.quiet("Report successfully saved to %s" % os.path.abspath(self.ReportFile)) except IOError: EdkLogger.error(None, FILE_WRITE_FAILURE, ExtraData=self.ReportFile) diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py index 9705097606..e3a3dd9f3f 100644 --- a/BaseTools/Source/Python/build/build.py +++ b/BaseTools/Source/Python/build/build.py @@ -738,6 +738,16 @@ class Build(): # parse target.txt, tools_def.txt, and platform file #self.RestoreBuildData() self.LoadConfiguration() + + # + # @attention Treat $(TARGET) in meta data files as special macro when it has only one build target. + # This is not a complete support for $(TARGET) macro as it can only support one build target in ONE + # invocation of build command. However, it should cover the frequent usage model that $(TARGET) macro + # is used in DSC files to specify different libraries & PCD setting for debug/release build. + # + if len(self.BuildTargetList) == 1: + self.Db._GlobalMacros.setdefault("TARGET", self.BuildTargetList[0]) + self.InitBuild() # print current build environment and configuration @@ -1336,7 +1346,6 @@ class Build(): self.FvList, self.SkuId ) - self.BuildReport.AddPlatformReport(Wa) Wa.CreateMakeFile(False) self.Progress.Stop("done!") MaList = [] @@ -1345,6 +1354,8 @@ class Build(): if Ma == None: continue MaList.append(Ma) self._Build(self.Target, Ma) + + self.BuildReport.AddPlatformReport(Wa, MaList) if MaList == []: EdkLogger.error( 'build', diff --git a/BaseTools/gcc/mingw-gcc-build.py b/BaseTools/gcc/mingw-gcc-build.py index f01bedc7bc..4133feb256 100755 --- a/BaseTools/gcc/mingw-gcc-build.py +++ b/BaseTools/gcc/mingw-gcc-build.py @@ -225,10 +225,10 @@ class SourceFiles: 'mingw_hdr': { 'url': 'http://sourceforge.net/projects/' + \ 'mingw-w64/files/mingw-w64/mingw-w64-snapshot/' + \ - 'mingw-w64-trunk-snapshot-$version.tar.bz2/download', - 'extract-dir': os.path.join('trunk', 'mingw-w64-headers'), - 'version': '20091222', - 'md5': 'fbcf282d1a05df121088d775e02095d6', + 'mingw-w64-v1.0-snapshot-$version.tar.bz2/download', + 'extract-dir': os.path.join('mingw-w64-v1.0-$version', 'mingw-w64-headers'), + 'version': '20100223', + 'md5': '700b9f54e740b1b962c8a3a0f52b7c04', }, } -- 2.39.2