From 08dd311f5dc735c595d39faf2e6f7e2810bb79a9 Mon Sep 17 00:00:00 2001 From: lgao4 Date: Mon, 11 Oct 2010 06:26:52 +0000 Subject: [PATCH] Sync EDKII BaseTools to BaseTools project r2065. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10915 6f19259b-4bc3-4df7-8a09-765794883524 --- BaseTools/Bin/Win32/BPDG.exe | Bin 577452 -> 578564 bytes 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/Fpd2Dsc.exe | Bin 1434295 -> 1433869 bytes BaseTools/Bin/Win32/GenBootSector.exe | Bin 425984 -> 425984 bytes BaseTools/Bin/Win32/GenCrc32.exe | Bin 425984 -> 425984 bytes BaseTools/Bin/Win32/GenDepex.exe | Bin 615750 -> 615733 bytes BaseTools/Bin/Win32/GenFds.exe | Bin 1556029 -> 1556038 bytes BaseTools/Bin/Win32/GenFfs.exe | Bin 430080 -> 430080 bytes BaseTools/Bin/Win32/GenFv.exe | Bin 479232 -> 479232 bytes BaseTools/Bin/Win32/GenFw.exe | Bin 495616 -> 495616 bytes BaseTools/Bin/Win32/GenPage.exe | Bin 421888 -> 421888 bytes BaseTools/Bin/Win32/GenPatchPcdTable.exe | Bin 609747 -> 609730 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/MigrationMsa2Inf.exe | Bin 1379732 -> 1379610 bytes BaseTools/Bin/Win32/PatchPcdValue.exe | Bin 560667 -> 560650 bytes BaseTools/Bin/Win32/Spd2Dec.exe | Bin 1389784 -> 1389763 bytes BaseTools/Bin/Win32/Split.exe | Bin 425984 -> 425984 bytes BaseTools/Bin/Win32/TargetTool.exe | Bin 582756 -> 582228 bytes BaseTools/Bin/Win32/TianoCompress.exe | Bin 434176 -> 434176 bytes BaseTools/Bin/Win32/Trim.exe | Bin 678782 -> 680026 bytes BaseTools/Bin/Win32/VfrCompile.exe | Bin 1187840 -> 1187840 bytes BaseTools/Bin/Win32/VolInfo.exe | Bin 471040 -> 471040 bytes BaseTools/Bin/Win32/build.exe | Bin 2635681 -> 2635744 bytes BaseTools/Conf/build_rule.template | 21 ++- BaseTools/Conf/target.template | 3 +- BaseTools/Conf/tools_def.template | 12 +- .../C/Include/IndustryStandard/PeImage.h | 2 + BaseTools/Source/Python/AutoGen/AutoGen.py | 42 +++--- BaseTools/Source/Python/AutoGen/GenMake.py | 4 +- .../Source/Python/AutoGen/UniClassObject.py | 7 + BaseTools/Source/Python/BPDG/BPDG.py | 45 +++++-- BaseTools/Source/Python/BPDG/GenVpd.py | 120 +++++++++++++++--- BaseTools/Source/Python/BPDG/StringTable.py | 5 +- .../Source/Python/Common/BuildToolError.py | 4 +- BaseTools/Source/Python/Common/DataType.py | 2 - BaseTools/Source/Python/Common/Dictionary.py | 62 ++++----- BaseTools/Source/Python/Common/String.py | 31 +++++ .../Python/Common/TargetTxtClassObject.py | 9 +- .../Python/Common/ToolDefClassObject.py | 2 +- BaseTools/Source/Python/Common/VpdInfoFile.py | 23 ++-- .../Python/CommonDataClass/CommonClass.py | 6 +- .../DistributionPackageClass.py | 1 - .../Python/PackagingTool/DependencyRules.py | 12 +- .../Source/Python/TargetTool/TargetTool.py | 19 +-- BaseTools/Source/Python/Trim/Trim.py | 97 ++++++++++---- .../Source/Python/Workspace/MetaFileParser.py | 18 ++- .../Python/Workspace/WorkspaceDatabase.py | 37 ++---- BaseTools/Source/Python/build/build.py | 4 +- 52 files changed, 381 insertions(+), 207 deletions(-) diff --git a/BaseTools/Bin/Win32/BPDG.exe b/BaseTools/Bin/Win32/BPDG.exe index d0b2c95c304c97e5fcdba30f66921b74823525c8..29888d56ad3c73466fe6e8234eadfec86ec1e752 100644 GIT binary patch delta 5091 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 QJRG{LEwHURM`zD}098g;asU7T delta 3868 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 QrknScx7)wWW#vf%0K}{wrT_o{ delta 61 zcmZo@kZ5R-nDBr(sG_;?aqDBo*2he(kD0eVX88yf+kX8a3-2BQ!BjnwcjE6|mgatW Q_KfS_r0rkkvhpMW0D`j}vj6}9 diff --git a/BaseTools/Bin/Win32/EfiLdrImage.exe b/BaseTools/Bin/Win32/EfiLdrImage.exe index d63752e1c1217cddd0e75074dc680ba2ec231b13..2d42e0fff48223ea5f53e5b3376c92ed3ca5a61e 100755 GIT binary patch delta 64 zcmZp8AldLha>4`VYjZX>K5l)?*!q~M^)YknW0tLtSw9AVgtuQ0WZnBfAU$M9){dQg UUR^$0V;A;z-<07ID|3IG5A delta 64 zcmZp8AldLha>4`V;ELwP$E}YUTOTvEK4xxx%(C?{>&F0)@b>G0ta~2_Ox3N>cKI3P UKI=;J(MyjWPTs!6h%Lqz00s>o#{d8T diff --git a/BaseTools/Bin/Win32/EfiRom.exe b/BaseTools/Bin/Win32/EfiRom.exe index f92ae9bf303bfbcf7d1a9d7ddced06ece6774d6e..9a1db5f3d03e079b199e0d8e6877bb4c9ce7ecd5 100755 GIT binary patch delta 64 zcmZozAles2BD*!r2N^)qwpXO^v>SszXS32(nXk@fEbfp1~27^Ggv Ud(67>#eQ{K@ZRlDir8dg0a=tGy#N3J delta 64 zcmZozAl%$2k;qBKavi^M_AhW4=?w5mp Uu4|Y29#a3TaA^CJA~u;=02QzxPXGV_ diff --git a/BaseTools/Bin/Win32/Fpd2Dsc.exe b/BaseTools/Bin/Win32/Fpd2Dsc.exe index 688dd210e47455ebb5e70a7ce557c374096959a2..1eea8257450490460ec4f3ede78b422c9005fff6 100755 GIT binary patch delta 2645 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 diff --git a/BaseTools/Bin/Win32/GenBootSector.exe b/BaseTools/Bin/Win32/GenBootSector.exe index bc2bdebd913e54cec9fc2f36d423d789a4b9db88..4e68e769670f44df79313d45971ae693e0f9755f 100755 GIT binary patch delta 64 zcmZo@kZNd((i5FJx^RgSKxmVDs?@03FF63jhEB delta 64 zcmZo@kZNd)v|;ACE|0GvBz} UX&-BS9sAWq`P;V`u=)4{0O%SXb^rhX diff --git a/BaseTools/Bin/Win32/GenCrc32.exe b/BaseTools/Bin/Win32/GenCrc32.exe index 9e86442a73f678b20fbb92f9c0b80837d87a33c7..671e04ee6a112f41c18bf6ab3f7f0baf4e5d5bf4 100755 GIT binary patch delta 64 zcmZo@kZNdB85hOx(W4h%Lky06`BRpP5@fvuyp$`Y-?_y#0D0>(K`S2Vb9K2#jTO TTfZ!|QugP@pzUjn*g|{(<>4MM diff --git a/BaseTools/Bin/Win32/GenDepex.exe b/BaseTools/Bin/Win32/GenDepex.exe index 698eebf30ca35ecdf796c93fd76414bc6dadb385..3e6685ce388069bb14a8f82447a90243d3a4467d 100755 GIT binary patch delta 567 zcmZ8dO>0w85S@G9OMIhNx`>-l3fdIKg$lu@sY%+Tt%@H-kVx7jFXnxSHRR=^S+qi+ zV8DeSt{f3Xp(|0uh3#9o5I+dmLTN#TF5*8ByAY`Xs}pn~-pk=I+&Od3+~#us;&T6d zL%fi0{awDh;ppu1iDI)Gph;_f8BkN79-MWz{4$}043KsNB2!VYieSg!vH;702EcWI z$*EzmN5Cqy#;#PX)M^)VN-WX4G={|&+D>Cav?!jzm{_6t491o9x};xqxtBIFct|Xen#CdE(r|}v z(zPs(%65xhWpO}M=zA6i#UnbRv)&~~$DnM_(1MQfowBZgQ!D3dSLn5cK9V`~%dbzU zH^lNXO`Ekp6F#hXx_9yNf6pR4 z#ex`BElkMveOj_u k5v5HFgMIr>Bh*R-+c{jGGtZy#cst31e7AUw1Cz+rZ>hwntpET3 delta 551 zcmYLGUr1AN82x^~&FSYFMM@6~mgJ;B6mirnrcEn^A`2>Vn|IsY?k%Qx@7xCc0V_%f zdWi};59UkIOGP9pdrSySdb}qJ=9uIBoA=<#_pbkHcw(YAn@7Fz^=p<=7MzLf+Sq|9)bXAe%(hSjkqD1lp z*>SRpG_J|@l5!L&Yl)*OdfnT&i-;~e6BudNn|sTFx^mp>PMcjSxupl4VJ+|o zyn+USPtYi6s&0@a08E%+=|@>htvwX4L+`(qhRn!?f;6m1|L=T@ZI1(HIGnQwyeNNb42?qc#`Hp zU(2+IoJxJilEq&9Npn!s8w4^E;5UXdd_=jJ&Tv$XVzEX)uwDDRg+p1PEtoZ0#%ztc zu$~peF#M*dOE_Jl7Ths8E|W{9*l%OU{ZRK_gDTviUkS#(g5x$NHR#4y*A0XBY|1NIG~+eF%oD`o z$`rPUvH2maf-?^P6|8JBDngVnB|4gS=T_cUN#}7qgxk1F-pzSCBY21ERBF9>%$vl#$!w9rihD5%rm{tx758pJ z_mOm(jPEPy7Lv}FbW2J1lXSYI`%Ai&qz6d4wWJFq-G+HHWOW0Xw-)Qmlxc%xT9%{- zOS-M33nkr7(nBQOUeZG)oh|8MlI|es;gZgg^ax3Jl=MhRcarodNq0s%l@*Vcfg5Ck zF6l0kE@FC7My@e(w>nht=V5p6s5aop6x)J}GB{&wM22SEazIVyus=vth+8nq-wqZQ zN5#RriIFadxZkP5*3WyYK!!N3S%{ll`$6Jl2F(* zg~iS1Y+kBT!`XmIu?l=GL?#p%Y8meW`wVp%{^@pDt-(K!A6DmwRwc3Vo=_@Xk_Hox zsQY*e!+unaQ((w3wN7j&p$4ozt`_hZ82z)|36qYifrJ8zc2FC9siTJFj~O^pA6_yd ze|UjD5WYCB#@eS~nm&wRI7FOKH}mrleo9S(mrtnk`^eIvX6b>2!wO0UjV&CY55$NJ z8x;v7=tR(&U z6^I~c!mc5+EqH*xw5ZZs`jsq`2t60@V5odbT^Te5%RtA@QSp%Sw0b-LH>`hJU5oYf zct%~$8RVZ;<6u;w2!qd`QCD8A|HL>EY@btB?iu5*p6(3@l+k7DAHXR+I(Aph^` zl$2@`rdxwVy^zYlVPtw5K|fe{P%TZeBVAJD4HV6qGr~RFn}D;$kII2D?mz*b?4vrN zE=0JSv@w@TU$>36fu3mt%gViJO@wY%m9){um7Xy^U-_UpWuEZ{4tP2jG^g|em~~E#6Et1*L9qOsnx<7DEk|*L zE~gz0D3b8hIkmmLapv9xKb^zrGsRePULB`8Xc@>^uMZ+>Fns>H+8^84;i8()2SC+D zbzb}^N*PKpnm{M0UsjekRKI-&MW6y;`b=Zt8|pC5$H3_~)uUoE#g!QMTv8WvUS&An z#wp0p8EfBB@3lB?r^H$U*`kHe<9&7P@8#L>zB+5Qj#*{kn1NLtJ-> zR9C=?P%_9H7**=gS5rnHc*yX7ta>?*H!gmHx|DB(A3jw(*bh?LAp!$7Ef7w=PcAKx zv$7v8(vg*cGGB#1(>U>&I-h%~C#WM?hEzYtsOWKm69gK8?1hs=(Mk)b2>#0QvVcC8 z;?@$ZBls)9dV~x)ujR@nMXGOrjbEs#-FFbZlVBG?D+JlN`sJ?grPzHG8;mf{T|UP< ztjr(K>)^*P)D-?0T;`%weIC>L8VkR~{h+o{c)6DUXW`!@_S6FXb%I9WX;adx37R#- zNpVe@LBWdzZxCd#o`~0JlrC#(XpMe}a@P^OMesJkW03L<4)zO3&x9}krDht(zEO|= zpSLKQ>i!>E)DDyXbc-PUJGHymPb}Y&V*?8oiXgt)c;P$sqyO`!{HMX`^S@~dw!xfq zm7bB)run@A93bDn)EI6yOnn(MJW1oUJBPHAoVLS#o;l@Szy25M02jf72pOaX%r0(0 z)HZYdwfjL0Q@&TA=MU=YJesx{w2br(1aj8Vx-n-bb*Q<6%YmAN!9WlKY2^By5-NXG zLn4E)s`~xW#dCSa7QqjQ&Y=u71TH z3?E;xS3`#jNY(y?N^~XkP83PG`INOk!4!h21f>LCf@uV^2xb#h68H%MpkGnj+j)T(-pVTV**!C@v{ z7eyUCpGKMNL$ZQwkos&y3|tUm9xsI9R*}RfnQCzgW>^O2t>Uj}8&ujvZ010WF%3&u zd7~_pwYg!rM7hrb5vSBdX{z=sz$|_;Aj#0p?>{tu(Ep3IT4j}U<6+5pNrGu4&{WoC zCp3|WY}0b9oJ5-~WXQ&X5g|Tt2SqBZG;KCoSTI{yshm)jDJPcp-O*aIUdPRko+KcYWKn^QUssX6U z7B(eRHD$xheQ*PNFB>iYex&|pz@!esj+Yo^9YhP|R~y{jL8RDTx5#UfGw^r^F)+Ck zn<Ixkn5VN0gfNbGZ@BeTaNs$jMQy;&Y82+dYZkoXszFs_W0*Uyfr|5>A*(Q7 zF5`hvRu;xQRu%|n9?WJI!`ygD>AyTHJxSlY&F`F+~g%zWnM45cc zqFEq@)u^mSP!25KAVIj4po=Mi%anlm!fF|xE^nSnT=FuK__!GIX_TvhMTBHA++?9O zuxQ|*nHt~rUb_B+m4KaEgiQ`WJ+XC3<=S;zj4waGcEDd)J~ajq?i z`;V;SuFpCUFIhijj!eTuns1eZk4Ce%i?lSlUZeIQ(01&2S>1eO~AR%;)dEdY$@~IU`~Q$ z7D$yncTFi=SMd#{*dhzwbUYlyuTGpq=Ie#aH$ir7qFm1HF^qyq@o23lVK}KtI1Izd z6fQ}tWmT7LQdZ>C5#v*us+E5MHp9WirLnhUG~*3+W7&H$R-!gtM}? zC}=lUCa?8*pgjv@vln$P+MD=F9@|BbpsaeBG*((7qf<_hIQUmj(UvQxm{s-H<6Igp4B*+YkoAT zfcY^D6+UWu>#`{yCME zzUqM2L-DDt{Ee2rJOW7jV_0E7Jzt+t(tlWfQIS3XdUqGCg0Kb#^A6ZkU}<;Zf=%5; zlJQb^k&O;6__>GZAxwK6@_LGNJ{a6RMJF`~%lIMuF|^hW_7o{`ekVp03>aFX7Yr-N zFDfV*SD+UajvRq`x{E|1uZA1*w@N{cix&k589lI|Y0DQ9C2jeE@MBM0Tk9!e80D1q zKiTJKNZ?V)8yM`JH_lrvF9w^~@*}8#JT(lbQe!B%mf#ctoxE@xVQg60)M~WC`j@-? z{*hB>dhyUTg7S|f7)3A|Apli*B0Xj(g>?dH+ex#|4JYzMVw*zBr6NP@d2hAehJw<{ z8$NQtSaj-)nJ}uLL{A6aOJwypP9iKOSVC~UV^)Ez3RBIyP~V*DQoK|e1KwUjuN{nu z8L?C}jX<7BGKrc*aEX9UCsKf-IhCe~XqgK1dm;<%Jazmmym$zif)Obg>sR1ZZxIt2hR#?A{-^P19*Vz2 zP!+ zYi=?R8XaUd$nJ+m@ky0#G+M!=et5cS3zzzd_!v2o%~+f=J!4Xod-jMBb<8c5-sfON zf3YHdDOPD-#?e4Gt(*$YiRkZ}UFoavRs^WbdD(Yo8#f1r9! zX~0*VFAKDSVqKKQNOjUgTI%CF%b7#HlWv96Mt^SiKqNNiLI!wQlpkboH*|qir$UdP8=;Id2c!@FDEmrY5_+=X2 zcW&^A7^=Htspwn!hjq(am1aHaXsjD4*~n3qWu__d2&G*|7X48uo+gr9+bO*tiMfNQ zodml$L=F*CNr43iRhIcrT`S;0ugLfOp@25x&`dxl#WjqPbVkwT@c+MrUr!TZ{EUJ9 zH`Rh&H)SSXpqr}-R?HMBwQ?!aqQu8ExcoBGsG-3P63SIV)83q!u4~04!z_PJz&FTS zftHyc9m}RhX&6tv(K@@{w7Z3)D0pFn?7fxc?o#h?cWJdx8cTBdO)IPLn77f3DUVcm zGl(i9kYgrQ)@bm}68Ydg=8S-ovxJwwYqTmC_crL!qq9X~d;yiYc2F{+DQ+BmGh1{R zCfC{@s?bL5F`CNg1dYv<_NO$|q>2dsqucRS6{41hfzv0x`(NA;ry5X+zKhHOSgE;T z_onKbO`(kxSHHf_R*6^#>81L|07RJvn@Ya6wuZY}_$~2WXgG5SdJ=Re=tfWgU(FF? z@hWk^&7z->oi+&Wx>B#$ zi}r+prj2gHu(!hFpIa7~q0b;Da*PjA`9TC9Q`|P9B3!eMH?Y&uY)6V zMPkBcS%BaV7B4Ohn;77&^v=sOrpyzE`5?I$$zGOo@_Nmjid#?cSC)(TFp~0gG71N%tYW(9 zO4v@ZAqZo9vvB#-bB+494ODVJOjsZ~dnwa@^gLjeR+LZ5vYV)_1iu?KjFU&6Mvuhf zl% zwn&6oZ=>Fu&!JDENYwL*CEd&G6DYcvU9O$1vBb`$I+s3SN`@C3mHVo3{Ie~N<75Ij%8?+6+@_c2O%n&O^= zUlxn>t3Hx8OT++tmQ=n(%+0@*@{l)OZbIgmf;FJsEi(D%kbk#GjhD_Exhxu6C$l{Wx7{sj_zm#G-J-uRX9DEk zBSxisNnA)GojgFgLK4dr@)ZTYfVz9cT=g@gW1!u=VoT)bNH%$-c#Yr_V9hYNWK{l`!6kB`!lpI$I7oQ_)$^S&=K(Rz@hR~l!S!zl{t2HyAPhdu*z%zG z%7PW%|FC!~+kx%XBN0qx(palp{8G)zs^z->5!S5{lY|uV`0BMHkS8_z{UlKk!d!Rx zEPV}C_A|j|1am7*qZ}#%UPqOB^0GME`29 zJK#0-jukqs7c2M&aALi9N%^-8d_~a-uziE*sr`mrWd2g$?AiDT%|cbU6zF(DEw@w6 z{mXrR?{7A!+9>*PE9~DW7O1^3le&7d$ioQ#CUK|Q2P1;(BYJHXEqPyXZx((fEEpor zg(pC<%@P7vHj6kc5VJ+5ci$ow@<`)}EuuG%m9;Vw9fzGw^9D+1xXa6NH;mjSS~%{+ zICBq6CFzbs|7~I)I^n+CCcNT7Y=ADSn-%PyYQ7O|ZJc`qwag${P>uje+=Rt&3icx? zAQ(nqMUV=(u)^=H4$%3+?2WFlayz#DK{&fzMBDpP-T?%I;hXJZ0dEggJH)RYQJe*5q^&1H;U#|c%ZSwGG9Oc_gvedt!x_UtqjxS-6XGURznwP7j zuwvRMcQy8eWG`FIUO3_rZ7*6aHaY3}GAncWB4ZhtczK@q$ z?k`lORC;(F&UC3NJ~bam-Fr|S1Jn15D4q+q?iU$hzqo#51Mo-xfw6zTFn-LpKh(L` zJMWf_`4rEo^ovA(csewcI7Rl2fhsp8T93Y!)Rxd|3VP^;?MsN4pmQ! z*6{K!Yx^#^7ucA`!n{ZXlf$AoMA8^3{kO$-=H;v`l&-%$DqD;h!r1DIw)QaTO-pbs zw%v>O{h=};hSdkdWY9%HPdLL(w^);0VrAwCnHtw5#vxx<3(9GbVP#l!=s_ zRg;r>Q??{;>)5W-{B*c^kM$Lv1;h4Q>y%7p>czNy)(?0Wzx{kV`SZNUdA&*B^g=I%Nc;Z*dVinUKaQ zBRw)0^vyJ#MCc~x(g%eOKlv^oZa!u~%7QNjEVPH2J}L~;tA%hZg++o`H%zRhe#AWt zz52)z=V5OONSBs|?+!fpfFOvuiYm~FiW;J^YMZROs6xe2K=%#(Yab@h9LviPeS8RDGnZicmE;W$-{X(4jn#MRE&?Gwk`ja+U#}ay50vt)E&p|M6!zLmH^Ix*|lHUdCx5BBHtTDU>UVX_ro-csx z)7I6zHT>?GSs;I!~n< zCcuN|tQS!_-+Akp+H0kg?C_?s+C9J>aGT90RcVU0l&HQ0`2_t4q~OhE#)J%-IZ{s3 zZG`SDx_qI2klWTk=_S;~0?Jk|@wyAvXkH1AU9eW5ZIJegb*f5c{zBNFXLEw1G$I(b zzGA(=?}A%iwZ4Z&`NY?(i}{)+$y2_y1+9MFs^QlLv9DW~;cei?*R5R?zQcI+4QnsX z{|3>Qtfz4uzkkWPhMzTVf6Mxbf)945ziYiL9wSi>z~uL=i*O$N<2{r@m3}Ok{J!;8 z{MP8=`_`_!BRD>=rU~34aIB!)2iDf$O9+Y&(Tgc&JOcE6LXCl{53Jp4<(ZDApI$^T zhF~m#o1l_l5dqn)<|#0lC^-@2A(z^39#1zDwS{0O!Cr#>1V;#t642b#pG1&0Ur9*? z1TPJbfqgGn2g3Xhtx+*LriJ3fm;Wia6qFbq0UJNGCR!qb)0Q3o(274B{(_C;ABH@9 zq(6NEc`WL)o<=Xm=;uTR^_weA5ONG%-CpU_$Wly}|H$9i7k~aA?U44qLo@0&*hB4c zn{aR8p3ST{gL}5%uEIUrSaBBjJOZ!mwD(W;JjOf+nCEfkImkSRn8#q#t*p2!_Z()P zBMkC(*^|SkhqB^s-17`8&gGuJ!PH&$j+UZ~)5hjqb|V;O9<&z+(Y^sAB3((wj|c5; z1=qmD!}dkVQ1^t|5?Z`wpJnVvummkvFyE%spd`5WO}jAqziCfb;I_Byq08pJWyc@= z4Z~l!G54*A^DE@{p!4cR%zhR%O)H zs=0!;M;zb@#rU0NU*_>$vlCXL{;gWI@y0H&F)lLQ7(Lrj6J(>F8(T4}0xncJ-U^Y{ z^FZwBa)>-ECM;|1ci=A)e^EwjzjLY*K{cr0?R1-ok3&qle(%YHGfy~6;nQ!Nad7i-=PmHJW6o$bnn&T+ zsFyp~oW|v2&Y)=J8w=ca#W{ih1xBBB#&RFbJnIDh1t{m7J@E#-_c>=LJ|C*iIn$<0 z#OFi`J%Ga25jWIEgL7rxob?i(tr3vfPVVo7RtQ{?GNp!1K;FJPj(&JCo{p zhc)GWKO8>q?8;N%>+{YVG2h?|*kDtJYx0#Fk6v&N;b@wC`HFKi^nca)H9rNNUvuVL z9Tuw+WpTl}*PO{#?&1_S9(v9Bj>11N=Dp$E$rXzQ(l0q%@vboBlJg;+fV#^06rQ9X zdCNIA1fP-Mdp@-P;()*H?1D$OZf`s1au@7-+nLEVxcIhnJWqsI;BBv|l{vpY|Q zqwgTQ6nOU?XS*nTdPYV8z81rGiD=ixGdOk0nF77ub@u0}u<%{yYeBS)8spz{-obgC z@y0)#gE`&^xBS34fOjxveBdll_)W&%kDT{d@Ce`QGv{dq?@mI$bS~li5##=^ocN*h zKI4JQ&JLVEX*}~Se&WV!j4eMn4Tb+?OuXV86vTfsw*2Ni62wOtlY*kpS@=RD#}-|t z@(sqCu;`PVzh@LjM57`0wDE68^v7SyrFW|C_-7Zh8M_Fd{~DcTF1@(lqUR;>z3@}V zm z+tDr?x8dBr#fc9-q0r?@j>HFAxN7n7q0M}hYKM6)SB^$z!w6}fnU>I0`d&_thLbK= zOBk)WQd`Q)4>AQZ$n=sQbjT=QrMJTLP9&_VDUE{znrp~VGRWlaTy6R`bZM5@sG!{R z$->gDl*xiXCLA@0zA4ThQ&Ko$T>h}a0p|At5imT~^>PT=^TYAy?+dNtTwP##oNFyk z9ZS5c1MZvdMAuaKDZv$@(ia7{!Qn7vocaBG8~Ob^W?7oxx&zfqaH6YwJZVCmPIKnR z7{pu8CFpIQ4zY*5sut`F&W4MLuE} zezGf~2MtBj<1?Cx^}bxPg=NZgZ@^n|v+38C9YZ~#+Zrk#1KOnEFz9=ClnSvau1J3K zvaA%Bk(HwTHrhrLuf?Pnn<^_R! zY)~vjY}MK-zf?osR;_E$vSgLP{+*ge4Dj2ety(<)7wq1OvIN72Td~?mNZO_qgq*!! zWq3I@uPgwgw`kF@V4D_i8MIb~Q`=NjP8+nalxzR51)QZ|cQ*d(0Pk$mhADT|LHkFv ze#(_6q3RK>m-6XzQ1^(|Ss4}qA3mbx+uB4~8Cf2tPz8@_$=2r*t!!Li8f@B#_1^xd z7Oxm>Va=mjC*`L}aQacLtMc((Ahsiux9)|W+qKNB>s=W%O450!^{S0i1ht#A7`Sg2 zw*ArVTD*1W$M{&cG5~dtWAt0wwPdBvfM2$2xi+|H!xiGMgsQ{X-J^D3Qd$XA?$Ej` zg-2o64y})6ooa^>L3Rz=9oIs^u@kfS1mx^Q3B#AejGbC{C!$hP>0(b4ANFPoN&iJoQGW=fPMS4?xOG+2OD@ZtfZ-Byys}z zgysK$h7ZPU|Cfq(-uV9$2soxpdf% z6D6fH4BfBgT9;0VWV1b8VDuB1vK~_`tK5!KXy;Z<8Z@cxW;~j zvd6T6O5RD>|CrX-_VwjRR_d#~#bg|I02y~phRg$6H~W_CD3rT!wtKqQoUwHVPNnC% zMmb2k)&E=DEec-i8kGd64q$I5&V(-xU~ir(hwR6-e5K|-sCpbLAG!{9KCX2Sx#zPe zR#{d$tK4gjXl$+1L5jTo-{+8cP)kg^#wM_c261q2=c85H2>o+&7iZNu!2x zC7MOcF}T(=Y2F=^B4FVY+ECsLUV1|7Zuz;;1&$%EWN33t%L?&MchzesNI8xhUEmlh z_l~gYnAX+uMm6q!)h?IWpsy(9c?dg>`o1TOKaP5P4BU5IOH8@CK^;RUEB%tLnIIYP U!f|Z~+KjFfTACQXo{WkA1`o`mPXGV_ delta 18228 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 diff --git a/BaseTools/Bin/Win32/GenFfs.exe b/BaseTools/Bin/Win32/GenFfs.exe index 2f51ce6825b9b935006efc22f8a1767e964c54e9..92a1c1540eeafe88de8e1a3a3a11882158945a78 100755 GIT binary patch delta 64 zcmZozAl0xyYQh8NTXQxxK5l)?*!q~M^)YknW0tLtSwAL#gtuQ$WZnBf;5O@4(U2)o UuC24)evaT<`C|JLC$<=004#+dNdN!< delta 64 zcmZozAl0xyYQh8N@QUWf$E}YUTOTvEK4xxx%(C?{>&FC;@b>G8ta~2_cxykG;GVtJ TzctKTehZ_3!uBOjY%#t7#z-5% diff --git a/BaseTools/Bin/Win32/GenFv.exe b/BaseTools/Bin/Win32/GenFv.exe index 66c61fee763c3158f2114f4a44ce45f351f03239..882c2d1d096ea58e52e4e08ffa84bf71a0fcb337 100755 GIT binary patch delta 64 zcmZozAltA&cESthJ99QRzHWWZ*!r5O^)++rYnH9ASzmqt32(ptk@f2Xfra;)q~taV UJ1kjh(`V;<GUM*R8J^TVFG^zGiNH&9e11>&p)y;qBKyvVMIaAiacD)v$1* U$5verZOM6^lH2cGVpFLF0Q5K=`Tzg` diff --git a/BaseTools/Bin/Win32/GenFw.exe b/BaseTools/Bin/Win32/GenFw.exe index 10cb4a33f713c48c91bdbb48e9965081ea671b7f..4db22ba547341008503e7b0588fdf3dc5d96f6d7 100755 GIT binary patch delta 67 zcmZozAlI-!Zo&iRdvi86K5l)?*!q~M^)YknW0uy(tXm(mF$#iYwm%nS(|syXp2X4X XToB?mY3j_Ek4`Vdvi86K5l)?*!q~M^)YknW0tLtSw9AVgtuQ0WZnBfpqbHb)3M5* Uo~tsa%-Q|oLHqV4Mr<**0973!ssI20 delta 64 zcmZp8AldLha>4`V=!)jX$E}YUTOTvEK4xxx%(C?{>&F0)@b>G0ta~2_{1N)yIq}O1 U&jr`TqMsN4*uQ;=5nGHc03g{QzW@LL diff --git a/BaseTools/Bin/Win32/GenPatchPcdTable.exe b/BaseTools/Bin/Win32/GenPatchPcdTable.exe index 9306426f753e3c38a070caeee5468426af1de459..1262bf6f06cbdf8e4d00e6ef6830b1455b5de73f 100755 GIT binary patch delta 549 zcmZ8cJ7`k@6utN5y_j1mG#aFci^X6CMNw;veT`}UpBFO}wW%Uh69sM4v{Z0VX;G+l z(N0G!4laU=KMDashYlH9mr`_4EN`eFMRXICqTYamc;Rrkmvay2EYAk#XM+=SY`d+2 zd*Pld&yEc@+K3v+y1c{efA_$tkGdT5gwB#tvB@6jq4F?QB6OaqT&0^tH;76DN2wB} z@(5itXv8G0GI6;^eVwD=)1G~ZbjhxIe3h@7zE&bSUcFRB<1>G38E?@wH8?&vgqbC8 zX{vpV6^6p2Fcp@ z;D{glld_dv6q2fVfjdb#!VN4m={~HK#95F{Nr)#fnUcf&6faW}@ix90G**G%kpMb7 zJZ&2_?%xsYNlT3VsHG)j{3_vbS`PActmw)YuqC6{9|npUb-RsQ842@O%s1&R)|GsA z%u?^#7#_ye{qjlcU-uIj%Bu7n9yO^0ZdRiDzda{5pTe1(n*V$aQS+r+)T#CcF`71YuolpU}&ID=4j;R?VkK(TZf>=cwM zFs^{>2Xqjyd;yN^_IPnA&{yBNjtl`MWvpl+$f{p6gZHMA1j9 zqZ2%{5-eU1ZJYW{8%WmbV&i*IqjCuI%AWZHmH+3b?U+xCv{5TO|Iya#Akd@ zCoS0cs(@$DnY4{NdVJA#sr+wZ9M94a_VCFpC6uitp3l+&yuoi|#fu!siQ494Ehk}j zcq&Kz_?sWL=o4=Wg{`50L{~gcx6)I2is2X^&&xrTZ?|Yazs*xhT+srlIKfsyBHNew zT7ib~2fr>*9}dnLbWjo#hWu&rv>}FdeqxAyk-r=A^(o$CirB#wlMZ2$@0)V@fxnni gexCPPG!S_IE(|WCMcetRB{i0L!J>HZWt!yIKOL&8761SM diff --git a/BaseTools/Bin/Win32/GenSec.exe b/BaseTools/Bin/Win32/GenSec.exe index 7806717c8256f1efb7cf8c59829823e9c2a0a96b..74d3379adca5c52e1ce6bb08e889781c432f227e 100755 GIT binary patch delta 64 zcmZozAl&FQo;qBKavaWp~a9)Q$_p4mH UWACx)KVM~Sj@&+_h%F};0QbiqsQ>@~ diff --git a/BaseTools/Bin/Win32/GenVtf.exe b/BaseTools/Bin/Win32/GenVtf.exe index 9066545715b744586b257735275ec40773091a80..fc1f860fec7764dfdd4b9eb3c9ec5de9e4bf65fe 100755 GIT binary patch delta 64 zcmZozAl&pco;qBKKvi3d{Xj9V4TchLd TKQYeVVpFJq;P#ScwjLh<+Fu-z diff --git a/BaseTools/Bin/Win32/LzmaCompress.exe b/BaseTools/Bin/Win32/LzmaCompress.exe index f9108fa8f5d440b84d2b8309628d0bc2ba0aadbc..2f74e0f8a97a232a6b19562ad128dbb0d286f948 100755 GIT binary patch delta 64 zcmZozAknZuV!{LF$8$C|K5l)?*!q~M^)YknW0tLtSwAX(gtuQ;WSzTFV9}E`2@_^a U_MG=d?swf(<@W6@msx9U058NK)&Kwi delta 64 zcmZozAknZuV!{LFgo@_I$E}YUTOTvEK4xxx%(C?{>qiBU@b>G9taCRCFcmqSn7iD{ UcmM0TB~^KXw%c1Sv)0%E0Lus+Z~y=R diff --git a/BaseTools/Bin/Win32/MigrationMsa2Inf.exe b/BaseTools/Bin/Win32/MigrationMsa2Inf.exe index 117cad3ddb4432c2604dbebfd136614a0783a8e5..3db093f735fc9b8f567d0319d8edb2a133c14e6e 100755 GIT binary patch delta 915 zcmZ9KU2Ifk5Qb;Ib9T>udv=$ydnU9M3PzyNYLFP)?a$g4NJtupHew+wqHRCY3Z=!} zH9)Y$pF<>)7-QNFq5eb~gltq$eokvaRP3E0y+XW@m?n}aq(;3^E@&N6uRO_<$@^vU z&b*T|II`vV@hz|V=qumyZ9n9PeaDZS*ZsMKcdRaRDfwGNkO2rXJdo2%O1E8qe^VFy z_r;|)3;DY)S1e3zcu>IMArv@9MP{UYzYcS^&1sjTGVgj!`xBSso-W& zZ?){Vl(c_NxFl%*Ojjuky?OYo7NUYH#Dutz5Ecj}!a^Y_q=Lg|y&IeVf2iHFUK?)a z%d=jKI%kIGyc+f6F;35UX*E2_xjC;6pW#nLTDMlXJh0MT#Iti=6?#Lf=`r=sGQr+5WYMt#4B4N{A`8}O<7dhib4LTa*iFO37QeKelpMn%>5689*2 z0=xK>qI%rN(~6pL0Y7BP<4W$d#9?HHPg>NZJ0DCy;lSRVd7hf}JVu+!(dET9)nSg? zZCbDHJ;x)qY%=&7->}7}fy+YF7=Csv0euBt8lqCpho~Y_xRQXb{=En0jXn)gd1T^t z0(v^~J&b>QDV~-ttY!>L#;Y-|2~(4L&*gn#YQb$h9;S4pvatm6xt-5*+dYr?9fv}k za;OY<@gok^TeYW4_}b}`a`qjnLf|uwtQqHD9com+TU;5TW_2RTFG|G%7w?y9z8#@7 zZsO%ydXv0E%hc=3`9n<^EajgxrLB!qNxnIiT*PalVq3x4DAi&IzZ;dqck&NWdR$GH zal)mVh&`Nw?%w{+`H(NTRIbK8;8$F#RpYIE!Ie?_dB&B&8+c7jMr`FhG0E4>c delta 1069 zcmZ9Kdu-EH6vywqzrJq!>u=q94?>+26Hyo}vck5Gt=sxq9B#0=DxpzJvfn7vb=5s0 zN@zAIuRy>U=D}$MA0uvtbW>*07=}jXD*-W)KXfMiF%6M91T-v0RxcSQhLe19a_{%# zoO91T0|VhhuZMe6G{sU%%8)XqOeu59a)Kv1HTAIY9vk-!6ju>aT!q^^`8^BkHg(ju zklSXLzDCkzRIzD=b{95mQ~EM%yZAoqqCpaQkm|=sWGU6(A(3TNf0slGsXmA^+j-#r zNGa7nAdxbve@OHbL?0viM?}vM{Up&pCNVRKcqpz<@&b$g1<}utn2Otyyf`P~qxxAA z@l*XAXIk;`J=(+Kr|Stty>prj{ZL*o*Ci?apf=P*FG=I3qBXLM_C3zBO zX7z|jH{3b=t2afH?aL8P+7q!@TSp9={uYby<*YE^({sYbidu2koG4|@ui>dV;bD#m zoShTp^c=dg^0?^%Y|jcmJ%H(~Sj9Rga4IW;^g{nKs9@0z{hJ|3zv+J;ysWmP|2Ocl zu9H|q!K-M$t2jEX3hbj$X!zw`JHcGH-HD%5SWYkF423HCGZryeL$Bf%1~qgq4l#Lo z6fZHE2d?091*+*JKBGV>-HC52P_9gG)bQX&xiEhzP{^Kt3hy&Og`&Nr;b@-*_>~P* z>@`3E9m69AsH8vOqztgkjBBJN@$3uOn-v1TzN|TJef(`Jna1@-C^HTIqmiDT`H-VV za4BAU4qjAq1fDm_VhdEfX#^kr9;;2@vAk93AYGlUQ9P{z;2{$f*r)b7NW3lH+MP(W zci|s5WU0`54u|c(LWGRsj0tM#i&$cYa=IH6W~gLs20U(t8kX$TxpSR5TCPv zhfd(IMaJ&ODGOAy#wECfgO|R7EnJG9;Ts$R^e|rJP^SDen}^BSyoDILAspzpf=f>C zNh_3CpKv)z=jIlV+l_tKWm_Y+v?P8jHRe8o%m!s_)gxG81CRAuk060WJf7&7UzJyF za-64d%m!ZD`JIAnjkiCfC*t$s0#%B?Vu=cVdI7hpaz5Aa6IC{R3I9}KvFX$6LO%ar DP&H9V diff --git a/BaseTools/Bin/Win32/PatchPcdValue.exe b/BaseTools/Bin/Win32/PatchPcdValue.exe index 5b19d89e1fd96f55242c93a43081f7d07da127f3..afcaccfc6615e513e8aa5e61c0ecf9c210492f0f 100755 GIT binary patch delta 494 zcmZ9HO=uGV5QS$p>t-OyUYs0bCTA_`8#lLH@*Vdf2Qrf0f?neLlU_!u`P9{g2o$vXzDIG*K=oLMze&m+Fyuym1L=;ompjgf2m1unSzZ~Bu zWr$Bsy zVN!YI8t#U&84qic-~l|>0Xz8JmRUG~dY_^cXm1O;93=$7jj3rnR&)T{*O_SO~K|HmBEut2(BGv3RX|V)CEi^wj z$w364(CQ!HMGzq>UOWc07Y{)(MGppqUPQ=21)ZuV2Of{%JD)G_c^lF7jp*uAp6dkP zu0M!%F3(5WA)+>%4j=VzrQe-v-s|wVZ#Yec9i!OnD5V^-<8+NFIOm&|BKfx$VIj>Ruqd}n($hSwvJCS#WXf`yqj*%7xM^)0l(q5ElQ41-Uucg8{5N?Vt|(T()rw*n+^@(f z{))|=?LEw@+D*i(Vg-Ii{NyeyVYML#aJMQEp2HJ;;7M%n*kc^?lx^XXC)V!DN*|qd z(`nZMm!%)iJO!rF_Wp$1SCa|e!gNi6L3lM8;!V7&Nz!++XCl!v!|1Qe34V=E52#SLBqF%FAX_l?phPA`Wxe; Bu&w|A diff --git a/BaseTools/Bin/Win32/Spd2Dec.exe b/BaseTools/Bin/Win32/Spd2Dec.exe index 049766b682294b270320c30d1e315d920c429bf2..bc58b468facbcffb21bc71b6c5efe4c704263ea7 100755 GIT binary patch delta 762 zcmZ8fT}YE*6h7~_Ij8nH{kD^$PzFKn-%V3zPUj*C8WAL=7UA61G&Y?$%YlgIM;3Nt z7oEz~kr$yz2?py2LkI-#3ZxRLyh;==0xvAW=$%#<@$$Tf^KgEibKdvkdfl7#x;~l7 zf~=60a*C{yQ)RWBCa238^1f$c28p_R4rlkw>F`1pzyjrxcvxBge$eS zgvv%I_`?vWg3Ap2Z6E^-05mjKL%;?8cDN!yyAoI%1Llvw*}@L8y;U|Oq!F=4Nu6;q zo5se)rSxbz0MvS;-Vk|TYjdb-Aag&3ZmUg$YjKeylS9Lil~{{sH?8hUo1dB6ShfHx zQ(eDg*pqg>U+T_hPw3}EX(}-}Dzz{+H7Jcs9NL65u9I&4HxEyBX{ZpL>^?0P zqDvXkWC9HrWNN8Ek4AQtJbJ8REi|OZ3f4mldUP=zr5ZSCq*?>kusGc`a56}X1}tS+ zca7*^*QmmX$C*IAMy%weUm1Czi*}M;6IGb-m^$`U1HSf1jNTbgN5dw}WAij^!g58? zriLzUY7UXwj0V+>Z4GpF?L~RaJn8@i&FB)gRW!*h8=(y|y4iU$Te!jp)RHtony_#g zQTk-z9nVpomG@7hi%GLWV^*GbhrU>`oXt{h5jtEOk_3UUw>4x92Rb{w!GI+a^PM@x z1Rd!3>i{JG!@s5T#UI>d|6V2juA=J_w@^_uKp@9K? zu;EeGN1`3e*dsb&=Lr+kYv*#C>A9UNv(OJaRT>=!-FC`Ld4Z%|bXOybO{aoARFGv@L6?CmE4SseoKRBuH!I4Q zE}vkUQAAi2mayJ}E>Jy`5!r==9tyPELl6WK^pol#=m#H%b2#UG-*Qk9Jv< zG?4%WHV3IWMv*GoA*eY{Dp3#7rp?t92~qQ2+O46ujzmn5Xl|qRwgkKrx=ktbpmIQ$ zkwrusVta7*yfU@0UHP5G;+?VLNFotWbY#j(eYhjsicmto0OdW#`Di_%FYB8eQ6!8K zCW-9SCZck za2YQZ&ww(n6g8MA<23>(EN8!PV_i9iH2MsjmQh^8i*l|NEy#6AnOCuXE+oB z=;DB3=bIc#MqAzO;UpSLq%oUY8q3E@w-oak$J}zwMLc#(s{7D-y1JyxoVN2BrBZ*32JQd=F~`?y+s$6`MRwfX@ovIne;ttFg=UcYQugiC&|)hOeb l_RC!}D5>C@jI_5_+LvfWk&7AK6|!#@Lls<{{xp}R;9oDC_0RwS diff --git a/BaseTools/Bin/Win32/Split.exe b/BaseTools/Bin/Win32/Split.exe index 561aa69bd11be95694118093ba4fbe258ded5783..097824af6670e571f070aba67e3e3fc118087f1d 100755 GIT binary patch delta 64 zcmZo@kZNdpP5@fvuyp$`Y{0{y#0A1tLg)R%I%*{8{}oW T&XVhyqC407&2||lwkNg#<((cj diff --git a/BaseTools/Bin/Win32/TargetTool.exe b/BaseTools/Bin/Win32/TargetTool.exe index bfe546188eeea2acde49c73f13b5debcd9a84b15..b2837875918af122fadce87a272bbfb418be4eb3 100755 GIT binary patch delta 2731 zcmai03v3kU5uTZ~@AmF|#`c}f*>`?`i+$#qnD@hA$2NAx~QIv*;5RwKPFeFtAYSIA07>wHa&o-e|rS59J z|DXA1=6}u1?&qfp&$bnAJ&v^WxD1RYh)ji52u2Kc0Bi?X7M=!?axmi1KoCy?j3J=04yuFA)__j@I7xQ{z~iyC zF~0T%c37YN75CbMYQBGVzyCKJ0iY;FbZTmvYNN55nvv@^)E~RngE+*9|+qCHYdUQxwt6_rmv{vLtVH4zvNq8IAn1f;3j)wMjJ%! zYQGIOi2pPpHFdS+b;Z4mBf;eKGR_3!?qytwlTm6mFf_=Hrtnj@(LZV_D&MC2K`*Hf zdKvJbmoz?g8w;k2QS)-4Y*4gBmK;r2%R(a=s+Yt@0V0|i5cMeGat$`?u-O5donU$) zn#o1o_%vqmPr9)zkRwN8CJC&KY-kO6q!aQg$Q0o8H?%??dIwX|vXsoHV4#9*o_Pmn z$=N=C2lpozif9}^bQcTIZ7sZu8HmMf^x$5s<~u#uWK)xbMsm|Vxt##NdJp|LiED@o zoXIk>pd}hJtE|p@xR0=C?{{es7Vq6pCu}9k%*`J*Y95XuIZK8r!7u?+**)13H6x+n zN+!Vrp#ci|raFi;0w3nnNcs7tN!V6(TZi!z8a2yloYANR zpW_~l8iZS&L?y1=O{qK06m zCn9RJL{y&_FeETFh!^zRNC?~?+m83`8+z?M3H$Q<_T#<%4o37lFq{yTaCNCH@AKq^ z>Eh}EZ@IiGnMyppnkf%xX7N|aG;r>~#5Cfv&w;Oh7Ri#{t=%8!-{8xlEE~*DSUz*# zGKUx1BsOxm)keiU%0`a7=3)&^2SlA<5ST8Arhwt@Uuq7&Yokm|i$C0_=P(1a1&8FU+ckCJiu4&RQdn)4sx?jrRe7$ z>ogh%^QSr)#ipj*KmJ%Ep%P51*%DIeWU5G6R1umrV^PS*TOH)hR=H)SD)IdJ^J*$* zSInuZSyVAg((O$L<+=hg5}Kr70)OnFuyc;|cL}wY^F$}*rH}``sHgx7tkq76k!`k8 z|2Cgbp*3h()7?~rqt_@|?||w>6*MSVD-cx0Ak?U!NkL3OJdv&Z>r~3Z-|*Q~@$v)f zZYu3WKAuL|IEFt+Bcpe+3Z9TokJ^;4P@VNmIu#-=Gx=`J&XQ~HT-E7UF0WxV!KY+HuGCP^4a35pUV~dlM{E6!8d%AVLK(#*1_z`rb4SU zn*xYW@%$WmC%-_c4-yCpL2#sERj~-kH%+Pl7y4-!hIzi9@+7fie#)J!PEiUlz~V?t zYcw9K`c6|_q$RXd8K~0@eNRE+(0Ui9*xd@M`J|sFZpl^sJO!!_C2CV+{7G?9qhz%T z$`#ZJm`;J2(ZXJY$F>w>{6CIyG{qlIvvnL3scqi_E#BKCtKpeD&tWxE!U^M zul352dekA53$=E;xavLq6{{zv?Qv!wgm5t$KZI})jUPd{1dT%w9*V{r{Q3s1GS7G$ zjALLN2jd+ueh!8OtL+dThsFsoegSOXsO6=uPJ!@vG}<6M0gXTKh>hCAT6ORPt7)TV zIe6?2Eu5sHo4>w^xmMc_t(LIDD%z!O&*S$FY0tBK*pFGG4r?cfb`x*;2j=spBbsid z9nl68k2$KP?V5R16G{?F7P1N1t(iylqa*+8zvf?`>67yR*RO}n-}fxyrRVjDw8hUa zp4TfVp2z3T>t))CA;f9Ll*z-|^`TThm6x>Zo?M>d(p^vB1tK8P1m(d(z?SfvaJv&C@Y2&mkuDYNPwY^lPLCoaW+jVcjf8G;- z`YM0(Y-{AVFX+=KdW3IW(8tiW9vN; zvfts4^2*Di-`2e=&t4I$fopic=Xz=3-9PGJ#@9w->c?-v++G`}lVAekYsP5)c9ym1hX#!IA_B#t@g_V}&lr_W>J{-DLN3fEp?q zpPf?m4gI-QQ9tMv~@r5&v;g%+zMgpm69r%tt^g(!?Y=i4M;$C-XR_jkW@ zzjMw#_uk(*druyn{?Xgh_a4E`BN=~t{E7OJA9Po|pAGOnMMrRk<4o_V>ywX;;0mp_ z7nE5K^`QnZqF^?{RshzTI11 z{363UEFs79Pv<)f0A&?G{Qzqh0%N3zy3gT8EdJS_BE@v}9KMc~)PG3J z&s^W$)z;bG8tz&hYz?$f?2vYZf?weev5Nlu6;4Zj`V~46%c*jcDy59`nCmR#7;0$7 zd912@0ReUopan3%i$@q#u*U(rZovTuv~27o^E`IqH}vv(ylTq{zyY@%iwh!d*`#h4 z#9p&UEnW7hZ(&OC*ut!o;I#!`N=UPXjFgZrLQK?LU}#Vh$)I@`u=H9JWg;u{N-tSg zdda@hOAg(60sW0^)F0ti0@7~g_#?RzBN|RvcXRYwKtwAKBKb17L4!Ry?D4=JFYq=; z3hC4Zya$VD!#FlzDLpohrS4!M?~_$dC%(iyYCNQ6(g)+1o?XPF!4iRD0Uv!ij;nZo z>%Yb)oHKZ+md<>Qe)J{3{Tg!-t10&)9>6Yo?jrWOO2y_{D!qg?Y}0lLOK}+mij?2$ za6aupRav<}#uo}KVyL#&%0*l(P)o0&s-9CP?@I-iF<2Ty+_da|hq*ggFJBr2 z8trhYMkz0Dq$Ntl3;Z%JtP0BdgDVBr(Z5ggzJ2afIrO1YIlg?4*Hi4t+@koaYoaxC zpNLbYrus2Tdo?v1Ptsvcb+c69P_ySYDP&?=_JPMbm?@kI3L-hc3DT`WY}w@@YICU4 zyZWOVGLMDLI&4)?xJNmTsVHiu?DHq> zncOM+0ow0WuC)9q%Wm>H)oiy1B1~~Ft#PU{vpnUk$c|?Dl(*tZZ#==o3Q}fiQj#XZ zDux!0>x$5hvpp}Z#CCQ$G#~xQsfw$7Q-M61(kr#~9-NxAjNZ_gWMwquRI?h&Ce>vZ zEuP&Ah5{=MBI#hHPsUINg@yyH3>ehVE{g+-%VGvKy3~EymYa{XC6d^Ddyg5c2B5H8 zEiG)~!48&~eRBN4>9z6mSN=Lyi-5m>?X@dhcB6IC)ONo)xVy8^*gtzC9L^ExNxa3I*c+RksT zLOi&3ZF{(Rb)c;y+!a_A^og-#(TeqL?JZ&QdQ?`LolufG!8)4ZQ6cXdet(c#qJB*-{*<}jwy#M!nC5TW>Tk8(Uj3a9{z!uL=g54MGZ}64OlDUBt_;Ngia@BJQPE zi`7e&)5N5TA;oUH4ohtg@{NOwEQ+_Ad!>L(XYXQ9Y$vqk!SXV! zjP#hRH%ARlN#Xcpf&Q&e6&Kil4)rpcs_yc(XsUKE&g=73yU>d+r%Soe@IYOu zO4gNX!5cHvf05tt?CXKY<~0J$YovocT6uBXrf9naVL!6Y<=hg^^yIM~ZF*YCGZ31E z#VQR!cNguWfpSE#CAQuDCBSRMQg-8rn+s<;11M~2zUs7B|8_4%r5G0i%y2V8TS zG>BTXe@M^wfA_!vB(*O;MNxX{wBDq4|C&BLtuIvLFHy+|&+w02x>0&-Jv}s{FHw#= z=q>3Zt#nEH&TUkChWq5tss9Yyop_#pCG!50G*!J(UYUB zSMxBvH>xjEea3SSzdAH+vFJ2n>_C0Zipr3o4vGe zNH3tO^X`0M$i!1UPIr&-ZhlloN5|M|RyTb+rq7?A_D3D8*bXx)7xvEUo$|i{*YU4` Lvnl74&eDGYFV6}H diff --git a/BaseTools/Bin/Win32/TianoCompress.exe b/BaseTools/Bin/Win32/TianoCompress.exe index 4c1d44ff5d2e6296be65748bdd5c0f3f3e806abd..8fe45a52d9399056549b568050473049b45a26e1 100755 GIT binary patch delta 64 zcmZoTAk}a{YQh8NCv!G7K5l)?*!q~M^)YknW0tLtSwA*_gtuRBWIg*pV3C=u3Hym6 U=S62VT+FA;VA{SViOt6r04^CG!vFvP delta 64 zcmZoTAk}a{YQh8N#ERy|$E}YUTOTvEK4xxx%(C?{>&FI=@b>GCtY;qxgi1L`J4{*P Txuv>!QB%&Oy6sz%*nDgO?0_B# diff --git a/BaseTools/Bin/Win32/Trim.exe b/BaseTools/Bin/Win32/Trim.exe index 2c0b8738f74843f4459400d78677cba924228d4f..4c6993bf3ba5cc8e3b5542a50b116c2bff9df20d 100755 GIT binary patch delta 4963 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 delta 3729 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 F9srE5FW3M8 delta 105 zcmZoT;L&ivW5NsO+=}ML*R8J^TVFG^zGiNH&C>dswe>Yy>udJb*Bq^{Ia^Z!a6-Qnm<^y7WAQsqu#Zge_ F9spkhFvI`= diff --git a/BaseTools/Bin/Win32/VolInfo.exe b/BaseTools/Bin/Win32/VolInfo.exe index 2cf76569a4470e7a0e7db8aa302664e6ca18bc09..d7d30c45d6d3eaf0a42a7c369163f653d90a1c82 100755 GIT binary patch delta 77 zcmV-T0J8sp;2eP99FW)p0eoUym(;RU7a5MZOH j5yGbzLyrFgY{0L=nYWzI27Dm~Ph)f-F)+6t@CM>P7b_+7 delta 77 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 delta 29016 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 -# Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
+# Portions copyright (c) 2008 - 2010, Apple Inc. 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 @@ -9,8 +9,6 @@ # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. # -# Filename: build_rule.template -# ## Syntax # @@ -345,12 +343,13 @@ $(MAKE_FILE) - Trim --asl-file -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i ${src} + Trim --asl-file -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i -i $(INC_LIST) ${src} "$(ASLPP)" $(ASLPP_FLAGS) $(INC) /I${s_path} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii - "$(ASL)" $(ASL_FLAGS) $(ASL_OUTFLAGS)${dst} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii + Trim --source-code -l -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iiii $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii + "$(ASL)" $(ASL_FLAGS) $(ASL_OUTFLAGS)${dst} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iiii - Trim --asl-file -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i ${src} + Trim --asl-file -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i -i $(INC_LIST) ${src} "$(ASLPP)" $(ASLPP_FLAGS) $(INC) -I${s_path} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii "$(ASL)" $(ASL_FLAGS) $(ASL_OUTFLAGS)${dst} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii @@ -514,9 +513,12 @@ *.hpk - + $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.lib + + $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc + "$(GENFW)" -o $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -g $(MODULE_GUID) --hiipackage $(HII_BINARY_PACKAGES) $(GENFW_FLAGS) "$(RC)" /Fo${dst} $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc @@ -524,3 +526,8 @@ "$(GENFW)" -o $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -g $(MODULE_GUID) --hiibinpackage $(HII_BINARY_PACKAGES) $(GENFW_FLAGS) "$(RC)" $(RC_FLAGS) $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc ${dst} + + + GenFw -o $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -g $(MODULE_GUID) --hiibinpackage $(HII_BINARY_PACKAGES) + + diff --git a/BaseTools/Conf/target.template b/BaseTools/Conf/target.template index a05e7af3af..3c4c50ff1e 100644 --- a/BaseTools/Conf/target.template +++ b/BaseTools/Conf/target.template @@ -1,5 +1,5 @@ # -# Copyright (c) 2006 - 2007, Intel Corporation. All rights reserved.
+# Copyright (c) 2006 - 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 @@ -9,7 +9,6 @@ # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. # -# Filename: target.template # # ALL Paths are Relative to WORKSPACE diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template index c873d93738..639e20a60e 100644 --- a/BaseTools/Conf/tools_def.template +++ b/BaseTools/Conf/tools_def.template @@ -18,22 +18,22 @@ DEFINE VS2003_BIN = C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7 DEFINE VS2003_DLL = C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE DEFINE VS2005_BIN = C:\Program Files\Microsoft Visual Studio 8\Vc\bin -DEFINE VS2005_DLL = C:\Program Files\Microsoft Visual Studio 8\Common7\IDE +DEFINE VS2005_DLL = C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;DEF(VS2005_BIN) DEFINE VS2005_BINX64 = C:\Program Files\Microsoft Visual Studio 8\Vc\bin\x86_amd64 DEFINE VS2005_BIN64 = C:\Program Files\Microsoft Visual Studio 8\Vc\bin\x86_ia64 DEFINE VS2005x86_BIN = C:\Program Files (x86)\Microsoft Visual Studio 8\Vc\bin -DEFINE VS2005x86_DLL = C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE +DEFINE VS2005x86_DLL = C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE;DEF(VS2005x86_BIN) DEFINE VS2005x86_BINX64 = DEF(VS2005x86_BIN)\x86_amd64 DEFINE VS2005x86_BIN64 = DEF(VS2005x86_BIN)\x86_ia64 DEFINE VS2008_BIN = C:\Program Files\Microsoft Visual Studio 9.0\Vc\bin -DEFINE VS2008_DLL = C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE +DEFINE VS2008_DLL = C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE;DEF(VS2008_BIN) DEFINE VS2008_BINX64 = DEF(VS2008_BIN)\x86_amd64 DEFINE VS2008_BIN64 = DEF(VS2008_BIN)\x86_ia64 DEFINE VS2008x86_BIN = C:\Program Files (x86)\Microsoft Visual Studio 9.0\Vc\bin -DEFINE VS2008x86_DLL = C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE +DEFINE VS2008x86_DLL = C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE;DEF(VS2008x86_BIN) DEFINE VS2008x86_BINX64 = DEF(VS2008x86_BIN)\x86_amd64 DEFINE VS2008x86_BIN64 = DEF(VS2008x86_BIN)\x86_ia64 @@ -149,11 +149,11 @@ DEFINE DEFAULT_WIN_ASL_OUTFLAGS = DEF(IASL_OUTFLAGS) #DEFINE DEFAULT_WIN_ASL_FLAGS = DEF(MS_ASL_FLAGS) #DEFINE DEFAULT_WIN_ASL_OUTFLAGS = DEF(MS_ASL_OUTFLAGS) -DEFINE MSFT_ASLPP_FLAGS = /nologo /EP /C +DEFINE MSFT_ASLPP_FLAGS = /nologo /E /C /FIAutoGen.h DEFINE MSFT_ASLCC_FLAGS = /GL- /Y- /TC /Dmain=ReferenceAcpiTable DEFINE MSFT_ASLDLINK_FLAGS = /NODEFAULTLIB /ENTRY:ReferenceAcpiTable /SUBSYSTEM:CONSOLE -DEFINE ICC_WIN_ASLPP_FLAGS = /nologo /EP /C +DEFINE ICC_WIN_ASLPP_FLAGS = /nologo /E /C /FIAutoGen.h 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 diff --git a/BaseTools/Source/C/Include/IndustryStandard/PeImage.h b/BaseTools/Source/C/Include/IndustryStandard/PeImage.h index de0e90e223..f54ee63a83 100644 --- a/BaseTools/Source/C/Include/IndustryStandard/PeImage.h +++ b/BaseTools/Source/C/Include/IndustryStandard/PeImage.h @@ -511,6 +511,8 @@ typedef struct { #define EFI_IMAGE_REL_BASED_HIGHLOW 3 #define EFI_IMAGE_REL_BASED_HIGHADJ 4 #define EFI_IMAGE_REL_BASED_MIPS_JMPADDR 5 +#define EFI_IMAGE_REL_BASED_ARM_MOV32A 5 +#define EFI_IMAGE_REL_BASED_ARM_MOV32T 7 #define EFI_IMAGE_REL_BASED_IA64_IMM64 9 #define EFI_IMAGE_REL_BASED_DIR64 10 diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py index d95f40bf82..aaba768b4a 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -162,6 +162,10 @@ class WorkspaceAutoGen(AutoGen): # parse FDF file to get PCDs in it, if any if self.FdfFile != None and self.FdfFile != '': + # + # Make global macros available when parsing FDF file + # + InputMacroDict.update(self.BuildDatabase.WorkspaceDb._GlobalMacros) Fdf = FdfParser(self.FdfFile.Path) Fdf.ParseFile() PcdSet = Fdf.Profile.PcdDict @@ -544,9 +548,18 @@ class PlatformAutoGen(AutoGen): DecPcdEntry = eachDec.Pcds[DecPcd] if (DecPcdEntry.TokenSpaceGuidCName == DscPcdEntry.TokenSpaceGuidCName) and \ (DecPcdEntry.TokenCName == DscPcdEntry.TokenCName): + # Print warning message to let the developer make a determine. + EdkLogger.warn("build", "Unreferenced vpd pcd used!", + File=self.MetaFile, \ + ExtraData = "PCD: %s.%s used in the DSC file %s is unreferenced." \ + %(DscPcdEntry.TokenSpaceGuidCName, DscPcdEntry.TokenCName, self.Platform.MetaFile.Path)) + DscPcdEntry.DatumType = DecPcdEntry.DatumType DscPcdEntry.DefaultValue = DecPcdEntry.DefaultValue - Sku.DefaultValue = DecPcdEntry.DefaultValue + # Only fix the value while no value provided in DSC file. + if (Sku.DefaultValue == "" or Sku.DefaultValue==None): + DscPcdEntry.SkuInfoList[DscPcdEntry.SkuInfoList.keys()[0]].DefaultValue = DecPcdEntry.DefaultValue + VpdFile.Add(DscPcdEntry, Sku.VpdOffset) # if the offset of a VPD is *, then it need to be fixed up by third party tool. @@ -569,11 +582,9 @@ class PlatformAutoGen(AutoGen): except: EdkLogger.error("build", FILE_WRITE_FAILURE, "Fail to create FV folder under %s" % self.BuildDir) - VpdFileName = self.Platform.VpdFileName - if VpdFileName == None or VpdFileName == "" : - VpdFilePath = os.path.join(FvPath, "%s.txt" % self.Platform.VpdToolGuid) - else : - VpdFilePath = os.path.join(FvPath, "%s.txt" % VpdFileName) + + VpdFilePath = os.path.join(FvPath, "%s.txt" % self.Platform.VpdToolGuid) + if not os.path.exists(VpdFilePath) or os.path.getmtime(VpdFilePath) < DscTimeStamp: VpdFile.Write(VpdFilePath) @@ -588,16 +599,13 @@ class PlatformAutoGen(AutoGen): break # Call third party GUID BPDG tool. if BPDGToolName != None: - VpdInfoFile.CallExtenalBPDGTool(BPDGToolName, VpdFilePath, VpdFileName) + VpdInfoFile.CallExtenalBPDGTool(BPDGToolName, VpdFilePath) else: EdkLogger.error("Build", FILE_NOT_FOUND, "Fail to find third-party BPDG tool to process VPD PCDs. BPDG Guid tool need to be defined in tools_def.txt and VPD_TOOL_GUID need to be provided in DSC file.") # Process VPD map file generated by third party BPDG tool if NeedProcessVpdMapFile: - if VpdFileName == None or VpdFileName == "" : - VpdMapFilePath = os.path.join(self.BuildDir, "FV", "%s.map" % self.Platform.VpdToolGuid) - else : - VpdMapFilePath = os.path.join(self.BuildDir, "FV", "%s.map" % VpdFileName) + VpdMapFilePath = os.path.join(self.BuildDir, "FV", "%s.map" % self.Platform.VpdToolGuid) if os.path.exists(VpdMapFilePath): VpdFile.Read(VpdMapFilePath) @@ -1709,12 +1717,12 @@ class ModuleAutoGen(AutoGen): self._SourceFileList = [] for F in self.Module.Sources: # match tool chain - if F.TagName != "" and F.TagName != self.ToolChain: + if F.TagName not in ("", "*", self.ToolChain): EdkLogger.debug(EdkLogger.DEBUG_9, "The toolchain [%s] for processing file [%s] is found, " "but [%s] is needed" % (F.TagName, str(F), self.ToolChain)) continue # match tool chain family - if F.ToolChainFamily != "" and F.ToolChainFamily != self.ToolChainFamily: + if F.ToolChainFamily not in ("", "*", self.ToolChainFamily): EdkLogger.debug( EdkLogger.DEBUG_0, "The file [%s] must be built by tools of [%s], " \ @@ -2128,14 +2136,6 @@ class ModuleAutoGen(AutoGen): self._ApplyBuildRule(Lib.Target, TAB_UNKNOWN_FILE) return self._LibraryAutoGenList - ## Return build command string - # - # @retval string Build command string - # - def _GetBuildCommand(self): - return self.PlatformInfo.BuildCommand - - Module = property(_GetModule) Name = property(_GetBaseName) Guid = property(_GetGuid) diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/Python/AutoGen/GenMake.py index 2e18f6771c..b1e438547f 100644 --- a/BaseTools/Source/Python/AutoGen/GenMake.py +++ b/BaseTools/Source/Python/AutoGen/GenMake.py @@ -26,7 +26,7 @@ from BuildEngine import * import Common.GlobalData as GlobalData ## Regular expression for finding header file inclusions -gIncludePattern = re.compile(r"^[ \t]*#?[ \t]*include(?:[ \t]*(?:\\(?:\r\n|\r|\n))*[ \t]*)*(?:[\"<]?[ \t]*)([\w.\\/() \t]+)(?:[ \t]*[\">]?)", re.MULTILINE|re.UNICODE|re.IGNORECASE) +gIncludePattern = re.compile(r"^[ \t]*#?[ \t]*include(?:[ \t]*(?:\\(?:\r\n|\r|\n))*[ \t]*)*(?:\(?[\"<]?[ \t]*)([-\w.\\/() \t]+)(?:[ \t]*[\">]?\)?)", re.MULTILINE|re.UNICODE|re.IGNORECASE) ## Regular expression for matching macro used in header file inclusion gMacroPattern = re.compile("([_A-Z][_A-Z0-9]*)[ \t]*\((.+)\)", re.UNICODE) @@ -769,7 +769,7 @@ cleanlib: Inc = os.path.normpath(Inc) for SearchPath in [CurrentFilePath] + SearchPathList: FilePath = os.path.join(SearchPath, Inc) - if not os.path.exists(FilePath) or FilePath in CurrentFileDependencyList: + if not os.path.isfile(FilePath) or FilePath in CurrentFileDependencyList: continue FilePath = PathClass(FilePath) CurrentFileDependencyList.append(FilePath) diff --git a/BaseTools/Source/Python/AutoGen/UniClassObject.py b/BaseTools/Source/Python/AutoGen/UniClassObject.py index 76a0549a75..1eb65c1e9a 100644 --- a/BaseTools/Source/Python/AutoGen/UniClassObject.py +++ b/BaseTools/Source/Python/AutoGen/UniClassObject.py @@ -444,6 +444,13 @@ class UniFileClassObject(object): # Add a string to list # def AddStringToList(self, Name, Language, Value, Token = None, Referenced = False, UseOtherLangDef = '', Index = -1): + for LangNameItem in self.LanguageDef: + if Language == LangNameItem[0]: + break + else: + EdkLogger.error('Unicode File Parser', FORMAT_NOT_SUPPORTED, "The language '%s' for %s is not defined in Unicode file %s." \ + % (Language, Name, self.File)) + if Language not in self.OrderedStringList: self.OrderedStringList[Language] = [] diff --git a/BaseTools/Source/Python/BPDG/BPDG.py b/BaseTools/Source/Python/BPDG/BPDG.py index 10692c4834..f50e6f7d22 100644 --- a/BaseTools/Source/Python/BPDG/BPDG.py +++ b/BaseTools/Source/Python/BPDG/BPDG.py @@ -25,7 +25,6 @@ import sys import encodings.ascii from optparse import OptionParser -from encodings import gbk from Common import EdkLogger from Common.BuildToolError import * @@ -49,13 +48,11 @@ def main(): # Initialize log system EdkLogger.Initialize() - Options, Args = myOptionParser() + Options, Args = MyOptionParser() ReturnCode = 0 - if Options.opt_slient: - EdkLogger.SetLevel(EdkLogger.ERROR) - elif Options.opt_verbose: + if Options.opt_verbose: EdkLogger.SetLevel(EdkLogger.VERBOSE) elif Options.opt_quiet: EdkLogger.SetLevel(EdkLogger.QUIET) @@ -64,7 +61,7 @@ def main(): else: EdkLogger.SetLevel(EdkLogger.INFO) - if Options.vpd_filename == None: + if Options.bin_filename == None: EdkLogger.error("BPDG", ATTRIBUTE_NOT_AVAILABLE, "Please use the -o option to specify the file name for the VPD binary file") if Options.filename == None: EdkLogger.error("BPDG", ATTRIBUTE_NOT_AVAILABLE, "Please use the -m option to specify the file name for the mapping file") @@ -74,14 +71,22 @@ def main(): Force = True if (Args[0] != None) : - startBPDG(Args[0], Options.filename, Options.vpd_filename, Force) + StartBpdg(Args[0], Options.filename, Options.bin_filename, Force) else : EdkLogger.error("BPDG", ATTRIBUTE_NOT_AVAILABLE, "Please specify the file which contain the VPD pcd info.", None) return ReturnCode - -def myOptionParser(): + + +## Parse command line options +# +# Using standard Python module optparse to parse command line option of this tool. +# +# @retval options A optparse.Values object containing the parsed options +# @retval args Target of BPDG command +# +def MyOptionParser(): # # Process command line firstly. # @@ -94,11 +99,9 @@ def myOptionParser(): help=st.MSG_OPTION_DEBUG_LEVEL) parser.add_option('-v', '--verbose', action='store_true', dest='opt_verbose', help=st.MSG_OPTION_VERBOSE) - parser.add_option('-s', '--silent', action='store_true', dest='opt_slient', default=False, - help=st.MSG_OPTION_SILENT) parser.add_option('-q', '--quiet', action='store_true', dest='opt_quiet', default=False, help=st.MSG_OPTION_QUIET) - parser.add_option('-o', '--vpd-filename', action='store', dest='vpd_filename', + parser.add_option('-o', '--vpd-filename', action='store', dest='bin_filename', help=st.MSG_OPTION_VPD_FILENAME) parser.add_option('-m', '--map-filename', action='store', dest='filename', help=st.MSG_OPTION_MAP_FILENAME) @@ -111,8 +114,22 @@ def myOptionParser(): EdkLogger.info(parser.usage) sys.exit(1) return options, args - -def startBPDG(InputFileName, MapFileName, VpdFileName, Force): + + +## Start BPDG and call the main functions +# +# This method mainly focus on call GenVPD class member functions to complete +# BPDG's target. It will process VpdFile override, and provide the interface file +# information. +# +# @Param InputFileName The filename include the vpd type pcd information +# @param MapFileName The filename of map file that stores vpd type pcd information. +# This file will be generated by the BPDG tool after fix the offset +# and adjust the offset to make the pcd data aligned. +# @param VpdFileName The filename of Vpd file that hold vpd pcd information. +# @param Force Override the exist Vpdfile or not. +# +def StartBpdg(InputFileName, MapFileName, VpdFileName, Force): if os.path.exists(VpdFileName) and not Force: print "\nFile %s already exist, Overwrite(Yes/No)?[Y]: " % VpdFileName choice = sys.stdin.readline() diff --git a/BaseTools/Source/Python/BPDG/GenVpd.py b/BaseTools/Source/Python/BPDG/GenVpd.py index 05f5b6cf95..f0196e061a 100644 --- a/BaseTools/Source/Python/BPDG/GenVpd.py +++ b/BaseTools/Source/Python/BPDG/GenVpd.py @@ -28,6 +28,10 @@ _FORMAT_CHAR = {1: 'B', 8: 'Q' } +## The VPD PCD data structure for store and process each VPD PCD entry. +# +# This class contain method to format and pack pcd's value. +# class PcdEntry: def __init__(self, PcdCName, PcdOffset, PcdSize, PcdValue, Lineno=None, FileName=None, PcdUnpackValue=None, PcdBinOffset=None, PcdBinSize=None): @@ -54,12 +58,29 @@ class PcdEntry: "Invalid PCD format(Name: %s File: %s Line: %s), no PcdSize specified!" %(self.PcdCName, self.FileName, self.Lineno)) self._GenOffsetValue () + + ## Analyze the string value to judge the PCD's datum type euqal to Boolean or not. + # + # @param ValueString PCD's value + # @param Size PCD's size + # + # @retval True PCD's datum type is Boolean + # @retval False PCD's datum type is not Boolean. + # + def _IsBoolean(self, ValueString, Size): + if (Size == "1"): + if ValueString.upper() in ["TRUE", "FALSE"]: + return True + elif ValueString in ["0", "1", "0x0", "0x1", "0x00", "0x01"]: + return True - def _IsBoolean(self, ValueString): - if ValueString.upper() in ["TRUE", "FALSE"]: - return True return False + ## Convert the PCD's value from string to integer. + # + # This function will try to convert the Offset value form string to integer + # for both hexadecimal and decimal. + # def _GenOffsetValue(self): if self.PcdOffset != "*" : try: @@ -70,9 +91,14 @@ class PcdEntry: except: EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid offset value %s for PCD %s (File: %s Line: %s)" % (self.PcdOffset, self.PcdCName, self.FileName, self.Lineno)) - + + ## Pack Boolean type VPD PCD's value form string to binary type. + # + # @param ValueString The boolean type string for pack. + # + # def _PackBooleanValue(self, ValueString): - if ValueString.upper() == "TRUE": + if ValueString.upper() == "TRUE" or ValueString in ["1", "0x1", "0x01"]: try: self.PcdValue = pack(_FORMAT_CHAR[1], 1) except: @@ -83,18 +109,65 @@ class PcdEntry: self.PcdValue = pack(_FORMAT_CHAR[1], 0) except: EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, - "Invalid size or value for PCD %s to pack(File: %s Line: %s)." % (self.PcdCName, self.FileName, self.Lineno)) - + "Invalid size or value for PCD %s to pack(File: %s Line: %s)." % (self.PcdCName, self.FileName, self.Lineno)) + + ## Pack Integer type VPD PCD's value form string to binary type. + # + # @param ValueString The Integer type string for pack. + # + # def _PackIntValue(self, IntValue, Size): if Size not in _FORMAT_CHAR.keys(): EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid size %d for PCD %s in integer datum size(File: %s Line: %s)." % (Size, self.PcdCName, self.FileName, self.Lineno)) + + if Size == 1: + if IntValue < 0: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "PCD can't be set to negative value %d for PCD %s in UINT8 datum type(File: %s Line: %s)." % (IntValue, self.PcdCName, self.FileName, self.Lineno)) + elif IntValue >= 0x100: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "Too large PCD value %d for datum type UINT8 for PCD %s(File: %s Line: %s)." % (IntValue, self.PcdCName, self.FileName, self.Lineno)) + elif Size == 2: + if IntValue < 0: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "PCD can't be set to negative value %d for PCD %s in UINT16 datum type(File: %s Line: %s)." % (IntValue, self.PcdCName, self.FileName, self.Lineno)) + elif IntValue >= 0x10000: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "Too large PCD value %d for datum type UINT16 for PCD %s(File: %s Line: %s)." % (IntValue, self.PcdCName, self.FileName, self.Lineno)) + elif Size == 4: + if IntValue < 0: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "PCD can't be set to negative value %d for PCD %s in UINT32 datum type(File: %s Line: %s)." % (IntValue, self.PcdCName, self.FileName, self.Lineno)) + elif IntValue >= 0x100000000: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "Too large PCD value %d for datum type UINT32 for PCD %s(File: %s Line: %s)." % (IntValue, self.PcdCName, self.FileName, self.Lineno)) + elif Size == 8: + if IntValue < 0: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "PCD can't be set to negative value %d for PCD %s in UINT32 datum type(File: %s Line: %s)." % (IntValue, self.PcdCName, self.FileName, self.Lineno)) + elif IntValue >= 0x10000000000000000: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "Too large PCD value %d for datum type UINT32 for PCD %s(File: %s Line: %s)." % (IntValue, self.PcdCName, self.FileName, self.Lineno)) + else: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, + "Invalid size %d for PCD %s in integer datum size(File: %s Line: %s)." % (Size, self.PcdCName, self.FileName, self.Lineno)) + try: self.PcdValue = pack(_FORMAT_CHAR[Size], IntValue) except: EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid size or value for PCD %s to pack(File: %s Line: %s)." % (self.PcdCName, self.FileName, self.Lineno)) - + + ## Pack VOID* type VPD PCD's value form string to binary type. + # + # The VOID* type of string divided into 3 sub-type: + # 1: L"String", Unicode type string. + # 2: "String", Ascii type string. + # 3: {bytearray}, only support byte-array. + # + # @param ValueString The Integer type string for pack. + # def _PackPtrValue(self, ValueString, Size): if ValueString.startswith('L"'): self._PackUnicode(ValueString, Size) @@ -105,7 +178,11 @@ class PcdEntry: else: EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid VOID* type PCD %s value %s (File: %s Line: %s)" % (self.PcdCName, ValueString, self.FileName, self.Lineno)) - + + ## Pack an Ascii PCD value. + # + # An Ascii string for a PCD should be in format as "". + # def _PackString(self, ValueString, Size): if (Size < 0): EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, @@ -123,8 +200,12 @@ class PcdEntry: self.PcdValue= pack('%ds' % Size, ValueString) except: EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, - "Invalid size or value for PCD %s to pack(File: %s Line: %s)." % (self.PcdCName, self.FileName, self.Lineno)) - + "Invalid size or value for PCD %s to pack(File: %s Line: %s)." % (self.PcdCName, self.FileName, self.Lineno)) + + ## Pack a byte-array PCD value. + # + # A byte-array for a PCD should be in format as {0x01, 0x02, ...}. + # def _PackByteArray(self, ValueString, Size): if (Size < 0): EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid parameter Size %s of PCD %s!(File: %s Line: %s)" % (self.PcdBinSize, self.PcdCName, self.FileName, self.Lineno)) @@ -206,9 +287,18 @@ class PcdEntry: ReturnArray.append(0) self.PcdValue = ReturnArray.tolist() - -class GenVPD : - + + + +## The class implementing the BPDG VPD PCD offset fix process +# +# The VPD PCD offset fix process includes: +# 1. Parse the input guided.txt file and store it in the data structure; +# 2. Format the input file data to remove unused lines; +# 3. Fixed offset if needed; +# 4. Generate output file, including guided.map and guided.bin file; +# +class GenVPD : ## Constructor of DscBuildData # # Initialize object of GenVPD @@ -310,7 +400,7 @@ class GenVPD : except: EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid PCD size value %s at file: %s line: %s" % (PCD.PcdSize, self.InputFileName, PCD.Lineno)) - if PCD._IsBoolean(PCD.PcdValue): + if PCD._IsBoolean(PCD.PcdValue, PCD.PcdSize): PCD._PackBooleanValue(PCD.PcdValue) self.FileLinesList[count] = PCD count += 1 diff --git a/BaseTools/Source/Python/BPDG/StringTable.py b/BaseTools/Source/Python/BPDG/StringTable.py index 0db282a143..a661da0f94 100644 --- a/BaseTools/Source/Python/BPDG/StringTable.py +++ b/BaseTools/Source/Python/BPDG/StringTable.py @@ -55,7 +55,7 @@ Intel(r) Binary Product Data Generation Tool (Intel(r) BPDG) Copyright (c) 2010 Intel Corporation All Rights Reserved. Required Flags: - -o VPD_FILENAME, --vpd-filename=VPD_FILENAME + -o BIN_FILENAME, --vpd-filename=BIN_FILENAME Specify the file name for the VPD binary file -m FILENAME, --map-filename=FILENAME Generate file name for consumption during the build that contains @@ -67,11 +67,10 @@ Required Flags: MSG_OPTION_HELP = ("Show this help message and exit.") MSG_OPTION_DEBUG_LEVEL = ("Print DEBUG statements, where DEBUG_LEVEL is 0-9.") MSG_OPTION_VERBOSE = ("Print informational statements.") -MSG_OPTION_SILENT = ("Only the exit code will be returned, all informational and error messages will not be displayed.") MSG_OPTION_QUIET = ("Returns the exit code and will display only error messages.") MSG_OPTION_VPD_FILENAME = ("Specify the file name for the VPD binary file.") MSG_OPTION_MAP_FILENAME = ("Generate file name for consumption during the build that contains the mapping of Pcd name, offset, datum size and value derived from the input file and any automatic calculations.") -MSG_OPTION_FORCE = ("Disable prompting the user for overwriting files as well as for missing input content.") +MSG_OPTION_FORCE = ("Will force overwriting existing output files rather than returning an error message.") ERR_INVALID_DEBUG_LEVEL = ("Invalid level for debug message. Only " "'DEBUG', 'INFO', 'WARNING', 'ERROR', " diff --git a/BaseTools/Source/Python/Common/BuildToolError.py b/BaseTools/Source/Python/Common/BuildToolError.py index 9986ba2b0d..b5dc3712e0 100644 --- a/BaseTools/Source/Python/Common/BuildToolError.py +++ b/BaseTools/Source/Python/Common/BuildToolError.py @@ -1,7 +1,7 @@ ## @file # Standardized Error Hanlding infrastructures. # -# Copyright (c) 2007, Intel Corporation. All rights reserved.
+# 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 # which accompanies this distribution. The full text of the license may be found at @@ -125,7 +125,7 @@ gErrorMessage = { RESOURCE_FULL : "Full", RESOURCE_OVERFLOW : "Overflow", RESOURCE_UNDERRUN : "Underrun", - RESOURCE_UNKNOWN_ERROR : "Unkown error", + RESOURCE_UNKNOWN_ERROR : "Unknown error", ATTRIBUTE_NOT_AVAILABLE : "Not available", ATTRIBUTE_GET_FAILURE : "Failed to retrieve", diff --git a/BaseTools/Source/Python/Common/DataType.py b/BaseTools/Source/Python/Common/DataType.py index 62a23ea773..d9d1774e27 100644 --- a/BaseTools/Source/Python/Common/DataType.py +++ b/BaseTools/Source/Python/Common/DataType.py @@ -355,7 +355,6 @@ TAB_DSC_DEFINES_BS_BASE_ADDRESS = 'BsBaseAddress' TAB_DSC_DEFINES_RT_BASE_ADDRESS = 'RtBaseAddress' TAB_DSC_DEFINES_DEFINE = 'DEFINE' TAB_DSC_DEFINES_VPD_TOOL_GUID = 'VPD_TOOL_GUID' -TAB_DSC_DEFINES_VPD_FILENAME = 'VPD_FILENAME' TAB_FIX_LOAD_TOP_MEMORY_ADDRESS = 'FIX_LOAD_TOP_MEMORY_ADDRESS' # @@ -364,7 +363,6 @@ TAB_FIX_LOAD_TOP_MEMORY_ADDRESS = 'FIX_LOAD_TOP_MEMORY_ADDRESS' TAB_TAT_DEFINES_ACTIVE_PLATFORM = 'ACTIVE_PLATFORM' TAB_TAT_DEFINES_ACTIVE_MODULE = 'ACTIVE_MODULE' TAB_TAT_DEFINES_TOOL_CHAIN_CONF = 'TOOL_CHAIN_CONF' -TAB_TAT_DEFINES_MULTIPLE_THREAD = 'MULTIPLE_THREAD' TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER = 'MAX_CONCURRENT_THREAD_NUMBER' TAB_TAT_DEFINES_TARGET = 'TARGET' TAB_TAT_DEFINES_TOOL_CHAIN_TAG = 'TOOL_CHAIN_TAG' diff --git a/BaseTools/Source/Python/Common/Dictionary.py b/BaseTools/Source/Python/Common/Dictionary.py index e3460e9891..de3556b892 100644 --- a/BaseTools/Source/Python/Common/Dictionary.py +++ b/BaseTools/Source/Python/Common/Dictionary.py @@ -25,26 +25,26 @@ from DataType import * # @retval 1 Open file failed # def ConvertTextFileToDictionary(FileName, Dictionary, CommentCharacter, KeySplitCharacter, ValueSplitFlag, ValueSplitCharacter): - try: - F = open(FileName,'r') - Keys = [] - for Line in F: - if Line.startswith(CommentCharacter): - continue - LineList = Line.split(KeySplitCharacter,1) - if len(LineList) >= 2: - Key = LineList[0].split() - if len(Key) == 1 and Key[0][0] != CommentCharacter and Key[0] not in Keys: - if ValueSplitFlag: - Dictionary[Key[0]] = LineList[1].replace('\\','/').split(ValueSplitCharacter) - else: - Dictionary[Key[0]] = LineList[1].strip().replace('\\','/') - Keys += [Key[0]] - F.close() - return 0 - except: - EdkLogger.info('Open file failed') - return 1 + try: + F = open(FileName,'r') + Keys = [] + for Line in F: + if Line.startswith(CommentCharacter): + continue + LineList = Line.split(KeySplitCharacter,1) + if len(LineList) >= 2: + Key = LineList[0].split() + if len(Key) == 1 and Key[0][0] != CommentCharacter and Key[0] not in Keys: + if ValueSplitFlag: + Dictionary[Key[0]] = LineList[1].replace('\\','/').split(ValueSplitCharacter) + else: + Dictionary[Key[0]] = LineList[1].strip().replace('\\','/') + Keys += [Key[0]] + F.close() + return 0 + except: + EdkLogger.info('Open file failed') + return 1 ## Print the dictionary # @@ -53,11 +53,11 @@ def ConvertTextFileToDictionary(FileName, Dictionary, CommentCharacter, KeySplit # @param Dict: The dictionary to be printed # def printDict(Dict): - if Dict != None: - KeyList = Dict.keys() - for Key in KeyList: - if Dict[Key] != '': - print Key + ' = ' + str(Dict[Key]) + if Dict != None: + KeyList = Dict.keys() + for Key in KeyList: + if Dict[Key] != '': + print Key + ' = ' + str(Dict[Key]) ## Print the dictionary # @@ -67,9 +67,9 @@ def printDict(Dict): # @param key: The key of the item to be printed # def printList(Key, List): - if type(List) == type([]): - if len(List) > 0: - if key.find(TAB_SPLIT) != -1: - print "\n" + Key - for Item in List: - print Item + if type(List) == type([]): + if len(List) > 0: + if Key.find(TAB_SPLIT) != -1: + print "\n" + Key + for Item in List: + print Item diff --git a/BaseTools/Source/Python/Common/String.py b/BaseTools/Source/Python/Common/String.py index 283e913b3b..195fa5c6ca 100644 --- a/BaseTools/Source/Python/Common/String.py +++ b/BaseTools/Source/Python/Common/String.py @@ -23,6 +23,9 @@ import EdkLogger as EdkLogger from GlobalData import * from BuildToolError import * +gHexVerPatt = re.compile('0x[a-f0-9]{4}[a-f0-9]{4}$',re.IGNORECASE) +gHumanReadableVerPatt = re.compile(r'([1-9][0-9]*|0)\.[0-9]{1,2}$') + ## GetSplitValueList # # Get a value list from a string with multiple values splited with SplitTag @@ -377,6 +380,34 @@ def GetDefineValue(String, Key, CommentCharacter): String = CleanString(String) return String[String.find(Key + ' ') + len(Key + ' ') : ] +## GetHexVerValue +# +# Get a Hex Version Value +# +# @param VerString: The version string to be parsed +# +# +# @retval: If VerString is incorrectly formatted, return "None" which will break the build. +# If VerString is correctly formatted, return a Hex value of the Version Number (0xmmmmnnnn) +# where mmmm is the major number and nnnn is the adjusted minor number. +# +def GetHexVerValue(VerString): + VerString = CleanString(VerString) + + if gHumanReadableVerPatt.match(VerString): + ValueList = VerString.split('.') + Major = ValueList[0] + Minor = ValueList[1] + if len(Minor) == 1: + Minor += '0' + DeciValue = (int(Major) << 16) + int(Minor); + return "0x%08x"%DeciValue + elif gHexVerPatt.match(VerString): + return VerString + else: + return None + + ## GetSingleValueOfKeyFromLines # # Parse multiple strings as below to get value of each definition line diff --git a/BaseTools/Source/Python/Common/TargetTxtClassObject.py b/BaseTools/Source/Python/Common/TargetTxtClassObject.py index fc5d589a59..a7dec65a25 100644 --- a/BaseTools/Source/Python/Common/TargetTxtClassObject.py +++ b/BaseTools/Source/Python/Common/TargetTxtClassObject.py @@ -1,7 +1,7 @@ ## @file # This file is used to define each component of Target.txt file # -# Copyright (c) 2007, Intel Corporation. All rights reserved.
+# 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 # which accompanies this distribution. The full text of the license may be found at @@ -37,7 +37,6 @@ class TargetTxtClassObject(object): DataType.TAB_TAT_DEFINES_ACTIVE_PLATFORM : '', DataType.TAB_TAT_DEFINES_ACTIVE_MODULE : '', DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF : '', - DataType.TAB_TAT_DEFINES_MULTIPLE_THREAD : '', DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER : '', DataType.TAB_TAT_DEFINES_TARGET : [], DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG : [], @@ -102,12 +101,6 @@ class TargetTxtClassObject(object): elif Key in [DataType.TAB_TAT_DEFINES_TARGET, DataType.TAB_TAT_DEFINES_TARGET_ARCH, \ DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG]: self.TargetTxtDictionary[Key] = Value.split() - elif Key == DataType.TAB_TAT_DEFINES_MULTIPLE_THREAD: - if Value not in ["Enable", "Disable"]: - EdkLogger.error("build", FORMAT_INVALID, "Invalid setting of [%s]: %s." % (Key, Value), - ExtraData="\tSetting must be one of [Enable, Disable]", - File=FileName) - self.TargetTxtDictionary[Key] = Value elif Key == DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER: try: V = int(Value, 0) diff --git a/BaseTools/Source/Python/Common/ToolDefClassObject.py b/BaseTools/Source/Python/Common/ToolDefClassObject.py index 549f76cee9..b5cd5ee435 100644 --- a/BaseTools/Source/Python/Common/ToolDefClassObject.py +++ b/BaseTools/Source/Python/Common/ToolDefClassObject.py @@ -23,7 +23,7 @@ from BuildToolError import * from TargetTxtClassObject import * ## -# Static vailabes used for pattern +# Static variables used for pattern # gMacroRefPattern = re.compile('(DEF\([^\(\)]+\))') gEnvRefPattern = re.compile('(ENV\([^\(\)]+\))') diff --git a/BaseTools/Source/Python/Common/VpdInfoFile.py b/BaseTools/Source/Python/Common/VpdInfoFile.py index 0111744cc0..5f92fa5cdd 100644 --- a/BaseTools/Source/Python/Common/VpdInfoFile.py +++ b/BaseTools/Source/Python/Common/VpdInfoFile.py @@ -219,28 +219,23 @@ class VpdInfoFile: # @param ToolPath The string path name for BPDG tool # @param VpdFileName The string path name for VPD information guid.txt # -def CallExtenalBPDGTool(ToolPath, VpdFilePath, VpdFileName): +def CallExtenalBPDGTool(ToolPath, VpdFileName): assert ToolPath != None, "Invalid parameter ToolPath" - assert VpdFilePath != None and os.path.exists(VpdFilePath), "Invalid parameter VpdFileName" + assert VpdFileName != None and os.path.exists(VpdFileName), "Invalid parameter VpdFileName" - OutputDir = os.path.dirname(VpdFilePath) - if (VpdFileName == None or VpdFileName == "") : - FileName = os.path.basename(VpdFilePath) - BaseName, ext = os.path.splitext(FileName) - OutputMapFileName = os.path.join(OutputDir, "%s.map" % BaseName) - OutputBinFileName = os.path.join(OutputDir, "%s.bin" % BaseName) - else : - OutputMapFileName = os.path.join(OutputDir, "%s.map" % VpdFileName) - OutputBinFileName = os.path.join(OutputDir, "%s.bin" % VpdFileName) + OutputDir = os.path.dirname(VpdFileName) + FileName = os.path.basename(VpdFileName) + BaseName, ext = os.path.splitext(FileName) + OutputMapFileName = os.path.join(OutputDir, "%s.map" % BaseName) + OutputBinFileName = os.path.join(OutputDir, "%s.bin" % BaseName) try: PopenObject = subprocess.Popen([ToolPath, '-o', OutputBinFileName, '-m', OutputMapFileName, - '-s', + '-q', '-f', - '-v', - VpdFilePath], + VpdFileName], stdout=subprocess.PIPE, stderr= subprocess.PIPE) except Exception, X: diff --git a/BaseTools/Source/Python/CommonDataClass/CommonClass.py b/BaseTools/Source/Python/CommonDataClass/CommonClass.py index 509601007c..7a0123b1d9 100644 --- a/BaseTools/Source/Python/CommonDataClass/CommonClass.py +++ b/BaseTools/Source/Python/CommonDataClass/CommonClass.py @@ -1,7 +1,7 @@ ## @file # This file is used to define common items of class object # -# Copyright (c) 2007, Intel Corporation. All rights reserved.
+# 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 # which accompanies this distribution. The full text of the license may be found at @@ -53,7 +53,7 @@ class CommonClass(object): self.HelpText = HelpText self.HelpTextList = [] -## CommonClass +## CommonHeaderClass # # This class defined common items used in Module/Platform/Package files # @@ -301,7 +301,7 @@ class SkuInfoClass(object): # @retval Rtn Formatted String # def __str__(self): - Rtn = Rtn = 'SkuId = ' + str(self.SkuId) + "," + \ + Rtn = 'SkuId = ' + str(self.SkuId) + "," + \ 'SkuIdName = ' + str(self.SkuIdName) + "," + \ 'VariableName = ' + str(self.VariableName) + "," + \ 'VariableGuid = ' + str(self.VariableGuid) + "," + \ diff --git a/BaseTools/Source/Python/CommonDataClass/DistributionPackageClass.py b/BaseTools/Source/Python/CommonDataClass/DistributionPackageClass.py index b433299452..8f12026887 100644 --- a/BaseTools/Source/Python/CommonDataClass/DistributionPackageClass.py +++ b/BaseTools/Source/Python/CommonDataClass/DistributionPackageClass.py @@ -150,7 +150,6 @@ class DistributionPackageClass(object): # script. # if __name__ == '__main__': - pass D = DistributionPackageClass() D.GetDistributionPackage(os.getenv('WORKSPACE'), ['MdePkg/MdePkg.dec', 'TianoModulePkg/TianoModulePkg.dec'], ['MdeModulePkg/Application/HelloWorld/HelloWorld.inf']) Xml = DistributionPackageXml() diff --git a/BaseTools/Source/Python/PackagingTool/DependencyRules.py b/BaseTools/Source/Python/PackagingTool/DependencyRules.py index 7956c8a2ae..741736e39d 100644 --- a/BaseTools/Source/Python/PackagingTool/DependencyRules.py +++ b/BaseTools/Source/Python/PackagingTool/DependencyRules.py @@ -1,7 +1,7 @@ ## @file # This file is for installed package information database operations # -# Copyright (c) 2007 - 2008, Intel Corporation. All rights reserved.
+# 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 # which accompanies this distribution. The full text of the license may be found at @@ -25,7 +25,7 @@ DEPEX_CHECK_PACKAGE_NOT_FOUND, DEPEX_CHECK_DP_NOT_FOUND) = (0, 1, 2, 3) ## IpiDb # -# This class represents the installed package information databse +# This class represents the installed package information database # Add/Remove/Get installed distribution package information here. # # @@ -57,7 +57,7 @@ class DependencyRules(object): return False - ## Check whether a module depex satified by current workspace. + ## Check whether a module depex satisfied by current workspace. # # @param ModuleObj: # @param DpObj: @@ -103,7 +103,7 @@ class DependencyRules(object): EdkLogger.verbose("Check package exists in workspace ... DONE!") - ## Check whether a package depex satified by current workspace. + ## Check whether a package depex satisfied by current workspace. # # @param ModuleObj: # @param DpObj: @@ -135,7 +135,7 @@ class DependencyRules(object): EdkLogger.verbose("Check DP exists in workspace ... DONE!") - ## Check whether a DP depex satified by current workspace. + ## Check whether a DP depex satisfied by current workspace. # # @param ModuleObj: # @param DpObj: @@ -158,7 +158,7 @@ class DependencyRules(object): return True - ## Check whether a DP depex satified by current workspace. + ## Check whether a DP depex satisfied by current workspace. # # @param ModuleObj: # @param DpObj: diff --git a/BaseTools/Source/Python/TargetTool/TargetTool.py b/BaseTools/Source/Python/TargetTool/TargetTool.py index 68c55718bc..7993023150 100644 --- a/BaseTools/Source/Python/TargetTool/TargetTool.py +++ b/BaseTools/Source/Python/TargetTool/TargetTool.py @@ -33,7 +33,6 @@ class TargetTool(): self.TargetTxtDictionary = { TAB_TAT_DEFINES_ACTIVE_PLATFORM : None, TAB_TAT_DEFINES_TOOL_CHAIN_CONF : None, - TAB_TAT_DEFINES_MULTIPLE_THREAD : None, TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER : None, TAB_TAT_DEFINES_TARGET : None, TAB_TAT_DEFINES_TOOL_CHAIN_TAG : None, @@ -44,7 +43,7 @@ class TargetTool(): def LoadTargetTxtFile(self, filename): if os.path.exists(filename) and os.path.isfile(filename): - return self.ConvertTextFileToDict(filename, '#', '=') + return self.ConvertTextFileToDict(filename, '#', '=') else: raise ParseError('LoadTargetTxtFile() : No Target.txt file exists.') return 1 @@ -64,7 +63,7 @@ class TargetTool(): Key = LineList[0].strip() if Key.startswith(CommentCharacter) == False and Key in self.TargetTxtDictionary.keys(): if Key == TAB_TAT_DEFINES_ACTIVE_PLATFORM or Key == TAB_TAT_DEFINES_TOOL_CHAIN_CONF \ - or Key == TAB_TAT_DEFINES_MULTIPLE_THREAD or Key == TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER \ + or Key == TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER \ or Key == TAB_TAT_DEFINES_ACTIVE_MODULE: self.TargetTxtDictionary[Key] = LineList[1].replace('\\', '/').strip() elif Key == TAB_TAT_DEFINES_TARGET or Key == TAB_TAT_DEFINES_TARGET_ARCH \ @@ -149,15 +148,13 @@ def GetConfigureKeyValue(self, Key): else: EdkLogger.error("TagetTool", BuildToolError.FILE_NOT_FOUND, "Tooldef file %s does not exist!" % self.Opt.TOOL_DEFINITION_FILE, RaiseError=False) - elif Key == TAB_TAT_DEFINES_MULTIPLE_THREAD and self.Opt.NUM != None: - if self.Opt.NUM >= 2: - Line = "%-30s = %s\n" % (Key, 'Enable') - else: - Line = "%-30s = %s\n" % (Key, 'Disable') + + elif self.Opt.NUM >= 2: + Line = "%-30s = %s\n" % (Key, 'Enable') + elif self.Opt.NUM <= 1: + Line = "%-30s = %s\n" % (Key, 'Disable') elif Key == TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER and self.Opt.NUM != None: Line = "%-30s = %s\n" % (Key, str(self.Opt.NUM)) - elif Key == TAB_TAT_DEFINES_MULTIPLE_THREAD and self.Opt.ENABLE_MULTI_THREAD != None: - Line = "%-30s = %s\n" % (Key, self.Opt.ENABLE_MULTI_THREAD) elif Key == TAB_TAT_DEFINES_TARGET and self.Opt.TARGET != None: Line = "%-30s = %s\n" % (Key, ''.join(elem + ' ' for elem in self.Opt.TARGET)) elif Key == TAB_TAT_DEFINES_TARGET_ARCH and self.Opt.TARGET_ARCH != None: @@ -216,8 +213,6 @@ def MyOptionParser(): help="Specify the build rule configure file, which replaces target.txt's BUILD_RULE_CONF definition. If not specified, the default value Conf/build_rule.txt will be set.") parser.add_option("-m", "--multithreadnum", action="callback", type="int", dest="NUM", callback=RangeCheckCallback, help="Specify the multi-thread number which replace target.txt's MAX_CONCURRENT_THREAD_NUMBER. If the value is less than 2, MULTIPLE_THREAD will be disabled. If the value is larger than 1, MULTIPLE_THREAD will be enabled.") - parser.add_option("-e", "--enablemultithread", action="store", type="choice", choices=['Enable', 'Disable'], dest="ENABLE_MULTI_THREAD", - help="Specify whether enable multi-thread! If Enable, multi-thread is enabled; If Disable, mutli-thread is disable") (opt, args)=parser.parse_args() return (opt, args) diff --git a/BaseTools/Source/Python/Trim/Trim.py b/BaseTools/Source/Python/Trim/Trim.py index 75c08bbabf..b3ad16715a 100644 --- a/BaseTools/Source/Python/Trim/Trim.py +++ b/BaseTools/Source/Python/Trim/Trim.py @@ -40,6 +40,10 @@ gPragmaPattern = re.compile("^\s*#pragma\s+pack", re.MULTILINE) gHexNumberPattern = re.compile("0[xX]([0-9a-fA-F]+)") ## Regular expression for matching "Include ()" in asl file gAslIncludePattern = re.compile("^(\s*)[iI]nclude\s*\(\"?([^\"\(\)]+)\"\)", re.MULTILINE) +## Regular expression for matching C style #include "XXX.asl" in asl file +gAslCIncludePattern = re.compile(r'^(\s*)#include\s*[<"]\s*([-\\/\w.]+)\s*[>"]', re.MULTILINE) +## Regular expression for matching constant with 'ULL' and 'UL', 'LL', 'L' postfix +gLongNumberPattern = re.compile("(0[xX][0-9a-fA-F]+|[0-9]+)U?LL", re.MULTILINE) ## Patterns used to convert EDK conventions to EDK2 ECP conventions gImportCodePatterns = [ [ @@ -118,7 +122,7 @@ gIncludedAslFile = [] # @param Target File to store the trimmed content # @param Convert If True, convert standard HEX format to MASM format # -def TrimPreprocessedFile(Source, Target, Convert): +def TrimPreprocessedFile(Source, Target, ConvertHex, TrimLong): CreateDirectory(os.path.dirname(Target)) try: f = open (Source, 'r') @@ -164,8 +168,10 @@ def TrimPreprocessedFile(Source, Target, Convert): % (LineIndexOfOriginalFile + 1)) # convert HEX number format if indicated - if Convert: + if ConvertHex: Line = gHexNumberPattern.sub(r"0\1h", Line) + if TrimLong: + Line = gLongNumberPattern.sub(r"\1", Line) if LineNumber != None: EdkLogger.verbose("Got line directive: line=%d" % LineNumber) @@ -264,31 +270,43 @@ def TrimPreprocessedVfr(Source, Target): ## Read the content ASL file, including ASL included, recursively # -# @param Source File to be read -# @param Indent Spaces before the Include() statement +# @param Source File to be read +# @param Indent Spaces before the Include() statement +# @param IncludePathList The list of external include file # -def DoInclude(Source, Indent=''): +def DoInclude(Source, Indent='', IncludePathList=[]): NewFileContent = [] - # avoid A "include" B and B "include" A - if Source in gIncludedAslFile: - EdkLogger.warn("Trim", "Circular include", - ExtraData= "%s -> %s" % (" -> ".join(gIncludedAslFile), Source)) - return [] - gIncludedAslFile.append(Source) try: - F = open(Source,'r') + for IncludePath in IncludePathList: + IncludeFile = os.path.join(IncludePath, Source) + if os.path.isfile(IncludeFile): + F = open(IncludeFile, "r") + break + else: + EdkLogger.error("Trim", "Failed to find include file %s" % Source) except: EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Source) + + # avoid A "include" B and B "include" A + IncludeFile = os.path.abspath(os.path.normpath(IncludeFile)) + if IncludeFile in gIncludedAslFile: + EdkLogger.warn("Trim", "Circular include", + ExtraData= "%s -> %s" % (" -> ".join(gIncludedAslFile), IncludeFile)) + return [] + gIncludedAslFile.append(IncludeFile) + for Line in F: Result = gAslIncludePattern.findall(Line) if len(Result) == 0: - NewFileContent.append("%s%s" % (Indent, Line)) - continue + Result = gAslCIncludePattern.findall(Line) + if len(Result) == 0 or os.path.splitext(Result[0][1])[1].lower() not in [".asl", ".asi"]: + NewFileContent.append("%s%s" % (Indent, Line)) + continue CurrentIndent = Indent + Result[0][0] IncludedFile = Result[0][1] - NewFileContent.extend(DoInclude(IncludedFile, CurrentIndent)) + NewFileContent.extend(DoInclude(IncludedFile, CurrentIndent, IncludePathList)) NewFileContent.append("\n") gIncludedAslFile.pop() @@ -301,19 +319,44 @@ def DoInclude(Source, Indent=''): # # Replace ASL include statement with the content the included file # -# @param Source File to be trimmed -# @param Target File to store the trimmed content +# @param Source File to be trimmed +# @param Target File to store the trimmed content +# @param IncludePathFile The file to log the external include path # -def TrimAslFile(Source, Target): +def TrimAslFile(Source, Target, IncludePathFile): CreateDirectory(os.path.dirname(Target)) - Cwd = os.getcwd() SourceDir = os.path.dirname(Source) if SourceDir == '': SourceDir = '.' - os.chdir(SourceDir) - Lines = DoInclude(Source) - os.chdir(Cwd) + + # + # Add source directory as the first search directory + # + IncludePathList = [SourceDir] + + # + # If additional include path file is specified, append them all + # to the search directory list. + # + if IncludePathFile: + try: + LineNum = 0 + for Line in open(IncludePathFile,'r'): + LineNum += 1 + if Line.startswith("/I") or Line.startswith ("-I"): + IncludePathList.append(Line[2:].strip()) + else: + EdkLogger.warn("Trim", "Invalid include line in include list file.", IncludePathFile, LineNum) + except: + EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=IncludePathFile) + + Lines = DoInclude(Source, '', IncludePathList) + + # + # Undef MIN and MAX to avoid collision in ASL source code + # + Lines.insert(0, "#undef MIN\n#undef MAX\n") # save all lines trimmed try: @@ -437,6 +480,10 @@ def Options(): make_option("-c", "--convert-hex", dest="ConvertHex", action="store_true", help="Convert standard hex format (0xabcd) to MASM format (abcdh)"), + make_option("-l", "--trim-long", dest="TrimLong", action="store_true", + help="Remove postfix of long number"), + make_option("-i", "--include-path-file", dest="IncludePathFile", + help="The input file is include path list to search for ASL include file"), make_option("-o", "--output", dest="OutputFile", help="File to store the trimmed content"), make_option("-v", "--verbose", dest="LogLevel", action="store_const", const=EdkLogger.VERBOSE, @@ -449,7 +496,7 @@ def Options(): ] # use clearer usage to override default usage message - UsageString = "%prog [-s|-r|-a] [-c] [-v|-d |-q] [-o ] " + UsageString = "%prog [-s|-r|-a] [-c] [-v|-d |-q] [-i ] [-o ] " Parser = OptionParser(description=__copyright__, version=__version__, option_list=OptionList, usage=UsageString) Parser.set_defaults(FileType="Vfr") @@ -495,13 +542,13 @@ def Main(): elif CommandOptions.FileType == "Asl": if CommandOptions.OutputFile == None: CommandOptions.OutputFile = os.path.splitext(InputFile)[0] + '.iii' - TrimAslFile(InputFile, CommandOptions.OutputFile) + TrimAslFile(InputFile, CommandOptions.OutputFile, CommandOptions.IncludePathFile) elif CommandOptions.FileType == "R8SourceCode": TrimR8Sources(InputFile, CommandOptions.OutputFile) else : if CommandOptions.OutputFile == None: CommandOptions.OutputFile = os.path.splitext(InputFile)[0] + '.iii' - TrimPreprocessedFile(InputFile, CommandOptions.OutputFile, CommandOptions.ConvertHex) + TrimPreprocessedFile(InputFile, CommandOptions.OutputFile, CommandOptions.ConvertHex, CommandOptions.TrimLong) except FatalError, X: import platform import traceback diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py b/BaseTools/Source/Python/Workspace/MetaFileParser.py index fb66e41fb5..3c7d7fdf6a 100644 --- a/BaseTools/Source/Python/Workspace/MetaFileParser.py +++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py @@ -474,11 +474,11 @@ class InfParser(MetaFileParser): def _DefineParser(self): TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1) self._ValueList[0:len(TokenList)] = TokenList - self._Macros[TokenList[0]] = ReplaceMacro(TokenList[1], self._Macros, False) if self._ValueList[1] == '': EdkLogger.error('Parser', FORMAT_INVALID, "No value specified", ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) - + self._Macros[TokenList[0]] = ReplaceMacro(TokenList[1], self._Macros, False) + ## [nmake] section parser (R8.x style only) def _NmakeParser(self): TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1) @@ -655,6 +655,11 @@ class DscParser(MetaFileParser): continue # file private macros elif Line.upper().startswith('DEFINE '): + if self._Enabled < 0: + # Do not parse the macro and add it to self._Macros dictionary if directives + # statement is evaluated to false. + continue + (Name, Value) = self._MacroParser() # Make the defined macro in DSC [Defines] section also # available for FDF file. @@ -676,6 +681,11 @@ class DscParser(MetaFileParser): ) continue elif Line.upper().startswith('EDK_GLOBAL '): + if self._Enabled < 0: + # Do not parse the macro and add it to self._Macros dictionary + # if previous directives statement is evaluated to false. + continue + (Name, Value) = self._MacroParser() for Arch, ModuleType in self._Scope: self._LastItem = self._Store( @@ -802,8 +812,8 @@ class DscParser(MetaFileParser): if not self._SectionName in self._IncludeAllowedSection: EdkLogger.error("Parser", FORMAT_INVALID, File=self.MetaFile, Line=self._LineIndex+1, ExtraData="'!include' is not allowed under section [%s]" % self._SectionName) - # the included file must be relative to the parsing file - IncludedFile = os.path.join(self._FileDir, NormPath(self._ValueList[1], self._Macros)) + # the included file must be relative to workspace + IncludedFile = os.path.join(os.environ["WORKSPACE"], NormPath(self._ValueList[1], self._Macros)) Parser = DscParser(IncludedFile, self._FileType, self._Table, self._Macros, From=self._LastItem) # set the parser status with current status Parser._SectionName = self._SectionName diff --git a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py index dad6ecd49a..9d53fa8e68 100644 --- a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py +++ b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py @@ -141,7 +141,6 @@ class DscBuildData(PlatformBuildClassObject): self._BuildOptions = None self._LoadFixAddress = None self._VpdToolGuid = None - self._VpdFileName = None ## Get architecture def _GetArch(self): @@ -204,9 +203,7 @@ class DscBuildData(PlatformBuildClassObject): uuid.UUID(Record[1]) except: EdkLogger.error("build", FORMAT_INVALID, "Invalid GUID format for VPD_TOOL_GUID", File=self.MetaFile) - self._VpdToolGuid = Record[1] - elif Name == TAB_DSC_DEFINES_VPD_FILENAME: - self._VpdFileName = Record[1] + self._VpdToolGuid = Record[1] # set _Header to non-None in order to avoid database re-querying self._Header = 'DUMMY' @@ -350,16 +347,7 @@ class DscBuildData(PlatformBuildClassObject): if self._VpdToolGuid == None: self._VpdToolGuid = '' return self._VpdToolGuid - - ## Retrieve the VPD file Name, this is optional in DSC file - def _GetVpdFileName(self): - if self._VpdFileName == None: - if self._Header == None: - self._GetHeaderInfo() - if self._VpdFileName == None: - self._VpdFileName = '' - return self._VpdFileName - + ## Retrieve [SkuIds] section information def _GetSkuIds(self): if self._SkuIds == None: @@ -802,8 +790,7 @@ class DscBuildData(PlatformBuildClassObject): BsBaseAddress = property(_GetBsBaseAddress) RtBaseAddress = property(_GetRtBaseAddress) LoadFixAddress = property(_GetLoadFixAddress) - VpdToolGuid = property(_GetVpdToolGuid) - VpdFileName = property(_GetVpdFileName) + VpdToolGuid = property(_GetVpdToolGuid) SkuIds = property(_GetSkuIds) Modules = property(_GetModules) LibraryInstances = property(_GetLibraryInstances) @@ -1330,18 +1317,16 @@ class InfBuildData(ModuleBuildClassObject): if Name in self: self[Name] = Record[1] # some special items in [Defines] section need special treatment - elif Name in ('EFI_SPECIFICATION_VERSION', 'UEFI_SPECIFICATION_VERSION'): - if self._Specification == None: - self._Specification = sdict() - self._Specification['UEFI_SPECIFICATION_VERSION'] = Record[1] - elif Name == 'EDK_RELEASE_VERSION': + elif Name in ('EFI_SPECIFICATION_VERSION', 'UEFI_SPECIFICATION_VERSION', 'EDK_RELEASE_VERSION', 'PI_SPECIFICATION_VERSION'): + if Name in ('EFI_SPECIFICATION_VERSION', 'UEFI_SPECIFICATION_VERSION'): + Name = 'UEFI_SPECIFICATION_VERSION' if self._Specification == None: self._Specification = sdict() - self._Specification[Name] = Record[1] - elif Name == 'PI_SPECIFICATION_VERSION': - if self._Specification == None: - self._Specification = sdict() - self._Specification[Name] = Record[1] + self._Specification[Name] = GetHexVerValue(Record[1]) + if self._Specification[Name] == None: + EdkLogger.error("build", FORMAT_NOT_SUPPORTED, + "'%s' format is not supported for %s" % (Record[1], Name), + File=self.MetaFile, Line=Record[-1]) elif Name == 'LIBRARY_CLASS': if self._LibraryClass == None: self._LibraryClass = [] diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py index af9d3d5f5a..54265952d0 100644 --- a/BaseTools/Source/Python/build/build.py +++ b/BaseTools/Source/Python/build/build.py @@ -305,7 +305,7 @@ class BuildUnit: ## str() method # - # It just returns the string representaion of self.BuildObject + # It just returns the string representation of self.BuildObject # # @param self The object pointer # @@ -943,7 +943,7 @@ class Build(): ## Build a module or platform # - # Create autogen code and makfile for a module or platform, and the launch + # Create autogen code and makefile for a module or platform, and the launch # "make" command to build it # # @param Target The target of build command -- 2.39.2