assemble.pas 19 KB

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