Moving feature configuration out of the buildrom scope.
{\rtf1\ansi \deff4\deflang1033{\fonttbl{\f0\froman\fcharset0\fprq2 Tms Rmn{\*\falt Times New Roman};}{\f1\froman\fcharset2\fprq2 Symbol;}{\f2\fswiss\fcharset0\fprq2 Helv{\*\falt Arial};}{\f3\fmodern\fcharset0\fprq1 Courier;}
{\f4\froman\fcharset0\fprq2 Times New Roman;}{\f5\fswiss\fcharset0\fprq2 Arial{\*\falt arial};}{\f6\froman\fcharset0\fprq2 MS Serif;}{\f7\fswiss\fcharset0\fprq2 MS Sans Serif;}{\f8\froman\fcharset0\fprq2 Times;}
{\f9\fswiss\fcharset0\fprq2 Helvetica{\*\falt Arial};}{\f10\fswiss\fcharset0\fprq2 System;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f12\froman\fcharset0\fprq2 New York;}{\f13\fswiss\fcharset0\fprq2 Geneva;}{\f14\fmodern\fcharset0\fprq1 LinePrinter;}
{\f15\froman\fcharset0\fprq2 CG Times;}{\f16\fswiss\fcharset0\fprq2 Univers;}{\f17\fswiss\fcharset0\fprq2 Univers Condensed;}{\f18\fswiss\fcharset0\fprq2 Antique Olive;}{\f19\froman\fcharset0\fprq2 Garamond;}{\f20\fswiss\fcharset0\fprq2 CG Omega;}
{\f21\fswiss\fcharset0\fprq2 Albertus Medium;}{\f22\fswiss\fcharset0\fprq2 Albertus Extra Bold;}{\f23\froman\fcharset0\fprq2 Clarendon Condensed;}{\f24\fscript\fcharset0\fprq2 Coronet;}{\f25\fmodern\fcharset0\fprq1 Letter Gothic;}
{\f26\fscript\fcharset0\fprq2 Marigold;}{\f27\fnil\fcharset2\fprq2 Wingdings;}{\f28\fnil\fcharset2\fprq2 Marlett;}{\f29\fswiss\fcharset238\fprq2 Arial CE{\*\falt arial};}{\f30\fswiss\fcharset204\fprq2 Arial CYR{\*\falt arial};}
{\f31\fswiss\fcharset161\fprq2 Arial Greek{\*\falt arial};}{\f32\fswiss\fcharset162\fprq2 Arial TUR{\*\falt arial};}{\f33\fmodern\fcharset238\fprq1 Courier New CE;}{\f34\fmodern\fcharset204\fprq1 Courier New CYR;}
{\f35\fmodern\fcharset161\fprq1 Courier New Greek;}{\f36\fmodern\fcharset162\fprq1 Courier New TUR;}{\f37\fmodern\fcharset0\fprq1 Lucida Console;}{\f38\fswiss\fcharset0\fprq2 Lucida Sans Unicode;}{\f39\froman\fcharset238\fprq2 Times New Roman CE;}
{\f40\froman\fcharset204\fprq2 Times New Roman CYR;}{\f41\froman\fcharset161\fprq2 Times New Roman Greek;}{\f42\froman\fcharset162\fprq2 Times New Roman TUR;}{\f43\froman\fcharset0\fprq2 Century Schoolbook;}{\f44\fswiss\fcharset0\fprq2 Arial Narrow;}
{\f45\froman\fcharset0\fprq2 Map Symbols;}{\f46\fdecor\fcharset0\fprq2 Algerian;}{\f47\froman\fcharset0\fprq2 Footlight MT Light;}{\f48\froman\fcharset0\fprq2 Book Antiqua;}{\f49\fdecor\fcharset0\fprq2 Colonna MT;}
{\f50\fnil\fcharset2\fprq2 Monotype Sorts;}{\f51\froman\fcharset2\fprq2 MT Extra;}{\f52\froman\fcharset0\fprq2 Bookman Old Style;}{\f53\fdecor\fcharset0\fprq2 Playbill;}{\f54\fscript\fcharset0\fprq2 Brush Script MT;}
{\f55\fswiss\fcharset0\fprq2 Arial Rounded MT Bold;}{\f56\fswiss\fcharset0\fprq2 Haettenschweiler;}{\f57\fdecor\fcharset0\fprq2 Desdemona;}{\f58\fmodern\fcharset2\fprq1 MS LineDraw;}{\f59\froman\fcharset0\fprq2 Wide Latin;}
{\f60\fswiss\fcharset0\fprq2 Century Gothic;}{\f61\fswiss\fcharset0\fprq2 Britannic Bold;}{\f62\fdecor\fcharset0\fprq2 Braggadocio;}{\f63\fscript\fcharset0\fprq2 Matura MT Script Capitals;}{\f64\fdecor\fcharset0\fprq2 Kino MT;}
{\f65\fswiss\fcharset0\fprq2 Arial Black;}{\f66\fscript\fcharset0\fprq2 Comic Sans MS;}{\f67\fswiss\fcharset0\fprq2 Impact;}{\f68\fswiss\fcharset0\fprq2 Verdana;}{\f69\froman\fcharset2\fprq2 Webdings;}{\f70\fmodern\fcharset128\fprq1 MS Gothic;}
{\f71\froman\fcharset255\fprq2 Roman;}{\f72\fscript\fcharset255\fprq2 Script;}{\f73\fmodern\fcharset255\fprq2 Modern;}{\f74\fswiss\fcharset0\fprq1 MS Dialog;}{\f75\fswiss\fcharset0\fprq2 Tahoma;}{\f76\froman\fcharset0\fprq2 Georgia;}
{\f77\fmodern\fcharset0\fprq1 Andale Mono;}{\f78\fscript\fcharset0\fprq2 Monotype Corsiva;}{\f79\froman\fcharset0\fprq2 CG Times (W1){\*\falt Times New Roman};}{\f80\froman\fcharset0\fprq0 Bookman{\*\falt Bookman Old Style};}
{\f81\fnil\fcharset0\fprq2 Prestige;}{\f82\fswiss\fcharset2\fprq2 Sign Language;}{\f83\fswiss\fcharset2\fprq2 Animals;}{\f84\fswiss\fcharset2\fprq2 Charting;}{\f85\fswiss\fcharset2\fprq2 Clocks;}{\f86\fswiss\fcharset2\fprq2 CommonBullets;}
{\f87\fswiss\fcharset2\fprq2 HomePlanning;}{\f88\fswiss\fcharset2\fprq2 Kidnap;}{\f89\fswiss\fcharset2\fprq2 LandscapePlanning;}{\f90\fswiss\fcharset2\fprq2 HomePlanning2;}{\f91\fswiss\fcharset2\fprq2 MorseCode;}{\f92\fswiss\fcharset2\fprq2 Music;}
{\f93\fswiss\fcharset2\fprq2 OfficePlanning;}{\f94\fswiss\fcharset2\fprq2 Semaphore;}{\f95\fswiss\fcharset2\fprq2 Signs;}{\f96\froman\fcharset2\fprq2 ZapfDingbats BT;}{\f97\froman\fcharset2\fprq2 SymbolProp BT;}{\f98\fswiss\fcharset0\fprq2 Futura Md BT;}
{\f99\fswiss\fcharset0\fprq2 CopprplGoth BT;}{\f100\fscript\fcharset0\fprq2 ShelleyAllegro BT;}{\f101\fswiss\fcharset0\fprq2 Bedrock;}{\f102\fswiss\fcharset0\fprq2 Humanst521 BT;}{\f103\fscript\fcharset0\fprq2 Nuptial BT;}
{\f104\fswiss\fcharset0\fprq2 Harpoon;}{\f105\fdecor\fcharset0\fprq2 Shotgun BT;}{\f106\fswiss\fcharset0\fprq2 Futura Bk BT;}{\f107\fswiss\fcharset0\fprq2 Amerigo BT;}{\f108\fswiss\fcharset0\fprq2 BankGothic Md BT;}
{\f109\fdecor\fcharset0\fprq2 BernhardFashion BT;}{\f110\froman\fcharset0\fprq2 ChelthmITC Bk BT;}{\f111\fswiss\fcharset0\fprq2 CopprplGoth Hv BT;}{\f112\fswiss\fcharset0\fprq2 Futura XBlk BT;}{\f113\froman\fcharset0\fprq2 Galliard BT;}
{\f114\froman\fcharset0\fprq2 GeoSlab703 Md BT;}{\f115\froman\fcharset0\fprq2 GeoSlab703 XBd BT;}{\f116\froman\fcharset0\fprq2 GeoSlab703 MdCn BT;}{\f117\fswiss\fcharset0\fprq2 Geometr231 Lt BT;}{\f118\fswiss\fcharset0\fprq2 Geometr231 BT;}
{\f119\fswiss\fcharset0\fprq2 Geometr231 Hv BT;}{\f120\froman\fcharset0\fprq2 Souvenir Lt BT;}{\f121\fswiss\fcharset0\fprq2 ZapfHumnst BT;}{\f122\fswiss\fcharset0\fprq2 Dauphin;}{\f123\fswiss\fcharset2\fprq2 Czar;}
{\f124\fscript\fcharset0\fprq2 Lydian Csv BT;}{\f125\fswiss\fcharset0\fprq2 AvantGarde Bk BT;}{\f126\fswiss\fcharset0\fprq2 AvantGarde Md BT;}{\f127\fnil\fcharset2\fprq2 Linedraw;}{\f128\fmodern\fcharset0\fprq1 Dixonms8;}
{\f129\fmodern\fcharset2\fprq1 HPPCCOB;}{\f130\fmodern\fcharset2\fprq1 HPPCCOBB;}{\f131\fmodern\fcharset2\fprq1 HPPCCOBI;}{\f132\fmodern\fcharset2\fprq1 HPPCCOB2;}{\f133\fnil\fcharset2\fprq2 HPPCDIX;}{\f134\fnil\fcharset2\fprq2 HPPCDIXB;}
{\f135\fnil\fcharset2\fprq2 HPPCDIXI;}{\f136\fnil\fcharset2\fprq2 HPPCDIX2;}{\f137\fnil\fcharset2\fprq2 HPPCDIX HO;}{\f138\fnil\fcharset2\fprq2 HPPCMAR;}{\f139\fnil\fcharset2\fprq2 HPPCMARB;}
{\f140\fnil\fcharset2\fprq2 HPPCMARI{\*\falt Bookman Old Style};}{\f141\fnil\fcharset2\fprq2 HPPCMAR2;}{\f142\fnil\fcharset2\fprq2 Dixon-Tax;}{\f143\fnil\fcharset2\fprq2 Dixon-Tax10;}{\f144\fnil\fcharset2\fprq2 Dixon-Tax-BO;}
{\f145\fnil\fcharset2\fprq2 Dixon-Tax-HO Ho;}{\f146\fmodern\fcharset255\fprq1 Terminal;}{\f147\fmodern\fcharset0\fprq1 Fixedsys;}{\f148\fswiss\fcharset0\fprq2 Small Fonts;}{\f149\fswiss\fcharset0\fprq2 MS Dialog Light;}
{\f150\fswiss\fcharset0\fprq2 MS SystemEx;}{\f151\fswiss\fcharset0\fprq2 PalmSprings;}{\f152\fnil\fcharset0\fprq2 Microsoft Logo;}{\f153\fswiss\fcharset0\fprq2 Helvetica-Narrow;}{\f154\fswiss\fcharset0\fprq2 Univers (W1){\*\falt Arial};}
{\f155\fswiss\fcharset0\fprq0 ;}{\f156\fnil\fcharset0\fprq0 B Helvetica Bold;}{\f157\fmodern\fcharset0\fprq1 Lucida Sans Typewriter;}{\f158\froman\fcharset0\fprq2 CG Times Bold;}{\f159\froman\fcharset0\fprq2 CG Times Italic;}
{\f160\froman\fcharset0\fprq0 (normal text);}{\f161\froman\fcharset0\fprq0 f;}{\f162\froman\fcharset0\fprq2 MicrosoftLogo95;}{\f163\fnil\fcharset2\fprq2 MSIcons;}{\f164\fnil\fcharset0\fprq0 Swis721 BT;}{\f165\fmodern\fcharset0\fprq1 Roman 10cpi;}
{\f166\fnil\fcharset0\fprq0 TmsRmn;}{\f167\froman\fcharset0\fprq2 Palatino{\*\falt Book Antiqua};}{\f168\froman\fcharset0\fprq2 Garamond Antiqua;}{\f169\fnil\fcharset0\fprq0 Courier (W1);}{\f170\fnil\fcharset0\fprq2 McGrawHill;}
{\f171\fnil\fcharset2\fprq2 MS Reference 1;}{\f172\fnil\fcharset2\fprq2 MS Reference 2;}{\f173\fswiss\fcharset0\fprq2 Albertus (W1);}{\f174\fswiss\fcharset0\fprq2 Albertus Xb (W1);}{\f175\fswiss\fcharset0\fprq2 Antique Olv (W1);}
{\f176\fscript\fcharset0\fprq2 Coronet (W1);}{\f177\fmodern\fcharset0\fprq1 Letter Gothic (W1);}{\f178\fswiss\fcharset0\fprq2 Univers Cd (W1);}{\f179\fswiss\fcharset0\fprq2 CG Omega (W1);}{\f180\froman\fcharset0\fprq2 Clarendon Cd (W1);}
{\f181\froman\fcharset0\fprq2 Garmond (W1);}{\f182\fscript\fcharset0\fprq2 Marigold (W1);}{\f183\fswiss\fcharset0\fprq2 Ottawa;}{\f184\fswiss\fcharset2\fprq2 Wingdings (L$);}{\f185\fswiss\fcharset0\fprq2 Arial (W1);}
{\f186\froman\fcharset2\fprq2 Symbol (AS);}{\f187\froman\fcharset0\fprq2 Times New (W1);}{\f188\froman\fcharset0\fprq0 co;}{\f189\fnil\fcharset2\fprq2 GraecaII;}{\f190\fnil\fcharset2\fprq2 HebraicaII;}{\f191\fnil\fcharset2\fprq2 LRS System 1;}
{\f192\fnil\fcharset0\fprq2 LRS System 2;}{\f193\fnil\fcharset0\fprq2 LRS System 3;}{\f194\fnil\fcharset0\fprq2 LRS System 4;}{\f195\fnil\fcharset2\fprq2 SemiticaDict;}{\f196\fnil\fcharset2\fprq2 SILDoulosIPA;}
{\f197\fnil\fcharset2\fprq2 SILManuscriptIPA;}{\f198\fnil\fcharset2\fprq2 SILSophiaIPA;}{\f199\fnil\fcharset2\fprq2 TransRomanAH;}{\f200\fnil\fcharset2\fprq2 TransRomanDict;}{\f201\fswiss\fcharset0\fprq2 Albertus Medium (PCL6);}
{\f202\fswiss\fcharset0\fprq2 Albertus Extra Bold (PCL6);}{\f203\fswiss\fcharset0\fprq2 Arial (PCL6);}{\f204\fswiss\fcharset0\fprq2 ITC Avant Garde Gothic (PCL6);}{\f205\fswiss\fcharset0\fprq2 ITC Avant Garde Gothic Demi (PC;}
{\f206\froman\fcharset0\fprq2 ITC Bookman Light (PCL6);}{\f207\froman\fcharset0\fprq2 ITC Bookman Demi (PCL6);}{\f208\fswiss\fcharset0\fprq2 CG Omega (PCL6);}{\f209\froman\fcharset0\fprq2 CG Times (PCL6);}
{\f210\froman\fcharset0\fprq2 Clarendon Condensed (PCL6);}{\f211\fmodern\fcharset0\fprq1 Courier (PCL6);}{\f212\fmodern\fcharset0\fprq1 CourierPS (PCL6);}{\f213\fmodern\fcharset0\fprq1 Dark Courier (PCL6);}{\f214\froman\fcharset0\fprq2 Garamond (PCL6);}
{\f215\fswiss\fcharset0\fprq2 Helvetica (PCL6);}{\f216\fswiss\fcharset0\fprq2 Helvetica Narrow (PCL6);}{\f217\fmodern\fcharset0\fprq1 Letter Gothic (PCL6);}{\f218\froman\fcharset0\fprq2 New Century Schoolbook (PCL6);}
{\f219\fswiss\fcharset0\fprq2 Antique Olive (PCL6);}{\f220\froman\fcharset0\fprq2 Palatino (PCL6);}{\f221\froman\fcharset0\fprq2 Times (PCL6);}{\f222\froman\fcharset0\fprq2 Times New Roman (PCL6);}{\f223\fswiss\fcharset0\fprq2 Univers (PCL6);}
{\f224\fswiss\fcharset0\fprq2 Univers Condensed (PCL6);}{\f225\fscript\fcharset0\fprq2 Coronet (PCL6);}{\f226\fscript\fcharset0\fprq2 Marigold (PCL6);}{\f227\froman\fcharset2\fprq2 Symbol (PCL6);}{\f228\froman\fcharset2\fprq2 SymbolPS (PCL6);}
{\f229\fdecor\fcharset2\fprq2 Wingdings (PCL6);}{\f230\fscript\fcharset0\fprq2 ITC Zapf Chancery (PCL6);}{\f231\froman\fcharset0\fprq2 Onyx;}{\f232\froman\fcharset0\fprq2 Rockwell Light;}{\f233\fmodern\fcharset0\fprq0 elite;}
{\f234\fswiss\fcharset0\fprq0 lettergothic;}{\f235\fmodern\fcharset0\fprq0 gothicPS;}{\f236\fmodern\fcharset0\fprq0 AvantGarde;}{\f237\fmodern\fcharset0\fprq0 metro;}{\f238\fmodern\fcharset0\fprq0 presentation;}{\f239\fmodern\fcharset0\fprq0 APL;}
{\f240\fmodern\fcharset0\fprq0 OCRA;}{\f241\fmodern\fcharset0\fprq0 OCRB;}{\f242\froman\fcharset0\fprq0 emperorPS;}{\f243\froman\fcharset0\fprq0 madaleine;}{\f244\froman\fcharset0\fprq0 zapf humanist;}{\f245\froman\fcharset0\fprq0 classic;}
{\f246\froman\fcharset0\fprq0 roman f;}{\f247\froman\fcharset0\fprq0 roman g;}{\f248\froman\fcharset0\fprq0 roman h;}{\f249\froman\fcharset0\fprq0 NewCenturySchlbk;}{\f250\froman\fcharset0\fprq0 souvenir;}{\f251\froman\fcharset0\fprq0 caledonia;}
{\f252\froman\fcharset0\fprq0 bodini;}{\f253\froman\fcharset0\fprq0 university;}{\f254\fscript\fcharset0\fprq0 scriptPS;}{\f255\fscript\fcharset0\fprq0 script c;}{\f256\fscript\fcharset0\fprq0 script d;}{\f257\fscript\fcharset0\fprq0 commercial script;}
{\f258\fscript\fcharset0\fprq0 park avenue;}{\f259\fscript\fcharset0\fprq0 script h;}{\f260\fscript\fcharset0\fprq0 greek;}{\f261\froman\fcharset0\fprq0 kana;}{\f262\froman\fcharset0\fprq0 hebrew;}{\f263\froman\fcharset0\fprq0 roman s;}
{\f264\froman\fcharset0\fprq0 russian;}{\f265\froman\fcharset0\fprq0 roman u;}{\f266\froman\fcharset0\fprq0 roman v;}{\f267\froman\fcharset0\fprq0 roman w;}{\f268\fdecor\fcharset0\fprq0 narrator;}{\f269\fdecor\fcharset0\fprq0 emphasis;}
{\f270\fdecor\fcharset0\fprq0 ZapfChancery;}{\f271\fdecor\fcharset0\fprq0 decor d;}{\f272\fdecor\fcharset0\fprq0 old english;}{\f273\fdecor\fcharset0\fprq0 decor f;}{\f274\fdecor\fcharset0\fprq0 decor g;}{\f275\fdecor\fcharset0\fprq0 cooper black;}
{\f276\fnil\fcharset0\fprq0 math7;}{\f277\fnil\fcharset0\fprq0 math8;}{\f278\fdecor\fcharset0\fprq0 ZapfDingbats;}{\f279\fnil\fcharset0\fprq0 EAN;}{\f280\fnil\fcharset0\fprq0 pcline;}{\f281\fnil\fcharset0\fprq0 tech h;}{\f282\froman\fcharset0\fprq0 (;}
{\f283\fnil\fcharset2\fprq2 MS Outlook;}{\f284\fswiss\fcharset2\fprq2 Bookshelf Symbol 1;}{\f285\fnil\fcharset2\fprq2 Bookshelf Symbol 2;}{\f286\froman\fcharset2\fprq2 Bookshelf Symbol 3;}{\f287\froman\fcharset2\fprq2 Wingdings 2;}
{\f288\froman\fcharset2\fprq2 Wingdings 3;}{\f289\fswiss\fcharset0\fprq2 Abadi MT Condensed;}{\f290\froman\fcharset0\fprq2 Tiffany Hv BT;}{\f291\fmodern\fcharset134\fprq1 MS Song;}{\f292\froman\fcharset0\fprq2 Surin;}
{\f293\froman\fcharset0\fprq2 Angsana New;}{\f294\fdecor\fcharset0\fprq2 DAVIC Logo_1;}{\f295\fswiss\fcharset0\fprq2 DAVIC Logo_2;}{\f296\fnil\fcharset0\fprq2 augie;}{\f297\fswiss\fcharset0\fprq2 Trebuchet MS;}
{\f298\fswiss\fcharset0\fprq2 News Gothic MT;}{\f299\fnil\fcharset0\fprq2 Fraktur Plain;}{\f300\fnil\fcharset0\fprq2 Borzoi;}{\f301\fnil\fcharset0\fprq2 Borzoi Bold;}{\f302\fnil\fcharset0\fprq2 Borzoi Italic;}{\f303\fnil\fcharset0\fprq2 B Surfers;}
{\f304\fswiss\fcharset0\fprq2 CAITLYN;}{\f305\fswiss\fcharset0\fprq2 Sage MT;}{\f306\froman\fcharset0\fprq2 Tarragon MT;}{\f307\froman\fcharset0\fprq2 GeoSlab703 Lt BT;}{\f308\froman\fcharset0\fprq2 NewTimes;}{\f309\fswiss\fcharset0\fprq2 SwissA;}
{\f310\froman\fcharset0\fprq2 Dutch801 Rm BT;}{\f311\fnil\fcharset134\fprq2 SwissM;}{\f312\fmodern\fcharset0\fprq1 NewCourier;}{\f313\fmodern\fcharset0\fprq1 Monotype.com;}{\f314\fswiss\fcharset0\fprq2 MetaPlusBold-Roman;}
{\f315\fswiss\fcharset0\fprq2 MetaPlusNormal-Roman;}{\f316\fswiss\fcharset0\fprq2 MetaPlusNormal-Italic;}{\f317\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f318\fswiss\fcharset186\fprq2 Arial Baltic{\*\falt arial};}
{\f319\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f320\fswiss\fcharset238\fprq2 Tahoma CE;}{\f321\fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f322\fswiss\fcharset161\fprq2 Tahoma Greek;}{\f323\fswiss\fcharset162\fprq2 Tahoma Tur;}
{\f324\fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f325\fmodern\fcharset238\fprq1 Lucida Console CE;}{\f326\fmodern\fcharset204\fprq1 Lucida Console Cyr;}{\f327\fmodern\fcharset161\fprq1 Lucida Console Greek;}
{\f328\fmodern\fcharset162\fprq1 Lucida Console Tur;}{\f329\froman\fcharset0\fprq2 Minion Web;}{\f330\froman\fcharset162\fprq0 Times New Roman Turkish;}{\f331\fswiss\fcharset162\fprq0 Arial Turkish;}{\f332\fmodern\fcharset162\fprq0 Courier New Turkish;}
{\f333\froman\fcharset0\fprq2 LeedsBit EuroEast;}{\f334\froman\fcharset0\fprq2 LeedsBit EuroNorth;}{\f335\froman\fcharset0\fprq2 LeedsBit EuroSouth;}{\f336\fswiss\fcharset0\fprq2 LeedsBit EuroWest;}{\f337\froman\fcharset0\fprq2 LeedsBit ExtraChars1;}
{\f338\fnil\fcharset0\fprq2 Cupola;}{\f339\froman\fcharset0\fprq2 Bookman SudEuro;}{\f340\fmodern\fcharset0\fprq1 Courier SudEuro;}{\f341\froman\fcharset0\fprq2 Garamond SudEuro;}{\f342\froman\fcharset0\fprq2 Times SudEuro;}
{\f343\froman\fcharset0\fprq0 + 212 |;}{\f344\fswiss\fcharset0\fprq2 PegasusDialog;}{\f345\froman\fcharset238\fprq2 TIMES CE;}{\f346\froman\fcharset204\fprq2 TIMES Cyr;}{\f347\froman\fcharset161\fprq2 TIMES Greek;}
{\f348\froman\fcharset162\fprq2 TIMES Tur;}{\f349\froman\fcharset186\fprq2 TIMES Baltic;}{\f350\fswiss\fcharset238\fprq2 HELVETICA CE;}{\f351\fswiss\fcharset204\fprq2 HELVETICA Cyr;}{\f352\fswiss\fcharset161\fprq2 HELVETICA Greek;}
{\f353\fswiss\fcharset162\fprq2 HELVETICA Tur;}{\f354\fswiss\fcharset186\fprq2 HELVETICA Baltic;}{\f355\fswiss\fcharset238\fprq2 Lucida Sans Unicode CE;}{\f356\fswiss\fcharset204\fprq2 Lucida Sans Unicode Cyr;}
{\f357\fswiss\fcharset161\fprq2 Lucida Sans Unicode Greek;}{\f358\fswiss\fcharset162\fprq2 Lucida Sans Unicode Tur;}{\f359\fswiss\fcharset238\fprq2 Verdana CE;}{\f360\fswiss\fcharset204\fprq2 Verdana Cyr;}{\f361\fswiss\fcharset161\fprq2 Verdana Greek;}
{\f362\fswiss\fcharset162\fprq2 Verdana Tur;}{\f363\fswiss\fcharset186\fprq2 Verdana Baltic;}{\f364\froman\fcharset238\fprq2 Garamond CE;}{\f365\froman\fcharset204\fprq2 Garamond Cyr;}{\f366\froman\fcharset161\fprq2 Garamond Greek;}
{\f367\froman\fcharset162\fprq2 Garamond Tur;}{\f368\froman\fcharset186\fprq2 Garamond Baltic;}{\f369\fswiss\fcharset238\fprq2 Arial Narrow CE{\*\falt Helvetica-Narrow};}{\f370\fswiss\fcharset204\fprq2 Arial Narrow Cyr{\*\falt Helvetica-Narrow};}
{\f371\fswiss\fcharset161\fprq2 Arial Narrow Greek{\*\falt Helvetica-Narrow};}{\f372\fswiss\fcharset162\fprq2 Arial Narrow Tur{\*\falt Helvetica-Narrow};}{\f373\fswiss\fcharset186\fprq2 Arial Narrow Baltic{\*\falt Helvetica-Narrow};}
{\f374\fswiss\fcharset238\fprq2 Arial Black CE;}{\f375\fswiss\fcharset204\fprq2 Arial Black Cyr;}{\f376\fswiss\fcharset161\fprq2 Arial Black Greek;}{\f377\fswiss\fcharset162\fprq2 Arial Black Tur;}{\f378\fswiss\fcharset186\fprq2 Arial Black Baltic;}
{\f379\froman\fcharset238\fprq2 Bookman Old Style CE;}{\f380\froman\fcharset204\fprq2 Bookman Old Style Cyr;}{\f381\froman\fcharset161\fprq2 Bookman Old Style Greek;}{\f382\froman\fcharset162\fprq2 Bookman Old Style Tur;}
{\f383\froman\fcharset186\fprq2 Bookman Old Style Baltic;}{\f384\fswiss\fcharset238\fprq2 Impact CE;}{\f385\fswiss\fcharset204\fprq2 Impact Cyr;}{\f386\fswiss\fcharset161\fprq2 Impact Greek;}{\f387\fswiss\fcharset162\fprq2 Impact Tur;}
{\f388\fswiss\fcharset186\fprq2 Impact Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;
\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\widctlpar \f4\fs20\lang2057 \snext0 Normal;}{
\s1\sb360\sa240\keepn\pagebb\widctlpar \b\f5\fs40\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\keepn\widctlpar\brdrt\brdrth\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs34\lang2057 \sbasedon0\snext0 heading 2;}{\s3\sb120\keepn\widctlpar\brdrt
\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 heading 4;}{\s5\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0
heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{
\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536\tx5103\tx5670 \f37\fs16\lang2057 \sbasedon0\snext15
Code Paragraph;}{\*\cs16 \additive\f37\lang2057 \sbasedon10 Code;}{\*\cs17 \additive\i \sbasedon10 Emphasis;}{\*\cs18 \additive\b \sbasedon10 Warning;}{\s19\li567\keep\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536 \f37\fs20\lang1024
\sbasedon0\snext19 Indented Code;}{\s20\fi-284\li568\ri567\widctlpar{\*\pn \pnlvl11\ulth\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f4\fs20\lang2057 \sbasedon21\snext20 List Bullet;}{\s21\fi-284\li851\ri567\widctlpar \f4\fs20\lang2057
\sbasedon0\snext21 List;}{\s22\li567\ri567\widctlpar \f4\fs20\lang2057 \sbasedon0\snext22 List Continue;}{\s23\fi-284\li568\ri567\widctlpar{\*\pn \pnlvl10\pndec\ulth\pnstart1\pnindent283\pnhang{\pntxta .}}\f4\fs20\lang2057 \sbasedon21\snext23
List Number;}{\s24\qc\widctlpar \f4\fs20\lang2057 \sbasedon0\snext24 Picture;}{\s25\qc\sb240\sa240\widctlpar \b\f5\fs72\lang2057 \sbasedon0\snext25 Title;}{\s26\widctlpar\phmrg\posxr\posyt\dxfrtext181\dfrmtxtx181\dfrmtxty0 \f4\fs20\lang2057
\sbasedon0\snext26 Logo;}{\s27\sb1440\sa1200\sl-460\slmult0\widctlpar \b\scaps\f5\fs40\lang2057 \sbasedon0\snext27 Subtitle;}{\s28\sl-200\slmult0\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext28 Version;}{\s29\widctlpar \f4\fs20\lang2057
\sbasedon0\snext29 Date Published;}{\s30\widctlpar \b\f4\fs20\lang2057 \sbasedon0\snext30 Copyright Header;}{\s31\widctlpar \f4\fs20\lang2057 \sbasedon0\snext31 Copyright Notice;}{\s32\sa1440\sl-960\slmult0\keepn\widctlpar \b\scaps\f5\fs40\lang2057
\sbasedon0\snext32 TOC Header;}{\s33\sb480\sa160\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f4\fs20\lang2057 \sbasedon0\snext0 toc 1;}{\s34\li221\sb120\keepn\widctlpar\tqr\tx9072 \f4\fs20\lang2057 \sbasedon0\snext0 toc 2;}{
\s35\li442\widctlpar\tqr\tx9072 \f5\fs20\lang2057 \sbasedon0\snext0 toc 3;}{\s36\li658\widctlpar\tqr\tx9072 \f4\fs20\lang2057 \sbasedon0\snext0 toc 4;}{\*\cs37 \additive\f5\uld\cf11 \sbasedon10 Hypertext Link;}{\s38\widctlpar\brdrr\brdrdb\brdrw15\brsp20
\f37\fs20\lang2057 \sbasedon0\snext38 Constant Definition;}{\s39\widctlpar\tqc\tx4536\tqr\tx9072 \f4\fs18\lang2057 \sbasedon0\snext39 header;}{\s40\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqc\tx4536\tqr\tx9072 \f4\fs20\lang2057 \sbasedon0\snext40
Even Footer Paragraph;}{\s41\widctlpar\tqc\tx4536\tqr\tx9072 \caps\f4\fs18\lang2057 \sbasedon0\snext41 Even Header Paragraph;}{\s42\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqc\tx4536\tqr\tx9072 \f4\fs18\lang2057 \sbasedon39\snext42 footer;}{\*\cs43
\additive\b \sbasedon10 page number;}{\s44\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqc\tx4536\tqr\tx9072 \f4\fs20\lang2057 \sbasedon0\snext44 Odd Footer Paragraph;}{\s45\widctlpar\tqc\tx4536\tqr\tx9072 \caps\f4\fs18\lang2057 \sbasedon0\snext45
Odd Header Paragraph;}{\s46\widctlpar\brdrl\brdrth\brdrw30\brsp80 \f4\fs20\lang2057 \sbasedon0\snext46 Status;}{\*\cs47 \additive\i \sbasedon10 Glossary Reference;}{\s48\widctlpar \f4\fs20\lang2057 \sbasedon0\snext48 Compact;}{\*\cs49 \additive\f5
\sbasedon10 App Text;}{\s50\sb240\sa240\keepn\widctlpar \b\f5\fs40\lang2057\kerning28 \sbasedon1\snext50 Heading 1 NoSection;}{\*\cs51 \additive\f5 \sbasedon10 Filename;}{\s52\fi-284\li1135\ri1134\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang
{\pntxtb \'b7}}\f4\fs20\lang2057 \sbasedon0\snext52 List Bullet 2;}{\*\cs53 \additive\b \sbasedon10 Glossary Definition;}{\*\cs54 \additive\i \sbasedon10 Document Name;}{
\s55\keep\keepn\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536\tx5103\tx5670 \f37\fs20\lang2057 \sbasedon0\snext0 Prototype;}{\*\cs56 \additive\scaps \sbasedon10 Key Name;}{
\s57\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536\tx5103\tx5670 \f37\fs16\lang2057 \sbasedon0\snext57 Reduced Code;}{\s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057
\sbasedon0\snext0 Syntax;}{\s59\qc\sb240\sa240\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext59 Picture Title;}{\s60\fi-3119\li3119\widctlpar\tx3119 \f4\fs20\lang2057 \sbasedon0\snext60 Member List;}{\*\cs61 \additive\i \sbasedon10 Syntax Element;}
{\*\cs62 \additive\b\f37 \sbasedon10 Syntax Literal;}{\s63\widctlpar \f4\fs20\lang2057 \sbasedon0\snext63 annotation text;}{\*\cs64 \additive\b\f5\uld\cf11 \sbasedon10 Example Link;}{\s65\widctlpar \b\f5\fs36\lang2057 \sbasedon0\snext65 TOC 0;}{\*\cs66
\additive\f37\cf2\lang2057 \sbasedon16 Resource Code;}{\s67\widctlpar \f5\fs20\cf6\lang2057 \sbasedon0\snext67 Converter Directive;}{\s68\widctlpar \b\f37\fs20\uldb\lang2057 \sbasedon0\snext0 Platform Dependency;}{\*\cs69 \additive\b\cf10 \sbasedon10
Raw HTML;}{\*\cs70 \additive\i\cf14 \sbasedon10 URL Reference;}{\s71\widctlpar \f5\fs20\ul\cf13\lang2057 \sbasedon0\snext0 Hypertext Anchor;}{\s72\widctlpar\brdrr\brdrs\brdrw45\brsp20 \f4\fs20\lang2057 \sbasedon0\snext72 Member Definition;}{
\s73\li567\ri567\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 \sbasedon0\snext73 Figure Picture;}{\s74\widctlpar\brdrl\brdrth\brdrw30\brsp80 \f4\fs20\cf5\lang2057 \sbasedon46\snext74 Comment;}{
\s75\li567\ri567\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \b\f4\fs20\lang2057 \sbasedon0\snext75 Figure Caption;}{\s76\li567\ri567\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057
\sbasedon0\snext76 Figure Description;}{\s77\li567\ri567\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\cf6\lang2057 \sbasedon73\snext77 Figure Status;}{\s78\li567\ri567\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb
\brdrs\brdrw15\brsp20 \f5\fs20\ul\cf13\lang2057 \sbasedon0\snext78 Figure Anchor;}{\*\cs79 \additive\f5\uld\cf12 \sbasedon37 Figure Link;}{\s80\li567\ri567\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \i\f4\fs20\cf10\lang2057
\sbasedon73\snext80 Figure Directive;}{\s81\widctlpar \f4\fs20\lang2057 \sbasedon0\snext81 Body Text;}{\*\cs82 \additive\f5\uld\cf9 \sbasedon37 Hypertext Link Text;}{\*\cs83 \additive\caps\f3\fs24\uld\cf2 \sbasedon10 Feature List;}{\*\cs84 \additive
\caps\f3\fs24\uld\cf2 \sbasedon10 Feature Level;}}{\info{\title Tools}{\subject Specifying projects with makmake}{\author Preferred Customer}{\operator Preferred Customer}{\creatim\yr1996\mo3\dy6\hr13\min48}{\revtim\yr2000\mo3\dy15\hr11\min26}
{\printim\yr1999\mo9\dy2\hr16\min51}{\version2}{\edmins3}{\nofpages11}{\nofwords5150}{\nofchars29356}{\*\company Symbian Ltd}{\vern57395}}\paperw11907\paperh16840\margl851\margr851\margt1134\margb1134\gutter1134
\widowctrl\ftnbj\aenddoc\linkstyles\hyphcaps0\formshade \fet0\sectd \binfsxn1\binsxn1\psz9\linex576\headery709\footery709\colsx709\endnhere {\header \pard\plain \s39\widctlpar\tqc\tx4536\tqr\tx9072 \f4\fs18\lang2057 {\field{\*\fldinst TITLE \\
* MERGEFORMAT }{\fldrslt Tools}}\tab Company Confidential\tab EON SDK, Copyright \'a9 1996, Symbian Ltd
\par }{\footer \pard\plain \s42\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqc\tx4536\tqr\tx9072 \f4\fs18\lang2057 {\field{\*\fldinst SUBJECT \\* MERGEFORMAT }{\fldrslt Specifying projects with makmake}}\tab Page {\field{\*\fldinst PAGE \\* MERGEFORMAT
}{\fldrslt {\lang1024 4}}}\tab Last saved {\field{\*\fldinst SAVEDATE \\* MERGEFORMAT }{\fldrslt {\lang1024 25/02/00 12:37}}}
\par }{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5
\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang
{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s1\sb360\sa240\keepn\pagebb\widctlpar \b\f5\fs40\lang2057\kerning28 {\field\flddirty{\*\fldinst SUBJECT \\* MERGEFORMAT }{\fldrslt
Specifying projects with makmake}}
\par \pard\plain \s71\widctlpar \f5\fs20\ul\cf13\lang2057 tools.makmake
\par \pard\plain \s67\widctlpar \f5\fs20\cf6\lang2057 doclevel v6
\par \pard\plain \s74\widctlpar\brdrl\brdrth\brdrw30\brsp80 \f4\fs20\cf5\lang2057 this chapter documents {\cs51\f5 makmake} to e32toolp release 210 level.
\par \pard\plain \s2\sb120\keepn\widctlpar\brdrt\brdrth\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs34\lang2057 Overview
\par \pard\plain \widctlpar \f4\fs20\lang2057 EPOC projects are defined by an {\cs51\f5 .mmp} file which specifies the essential components of the project. The {\cs51\f5 makmake}
tool is used to build makefiles for use in various environments. These makefiles are then used for project development. Some makefiles are built for use in building the project from the command-line, while others are for use with the MSVC++ IDE. For inst
ance, starting with {\cs51\f5 euhello.mmp}, you can do:
\par \pard\plain \s19\li567\keep\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536 \f37\fs20\lang1024 makmake euhello wins
\par \pard\plain \widctlpar \f4\fs20\lang2057 to build the makefile file {\cs51\f5 euhello.wins}.
\par You can now run:
\par \pard\plain \s19\li567\keep\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536 \f37\fs20\lang1024 nmake -f euhello.wins
\par \pard\plain \widctlpar \f4\fs20\lang2057 to build the project from the command line.
\par To build the {\cs51\f5 .dsp} and {\cs51\f5 .dsw} files, designed for the Microsoft Developer Studio (Visual C++ 6.0), you can do:
\par \pard\plain \s19\li567\keep\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536 \f37\fs20\lang1024 makmake euhello vc6
\par \pard\plain \widctlpar \f4\fs20\lang2057 For the ARM environment, you can do:
\par \pard\plain \s19\li567\keep\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536 \f37\fs20\lang1024 makmake euhello armi\line nmake -f euhello.armi
\par \pard\plain \widctlpar \f4\fs20\lang2057 to build the project from the command line (there is no IDE for ARM).
\par A command line makefile produced by {\cs51\f5 makmake} allows the executable (an {\cs51\f5 .exe} or any type of DLL) to be produced in one of two variants:
\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s20\fi-284\li568\ri567\widctlpar{\*\pn \pnlvlblt\ulth\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f4\fs20\lang2057 {\cs51\f5 udeb} - wide (UNICODE), debug mode
\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs51\f5 urel} - wide (UNICODE), release mode
\par \pard\plain \widctlpar \f4\fs20\lang2057 which may be selected by specifying the variant as a target. For instance, to build the {\cs51\f5 udeb} variant of the executable, you can do:
\par \pard\plain \s19\li567\keep\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536 \f37\fs20\lang1024 nmake -f euhello.armi udeb
\par \pard\plain \widctlpar \f4\fs20\lang2057 The default for ARM is wide, release mode; the default for WINS and WINC is wide, debug mode. These default targets will be built if {\cs51\f5 nmake} is invoked with no target is specified.
\par If you build the executable using the MSVC++ IDE makefile, you may also need to run tools such as the bitmap and application information compilers, to build other aspects of the project. Command line makefiles will invoke these tools for you.
\par On the {\cs51\f5 makmake} command line, you may use path specifications to locate the {\cs51\f5 .mmp} file in any directory, eg
\par \pard\plain \s19\li567\keep\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536 \f37\fs20\lang1024 makmake ..\\..\\epoc32ex\\e32\\euhello armi
\par \pard\plain \widctlpar \f4\fs20\lang2057 The generated {\cs51\f5 .dsw} and {\cs51\f5 .dsp} files are, however, always written into the current directory.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Invocation syntax
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs62\b\f37 makmake} [ {\cs61\i options} ] [{\cs61\i source-path}]{\cs61\i project} {\cs61\i platform}
\par {\cs61\i platform}{\cs61 :\line \tab }{\cs62\b\f37 wins}{\cs61 | }{\cs62\b\f37 winc}{\cs61 | }{\cs62\b\f37 armi}{\cs61 | }{\cs62\b\f37 arm4}{\cs61 | }{\cs62\b\f37 thumb}{\cs61 | }{\cs62\b\f37 vc6}{\cs61 | }{\cs62\b\f37 vc6winc}{\cs61 | }{
\cs62\b\f37 tools}{\cs61 | }{\cs62\b\f37 vc6tools}{\cs61
\par
\par }{\cs61\i options} :\line \tab {\cs62\b\f37 -d\line }\tab {\cs62\b\f37 -v\line }\tab {\cs62\b\f37 -mmp\line \tab -plat
\par }\pard\plain \widctlpar \f4\fs20\lang2057
\par where
\par \trowd \trgaph108\trleft-108 \cellx2268\cellx9179 \pard \widctlpar\intbl {\cs61\i project}\cell is the project to be specified\cell \pard \widctlpar\intbl \row \trowd \trgaph108\trleft-108 \cellx2268\cellx9179 \pard \widctlpar\intbl {\cs61\i source-path
\cell }specifies the path of the source {\cs51\f5 .mmp} file, relative to the current directory.
\par If omitted, the source {\cs51\f5 .mmp} file is {\cs61\i project}{\cs51\f5 .mmp} in the current directory.
\par Whether or not the {\cs61\i source-path} is specified, the generated makefile is always written in the current directory.\cell \pard \widctlpar\intbl \row \pard \widctlpar\intbl {\cs61\i Platform}\cell is the target platform\cell \pard \widctlpar\intbl
\row \pard \widctlpar\intbl {\cs62\b\f37 -d\cell }indicates that the makefile is to be created in directory {\cs51\f5 \\EPOC32\\Build\\}{\cs51\i\f5 path_to_mmp_file\\mmp_basename\\}{\cs61\i platform} rather than the directory in which {\cs51\f5 makmake}
was invoked. Note that relative paths within the created makefile will be relative to the directory in which {\cs51\f5 makmake} was invoked so {\cs51\f5 nmake} should be invoked from that directory too if the project is to build correctly.\cell \pard
\widctlpar\intbl \row \pard \widctlpar\intbl {\cs62\b\f37 -v}{\cs61\i \cell }indicates verbose operation
\par When this flag is specified, {\cs51\f5 makmake} prints many progress messages. The default is to give error messages only.\cell \pard \widctlpar\intbl \row \pard \widctlpar\intbl {\cs62\b\f37 -mmp
\par \cell }Provides basic syntax guide to writing {\cs51\f5 .mmp} files instead of making the makefile.\cell \pard \widctlpar\intbl \row \trowd \trgaph108\trleft-108 \cellx2268\cellx9179 \pard \widctlpar\intbl {\cs62\b\f37 -plat }{\cs61\i platform}{
\cs62\b\f37
\par \cell }Provides syntax guide to writing platform-specific sections of {\cs51\f5 .mmp} files, and information about which macros are defined for preprocessing the {\cs51\f5 .mmp} files.\cell \pard \widctlpar\intbl \row \pard \widctlpar
\par Normally, {\cs51\f5 makmake} generates a makefile whose extension depends on the platform:
\par {\pntext\pard\plain\cs51\f1\fs20\lang2057 \'b7\tab}\pard\plain \s20\fi-284\li568\ri567\widctlpar{\*\pn \pnlvlblt\ulth\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f4\fs20\lang2057 for {\cs62\b\f37 wins}, the extension is {\cs51\f5 .wins}{\cs51
\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}for {\cs62\b\f37 winc}, the extension is {\cs51\f5 .winc}
\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}for {\cs62\b\f37 armi}, the extension is {\cs51\f5 .armi}
\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}for {\cs62\b\f37 vc6} and {\cs62\b\f37 vc6winc}, the extension is {\cs51\f5 .dsp}
\par \pard\plain \widctlpar \f4\fs20\lang2057 Generally, the makefile extension is the platform name preceded by a dot.
\par Projects can be built for ARM platform in three flavours, ARMI, ARM4 and THUMB. These three flavours are termed \ldblquote Application Binary Interfaces\rdblquote
, or ABIs for short. ARMI is the ARM interworking ABI, ARM4 is the plain ARM ABI and THUMB is the ARM thumb ABI. Projects built for ARMI
can work with projects built in any of the three ABIs, while projects built for ARM4 and THUMB can only work with projects built for the same ABI or ARMI. Projects built for THUMB use a different mode of ARM4 processing, where the processor handles inst
ructions of 16 bits rather than 32 bits in length from a separate instruction set.
\par \pard\plain \s74\widctlpar\brdrl\brdrth\brdrw30\brsp80 \f4\fs20\cf5\lang2057 really all this needs to be explained in more detail somewhere else - and a link to that section introduced here.
\par \pard\plain \s2\sb120\keepn\widctlpar\brdrt\brdrth\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs34\lang2057 Structure of project definition files
\par \pard\plain \widctlpar \f4\fs20\lang2057 A {\cs51\f5 makmake} project definition file has extension {\cs51\f5 .mmp} and has the form
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i wholefile} :\line \tab {\cs61\i statement-list}
\par {\cs61\i statement} :\line |\tab {\cs61\i aif-stmt}\line |\tab {\cs61\i asspabi-stmt}\line |\tab {\cs61\i asspexports-stmt}\line |\tab {\cs61\i assplibrary-stmt}\line |\tab {\cs61\i bitmap-section}\line |\tab {\cs61\i deffile-stmt}\line |\tab {\i document
}{\cs61\i -stmt}\line |\tab {\i epocalldllentrypoints}{\cs61\i -stmt}\line |\tab {\i epocheapsize}{\cs61\i -stmt}\line |\tab {\i epocprocesspriority}{\cs61\i -stmt}\line |\tab {\i epocstacksize}{\cs61\i -stmt}\line |\tab {\i exportunfrozen}\line |\tab {
\cs61\i lang-stmt}\line |\tab {\cs61\i library-stmt}\line |\tab {\cs61\i linkas-stmt}\line |\tab {\cs61\i macro-stmt}\line |\tab {\cs61\i nostrictdef-stmt}\line |\tab {\cs61\i resource-stmt}\line |\tab {\cs61\i source-stmt}\line |\tab {\cs61\i
sourcepath-stmt}\line |\tab {\cs61\i staticlibrary-stmt}\line |\tab {\cs61\i strictdepend-stmt}\line |\tab {\cs61\i systeminclude-stmt}\line |\tab {\cs61\i systemresource-stmt}\line |\tab {\cs61\i target-stmt}\line |\tab {\cs61\i target-path-stmt}\line |
\tab {\cs61\i target-type-stmt}\line {\cs61 |}{\cs61\i \tab uid-stmt}\line |\tab {\cs61\i userinclude-stmt}\line |\tab {\cs61\i platform-specific-section}
\par \pard\plain \widctlpar \f4\fs20\lang2057 Each statement occupies a single line.
\par {\b Note:} a trailing backslash is used to indicate a line continuation. Therefore, specify directories without their trailing backslash, eg {\cs49\f5 systeminclude \\epoc32\\include}, rather than {\cs49\f5 systeminclude \\epoc32\\include\\}.
\par Use the C++ style comment syntax for comments.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying the target
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 target} statement to specify the file generated by the project.
\par Use the {\cs62\b\f37 targettype} statement to specify the kind of project:
\par Use the {\cs62\b\f37 targetpath} statement to specify where the project should be released.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i target-stmt} :\line \tab {\cs62\b\f37 target} {\cs61\i filename}{\cs62\b\f37 .}{\cs61\i ext}
\par {\cs61\i targettype-stmt} :\line \tab {\cs62\b\f37 targettype} {\cs61\i target-type}
\par {\cs61\i target-type} :\line \tab {\cs62\b\f37 app} | {\cs62\b\f37 dll} |{\cs62\b\f37 exe} | {\cs62\b\f37 exedll }| {\cs62\b\f37 fsy }| {\cs62\b\f37 ldd }| {\cs62\b\f37 pdd }| {\cs62\b\f37 epocexe }| {\cs62\b\f37 lib }| {\cs62\b\f37 ani }| {\cs62\b\f37
ctl }| {\cs62\b\f37 fep }| {\cs62\b\f37 mda }| {\cs62\b\f37 mdl }| {\cs62\b\f37 opx }| {\cs62\b\f37 pdl }| {\cs62\b\f37 rdl}
\par {\cs61\i target-path-stmt} :\line \tab {\cs62\b\f37 targetpath} {\cs61\i target-path}
\par \pard\plain \widctlpar \f4\fs20\lang2057 For the target, specify only the filename with its extension. The path for the released target will be chosen depending on the platform, variant, and release path:
\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s20\fi-284\li568\ri567\widctlpar{\*\pn \pnlvlblt\ulth\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f4\fs20\lang2057
for non-Win32 platforms, or for Win32 platforms when no release path is specified, the target will be released to {\cs51\f5 \\epoc32\\release\\}{\cs61\i platform}{\cs51\f5 \\}{\cs61\i variant}{\cs51\f5 \\}
\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}for Win32 platforms, when a target path is specified, that path will be interpreted as a location on the {\cs51\f5 z:} drive, and the release path will therefore be {\cs51\f5 \\epoc32\\release\\}{\cs61\i
platform}{\cs51\f5 \\}{\cs61\i variant}{\cs51\f5 \\z\\}{\cs61\i target-path}{\cs51\f5 \\}
\par \pard\plain \widctlpar \f4\fs20\lang2057 {\cs51\f5 makmake} supports the following target types:
\par \trowd \trgaph108\trleft-108 \cellx993\cellx6309 \pard \widctlpar\intbl {\cs62\b\f37 exe}\cell an executable program.
\par For an example, see {\cs37\f5\uld\cf11 introbld.exe-example.mmp}.\cell \pard \widctlpar\intbl \row \trowd \trgaph108\trleft-108 \cellx993\cellx6309 \pard \widctlpar\intbl {\cs62\b\f37 dll}\cell a DLL\~\emdash
either a shared library, or a polymorphic interface.
\par For an example, see {\cs37\f5\uld\cf11 introbld.dll}.\cell \pard \widctlpar\intbl \row \pard \widctlpar\intbl {\cs62\b\f37 app\cell }an EIKON application\~\emdash linked with the {\cs16\f37 NewApplication()}
function exported as ordinal 1. For an example, see {\cs37\f5\uld\cf11 introbld.eikon-example}.\cell \pard \widctlpar\intbl \row \pard \widctlpar\intbl {\cs62\b\f37 exedll}\cell an executable program for a multi-process platform, a DLL\~
for a single-process platform.
\par For an example, see {\cs37\f5\uld\cf11 introbld.eikon-exedll}.\cell \pard \widctlpar\intbl \row \pard \widctlpar\intbl {\cs62\b\f37 ldd}\cell a logical device driver.\cell \pard \widctlpar\intbl \row \pard \widctlpar\intbl {\cs62\b\f37 pdd}\cell
a physical device driver.\cell \pard \widctlpar\intbl \row \pard \widctlpar\intbl {\cs62\b\f37 Epocexe}\cell
an EPOC executable that can be launched from the shell. This is an executable program which exports no functions under a multi-process platform and a DLL which is linked with the {\f37 TInt WinsMain()}
function exported as ordinal 1 under a single-process platform.\cell \pard \widctlpar\intbl \row \pard \widctlpar\intbl {\cs62\b\f37 lib}\cell a static library.\cell \pard \widctlpar\intbl \row \pard \widctlpar\intbl {\cs62\b\f37 ani}\cell
an animation DLL.\cell \pard \widctlpar\intbl \row \pard \widctlpar\intbl {\cs62\b\f37 ctl}\cell a system control.\cell \pard \widctlpar\intbl \row \pard \widctlpar\intbl {\cs62\b\f37 fep}\cell a front-end processor.\cell \pard \widctlpar\intbl \row
\pard \widctlpar\intbl {\cs62\b\f37 mda}\cell a media-server plug-in DLL.\cell \pard \widctlpar\intbl \row \pard \widctlpar\intbl {\cs62\b\f37 mdl}\cell a mime recognizer.\cell \pard \widctlpar\intbl \row \pard \widctlpar\intbl {\cs62\b\f37 opx}\cell
an OPL extension.\cell \pard \widctlpar\intbl \row \pard \widctlpar\intbl {\cs62\b\f37 pdl}\cell a printer driver.\cell \pard \widctlpar\intbl \row \trowd \trgaph108\trleft-108 \cellx993\cellx6309 \pard \widctlpar\intbl {\cs62\b\f37 rdl}\cell
a recognizer.\cell \pard \widctlpar\intbl \row \pard\plain \s3\fi-9072\li9072\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying UIDs
\par \pard\plain \s71\widctlpar \f5\fs20\ul\cf13\lang2057 tools.makmake.uids
\par \pard\plain \s21\fi-284\li851\ri567\widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 uid} statement to specify the UIDs for a project.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i uid-stmt} :\line \tab {\cs62\b\f37 uid} {\cs61\i uid2} [{\cs61\i uid3} ]
\par \pard\plain \widctlpar \f4\fs20\lang2057 Each executable has three UIDs. The first is dictated by the target type of the project (whether a {\cs51\f5 .exe} or DLL). The second and third are optional. You specify only the second and, optio
nally, the third UID with the {\cs61\i uid-stmt}.
\par Under WINS, a separate source file is created with the generated makefile containing code to incorporate UIDs into the executable. The name of this file is created by taking the basename of the executable and adding the extension {\cs51\f5 .uid.cpp}
. UIDs may be specified in either hex or decimal.
\par The {\cs61\i uid-stmt} applies exclusively to UNICODE builds of source now that NARROW builds are no longer supported by Makmake.
\par See also {\cs37\f5\uld\cf11 introbld.uids} in Programming EPOC\~ | \~The Build Environment.
\par \pard\plain \s4\sb120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 Static interface DLLs
\par \pard\plain \widctlpar \f4\fs20\lang2057 A static interface DLL represents an interface which is defined to its clients by one or more headers for use at compile time, and an import library ({\cs51\f5 .lib}
) for use at link time. Then, when a client executable is loaded at run-time, the loader notes that it requires the static interface DLL to be available. The loader either loads the DLL or, if it is loaded already, attaches the new client to it.
\par Conventionally, the DLL is identified by name only. In EPOC, all static interface DLLs must have a {\cs61\i uid2} of {\cs16\f37 0x1000008d}. The particular static interface DLL is then identified by name {\i and by }{\cs61\i uid3}. If a DLL called {
\cs51\f5 bossview.dll} is built with {\cs61\i uid3}={\cs16\f37 0x10000252}, then the name used in the import library for non-Win32 builds of EPOC is {\cs51\f5 bossview[10000252]}. The EPOC loader loads the {\cs51\f5 bossview.dll}
, and checks that its UID is {\cs16\f37 0x10000252}. If the {\cs61\i uid3} in the DLL does not match, then the load fails.
\par \pard\plain \s4\sb120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 Polymorphic DLLs
\par \pard\plain \widctlpar \f4\fs20\lang2057 A polymorphic DLL represents an interface defined with a gate function and an abstract class with at least one virtual function. The polymorphic DLL exports the gate function at ordinal 1, which ty
pically constructs a concrete class derived from the abstract interface. The virtual function is then called, and the functions of the class are available. Examples of polymorphic DLLs in EPOC include device drivers, EIKON application programs, and many
more.
\par Each type of interface should specify its own UID, which is used as {\cs61\i uid2} for the polymorphic DLL. The function responsible for loading a polymorphic DLL (for example, the EIKON {\cs51\f5 apprun}
program, or the E32 kernel) should check that its {\cs61\i uid2} corresponds with the expected interface type.
\par For polymorphic DLLs, the interpretation of {\cs61\i uid3} depends on the interface type. {\cs61\i uid3} may not be required by all interfaces. The application architecture mandates that {\cs61\i uid3} identify the particular application: the {\cs61\i
uid3} is used to relate an application program to its document files.
\par Since polymorphic DLLs do not produce an import library ({\cs51\f5 .lib}), the name mangling scheme used by static interface libraries is not used by polymorphic DLLs.
\par \pard\plain \s4\sb120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 UIDs and Win32
\par \pard\plain \widctlpar \f4\fs20\lang2057 The makefiles automa
tically generate UIDs for ARM executables, as part of the executable format. For Win32 executables, this is not directly possible. The source for such executables must contain the UIDs, and they must match with the UIDs specified in the project file.
\par Under WINS, UIDs are specified using syntax such as:
\par \pard\plain \s19\li567\keep\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536 \f37\fs20\lang1024 #pragma data_seg(\ldblquote .E32_UID\rdblquote )\line __WINS_UID(0x10000079,0x1000006c,0x10000253)\line #pragma data_seg()
\par \pard\plain \widctlpar \f4\fs20\lang2057 This is only necessary for polymorphic DLLs\~\emdash
the Win32 loader does not check the UIDs of static interface DLLs. Source files containing the UID syntax are created automatically for Win32 executables when the makefile is created.
\par \pard\plain \s3\fi-9072\li9072\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying directories
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 sourcepath} statement to define the location of the project and its workfiles.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i sourcepath-stmt} :\line \tab {\cs62\b\f37 sourcepath} {\cs61\i sourcepath}
\par \pard\plain \widctlpar \f4\fs20\lang2057 The {\cs61\i sourcepath} should correspond to the directory containing the source files for the project specified after the {\i sourcepath} statement. If the {\cs61\i sourcepath} begins with a backslash
then this directory will be considered an absolute source path, otherwise the directory will be treated as relative to the directory containing the {\cs51\f5 .mmp} file. Multiple {\i sourcepath }statements may be specified, but note that {\cs51\f5
makmake} will expect subsequent source and resource file statements to relate to the last previous {\i sourcepath} statement, or the directory containing the {\cs51\f5 .mmp} file if no {\i sourcepath} statement has yet been specified.
\par Temporary files will be built into directory {\cs51\f5 \\epoc32\\build\\}{\cs61\i path_to_mmp_file\\mmp_basename\\platform}{\cs51\f5 \\}{\cs61\i variant}{\cs51\f5 \\}.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying source files
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 source} statement to specify source files.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i source-stmt} :\line \tab {\cs62\b\f37 source} {\cs61\i source-file-list}
\par \pard\plain \widctlpar \f4\fs20\lang2057 Each {\cs62\b\f37 source} statement may specify an arbitrary number of source files. Each source file should be specified including its extension, eg {\cs51\f5 euhello.cpp}. There may be an arbitrary number of {
\cs62\b\f37 source} statements in the project description file relative to each subproject.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying document files
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 document} statement to specify source files.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i document-stmt} :\line \tab {\cs62\b\f37 document} {\cs61\i document-file-list}
\par \pard\plain \widctlpar \f4\fs20\lang2057 Each {\cs62\b\f37 document} statement may specify an arbitrary number of document files. There may be an arbitrary number of {\cs62\b\f37 document}
statements in the project description file relative to each subproject. This keyword is only used in the creation of IDE makefiles, where it can be useful for specifying files so that they are available for editing within the IDE but do not play a part
in building the executable.
\par The .{\f5 mmp} file is incorporated in the MSVC6 IDE by default, and the MSVC6 workspace can be regenerated using {\f5 makmake} once the .{\f5 mmp}
file has been changed without the need to close the workspace first. To create a custom tool to do this in the IDE, Select Tools - Customise \'85 - Tools. In the dialog, choose an appropriate name for the tool, e.g. \ldblquote recreate workspace
\rdblquote , and type \ldblquote nmake.exe\rdblquote as the command and \ldblquote -nologo -f $(WkspDir)\\$(WkspName).sup.make recreateworkspace\rdblquote as the program arguments. Leave the \ldblquote initial directory\rdblquote
field blank, and tick the \ldblquote Close window on exiting\rdblquote checkbox. Having edited the .MMP file for a project, select the new tool from the tools menu to recreate the workspace. You will then be prompted to reload the new workspace.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying resource files
\par \pard\plain \widctlpar \f4\fs20\lang2057 If your project has a resource file, specify it using the {\cs62\b\f37 resource} statement. If it is a system project rather than an application, use the {\cs62\b\f37 systemresource} statement.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i resource-stmt} :\line \tab {\cs62\b\f37 resource} {\cs61\i resource-file-list}
\par {\cs61\i systemresource-stmt} :\line \tab {\cs62\b\f37 systemresource} {\cs61\i resource-file-list}
\par \pard\plain \widctlpar \f4\fs20\lang2057 Each resource file should be given with its extension, eg {\cs51\f5 golf.rss}
\par The {\cs62\b\f37 resource} and {\cs62\b\f37 systemresource} statements have almost identical functions. Use the {\cs62\b\f37 resource} statement for applications: the makefile will build the resource file into the target directory. Use the {\cs62\b\f37
systemresource} statement for system components: the makefile will build the resource file into {\cs51\f5 \\epoc32\\release\\}{\cs61\i platform}{\cs51\f5 \\}{\cs61\i variant}{\cs51\f5 \\z\\system\\data\\}
for a WINS or WINC build. If more than one language is specified with the {\i lang-stmt} then each resource will be compiled multiple times, once for each language specified.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying AIFs
\par \pard\plain \widctlpar \f4\fs20\lang2057 If your project has an application information file, specify it using the {\cs62\b\f37 aif} statement.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i aif-stmt} :\line \tab {\cs62\b\f37 aif} {\cs61\i target-file source-path resource }{\cs61 [ }{\cs61\i color-depth }{\cs61 ]}{
\cs61\i source-bitmap-list}
\par \pard\plain \widctlpar \f4\fs20\lang2057 The target file to be produced by {\f5 aiftool} should be given with its extension, eg {\cs51\f5 golf.aif.}
The source path should contain the source resource file and any bitmaps the target file requires. If the source path is specified as a relative path it will be considered relative to the directory containing the .{\f5 mmp} file.
The source resource file should be given complete with its extension. Just a single color-depth must be specified for all the source bitmaps, and must be of the form [c]{\i digit}[{\i digit}], where the optional \ldblquote c\rdblquote
denotes whether the bitmap is a color bitmap and the digits represent the color-depth. All the source bitmaps should be listed together with their extensions.
\par The target file will be created in the same directory as the application.
\par Currently, building of application information files within the MSVC IDE is not supported.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying BITMAPs
\par \pard\plain \widctlpar \f4\fs20\lang2057 If your project has a bitmaps, specify each one using a {\b\f37 bitmap} section.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i bitmap-section} :\line \tab {\cs62\b\f37 start bitmap }{\cs61\i target-file}{\cs62\b\f37 \line }\tab {\cs62\b\f37 targetpath }{
\cs61\i target-path}{\cs62\b\f37 \line }\tab {\cs62\b\f37 header\line }\tab {\cs62\b\f37 sourcepath }{\cs61\i source-path}{\cs62\b\f37 \line }\tab {\cs62\b\f37 source }{\cs61\i color-depth source-bitmap-list}{\cs62\b\f37 \line }\tab {\cs62\b\f37 end
\par }\pard\plain \widctlpar \f4\fs20\lang2057
\par The target file to be produced by {\f5 bmconv} should be given with its extension, eg {\cs51\f5 golf.mbm.} If a target path is specified, that path will be interpreted as a location on the emulated {\cs51\f5 z:}
drive; otherwise, the target file will be built into the same directory as the application. If the header keyword is supplied in the section, a bitmap header will be generated in directory {\f5 \\EPOC32\\Include}, e.g. {\f5 golf.mbg}. Multiple {\b\f37
sourcepath} and {\b\f37 source} statements can be specified - source bitmaps specified with each {\b\f37 source} statement will be expected to exist in the directory specified with the latest {\b\f37 sourcepath}
statement above it, or the directory containing the {\cs51\f5 .mmp} file if no {\b\f37 sourcepath} statement has yet been specified. Just a single color-depth must be specified for all the source bitmaps within a single {\b\f37 source}
statement, and must be of the form [c]{\i digit}[{\i digit}], where the optional \ldblquote c\rdblquote denotes whether the bitmap is a color bitmap and the digits represent the color-depth.
\par Currently, building of bitmaps within the MSVC IDE is not supported.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying link definition files
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 deffile} statement to override the default linker definition file for the project, and the {\b\f37 exportunfrozen} statement if unfrozen exports are to appear in the project\rquote
s import library.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i deffile-stmt} :\line \tab {\cs62\b\f37 deffile} {\cs61\i filename\line exportunfrozen-stmt }{\cs61 :\line \tab }{\cs61\b\f37
exportunfrozen}
\par \pard\plain \widctlpar \f4\fs20\lang2057 A {\cs51\f5 def}
file specifies associations between exported function names and their ordinal export number. It is used by the linker when constructing a DLL and (where applicable) when constructing its associated import library.
\par Exporting functions by ordinal means that ROMs are significantly more compact, and simplifies the EPOC loader.
\par The assignment of ordinals must be controlled by a {\cs51\f5 def} file in two situations:
\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s20\fi-284\li568\ri567\widctlpar{\*\pn \pnlvlblt\ulth\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f4\fs20\lang2057
a polymorphic interface DLL must export a particular function as ordinal 1; in this case, the {\cs51\f5 def} file is used to specify this association, while other exported functions may have a random order
\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}a re-released DLL must be used by clients built against the old version; in this case, the {\cs51\f5 def}
file is used to ensure that all functions exported by the old version of the DLL are exported with the same ordinal by the new version
\par \pard\plain \widctlpar \f4\fs20\lang2057 For many polymorphic DLLs within EPOC a special target type is provided so that {\f5 makmake} can ensure that the correct function is exported as ordinal 1. Where a special target type is provided the {\f5 def}
file can be dispensed with.
\par {\cs51\f5 def} files are sometimes colloquially referred to as freeze files, because they freeze the association between name and ordinal, for exported functions.
\par The GNU and Microsoft tool chains use different schemes for mangling the names of exported functions. This means that {\cs51\f5 def} files of the same name must be differentiated by storing them in separate directories. Conventionally, {\cs51\f5 ..\\
bmarm\\} is used for ARM {\cs51\f5 def} files, while {\cs51\f5 ..\\bwins\\} is used for WINS and WINC {\cs51\f5 def} files. By default, the frozen {\f5 def} file takes its basename from the basename of the target for the project.
\par Where the default frozen def file is overridden by the {\b\f37 deffile} statement, a path to the file can be specified as part of the filename. If no path is specified, the file will be expected to be in:
\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s20\fi-284\li568\ri567\widctlpar{\*\pn \pnlvlblt\ulth\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f4\fs20\lang2057 directory {\cs51\f5 ..\\bwins\\} for platforms WINS, WINC, VC6 and VC6WINC
\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}directory {\cs51\f5 ..\\bmarm\\} for the ARM platform.
\par \pard\plain \widctlpar \f4\fs20\lang2057 If a path is specified, place the {\cs62\b\f37 deffile} statement within {\cs16\f37 #ifdef}{\i s} so that the same file will not be used during both ARM,WINS and WINC builds. For example:
\par \pard\plain \s19\li567\keep\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536 \f37\fs20\lang1024 #if defined(WINS)\line deffile-stmt\line #else if defined(MARM)\line deffile-stmt\line #endif
\par \pard\plain \widctlpar \f4\fs20\lang2057 (note that the platform name macros used with #if defs must be in upper-case).
\par In most cases, the functions exported from a DLL depend on the build variant. This is common because descriptor class names depend on whether the build is wide or narrow. For such DLLs, different {\cs51\f5 def} files\~\emdash differentiated by the {
\cs51\f5 -u} suffix\~\emdash are used. {\cs51\f5 makmake} controls this using the {\cs62\b\f37 nostrictdef} statement. Although narrow builds are no longer supported the {\cs51\f5 -u} suffix\~
is still in use to maintain backward compatibility with previous versions of {\f5 makmake}.
\par Note too that under WINS, when using an {\cs62\b\f37 exedll} target type, the first export is the one which will be called when the DLL is loaded, so you should use a {\cs51\f5 def} file for the WINS variant.
\par {\f5 Makefiles} generated by {\f5 makmake} now create the import library associated with an executable (where applicable) directly from the frozen {\f5 def}
file, so only frozen exported functions will appear in the import library and only these exported functions can be linked against by other components. For ARM platforms, import libraries for compatible ABIs are also created. For example, if a project i
s built for ARMI then ARMI, THUMB and ARM4 import libraries will be created; and if a project is built for THUMB, ARMI and THUMB import libraries will be created. If the {\b\f37 exportunfrozen}
keyword is specified, the import library is not created from the frozen {\f5 def}
file; instead, the import library is created as a side-effect of linking so that all exported functions, even unfrozen ones, appear in the import library. This also means that import libraries for compatible ABIs are not created. Use of the {\b\f37
exportunfrozen} keyword is only recommended for the early stages of project development, when the Application Programming Interface is likely to be subject to change.
\par The makefiles perform a two-stage link when building the executable:
\par The first link ignores any {\cs51\f5 def} file; it simply links the executable using the names of exported functions.
\par A tool is then invoked on the executable created by this first-stage link to produce a new {\cs51\f5 def} file containing the list of associations between exported function names and their ordinal export numbers. If a {\cs51\f5 def}
file exists for the project, the tool takes the contained list of associations and ensures that the new {\cs51\f5 def}
file contains the same list of associations; any new associations, representing new functions exported by the executable, appear at the end of the list. The new {\cs51\f5 def} file is created in the temporary files directory {\cs51\f5 \\epoc32\\build\\}{
\cs61\i path_to_mmp_file\\mmp_basename}{\cs61 \\}{\cs61\i platform}{\cs51\f5 \\.}, and has the same base name as the executable with the extension {\cs51\f5 .def}. This is used to perform the second-stage of linking, by exported function number.
\par In VC6 workspace files building is carried out in t
he same way as for WINS makefiles, using a supplementary makefile to facilitate the two-stage link. The supplementary makefile is created whenever the VC6 workspace file is created. Since the supplementary makefile will not be aware of the addition or r
emoval of a project\rquote s source files via the menus supplied within the IDE, it is better to carry out such tasks by editing the .{\f5 mmp}
file within the IDE and then regenerate the workspace file. This operation can be carried out without the need to shut down a
nd restart the IDE, and also has the advantage that the next time that command-line makefiles are created for the project they will be up to date with changes to the project made within the IDE.
\par \pard\plain \s4\sb120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 Freezing export numbers
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the frozen {\f5 def} file to ensure the backward compatibility of new releases of a project. If required, override the frozen {\f5 def} filename using the {\b\f37 deffile}
statement. To freeze exports for the first time, use makmake to build makefiles for your project for the WINS platform and an ARM platfor
m and then build your project in either UDEB or UREL variants for each of these platforms (the three ARM platforms, ARMI, ARM4 and THUMB, share a common {\f5 def} file. A warning will be generated to the effect that the frozen {\f5 def}
file does not yet exist. Once the project has been built you can freeze it by calling the FREEZE target in the makefiles, e.g.
\par \pard \fi720\widctlpar {\f37 nmake -f <makefile> freeze}
\par \pard \widctlpar If you\rquote re using the {\f5 abld} tool it\rquote s easier to use the {\f5 abld freeze} command to do the freezing, which will call the FREEZE target in the makefiles for you. Either method will create the frozen {\f5 def}
file containing the project\rquote s exported functions. Once the project is frozen, regenerate the makefiles so that the import library will be created directly from the frozen {\f5 def} file. The project can be frozen in this way even if the {\b\f37
exportunfrozen} statement is specified, but the import library will be created as a side-effect of linking rather than from the frozen {\f5 def} file, and this import library will be created whether the project is frozen or not.
\par \pard\plain \s74\widctlpar\brdrl\brdrth\brdrw30\brsp80 \f4\fs20\cf5\lang2057 Could do with a link to the {\f5 abld} documentation where {\f5 abld} is mentioned above.
\par \pard\plain \widctlpar \f4\fs20\lang2057 New exports can be added to the frozen {\f5 def} file by calling the FREEZE target in the makefiles once the project has been built with the new exports incorporated. The FREEZE target calls a tool, {\f5 efreeze}
, to compare the frozen {\f5 def} file, if it exists, with the one generated by the two-stage link process in directory {\cs51\f5 \\epoc32\\build\\}{\cs61\i path_to_mmp_file}{\cs51\f5 \\}{\cs61\i mmp_basename}{\cs61 \\}{\cs61\i platform}{\cs51\f5 \\
.. efreeze} checks that the frozen exports are all present and correct in the generated {\f5 def} file, and appends any new exports to the end of the frozen {\f5 def} file.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying strict link definition files
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i strictdef-stmt} :\line \tab {\cs62\b\f37 nostrictdef}
\par \pard\plain \widctlpar \f4\fs20\lang2057 It is no longer necessary to specify the {\cs62\b\f37 nostrictdef} statement since there is always just one {\f5 def}
file for the UDEB and UREL variants of a project for each platform. If the nostrictdef statement is specified, the {\f5 u} suffix will not be applied to the frozen {\f5 def} file.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying include directories
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 userinclude} and {\cs62\b\f37 systeminclude} statements to define directories to be scanned for files specified in {\cs62\b\f37 #include} statements in source and resource files.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i user-include-stmt} :\line \tab {\cs62\b\f37 userinclude} {\cs61\i directory-list}
\par {\cs61\i system-include-stmt} :\line \tab {\cs62\b\f37 systeminclude} {\cs61\i directory-list}
\par \pard\plain \widctlpar \f4\fs20\lang2057 Each of these statements may be specified any number of times, and each may have any number of directories. Each directory is added, in the order specified, to the list of user or system include directories.
\par When a pr
oject is being built, the pre-processor will be invoked specifying all the system include and user include directories indicated in these statements. No standard include directories will be searched unless the project links to Win32 libraries under WINS
- see {\cs37\f5\uld\cf11 tools.makmake.win32-libraries}.
\par Files included from source code with a line such as
\par \pard\plain \s19\li567\keep\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536 \f37\fs20\lang1024 #include "golf.h"
\par \pard\plain \widctlpar \f4\fs20\lang2057 will first be searched for in the directory containing the source file, then in the user include directories and finally in the system include directories.
\par Files included from source code with a line such as
\par \pard\plain \s19\li567\keep\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536 \f37\fs20\lang1024 #include <e32def.h>
\par \pard\plain \widctlpar \f4\fs20\lang2057 will be searched for in the system include directories.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying strict generation of dependencies
\par \pard\plain \widctlpar \f4\fs20\lang2057 If your project\rquote s dependencies may differ with the variant, use the {\cs62\b\f37 strictdepend} statement:
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i strictdepend-stmt} :\line \tab {\cs62\b\f37 strictdepend}
\par \pard\plain \widctlpar \f4\fs20\lang2057 Without this statement, dependencies will be evaluated for one variant, and then used for all. With {\cs62\b\f37 strictdepend}, dependencies are evaluated explicitly\~\emdash a sometimes lengthy process\~\emdash
for each variant.
\par Use {\cs62\b\f37 strictdepend} if, for instance, you conditionally include a header file, e.g.
\par \pard\plain \s19\li567\keep\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536 \f37\fs20\lang1024 #if defined(_DEBUG)\line include <debug.h>\line #endif
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tx630\tqr\tx9072 \b\f5\fs28\lang2057 Specifying import libraries
\par \pard\plain \s71\widctlpar \f5\fs20\ul\cf13\lang2057 tools.makmake.specifying-libraries
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 library} statement to specify import libraries.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i library-stmt} :\line \tab {\cs62\b\f37 library} {\cs61\i filename-list}
\par \pard\plain \widctlpar \f4\fs20\lang2057 The {\cs62\b\f37 library} statement may specify any number of files, and there may be many {\cs62\b\f37 library} statements. Specify the entire filename, e.g. {\cs51\f5 euser.lib}.
\par If you need to link to Win32 system libraries in a WINS build, use the {\cs62\b\f37 win32_library} statement instead: see {\cs37\f5\uld\cf11 tools.makmake.win32-libraries}.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tx630\tqr\tx9072 \b\f5\fs28\lang2057 Specifying static libraries
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 staticlibrary} statement to specify static libraries.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i library-stmt} :\line \tab {\cs62\b\f37 staticibrary} {\cs61\i filename-list}
\par \pard\plain \widctlpar \f4\fs20\lang2057 The {\cs62\b\f37 staticibrary} statement may specify any number of files, and there may be many {\cs62\b\f37 library} statements. Specify the entire filename, e.g. {\cs51\f5 euser.lib}.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying language
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 lang} statement to indicate languages code for the project:
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i lang-stmt} :\line \tab {\cs62\b\f37 lang} {\cs61\i language-list}
\par \pard\plain \widctlpar \f4\fs20\lang2057 If this statement is not specified, the default language code is {\cs62\b\f37 sc}. The language codes should be two-digit codes, and are used to complete the extension of generated resource files, as {\cs61\i
project}{\cs51\f5 .r}{\cs61\i sc}. Each resource file specified with the {\i resource-stmt}
will be compiled multiple times, once for each language specified, though the specification of several languages will not cause several versions of the bitmaps or application information files in your project to be created.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying #defines
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 macro} statement to specify #defines for the preprocessing of source code:
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i macro-stmt} :\line \tab {\cs62\b\f37 macro} {\cs61\i macro-list}
\par \pard\plain \widctlpar \f4\fs20\lang2057 Each macro specified will be defined for preprocessing the C++ source code in your project. Each macro will be upper-cased before being defined, so it\rquote s better to specify them in upper-case in the .{\f5 mmp
} file. Macro substitution is not supported - the macros will all be defined with the value \ldblquote 1\rdblquote .
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying a non-default stack size
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 epocstacksize} statement to specify a stack size for your executable other than the default 8KB.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i epocstacksize-stmt} :\line \tab {\cs62\b\f37 epocstacksize} {\cs61\i stacksize}
\par \pard\plain \widctlpar \f4\fs20\lang2057 The size of the stack, in bytes, can be specified in decimal or hexadecimal format. Use of this statement will have no effect under the WINS platform.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying non-default heap sizes
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 epocheapsize} statement to specify minimum and maximum heap sizes for your executable other than the default 1KB minimum and 1MB maximum.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i epocheapsize-stmt} :\line \tab {\cs62\b\f37 epocheapsize} {\cs61\i minimum maximum}
\par \pard\plain \widctlpar \f4\fs20\lang2057 The sizes can be specified in decimal or hexadecimal format. Use of this statement will have no effect under Win32 platforms.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying the calling of dll entry points
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 epoccalldllentrypoints}
statement to specify that the entry point, E32Dll(), of your dll, should be called when your dll is loaded. By default entry points are not called for non-Win32 platforms.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i epoccalldllentrypoints-stmt} :\line \tab {\cs62\b\f37 epoccalldllentrypoints}
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use of this statement will have no effect under Win32 platforms, where entry points are always called.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying process priority
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 epocprocesspriority}
statement to specify the process priority for your executable EXE. Specify low, background, foreground, high, windowserver, fileserver, realtimeserver or supervisor. The value specified will be passed on to {\cs51\f5 petran} via its {\cs62\b\f37
-priority}{\i } switch.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i epocprocesspriority-stmt} :\line \tab {\cs62\b\f37 epocprocesspriority} {\cs61\i priority}
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use of this statement will have no effect under Win32 platforms.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying a different internal DLL name
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 linkas} statement to give the DLL that your project defines a different internal name.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i linkas-stmt} :\line \tab {\cs62\b\f37 linkas} {\cs61\i priority}
\par \pard\plain \widctlpar \f4\fs20\lang2057 By default, the internal name of the DLL will be the same as the DLL\rquote s filename. Under certain rare circumstances it\rquote
s useful to be able to give a DLL a different internal name. For example, a DLL might be built with a certain name and then renamed as part of a ROM, so the internal name must be the same as the DLL\rquote s name in ROM.
\par Use of this statement will have no effect under Win32 platforms.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Specifying ASSP items
\par \pard\plain \widctlpar \f4\fs20\lang2057 ASSP stands for \ldblquote Application Specific Standard Product\rdblquote .
ASSP statements are for use by projects linking to the EPOC kernel, such as device drivers, so unless you are building such projects you can ignore this section.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i assplibrary-stmt} :\line \tab {\cs62\b\f37 assplibrary} {\cs61\i filename-list}{\cs62\b\f37 \line }{\cs61\i asspexports-stmt} :
\line \tab {\cs62\b\f37 asspexports}
\par {\cs61\i asspabi-stmt} :\line \tab {\cs62\b\f37 asspabi}
\par \pard\plain \widctlpar \f4\fs20\lang2057
The import library for the EPOC kernel and associated libraries are created in a directory corresponding to the hardware platform, or ASSP, a particular version of the kernel is built for. For this reason, projects linking to the kernel must list {\f5
ekern.lib} with the {\b\f37 assplibrary} statement, to differentiate it from standard EPOC import libraries.
\par If the {\b\f37 asspexports}
statement is specified, this means that the project exports different functions for different ASSPs; in other words, the API of a particular version of the project will correspond to the hardware platform that version of the project is built for. The st
atement has two effects:
\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s20\fi-284\li568\ri567\widctlpar{\*\pn \pnlvlblt\ulth\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f4\fs20\lang2057
the import library for the project will be created in an ASSP-specific directory rather than in the usual directory for containing the ARM import libraries - \\{\f5 EPOC32}\\{\f5 Release}\\{\i assp-name}\\{\i variant}\\ rather than \\{\f5 EPOC32}\\{\f5
Release}\\{\i platform-name}\\{\i variant}\\.
\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}the frozen def file for the project will, by default, reside in an ASSP-specific directory rather than ..\\{\f5 bmarm}\\.
\par \pard\plain \widctlpar \f4\fs20\lang2057 If the {\b\f37 asspabi} statement is specified, the ABI that the project will be built for - ARMI, ARM4 or THUMB - will be the same as that of the kernel for a
particular ASSP. Otherwise the ABI for the project will be the default ABI for a particular ASSP. The {\b\f37 asspabi} statement is implied by the presence of either the {\b\f37 asspexports} or the {\b\f37 assplibrary} statements.
\par \pard\plain \s74\widctlpar\brdrl\brdrth\brdrw30\brsp80 \f4\fs20\cf5\lang2057 This section is perhaps just going to confuse people, and maybe should just be in the base porting guide or the device driver documentation or somewhere like that.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Platform-specific items
\par \pard\plain \widctlpar \f4\fs20\lang2057 A platform-specific section is enclosed in {\cs62\b\f37 start} and {\cs62\b\f37 end}:
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs62\b\f37 start }{\cs61\i platform}\line \tab {\cs61\i platform-specific-statement-list}\line {\cs62\b\f37 end}
\par \pard\plain \widctlpar \f4\fs20\lang2057 The platform-specific statements allowed depend on the platform. Unlike {\cs62\b\f37 #if defined}
blocks, which allow statements to specify different files dependent upon the platform for which the makefile is being created, {\cs62\b\f37 start ... end} platform blocks are used to delimit statements understood only by {\cs51\f5 makmake}
when creating a makefile for a particular platform. The {\cs51\f5 makmake} project definition file is preprocessed every time {\cs51\f5 makmake} is run, with the target platform defined as a macro equal to itself (where WINC is the platfor
m, WINS is also defined). This allows, for example, the project definition file to be preprocessed with the macro WINS defined as WINS so preserving the syntax of {\cs62\b\f37 start WINS ... end}
blocks. Where VC5 is the target platform, the macro WINS is defined instead; similarly the macros WINS and WINC are defined where the target platform is VC5WINC.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 WINS-specific statements
\par \pard\plain \s71\widctlpar \f5\fs20\ul\cf13\lang2057 tools.makmake.wins
\par \pard\plain \s4\sb120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 Specifying a base address
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 baseaddress} statement to specify the address to which a DLL will be built and, if possible, loaded.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i wins-specific-statement} :\line \tab {\cs62\b\f37 baseaddress} {\cs61\i hex-constant}
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use {\cs62\b\f37 baseaddress} to specify the base address of a WINS DLL. Give each DLL a different base address, so that the Windows loader doesn\rquote
t have to do any relocation while loading EPOC and its DLLs. This considerably speeds up the initialisation of EPOC under WINS.
\par \pard\plain \s4\sb120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 Specifying Win32 system libraries
\par \pard\plain \s71\widctlpar \f5\fs20\ul\cf13\lang2057 tools.makmake.win32-libraries
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use the {\cs62\b\f37 win32_library} statement to specify any Win32 system libraries needed by the project.
\par \pard\plain \s58\li851\ri851\keep\widctlpar\brdrt\brdrs\brdrw15\brsp20 \brdrb\brdrs\brdrw15\brsp20 \f4\fs20\lang2057 {\cs61\i wins-specific-statement} :\line \tab {\cs62\b\f37 win32_library} {\cs61\i filename-list}
\par \pard\plain \widctlpar \f4\fs20\lang2057 Use {\cs62\b\f37 win32_library} to specify Win32 libraries in the same way that other libraries are specified with the {\cs62\b\f37 library}
statement. If any Win32 system libraries are specified, directories specified by the INCLUDE environmental variable will be searched for system-included header files not found in the system include paths specified for the project.
\par \pard\plain \s3\sb120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 Command Line Makefile utilities
\par \pard\plain \widctlpar \f4\fs20\lang2057 Command-line makefiles created by {\cs51\f5 makmake} contain syntax which it is not possible to incorporate into makefil
es intended for the MSVC IDE. Command-line makefiles provide extra makefile targets which enable you to use {\cs62\b\f37 nmake}
to create work directories and erase non-source files for a particular build variant of a project. For example, WINS command-line makefiles provide the targets {\cs51\f5 makework, makeworkudeb, makeworkurel, clean, cleanudeb, cleanurel.}
\par \pard\plain \s19\li567\keep\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536 \f37\fs20\lang1024 nmake -f euhello.wins clean
\par \pard\plain \widctlpar \f4\fs20\lang2057 will attempt to delete the non-source files created during a build of all variants of the project {\f5 euhello}, while
\par \pard\plain \s19\li567\keep\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536 \f37\fs20\lang1024 nmake -f euhello.wins cleanudeb
\par \pard\plain \widctlpar \f4\fs20\lang2057 for example, will attempt only to delete non-source files created by a wide debug build of the project.
\par \pard\plain \s19\li567\keep\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536 \f37\fs20\lang1024 nmake -f euhello.wins makework
\par \pard\plain \widctlpar \f4\fs20\lang2057 will create the work directories for a build of all variants of the project {\f5 euhello}, while
\par \pard\plain \s19\li567\keep\widctlpar\tx567\tx1134\tx1701\tx2268\tx2835\tx3402\tx3969\tx4536 \f37\fs20\lang1024 nmake -f euhello.wins makeworkurel
\par \pard\plain \widctlpar \f4\fs20\lang2057 will create the work directories for a wide release build of the project.
\par The build-specific {\cs51\f5 makework} targets are listed as dependencies of the main build-specific targets in command-line makefiles, so work directories will automatically be creat
ed when a target is built with a command-line makefile if these directories do not already exist.
\par }