assemble.pas 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769
  1. {
  2. $Id$
  3. Copyright (c) 1998 by the FPC development team
  4. This unit handles the assemblerfile write and assembler calls of FPC
  5. This program is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 2 of the License, or
  8. (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program; if not, write to the Free Software
  15. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  16. ****************************************************************************}
  17. unit assemble;
  18. interface
  19. uses
  20. {$ifdef Delphi}
  21. dmisc,
  22. {$endif Delphi}
  23. dos,cobjects,globtype,globals,aasm;
  24. const
  25. {$ifdef tp}
  26. AsmOutSize=1024;
  27. {$else}
  28. AsmOutSize=32768;
  29. {$endif}
  30. type
  31. PAsmList=^TAsmList;
  32. TAsmList=object
  33. {filenames}
  34. path : pathstr;
  35. name : namestr;
  36. asmfile, { current .s and .o file }
  37. objfile,
  38. as_bin : string;
  39. SmartAsm : boolean;
  40. IsEndFile : boolean; { special 'end' file for import dir ? }
  41. {outfile}
  42. AsmSize,
  43. AsmStartSize,
  44. outcnt : longint;
  45. outbuf : array[0..AsmOutSize-1] of char;
  46. outfile : file;
  47. Constructor Init(smart:boolean);
  48. Destructor Done;
  49. Function FindAssembler:string;
  50. Function CallAssembler(const command,para:string):Boolean;
  51. Function DoAssemble:boolean;
  52. Procedure RemoveAsm;
  53. procedure NextSmartName;
  54. Procedure AsmFlush;
  55. Procedure AsmClear;
  56. Procedure AsmWrite(const s:string);
  57. Procedure AsmWritePChar(p:pchar);
  58. Procedure AsmWriteLn(const s:string);
  59. Procedure AsmLn;
  60. procedure AsmCreate;
  61. procedure AsmClose;
  62. procedure Synchronize;
  63. procedure WriteTree(p:paasmoutput);virtual;
  64. procedure WriteAsmList;virtual;
  65. end;
  66. Procedure GenerateAsm(smart:boolean);
  67. Procedure OnlyAsm;
  68. var
  69. SmartLinkFilesCnt : longint;
  70. Implementation
  71. uses
  72. script,files,systems,verbose
  73. {$ifdef linux}
  74. ,linux
  75. {$endif}
  76. ,strings
  77. {$ifdef i386}
  78. {$ifndef NoAg386Bin}
  79. ,ag386bin
  80. {$endif}
  81. {$ifndef NoAg386Att}
  82. ,ag386att
  83. {$endif NoAg386Att}
  84. {$ifndef NoAg386Nsm}
  85. ,ag386nsm
  86. {$endif NoAg386Nsm}
  87. {$ifndef NoAg386Int}
  88. ,ag386int
  89. {$endif NoAg386Int}
  90. {$ifdef Ag386Cof}
  91. ,ag386cof
  92. {$endif Ag386Cof}
  93. {$endif}
  94. {$ifdef m68k}
  95. {$ifndef NoAg68kGas}
  96. ,ag68kgas
  97. {$endif NoAg68kGas}
  98. {$ifndef NoAg68kMot}
  99. ,ag68kmot
  100. {$endif NoAg68kMot}
  101. {$ifndef NoAg68kMit}
  102. ,ag68kmit
  103. {$endif NoAg68kMit}
  104. {$ifndef NoAg68kMpw}
  105. ,ag68kmpw
  106. {$endif NoAg68kMpw}
  107. {$endif}
  108. ;
  109. {*****************************************************************************
  110. TAsmList
  111. *****************************************************************************}
  112. Function DoPipe:boolean;
  113. begin
  114. DoPipe:=(cs_asm_pipe in aktglobalswitches) and
  115. not(cs_asm_leave in aktglobalswitches)
  116. {$ifdef i386}
  117. and (aktoutputformat=as_i386_as)
  118. {$endif i386}
  119. {$ifdef m68k}
  120. and (aktoutputformat=as_m68k_as);
  121. {$endif m68k}
  122. end;
  123. const
  124. lastas : byte=255;
  125. var
  126. LastASBin : string;
  127. Function TAsmList.FindAssembler:string;
  128. var
  129. asfound : boolean;
  130. begin
  131. if lastas<>ord(target_asm.id) then
  132. begin
  133. lastas:=ord(target_asm.id);
  134. { is an assembler passed ? }
  135. if utilsdirectory<>'' then
  136. LastASBin:=Search(target_asm.asmbin+source_os.exeext,utilsdirectory,asfound)+
  137. target_asm.asmbin+source_os.exeext;
  138. if LastASBin='' then
  139. LastASBin:=FindExe(target_asm.asmbin,asfound);
  140. if (not asfound) and not(cs_asm_extern in aktglobalswitches) then
  141. begin
  142. Message1(exec_w_assembler_not_found,LastASBin);
  143. aktglobalswitches:=aktglobalswitches+[cs_asm_extern];
  144. end;
  145. if asfound then
  146. Message1(exec_t_using_assembler,LastASBin);
  147. end;
  148. FindAssembler:=LastASBin;
  149. end;
  150. Function TAsmList.CallAssembler(const command,para:string):Boolean;
  151. begin
  152. callassembler:=true;
  153. if not(cs_asm_extern in aktglobalswitches) then
  154. begin
  155. swapvectors;
  156. exec(command,para);
  157. swapvectors;
  158. if (doserror<>0) then
  159. begin
  160. Message1(exec_w_cant_call_assembler,tostr(doserror));
  161. aktglobalswitches:=aktglobalswitches+[cs_asm_extern];
  162. callassembler:=false;
  163. end
  164. else
  165. if (dosexitcode<>0) then
  166. begin
  167. Message1(exec_w_error_while_assembling,tostr(dosexitcode));
  168. callassembler:=false;
  169. end;
  170. end
  171. else
  172. AsmRes.AddAsmCommand(command,para,name);
  173. end;
  174. procedure TAsmList.RemoveAsm;
  175. var
  176. g : file;
  177. i : word;
  178. begin
  179. if cs_asm_leave in aktglobalswitches then
  180. exit;
  181. if cs_asm_extern in aktglobalswitches then
  182. AsmRes.AddDeleteCommand(AsmFile)
  183. else
  184. begin
  185. assign(g,AsmFile);
  186. {$I-}
  187. erase(g);
  188. {$I+}
  189. i:=ioresult;
  190. end;
  191. end;
  192. Function TAsmList.DoAssemble:boolean;
  193. var
  194. s : string;
  195. begin
  196. DoAssemble:=true;
  197. if DoPipe then
  198. exit;
  199. if not(cs_asm_extern in aktglobalswitches) then
  200. begin
  201. if SmartAsm then
  202. begin
  203. if (SmartLinkFilesCnt<=1) then
  204. Message1(exec_i_assembling_smart,name);
  205. end
  206. else
  207. Message1(exec_i_assembling,name);
  208. end;
  209. s:=target_asm.asmcmd;
  210. Replace(s,'$ASM',AsmFile);
  211. Replace(s,'$OBJ',ObjFile);
  212. if CallAssembler(FindAssembler,s) then
  213. RemoveAsm
  214. else
  215. begin
  216. DoAssemble:=false;
  217. GenerateError;
  218. end;
  219. end;
  220. procedure TAsmList.NextSmartName;
  221. var
  222. s : string;
  223. begin
  224. inc(SmartLinkFilesCnt);
  225. if SmartLinkFilesCnt>999999 then
  226. Message(asmw_f_too_many_asm_files);
  227. if IsEndFile then
  228. begin
  229. s:=current_module^.asmprefix^+'e';
  230. IsEndFile:=false;
  231. end
  232. else
  233. s:=current_module^.asmprefix^;
  234. AsmFile:=Path+FixFileName(s+tostr(SmartLinkFilesCnt)+target_info.asmext);
  235. ObjFile:=Path+FixFileName(s+tostr(SmartLinkFilesCnt)+target_info.objext);
  236. end;
  237. {*****************************************************************************
  238. TAsmList AsmFile Writing
  239. *****************************************************************************}
  240. Procedure TAsmList.AsmFlush;
  241. begin
  242. if outcnt>0 then
  243. begin
  244. BlockWrite(outfile,outbuf,outcnt);
  245. outcnt:=0;
  246. end;
  247. end;
  248. Procedure TAsmList.AsmClear;
  249. begin
  250. outcnt:=0;
  251. end;
  252. Procedure TAsmList.AsmWrite(const s:string);
  253. begin
  254. if OutCnt+length(s)>=AsmOutSize then
  255. AsmFlush;
  256. Move(s[1],OutBuf[OutCnt],length(s));
  257. inc(OutCnt,length(s));
  258. inc(AsmSize,length(s));
  259. end;
  260. Procedure TAsmList.AsmWriteLn(const s:string);
  261. begin
  262. AsmWrite(s);
  263. AsmLn;
  264. end;
  265. Procedure TAsmList.AsmWritePChar(p:pchar);
  266. var
  267. i,j : longint;
  268. begin
  269. i:=StrLen(p);
  270. j:=i;
  271. while j>0 do
  272. begin
  273. i:=min(j,AsmOutSize);
  274. if OutCnt+i>=AsmOutSize then
  275. AsmFlush;
  276. Move(p[0],OutBuf[OutCnt],i);
  277. inc(OutCnt,i);
  278. inc(AsmSize,i);
  279. dec(j,i);
  280. p:=pchar(@p[i]);
  281. end;
  282. end;
  283. Procedure TAsmList.AsmLn;
  284. begin
  285. if OutCnt>=AsmOutSize-2 then
  286. AsmFlush;
  287. OutBuf[OutCnt]:=target_os.newline[1];
  288. inc(OutCnt);
  289. inc(AsmSize);
  290. if length(target_os.newline)>1 then
  291. begin
  292. OutBuf[OutCnt]:=target_os.newline[2];
  293. inc(OutCnt);
  294. inc(AsmSize);
  295. end;
  296. end;
  297. procedure TAsmList.AsmCreate;
  298. begin
  299. if SmartAsm then
  300. NextSmartName;
  301. {$ifdef linux}
  302. if DoPipe then
  303. begin
  304. Message1(exec_i_assembling_pipe,asmfile);
  305. POpen(outfile,'as -o '+objfile,'W');
  306. end
  307. else
  308. {$endif}
  309. begin
  310. Assign(outfile,asmfile);
  311. {$I-}
  312. Rewrite(outfile,1);
  313. {$I+}
  314. if ioresult<>0 then
  315. Message1(exec_d_cant_create_asmfile,asmfile);
  316. end;
  317. outcnt:=0;
  318. AsmSize:=0;
  319. AsmStartSize:=0;
  320. end;
  321. procedure TAsmList.AsmClose;
  322. var
  323. f : file;
  324. l : longint;
  325. begin
  326. AsmFlush;
  327. {$ifdef linux}
  328. if DoPipe then
  329. Close(outfile)
  330. else
  331. {$endif}
  332. begin
  333. {Touch Assembler time to ppu time is there is a ppufilename}
  334. if Assigned(current_module^.ppufilename) then
  335. begin
  336. Assign(f,current_module^.ppufilename^);
  337. {$I-}
  338. reset(f,1);
  339. {$I+}
  340. if ioresult=0 then
  341. begin
  342. getftime(f,l);
  343. close(f);
  344. reset(outfile,1);
  345. setftime(outfile,l);
  346. end;
  347. end;
  348. close(outfile);
  349. end;
  350. end;
  351. {Touch Assembler and object time to ppu time is there is a ppufilename}
  352. procedure TAsmList.Synchronize;
  353. begin
  354. {Touch Assembler time to ppu time is there is a ppufilename}
  355. if Assigned(current_module^.ppufilename) then
  356. begin
  357. SynchronizeFileTime(current_module^.ppufilename^,asmfile);
  358. if not(cs_asm_extern in aktglobalswitches) then
  359. SynchronizeFileTime(current_module^.ppufilename^,objfile);
  360. end;
  361. end;
  362. procedure TAsmList.WriteTree(p:paasmoutput);
  363. begin
  364. end;
  365. procedure TAsmList.WriteAsmList;
  366. begin
  367. end;
  368. Constructor TAsmList.Init(smart:boolean);
  369. var
  370. i : word;
  371. begin
  372. { load start values }
  373. asmfile:=current_module^.asmfilename^;
  374. objfile:=current_module^.objfilename^;
  375. name:=FixFileName(current_module^.modulename^);
  376. OutCnt:=0;
  377. SmartLinkFilesCnt:=0;
  378. IsEndFile:=false;
  379. SmartAsm:=smart;
  380. { Which path will be used ? }
  381. if SmartAsm then
  382. begin
  383. path:=current_module^.path^+FixFileName(current_module^.modulename^)+target_info.smartext;
  384. {$I-}
  385. mkdir(path);
  386. {$I+}
  387. i:=ioresult;
  388. path:=FixPath(path,false);
  389. end
  390. else
  391. path:=current_module^.path^;
  392. end;
  393. Destructor TAsmList.Done;
  394. begin
  395. end;
  396. {*****************************************************************************
  397. Generate Assembler Files Main Procedure
  398. *****************************************************************************}
  399. Procedure GenerateAsm(smart:boolean);
  400. var
  401. a : PAsmList;
  402. {$ifdef i386}
  403. {$ifndef NoAg386Bin}
  404. b : Pi386binasmlist;
  405. {$endif}
  406. {$endif}
  407. begin
  408. case aktoutputformat of
  409. as_none : ;
  410. {$ifdef i386}
  411. {$ifndef NoAg386Bin}
  412. as_i386_dbg,
  413. as_i386_coff,
  414. as_i386_pecoff :
  415. begin
  416. case aktoutputformat of
  417. as_i386_dbg :
  418. b:=new(pi386binasmlist,Init(og_dbg,smart));
  419. as_i386_coff :
  420. b:=new(pi386binasmlist,Init(og_coff,smart));
  421. as_i386_pecoff :
  422. b:=new(pi386binasmlist,Init(og_pecoff,smart));
  423. end;
  424. b^.WriteBin;
  425. dispose(b,done);
  426. if assigned(current_module^.ppufilename) then
  427. begin
  428. if smart then
  429. SynchronizeFileTime(current_module^.ppufilename^,current_module^.staticlibfilename^)
  430. else
  431. SynchronizeFileTime(current_module^.ppufilename^,current_module^.objfilename^);
  432. end;
  433. exit;
  434. end;
  435. {$endif NoAg386Bin}
  436. {$ifndef NoAg386Att}
  437. as_i386_as,
  438. as_i386_as_aout,
  439. as_i386_asw :
  440. a:=new(pi386attasmlist,Init(smart));
  441. {$endif NoAg386Att}
  442. {$ifndef NoAg386Nsm}
  443. as_i386_nasmcoff,
  444. as_i386_nasmelf,
  445. as_i386_nasmobj :
  446. a:=new(pi386nasmasmlist,Init(smart));
  447. {$endif NoAg386Nsm}
  448. {$ifndef NoAg386Int}
  449. as_i386_tasm :
  450. a:=new(pi386intasmlist,Init(smart));
  451. {$endif NoAg386Int}
  452. {$endif}
  453. {$ifdef m68k}
  454. {$ifndef NoAg68kGas}
  455. as_m68k_as,
  456. as_m68k_gas :
  457. a:=new(pm68kgasasmlist,Init(smart));
  458. {$endif NoAg86KGas}
  459. {$ifndef NoAg68kMot}
  460. as_m68k_mot :
  461. a:=new(pm68kmotasmlist,Init(smart));
  462. {$endif NoAg86kMot}
  463. {$ifndef NoAg68kMit}
  464. as_m68k_mit :
  465. a:=new(pm68kmitasmlist,Init(smart));
  466. {$endif NoAg86KMot}
  467. {$ifndef NoAg68kMpw}
  468. as_m68k_mpw :
  469. a:=new(pm68kmpwasmlist,Init(smart));
  470. {$endif NoAg68kMpw}
  471. {$endif}
  472. else
  473. {$ifdef TP}
  474. exit;
  475. {$else}
  476. Message(asmw_f_assembler_output_not_supported);
  477. {$endif}
  478. end;
  479. a^.AsmCreate;
  480. a^.WriteAsmList;
  481. a^.AsmClose;
  482. a^.DoAssemble;
  483. a^.synchronize;
  484. dispose(a,Done);
  485. end;
  486. Procedure OnlyAsm;
  487. var
  488. a : PAsmList;
  489. begin
  490. a:=new(pasmlist,Init(false));
  491. a^.DoAssemble;
  492. dispose(a,Done);
  493. end;
  494. end.
  495. {
  496. $Log$
  497. Revision 1.51 1999-07-10 10:12:03 peter
  498. * assembler smartlink message
  499. Revision 1.50 1999/07/03 00:27:05 peter
  500. * better smartlinking support
  501. Revision 1.49 1999/06/28 16:02:29 peter
  502. * merged
  503. Revision 1.48.2.1 1999/06/28 15:55:39 peter
  504. * also search path if not found in utilsdirectory
  505. Revision 1.48 1999/05/27 19:44:03 peter
  506. * removed oldasm
  507. * plabel -> pasmlabel
  508. * -a switches to source writing automaticly
  509. * assembler readers OOPed
  510. * asmsymbol automaticly external
  511. * jumptables and other label fixes for asm readers
  512. Revision 1.47 1999/05/13 21:59:19 peter
  513. * removed oldppu code
  514. * warning if objpas is loaded from uses
  515. * first things for new deref writing
  516. Revision 1.46 1999/05/05 22:21:48 peter
  517. * updated messages
  518. Revision 1.45 1999/05/04 21:44:33 florian
  519. * changes to compile it with Delphi 4.0
  520. Revision 1.44 1999/05/02 23:28:42 peter
  521. * don't include ag386bin for oldasm
  522. Revision 1.43 1999/05/02 22:41:51 peter
  523. * moved section names to systems
  524. * fixed nasm,intel writer
  525. Revision 1.42 1999/05/01 13:24:00 peter
  526. * merged nasm compiler
  527. * old asm moved to oldasm/
  528. Revision 1.41 1999/03/24 23:16:42 peter
  529. * fixed bugs 212,222,225,227,229,231,233
  530. Revision 1.40 1999/03/18 20:30:44 peter
  531. + .a writer
  532. Revision 1.39 1999/03/01 15:43:48 peter
  533. * synchronize also the objfile for ag386bin
  534. Revision 1.38 1999/02/26 00:48:15 peter
  535. * assembler writers fixed for ag386bin
  536. Revision 1.37 1999/02/24 00:59:11 peter
  537. * small updates for ag386bin
  538. Revision 1.36 1999/02/22 02:15:01 peter
  539. * updates for ag386bin
  540. Revision 1.35 1999/02/17 10:16:26 peter
  541. * small fixes for the binary writer
  542. Revision 1.34 1999/01/10 15:37:52 peter
  543. * moved some tables from ra386*.pas -> i386.pas
  544. + start of coff writer
  545. * renamed asmutils unit to rautils
  546. Revision 1.33 1998/12/11 00:02:45 peter
  547. + globtype,tokens,version unit splitted from globals
  548. Revision 1.32 1998/11/06 09:46:46 pierre
  549. * assemble failure increments status errorcount again !!
  550. Revision 1.31 1998/10/26 22:23:28 peter
  551. + fixpath() has an extra option to allow a ./ as path
  552. Revision 1.30 1998/10/16 13:37:14 florian
  553. + switch -FD added to specify the path for utilities
  554. Revision 1.29 1998/10/15 16:19:42 peter
  555. * fixed asmsynchronize
  556. Revision 1.28 1998/10/14 15:56:43 pierre
  557. * all references to comp suppressed for m68k
  558. Revision 1.27 1998/10/13 16:50:01 pierre
  559. * undid some changes of Peter that made the compiler wrong
  560. for m68k (I had to reinsert some ifdefs)
  561. * removed several memory leaks under m68k
  562. * removed the meory leaks for assembler readers
  563. * cross compiling shoud work again better
  564. ( crosscompiling sysamiga works
  565. but as68k still complain about some code !)
  566. Revision 1.26 1998/10/13 13:10:11 peter
  567. * new style for m68k/i386 infos and enums
  568. Revision 1.25 1998/10/13 08:19:24 pierre
  569. + source_os is now set correctly for cross-processor compilers
  570. (tos contains all target_infos and
  571. we use CPU86 and CPU68 conditionnals to
  572. get the source operating system
  573. this only works if you do not undefine
  574. the source target !!)
  575. * several cg68k memory leaks fixed
  576. + started to change the code so that it should be possible to have
  577. a complete compiler (both for m68k and i386 !!)
  578. Revision 1.24 1998/10/08 23:28:50 peter
  579. * -vu shows unit info, -vt shows tried/used files
  580. Revision 1.23 1998/10/07 04:27:37 carl
  581. + MPW support
  582. Revision 1.22 1998/09/16 16:41:39 peter
  583. * merged fixes
  584. Revision 1.21.2.1 1998/09/16 16:11:38 peter
  585. * missing isendfile reset in .init
  586. Revision 1.21 1998/09/07 18:33:32 peter
  587. + smartlinking for win95 imports
  588. Revision 1.20 1998/09/04 17:34:20 pierre
  589. * bug with datalabel corrected
  590. + assembler errors better commented
  591. * one nested record crash removed
  592. Revision 1.19 1998/08/26 10:06:34 peter
  593. * reduce amount of asmfiles generated
  594. * no stabs are written in writefilelineinfo when debuginfo is off
  595. Revision 1.18 1998/08/21 14:08:39 pierre
  596. + TEST_FUNCRET now default (old code removed)
  597. works also for m68k (at least compiles)
  598. Revision 1.17 1998/08/17 09:17:43 peter
  599. * static/shared linking updates
  600. Revision 1.16 1998/08/14 21:56:30 peter
  601. * setting the outputfile using -o works now to create static libs
  602. Revision 1.15 1998/08/14 18:16:09 peter
  603. * return after a failed call will now add it to ppas
  604. Revision 1.14 1998/08/10 14:49:41 peter
  605. + localswitches, moduleswitches, globalswitches splitting
  606. Revision 1.13 1998/07/14 21:46:40 peter
  607. * updated messages file
  608. Revision 1.12 1998/07/08 14:58:34 daniel
  609. * First check if call to assembler is succesfull, then check it's exit code.
  610. This is more logical than first checking the exit code. For some mysterious
  611. reason this did not give problems on DOS & Linux. On OS/2 it did.
  612. Revision 1.11 1998/06/08 22:59:43 peter
  613. * smartlinking works for win32
  614. * some defines to exclude some compiler parts
  615. Revision 1.10 1998/06/04 23:51:33 peter
  616. * m68k compiles
  617. + .def file creation moved to gendef.pas so it could also be used
  618. for win32
  619. Revision 1.9 1998/05/23 01:21:01 peter
  620. + aktasmmode, aktoptprocessor, aktoutputformat
  621. + smartlink per module $SMARTLINK-/+ (like MMX) and moved to aktswitches
  622. + $LIBNAME to set the library name where the unit will be put in
  623. * splitted cgi386 a bit (codeseg to large for bp7)
  624. * nasm, tasm works again. nasm moved to ag386nsm.pas
  625. Revision 1.8 1998/05/11 13:07:53 peter
  626. + $ifdef NEWPPU for the new ppuformat
  627. + $define GDB not longer required
  628. * removed all warnings and stripped some log comments
  629. * no findfirst/findnext anymore to remove smartlink *.o files
  630. Revision 1.7 1998/05/07 00:17:00 peter
  631. * smartlinking for sets
  632. + consts labels are now concated/generated in hcodegen
  633. * moved some cpu code to cga and some none cpu depended code from cga
  634. to tree and hcodegen and cleanup of hcodegen
  635. * assembling .. output reduced for smartlinking ;)
  636. Revision 1.6 1998/05/04 17:54:24 peter
  637. + smartlinking works (only case jumptable left todo)
  638. * redesign of systems.pas to support assemblers and linkers
  639. + Unitname is now also in the PPU-file, increased version to 14
  640. Revision 1.5 1998/04/29 10:33:44 pierre
  641. + added some code for ansistring (not complete nor working yet)
  642. * corrected operator overloading
  643. * corrected nasm output
  644. + started inline procedures
  645. + added starstarn : use ** for exponentiation (^ gave problems)
  646. + started UseTokenInfo cond to get accurate positions
  647. Revision 1.4 1998/04/27 23:10:27 peter
  648. + new scanner
  649. * $makelib -> if smartlink
  650. * small filename fixes pmodule.setfilename
  651. * moved import from files.pas -> import.pas
  652. Revision 1.3 1998/04/10 14:41:43 peter
  653. * removed some Hints
  654. * small speed optimization for AsmLn
  655. Revision 1.2 1998/04/08 11:34:18 peter
  656. * nasm works (linux only tested)
  657. }