systems.pas 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743
  1. {
  2. $Id$
  3. Copyright (C) 1995,99 by Florian Klaempfl
  4. This unit contains information about the target systems supported
  5. (these are not processor specific)
  6. This progsam is free software; you can redistribute it and/or modify
  7. iu under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 3 of the License, or
  9. (at your option) any later version.
  10. This program is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. GNU General Public License for more details.
  14. You should have received a copy of the GNU General Public License
  15. along with this program; if not, write to the Free Software
  16. Foundation, Inc., 675 Mass Ave, Cambridge- MA 02139, USA.
  17. ****************************************************************************
  18. }
  19. unit systems;
  20. interface
  21. type
  22. tendian = (endian_little,endian_big);
  23. ttargetcpu=(no_cpu
  24. ,i386,m68k,alpha,powerpc
  25. );
  26. tprocessors = (no_processor
  27. ,Class386,ClassP5,ClassP6
  28. ,MC68000,MC68100,MC68020
  29. );
  30. tsection=(sec_none,
  31. sec_code,sec_data,sec_bss,
  32. sec_idata2,sec_idata4,sec_idata5,sec_idata6,sec_idata7,sec_edata,
  33. sec_stab,sec_stabstr
  34. );
  35. type
  36. tasmmode= (asmmode_none
  37. ,asmmode_i386_direct,asmmode_i386_att,asmmode_i386_intel
  38. ,asmmode_m68k_mot,asmmode_alpha_direct,asmmode_powerpc_direct
  39. );
  40. const
  41. {$ifdef i386} i386asmmodecnt=3; {$else} i386asmmodecnt=0; {$endif}
  42. {$ifdef m68k} m68kasmmodecnt=1; {$else} m68kasmmodecnt=0; {$endif}
  43. {$ifdef alpha} alphaasmmodecnt=1; {$else} alphaasmmodecnt=0; {$endif}
  44. {$ifdef powerpc} powerpcasmmodecnt=1; {$else} powerpcasmmodecnt=0; {$endif}
  45. asmmodecnt=i386asmmodecnt+m68kasmmodecnt+Alphaasmmodecnt+powerpcasmmodecnt+1;
  46. type
  47. ttarget = (target_none
  48. ,target_i386_GO32V1,target_i386_GO32V2,target_i386_linux,
  49. target_i386_OS2,target_i386_Win32
  50. ,target_m68k_Amiga,target_m68k_Atari,target_m68k_Mac,
  51. target_m68k_linux,target_m68k_PalmOS,target_alpha_linux,
  52. target_powerpc_linux
  53. );
  54. ttargetflags = (tf_none,
  55. tf_supports_stack_checking,tf_need_export,tf_needs_isconsole
  56. );
  57. const
  58. {$ifdef i386} i386targetcnt=5; {$else} i386targetcnt=0; {$endif}
  59. {$ifdef m68k} m68ktargetcnt=5; {$else} m68ktargetcnt=0; {$endif}
  60. {$ifdef alpha} alphatargetcnt=1; {$else} alphatargetcnt=0; {$endif}
  61. {$ifdef powerpc} powerpctargetcnt=1; {$else} powerpctargetcnt=0; {$endif}
  62. targetcnt=i386targetcnt+m68ktargetcnt+alphatargetcnt+powerpctargetcnt+1;
  63. type
  64. tasm = (as_none
  65. ,as_i386_as,as_i386_as_aout,as_i386_asw,
  66. as_i386_nasmcoff,as_i386_nasmelf,as_i386_nasmobj,
  67. as_i386_tasm,as_i386_masm,
  68. as_i386_dbg,as_i386_coff,as_i386_pecoff
  69. ,as_m68k_as,as_m68k_gas,as_m68k_mit,as_m68k_mot,as_m68k_mpw,
  70. as_alpha_as,as_powerpc_as
  71. );
  72. { binary assembler writers, needed to test for -a }
  73. const
  74. {$ifdef i386} i386asmcnt=11; {$else} i386asmcnt=0; {$endif}
  75. {$ifdef m68k} m68kasmcnt=5; {$else} m68kasmcnt=0; {$endif}
  76. {$ifdef alpha} alphaasmcnt=1; {$else} alphaasmcnt=0; {$endif}
  77. {$ifdef powerpc} powerpcasmcnt=1; {$else} powerpcasmcnt=0; {$endif}
  78. asmcnt=i386asmcnt+m68kasmcnt+alphaasmcnt+powerpcasmcnt+1;
  79. binassem : set of tasm = [
  80. as_i386_dbg,as_i386_coff,as_i386_pecoff
  81. ];
  82. type
  83. tlink = (link_none
  84. ,link_i386_ld,link_i386_ldgo32v1,
  85. link_i386_ldgo32v2,link_i386_ldw,
  86. link_i386_ldos2
  87. ,link_m68k_ld,link_alpha_ld,link_powerpc_ld
  88. );
  89. const
  90. {$ifdef i386} i386linkcnt=5; {$else} i386linkcnt=0; {$endif}
  91. {$ifdef m68k} m68klinkcnt=1; {$else} m68klinkcnt=0; {$endif}
  92. {$ifdef alpha} alphalinkcnt=1; {$else} alphalinkcnt=0; {$endif}
  93. {$ifdef powerpc} powerpclinkcnt=1; {$else} powerpclinkcnt=0; {$endif}
  94. linkcnt=i386linkcnt+m68klinkcnt+alphalinkcnt+powerpclinkcnt+1;
  95. type
  96. tar = (ar_none
  97. ,ar_i386_ar,ar_i386_arw
  98. ,ar_m68k_ar,ar_alpha_ar,ar_powerpc_ar
  99. );
  100. const
  101. {$ifdef i386} i386arcnt=2; {$else} i386arcnt=0; {$endif}
  102. {$ifdef m68k} m68karcnt=1; {$else} m68karcnt=0; {$endif}
  103. {$ifdef alpha} alphaarcnt=1; {$else} alphaarcnt=0; {$endif}
  104. {$ifdef powerpc} powerpcarcnt=1; {$else} powerpcarcnt=0; {$endif}
  105. arcnt=i386arcnt+m68karcnt+alphaarcnt+powerpcarcnt+1;
  106. type
  107. tres = (res_none
  108. ,res_i386_windres
  109. );
  110. const
  111. {$ifdef i386} i386rescnt=1; {$else} i386rescnt=0; {$endif}
  112. {$ifdef m68k} m68krescnt=0; {$else} m68krescnt=0; {$endif}
  113. {$ifdef alpha} alpharescnt=0; {$else} alpharescnt=0; {$endif}
  114. {$ifdef powerpc} powerpcrescnt=0; {$else} powerpcrescnt=0; {$endif}
  115. rescnt=i386rescnt+m68krescnt+alpharescnt+powerpcrescnt+1;
  116. type
  117. tos = ( os_none,
  118. os_i386_GO32V1,os_i386_GO32V2,os_i386_Linux,os_i386_OS2,
  119. os_i386_Win32,
  120. os_m68k_Amiga,os_m68k_Atari,os_m68k_Mac,os_m68k_Linux,
  121. os_m68k_PalmOS,os_alpha_linux,os_powerpc_linux
  122. );
  123. const
  124. i386oscnt=5;
  125. m68koscnt=5;
  126. alphaoscnt=1;
  127. powerpcoscnt=1;
  128. oscnt=i386oscnt+m68koscnt+alphaoscnt+powerpcoscnt+1;
  129. type
  130. tosinfo = packed record
  131. id : tos;
  132. name : string[30];
  133. shortname : string[8];
  134. sharedlibext : string[10];
  135. staticlibext,
  136. sourceext,
  137. pasext,
  138. exeext,
  139. defext,
  140. scriptext : string[4];
  141. libprefix : string[3];
  142. Cprefix : string[2];
  143. newline : string[2];
  144. endian : tendian;
  145. stackalignment : {longint this is a little overkill no ?? }byte;
  146. size_of_pointer : byte;
  147. size_of_longint : byte;
  148. use_bound_instruction : boolean;
  149. use_function_relative_addresses : boolean;
  150. end;
  151. tasminfo = packed record
  152. id : tasm;
  153. idtxt : string[8];
  154. asmbin : string[8];
  155. asmcmd : string[50];
  156. allowdirect,
  157. externals,
  158. needar : boolean;
  159. labelprefix : string[2];
  160. comment : string[2];
  161. secnames : array[tsection] of string[20];
  162. end;
  163. tlinkinfo = packed record
  164. id : tlink;
  165. linkbin : string[8];
  166. linkcmd : string[127];
  167. binders : word;
  168. bindbin : array[1..2]of string[8];
  169. bindcmd : array[1..2]of string[127];
  170. stripopt : string[2];
  171. stripbind : boolean; { Strip symbols in binder? }
  172. libpathprefix : string[13];
  173. libpathsuffix : string[2];
  174. groupstart : string[8];
  175. groupend : string[2];
  176. inputstart : string[8];
  177. inputend : string[2];
  178. libprefix : string[2];
  179. end;
  180. tarinfo = packed record
  181. id : tar;
  182. arbin : string[8];
  183. arcmd : string[50];
  184. end;
  185. tresinfo = packed record
  186. id : tres;
  187. resbin : string[8];
  188. rescmd : string[50];
  189. end;
  190. ttargetinfo = packed record
  191. target : ttarget;
  192. flags : set of ttargetflags;
  193. cpu : ttargetcpu;
  194. short_name : string[8];
  195. unit_env : string[12];
  196. system_unit : string[8];
  197. smartext,
  198. unitext,
  199. unitlibext,
  200. asmext,
  201. objext,
  202. resext,
  203. resobjext,
  204. exeext : string[4];
  205. os : tos;
  206. link : tlink;
  207. assem : tasm;
  208. assemsrc : tasm; { default source writing assembler }
  209. ar : tar;
  210. res : tres;
  211. heapsize,
  212. maxheapsize,
  213. stacksize : longint;
  214. end;
  215. tasmmodeinfo=packed record
  216. id : tasmmode;
  217. idtxt : string[8];
  218. end;
  219. var
  220. target_cpu : ttargetcpu;
  221. target_info : ttargetinfo;
  222. target_os : tosinfo;
  223. target_asm : tasminfo;
  224. target_link : tlinkinfo;
  225. target_ar : tarinfo;
  226. target_res : tresinfo;
  227. target_path : string[12]; { for rtl/<X>/,fcl/<X>/, etc. }
  228. source_os : tosinfo;
  229. function set_target_os(t:tos):boolean;
  230. function set_target_asm(t:tasm):boolean;
  231. function set_target_link(t:tlink):boolean;
  232. function set_target_ar(t:tar):boolean;
  233. function set_target_res(t:tres):boolean;
  234. function set_target_info(t:ttarget):boolean;
  235. function set_string_target(s : string) : boolean;
  236. function set_string_asm(s : string) : boolean;
  237. function set_string_asmmode(s:string;var t:tasmmode):boolean;
  238. procedure InitSystems;
  239. implementation
  240. const
  241. {****************************************************************************
  242. OS Info
  243. ****************************************************************************}
  244. os_infos : array[1..oscnt] of tosinfo = (
  245. (
  246. id : os_none;
  247. name : 'No operating system';
  248. shortname : 'none'
  249. ),
  250. (
  251. id : os_i386_go32v1;
  252. name : 'GO32 V1 DOS extender';
  253. shortname : 'go32v1';
  254. sharedlibext : '.dll';
  255. staticlibext : '.a';
  256. sourceext : '.pp';
  257. pasext : '.pas';
  258. exeext : ''; { No .exe, the linker only output a.out ! }
  259. defext : '.def';
  260. scriptext : '.bat';
  261. libprefix : '';
  262. Cprefix : '_';
  263. newline : #13#10;
  264. endian : endian_little;
  265. stackalignment : 2;
  266. size_of_pointer : 4;
  267. size_of_longint : 4;
  268. use_bound_instruction : false;
  269. use_function_relative_addresses : true
  270. ),
  271. (
  272. id : os_i386_go32v2;
  273. name : 'GO32 V2 DOS extender';
  274. shortname : 'go32v2';
  275. sharedlibext : '.dll';
  276. staticlibext : '.a';
  277. sourceext : '.pp';
  278. pasext : '.pas';
  279. exeext : '.exe';
  280. defext : '.def';
  281. scriptext : '.bat';
  282. libprefix : '';
  283. Cprefix : '_';
  284. newline : #13#10;
  285. endian : endian_little;
  286. stackalignment : 2;
  287. size_of_pointer : 4;
  288. size_of_longint : 4;
  289. use_bound_instruction : false;
  290. use_function_relative_addresses : true
  291. ),
  292. (
  293. id : os_i386_linux;
  294. name : 'Linux for i386';
  295. shortname : 'linux';
  296. sharedlibext : '.so';
  297. staticlibext : '.a';
  298. sourceext : '.pp';
  299. pasext : '.pas';
  300. exeext : '';
  301. defext : '.def';
  302. scriptext : '.sh';
  303. libprefix : 'lib';
  304. Cprefix : '';
  305. newline : #10;
  306. endian : endian_little;
  307. stackalignment : 4;
  308. size_of_pointer : 4;
  309. size_of_longint : 4;
  310. use_bound_instruction : false;
  311. use_function_relative_addresses : true
  312. ),
  313. (
  314. id : os_i386_os2;
  315. name : 'OS/2 via EMX';
  316. shortname : 'os2';
  317. sharedlibext : '.ao2';
  318. staticlibext : '.ao2';
  319. sourceext : '.pas';
  320. pasext : '.pp';
  321. exeext : '.exe';
  322. defext : '.def';
  323. scriptext : '.cmd';
  324. libprefix : '';
  325. Cprefix : '_';
  326. newline : #13#10;
  327. endian : endian_little;
  328. stackalignment : 2;
  329. size_of_pointer : 4;
  330. size_of_longint : 4;
  331. use_bound_instruction : false;
  332. use_function_relative_addresses : false
  333. ),
  334. (
  335. id : os_i386_win32;
  336. name : 'Win32 for i386';
  337. shortname : 'win32';
  338. sharedlibext : '.dll';
  339. staticlibext : '.aw';
  340. sourceext : '.pp';
  341. pasext : '.pas';
  342. exeext : '.exe';
  343. defext : '.def';
  344. scriptext : '.bat';
  345. libprefix : 'lib';
  346. Cprefix : '_';
  347. newline : #13#10;
  348. endian : endian_little;
  349. stackalignment : 4;
  350. size_of_pointer : 4;
  351. size_of_longint : 4;
  352. use_bound_instruction : false;
  353. use_function_relative_addresses : true
  354. ),
  355. (
  356. id : os_m68k_amiga;
  357. name : 'Commodore Amiga';
  358. shortname : 'amiga';
  359. sharedlibext : '.library';
  360. staticlibext : '.a';
  361. sourceext : '.pp';
  362. pasext : '.pas';
  363. exeext : '';
  364. defext : '';
  365. scriptext : '';
  366. libprefix : '';
  367. Cprefix : '_';
  368. newline : #10;
  369. endian : endian_big;
  370. stackalignment : 2;
  371. size_of_pointer : 4;
  372. size_of_longint : 4;
  373. use_bound_instruction : false;
  374. use_function_relative_addresses : false
  375. ),
  376. (
  377. id : os_m68k_atari;
  378. name : 'Atari ST/STE';
  379. shortname : 'atari';
  380. sharedlibext : '.dll';
  381. staticlibext : '.a';
  382. sourceext : '.pp';
  383. pasext : '.pas';
  384. exeext : '.tpp';
  385. defext : '';
  386. scriptext : '';
  387. libprefix : '';
  388. Cprefix : '_';
  389. newline : #10;
  390. endian : endian_big;
  391. stackalignment : 2;
  392. size_of_pointer : 4;
  393. size_of_longint : 4;
  394. use_bound_instruction : false;
  395. use_function_relative_addresses : false
  396. ),
  397. (
  398. id : os_m68k_mac;
  399. name : 'Macintosh m68k';
  400. shortname : 'mac';
  401. sharedlibext : '.dll';
  402. staticlibext : '.a';
  403. sourceext : '.pp';
  404. pasext : '.pas';
  405. exeext : '.tpp';
  406. defext : '';
  407. scriptext : '';
  408. libprefix : '';
  409. Cprefix : '_';
  410. newline : #13;
  411. endian : endian_big;
  412. stackalignment : 2;
  413. size_of_pointer : 4;
  414. size_of_longint : 4;
  415. use_bound_instruction : false;
  416. use_function_relative_addresses : false
  417. ),
  418. (
  419. id : os_m68k_linux;
  420. name : 'Linux for m68k';
  421. shortname : 'linux';
  422. sharedlibext : '.so';
  423. staticlibext : '.a';
  424. sourceext : '.pp';
  425. pasext : '.pas';
  426. exeext : '';
  427. defext : '';
  428. scriptext : '.sh';
  429. libprefix : 'lib';
  430. Cprefix : '';
  431. newline : #10;
  432. endian : endian_big;
  433. stackalignment : 2;
  434. size_of_pointer : 4;
  435. size_of_longint : 4;
  436. use_bound_instruction : false;
  437. use_function_relative_addresses : true
  438. ),
  439. (
  440. id : os_m68k_palmos;
  441. name : 'PalmOS';
  442. shortname : 'palmos';
  443. sharedlibext : '.so';
  444. staticlibext : '.a';
  445. sourceext : '.pp';
  446. pasext : '.pas';
  447. exeext : '';
  448. defext : '';
  449. scriptext : '.sh';
  450. libprefix : 'lib';
  451. Cprefix : '_';
  452. newline : #10;
  453. endian : endian_big;
  454. stackalignment : 2;
  455. size_of_pointer : 4;
  456. size_of_longint : 4;
  457. use_bound_instruction : false;
  458. use_function_relative_addresses : false
  459. ),
  460. (
  461. id : os_alpha_linux;
  462. name : 'Linux for Alpha';
  463. shortname : 'axplinux';
  464. sharedlibext : '.so';
  465. staticlibext : '.a';
  466. sourceext : '.pp';
  467. pasext : '.pas';
  468. exeext : '';
  469. defext : '.def';
  470. scriptext : '.sh';
  471. libprefix : 'lib';
  472. Cprefix : '';
  473. newline : #10;
  474. endian : endian_little;
  475. stackalignment : 8;
  476. size_of_pointer : 8;
  477. size_of_longint : 4;
  478. use_bound_instruction : false;
  479. use_function_relative_addresses : true
  480. ),
  481. (
  482. id : os_powerpc_linux;
  483. name : 'Linux for PowerPC';
  484. shortname : 'linuxppc';
  485. sharedlibext : '.so';
  486. staticlibext : '.a';
  487. sourceext : '.pp';
  488. pasext : '.pas';
  489. exeext : '';
  490. defext : '.def';
  491. scriptext : '.sh';
  492. libprefix : 'lib';
  493. Cprefix : '';
  494. newline : #10;
  495. endian : endian_big;
  496. stackalignment : 8;
  497. size_of_pointer : 4;
  498. size_of_longint : 4;
  499. use_bound_instruction : false;
  500. use_function_relative_addresses : true
  501. )
  502. );
  503. {****************************************************************************
  504. Assembler Info
  505. ****************************************************************************}
  506. as_infos : array[1..asmcnt] of tasminfo = (
  507. (
  508. id : as_none;
  509. idtxt : 'no'
  510. )
  511. {$ifdef i386}
  512. ,(
  513. id : as_i386_as;
  514. idtxt : 'AS';
  515. asmbin : 'as';
  516. asmcmd : '-o $OBJ $ASM';
  517. allowdirect : true;
  518. externals : false;
  519. needar : true;
  520. labelprefix : '.L';
  521. comment : '# ';
  522. secnames : ('',
  523. '.text','.data','.bss',
  524. '','','','','','',
  525. '.stab','.stabstr')
  526. )
  527. ,(
  528. id : as_i386_as_aout;
  529. idtxt : 'AS_AOUT';
  530. asmbin : 'as';
  531. asmcmd : '-o $OBJ $ASM';
  532. allowdirect : true;
  533. externals : false;
  534. needar : true;
  535. labelprefix : 'L';
  536. comment : '# ';
  537. secnames : ('',
  538. '.text','.data','.bss',
  539. '','','','','','',
  540. '.stab','.stabstr')
  541. )
  542. ,(
  543. id : as_i386_asw;
  544. idtxt : 'ASW';
  545. asmbin : 'asw';
  546. asmcmd : '-o $OBJ $ASM';
  547. allowdirect : true;
  548. externals : false;
  549. needar : true;
  550. labelprefix : '.L';
  551. comment : '# ';
  552. secnames : ('',
  553. '.text','.data','.section .bss',
  554. '.section .idata$2','.section .idata$4','.section .idata$5',
  555. '.section .idata$6','.section .idata$7','.section .edata',
  556. '.stab','.stabstr')
  557. )
  558. ,(
  559. id : as_i386_nasmcoff;
  560. idtxt : 'NASMCOFF';
  561. asmbin : 'nasm';
  562. asmcmd : '-f coff -o $OBJ $ASM';
  563. allowdirect : true;
  564. externals : true;
  565. needar : true;
  566. labelprefix : 'L';
  567. comment : '; ';
  568. secnames : ('',
  569. '.text','.data','.bss',
  570. '.idata2','.idata4','.idata5','.idata6','.idata7','.edata',
  571. '.stab','.stabstr')
  572. )
  573. ,(
  574. id : as_i386_nasmelf;
  575. idtxt : 'NASMELF';
  576. asmbin : 'nasm';
  577. asmcmd : '-f elf -o $OBJ $ASM';
  578. allowdirect : true;
  579. externals : true;
  580. needar : true;
  581. labelprefix : 'L';
  582. comment : '; ';
  583. secnames : ('',
  584. '.text','.data','.bss',
  585. '.idata2','.idata4','.idata5','.idata6','.idata7','.edata',
  586. '.stab','.stabstr')
  587. )
  588. ,(
  589. id : as_i386_nasmobj;
  590. idtxt : 'NASMOBJ';
  591. asmbin : 'nasm';
  592. asmcmd : '-f obj -o $OBJ $ASM';
  593. allowdirect : true;
  594. externals : true;
  595. needar : true;
  596. labelprefix : 'L';
  597. comment : '; ';
  598. secnames : ('',
  599. '.text','.data','.bss',
  600. '.idata2','.idata4','.idata5','.idata6','.idata7','.edata',
  601. '.stab','.stabstr')
  602. )
  603. ,(
  604. id : as_i386_tasm;
  605. idtxt : 'TASM';
  606. asmbin : 'tasm';
  607. asmcmd : '/m2 $ASM $OBJ';
  608. allowdirect : true;
  609. externals : true;
  610. needar : true;
  611. labelprefix : '@@';
  612. comment : '; ';
  613. secnames : ('',
  614. 'CODE','DATA','BSS',
  615. '','','','','','',
  616. '','')
  617. )
  618. ,(
  619. id : as_i386_masm;
  620. idtxt : 'MASM';
  621. asmbin : 'masm';
  622. asmcmd : '$ASM $OBJ';
  623. allowdirect : true;
  624. externals : true;
  625. needar : true;
  626. labelprefix : '.L';
  627. comment : '; ';
  628. secnames : ('',
  629. 'CODE','DATA','BSS',
  630. '','','','','','',
  631. '','')
  632. )
  633. ,(
  634. id : as_i386_dbg;
  635. idtxt : 'DBG';
  636. asmbin : '';
  637. asmcmd : '';
  638. allowdirect : false;
  639. externals : true;
  640. needar : false;
  641. labelprefix : 'L';
  642. comment : '';
  643. secnames : ('',
  644. '.text','.data','.bss',
  645. '.idata$2','.idata$4','.idata$5','.idata$6','.idata$7','.edata',
  646. '.stab','.stabstr')
  647. )
  648. ,(
  649. id : as_i386_coff;
  650. idtxt : 'COFF';
  651. asmbin : '';
  652. asmcmd : '';
  653. allowdirect : false;
  654. externals : true;
  655. needar : false;
  656. labelprefix : '.L';
  657. comment : '';
  658. secnames : ('',
  659. '.text','.data','.bss',
  660. '.idata$2','.idata$4','.idata$5','.idata$6','.idata$7','.edata',
  661. '.stab','.stabstr')
  662. )
  663. ,(
  664. id : as_i386_pecoff;
  665. idtxt : 'PECOFF';
  666. asmbin : '';
  667. asmcmd : '';
  668. allowdirect : false;
  669. externals : true;
  670. needar : false;
  671. labelprefix : '.L';
  672. comment : '';
  673. secnames : ('',
  674. '.text','.data','.bss',
  675. '.idata$2','.idata$4','.idata$5','.idata$6','.idata$7','.edata',
  676. '.stab','.stabstr')
  677. )
  678. {$endif i386}
  679. {$ifdef m68k}
  680. ,(
  681. id : as_m68k_as;
  682. idtxt : 'AS';
  683. asmbin : 'as';
  684. asmcmd : '-o $OBJ $ASM';
  685. allowdirect : true;
  686. externals : false;
  687. needar : true;
  688. labelprefix : '.L';
  689. comment : '# ';
  690. secnames : ('',
  691. '.text','.data','.bss',
  692. '.idata$2','.idata$4','.idata$5','.idata$6','.idata$7','.edata',
  693. '.stab','.stabstr')
  694. )
  695. ,(
  696. id : as_m68k_gas;
  697. idtxt : 'GAS';
  698. asmbin : 'as68k'; { Gas for the Amiga}
  699. asmcmd : '--register-prefix-optional -o $OBJ $ASM';
  700. allowdirect : true;
  701. externals : false;
  702. needar : true;
  703. labelprefix : '.L';
  704. comment : '| ';
  705. secnames : ('',
  706. '.text','.data','.bss',
  707. '.idata$2','.idata$4','.idata$5','.idata$6','.idata$7','.edata',
  708. '.stab','.stabstr')
  709. )
  710. ,(
  711. id : as_m68k_mit;
  712. idtxt : 'MIT';
  713. asmbin : '';
  714. asmcmd : '-o $OBJ $ASM';
  715. allowdirect : true;
  716. externals : false;
  717. needar : true;
  718. labelprefix : '.L';
  719. comment : '| ';
  720. secnames : ('',
  721. '.text','.data','.bss',
  722. '.idata$2','.idata$4','.idata$5','.idata$6','.idata$7','.edata',
  723. '.stab','.stabstr')
  724. )
  725. ,(
  726. id : as_m68k_mot;
  727. idtxt : 'MOT';
  728. asmbin : '';
  729. asmcmd : '-o $OBJ $ASM';
  730. allowdirect : true;
  731. externals : false;
  732. needar : true;
  733. labelprefix : '__L';
  734. comment : '| ';
  735. secnames : ('',
  736. '.text','.data','.bss',
  737. '.idata$2','.idata$4','.idata$5','.idata$6','.idata$7','.edata',
  738. '.stab','.stabstr')
  739. )
  740. ,(
  741. id : as_m68k_mpw;
  742. idtxt : 'MPW';
  743. asmbin : '';
  744. asmcmd : '-model far -o $OBJ $ASM';
  745. allowdirect : true;
  746. externals : false;
  747. needar : true;
  748. labelprefix : '__L';
  749. comment : '| ';
  750. secnames : ('',
  751. '.text','.data','.bss',
  752. '.idata$2','.idata$4','.idata$5','.idata$6','.idata$7','.edata',
  753. '.stab','.stabstr')
  754. )
  755. {$endif m68k}
  756. {$ifdef alpha}
  757. ,(
  758. id : as_alpha_as;
  759. idtxt : 'AS';
  760. asmbin : 'as';
  761. asmcmd : '-o $OBJ $ASM';
  762. allowdirect : true;
  763. externals : false;
  764. needar : true;
  765. labelprefix : '.L';
  766. comment : '# ';
  767. secnames : ('',
  768. '.text','.data','.bss',
  769. '','','','','','',
  770. '.stab','.stabstr')
  771. )
  772. {$endif}
  773. {$ifdef powerpc}
  774. ,(
  775. id : as_powerpc_as;
  776. idtxt : 'AS';
  777. asmbin : 'as';
  778. asmcmd : '-o $OBJ $ASM';
  779. allowdirect : true;
  780. externals : false;
  781. needar : true;
  782. labelprefix : '.L';
  783. comment : '# ';
  784. secnames : ('',
  785. '.text','.data','.bss',
  786. '','','','','','',
  787. '.stab','.stabstr')
  788. )
  789. {$endif}
  790. );
  791. {****************************************************************************
  792. Linker Info
  793. ****************************************************************************}
  794. link_infos : array[1..linkcnt] of tlinkinfo = (
  795. (
  796. id : link_none
  797. )
  798. {$ifdef i386}
  799. ,(
  800. id : link_i386_ld;
  801. linkbin : 'ld';
  802. linkcmd : '$OPT -o $EXE $RES';
  803. binders : 0;
  804. bindbin : ('','');
  805. bindcmd : ('','');
  806. stripopt : '-s';
  807. stripbind : false;
  808. libpathprefix : 'SEARCH_DIR(';
  809. libpathsuffix : ')';
  810. groupstart : 'GROUP(';
  811. groupend : ')';
  812. inputstart : 'INPUT(';
  813. inputend : ')';
  814. libprefix : '-l'
  815. )
  816. ,(
  817. id : link_i386_ldgo32v1;
  818. linkbin : 'ld';
  819. linkcmd : '-oformat coff-go32 $OPT -o $EXE @$RES';
  820. binders : 1;
  821. bindbin : ('aout2exe','');
  822. bindcmd : ('$EXE','');
  823. stripopt : '-s';
  824. stripbind : false;
  825. libpathprefix : '-L';
  826. libpathsuffix : '';
  827. groupstart : '-(';
  828. groupend : '-)';
  829. inputstart : '';
  830. inputend : '';
  831. libprefix : '-l'
  832. )
  833. ,(
  834. id : link_i386_ldgo32v2;
  835. linkbin : 'ld';
  836. linkcmd : '-oformat coff-go32-exe $OPT -o $EXE @$RES';
  837. binders:0;
  838. bindbin : ('','');
  839. bindcmd : ('','');
  840. stripopt : '-s';
  841. stripbind : false;
  842. libpathprefix : '-L';
  843. libpathsuffix : '';
  844. groupstart : '-(';
  845. groupend : '-)';
  846. inputstart : '';
  847. inputend : '';
  848. libprefix : '-l'
  849. )
  850. ,(
  851. id : link_i386_ldw;
  852. linkbin : 'ldw';
  853. linkcmd : '$OPT -o $EXE $RES';
  854. binders : 0;
  855. bindbin : ('dlltool','ldw');
  856. bindcmd : ('--as asw.exe --dllname $EXE --output-exp exp.$$$',
  857. '$OPT -o $EXE $RES exp.$$$');
  858. stripopt : '-s';
  859. stripbind : false;
  860. libpathprefix : 'SEARCH_DIR(';
  861. libpathsuffix : ')';
  862. groupstart : 'GROUP(';
  863. groupend : ')';
  864. inputstart : 'INPUT(';
  865. inputend : ')';
  866. libprefix : '-l'
  867. )
  868. ,(
  869. id : link_i386_ldos2;
  870. linkbin : 'ld'; { Os/2 }
  871. linkcmd : '-o $EXE @$RES';
  872. binders : 1;
  873. bindbin : ('emxbind','');
  874. bindcmd : ('-b $STRIP$PM -k$STACKKB -h$HEAPMB -o $EXE.exe $EXE -aim -s$DOSHEAPKB',
  875. '');
  876. stripopt : '-s';
  877. stripbind : true;
  878. libpathprefix : '-L';
  879. libpathsuffix : '';
  880. groupstart : ''; {Linker is too primitive...}
  881. groupend : '';
  882. inputstart : '';
  883. inputend : '';
  884. libprefix : '-l'
  885. )
  886. {$endif i386}
  887. {$ifdef m68k}
  888. ,(
  889. id : link_m68k_ld;
  890. linkbin : 'ld';
  891. linkcmd : '$OPT -o $EXE $RES';
  892. binders:0;
  893. bindbin : ('','');
  894. bindcmd : ('','');
  895. stripopt : '-s';
  896. stripbind : false;
  897. libpathprefix : 'SEARCH_DIR(';
  898. libpathsuffix : ')';
  899. groupstart : 'GROUP(';
  900. groupend : ')';
  901. inputstart : 'INPUT(';
  902. inputend : ')';
  903. libprefix : '-l'
  904. )
  905. {$endif m68k}
  906. {$ifdef alpha}
  907. ,(
  908. id : link_alpha_ld;
  909. linkbin : 'ld';
  910. linkcmd : '$OPT -o $EXE $RES';
  911. binders : 0;
  912. bindbin : ('','');
  913. bindcmd : ('','');
  914. stripopt : '-s';
  915. stripbind : false;
  916. libpathprefix : 'SEARCH_DIR(';
  917. libpathsuffix : ')';
  918. groupstart : 'GROUP(';
  919. groupend : ')';
  920. inputstart : 'INPUT(';
  921. inputend : ')';
  922. libprefix : '-l'
  923. )
  924. {$endif}
  925. {$ifdef powerpc}
  926. ,(
  927. id : link_powerpc_ld;
  928. linkbin : 'ld';
  929. linkcmd : '$OPT -o $EXE $RES';
  930. binders : 0;
  931. bindbin : ('','');
  932. bindcmd : ('','');
  933. stripopt : '-s';
  934. stripbind : false;
  935. libpathprefix : 'SEARCH_DIR(';
  936. libpathsuffix : ')';
  937. groupstart : 'GROUP(';
  938. groupend : ')';
  939. inputstart : 'INPUT(';
  940. inputend : ')';
  941. libprefix : '-l'
  942. )
  943. {$endif}
  944. );
  945. {****************************************************************************
  946. Ar Info
  947. ****************************************************************************}
  948. ar_infos : array[1..arcnt] of tarinfo = (
  949. (
  950. id : ar_none
  951. )
  952. {$ifdef i386}
  953. ,(
  954. id : ar_i386_ar;
  955. arbin : 'ar';
  956. arcmd : 'rs $LIB $FILES'
  957. ),
  958. (
  959. id : ar_i386_arw;
  960. arbin : 'arw';
  961. arcmd : 'rs $LIB $FILES'
  962. )
  963. {$endif i386}
  964. {$ifdef m68k}
  965. ,(
  966. id : ar_m68k_ar;
  967. arbin : 'ar';
  968. arcmd : 'rs $LIB $FILES'
  969. )
  970. {$endif m68k}
  971. {$ifdef alpha}
  972. ,(
  973. id : ar_alpha_ar;
  974. arbin : 'ar';
  975. arcmd : 'rs $LIB $FILES'
  976. )
  977. {$endif}
  978. {$ifdef powerpc}
  979. ,(
  980. id : ar_powerpc_ar;
  981. arbin : 'ar';
  982. arcmd : 'rs $LIB $FILES'
  983. )
  984. {$endif}
  985. );
  986. {****************************************************************************
  987. Res Info
  988. ****************************************************************************}
  989. res_infos : array[1..rescnt] of tresinfo = (
  990. (
  991. id : res_none
  992. )
  993. {$ifdef i386}
  994. ,(
  995. id : res_i386_windres;
  996. resbin : 'windres';
  997. rescmd : '--include $INC -O coff -o $OBJ $RES'
  998. )
  999. {$endif i386}
  1000. );
  1001. {****************************************************************************
  1002. Targets Info
  1003. ****************************************************************************}
  1004. target_infos : array[1..targetcnt] of ttargetinfo = (
  1005. (
  1006. target : target_none;
  1007. flags : [];
  1008. cpu : no_cpu;
  1009. short_name : 'notarget'
  1010. )
  1011. {$ifdef i386}
  1012. ,(
  1013. target : target_i386_GO32V1;
  1014. flags : [];
  1015. cpu : i386;
  1016. short_name : 'GO32V1';
  1017. unit_env : 'GO32V1UNITS';
  1018. system_unit : 'SYSTEM';
  1019. smartext : '.sl';
  1020. unitext : '.pp1';
  1021. unitlibext : '.ppl';
  1022. asmext : '.s1';
  1023. objext : '.o1';
  1024. resext : '.res';
  1025. resobjext : '.o1r';
  1026. exeext : ''; { The linker produces a.out }
  1027. os : os_i386_GO32V1;
  1028. link : link_i386_ldgo32v1;
  1029. assem : as_i386_as;
  1030. assemsrc : as_i386_as;
  1031. ar : ar_i386_ar;
  1032. res : res_none;
  1033. heapsize : 2048*1024;
  1034. maxheapsize : 32768*1024;
  1035. stacksize : 16384
  1036. ),
  1037. (
  1038. target : target_i386_GO32V2;
  1039. flags : [];
  1040. cpu : i386;
  1041. short_name : 'GO32V2';
  1042. unit_env : 'GO32V2UNITS';
  1043. system_unit : 'SYSTEM';
  1044. smartext : '.sl';
  1045. unitext : '.ppu';
  1046. unitlibext : '.ppl';
  1047. asmext : '.s';
  1048. objext : '.o';
  1049. resext : '.res';
  1050. resobjext : '.or';
  1051. exeext : '.exe';
  1052. os : os_i386_GO32V2;
  1053. link : link_i386_ldgo32v2;
  1054. assem : as_i386_coff;
  1055. assemsrc : as_i386_as;
  1056. ar : ar_i386_ar;
  1057. res : res_none;
  1058. heapsize : 2048*1024;
  1059. maxheapsize : 32768*1024;
  1060. stacksize : 16384
  1061. ),
  1062. (
  1063. target : target_i386_LINUX;
  1064. flags : [];
  1065. cpu : i386;
  1066. short_name : 'LINUX';
  1067. unit_env : 'LINUXUNITS';
  1068. system_unit : 'syslinux';
  1069. smartext : '.sl';
  1070. unitext : '.ppu';
  1071. unitlibext : '.ppl';
  1072. asmext : '.s';
  1073. objext : '.o';
  1074. resext : '.res';
  1075. resobjext : '.or';
  1076. exeext : '';
  1077. os : os_i386_Linux;
  1078. link : link_i386_ld;
  1079. assem : as_i386_as;
  1080. assemsrc : as_i386_as;
  1081. ar : ar_i386_ar;
  1082. res : res_none;
  1083. heapsize : 256*1024;
  1084. maxheapsize : 32768*1024;
  1085. stacksize : 8192
  1086. ),
  1087. (
  1088. target : target_i386_OS2;
  1089. flags : [tf_need_export];
  1090. cpu : i386;
  1091. short_name : 'OS2';
  1092. unit_env : 'OS2UNITS';
  1093. system_unit : 'SYSOS2';
  1094. smartext : '.sl';
  1095. unitext : '.ppo';
  1096. unitlibext : '.ppl';
  1097. asmext : '.so2';
  1098. objext : '.oo2';
  1099. resext : '.res';
  1100. resobjext : '.oor';
  1101. exeext : ''; { The linker produces a.out }
  1102. os : os_i386_OS2;
  1103. link : link_i386_ldos2;
  1104. assem : as_i386_as_aout;
  1105. assemsrc : as_i386_as_aout;
  1106. ar : ar_i386_ar;
  1107. res : res_none;
  1108. heapsize : 256*1024;
  1109. maxheapsize : 32768*1024;
  1110. stacksize : 32768
  1111. ),
  1112. (
  1113. target : target_i386_WIN32;
  1114. flags : [];
  1115. cpu : i386;
  1116. short_name : 'WIN32';
  1117. unit_env : 'WIN32UNITS';
  1118. system_unit : 'SYSWIN32';
  1119. smartext : '.slw';
  1120. unitext : '.ppw';
  1121. unitlibext : '.ppl';
  1122. asmext : '.sw';
  1123. objext : '.ow';
  1124. resext : '.rc';
  1125. resobjext : '.owr';
  1126. exeext : '.exe';
  1127. os : os_i386_Win32;
  1128. link : link_i386_ldw;
  1129. assem : as_i386_pecoff;
  1130. assemsrc : as_i386_asw;
  1131. ar : ar_i386_arw;
  1132. res : res_i386_windres;
  1133. heapsize : 256*1024;
  1134. maxheapsize : 32*1024*1024;
  1135. stacksize : 32*1024*1024
  1136. )
  1137. {$endif i386}
  1138. {$ifdef m68k}
  1139. ,(
  1140. target : target_m68k_Amiga;
  1141. flags : [];
  1142. cpu : m68k;
  1143. short_name : 'AMIGA';
  1144. unit_env : '';
  1145. system_unit : 'sysamiga';
  1146. smartext : '.sl';
  1147. unitext : '.ppa';
  1148. unitlibext : '.ppl';
  1149. asmext : '.asm';
  1150. objext : '.o';
  1151. resext : '.res';
  1152. resobjext : '.or';
  1153. exeext : '';
  1154. os : os_m68k_Amiga;
  1155. link : link_m68k_ld;
  1156. assem : as_m68k_as;
  1157. assemsrc : as_m68k_as;
  1158. ar : ar_m68k_ar;
  1159. res : res_none;
  1160. heapsize : 128*1024;
  1161. maxheapsize : 32768*1024;
  1162. stacksize : 8192
  1163. ),
  1164. (
  1165. target : target_m68k_Atari;
  1166. flags : [];
  1167. cpu : m68k;
  1168. short_name : 'ATARI';
  1169. unit_env : '';
  1170. system_unit : 'SYSATARI';
  1171. smartext : '.sl';
  1172. unitext : '.ppt';
  1173. unitlibext : '.ppl';
  1174. asmext : '.s';
  1175. objext : '.o';
  1176. resext : '.res';
  1177. resobjext : '.or';
  1178. exeext : '.ttp';
  1179. os : os_m68k_Atari;
  1180. link : link_m68k_ld;
  1181. assem : as_m68k_as;
  1182. assemsrc : as_m68k_as;
  1183. ar : ar_m68k_ar;
  1184. res : res_none;
  1185. heapsize : 16*1024;
  1186. maxheapsize : 32768*1024;
  1187. stacksize : 8192
  1188. ),
  1189. (
  1190. target : target_m68k_Mac;
  1191. flags : [];
  1192. cpu : m68k;
  1193. short_name : 'MACOS';
  1194. unit_env : '';
  1195. system_unit : 'sysmac';
  1196. smartext : '.sl';
  1197. unitext : '.ppt';
  1198. unitlibext : '.ppl';
  1199. asmext : '.a';
  1200. objext : '.o';
  1201. resext : '.res';
  1202. resobjext : '.or';
  1203. exeext : '';
  1204. os : os_m68k_Mac;
  1205. link : link_m68k_ld;
  1206. assem : as_m68k_mpw;
  1207. assemsrc : as_m68k_mpw;
  1208. ar : ar_m68k_ar;
  1209. res : res_none;
  1210. heapsize : 128*1024;
  1211. maxheapsize : 32768*1024;
  1212. stacksize : 8192
  1213. ),
  1214. (
  1215. target : target_m68k_linux;
  1216. flags : [];
  1217. cpu : m68k;
  1218. short_name : 'LINUX';
  1219. unit_env : 'LINUXUNITS';
  1220. system_unit : 'syslinux';
  1221. smartext : '.sl';
  1222. unitext : '.ppu';
  1223. unitlibext : '.ppl';
  1224. asmext : '.s';
  1225. objext : '.o';
  1226. resext : '.res';
  1227. resobjext : '.or';
  1228. exeext : '';
  1229. os : os_m68k_Linux;
  1230. link : link_m68k_ld;
  1231. assem : as_m68k_as;
  1232. assemsrc : as_m68k_as;
  1233. ar : ar_m68k_ar;
  1234. res : res_none;
  1235. heapsize : 128*1024;
  1236. maxheapsize : 32768*1024;
  1237. stacksize : 8192
  1238. ),
  1239. (
  1240. target : target_m68k_PalmOS;
  1241. flags : [];
  1242. cpu : m68k;
  1243. short_name : 'PALMOS';
  1244. unit_env : 'PALMUNITS';
  1245. system_unit : 'syspalm';
  1246. smartext : '.sl';
  1247. unitext : '.ppu';
  1248. unitlibext : '.ppl';
  1249. asmext : '.s';
  1250. objext : '.o';
  1251. resext : '.res';
  1252. resobjext : '.or';
  1253. exeext : '';
  1254. os : os_m68k_PalmOS;
  1255. link : link_m68k_ld;
  1256. assem : as_m68k_as;
  1257. assemsrc : as_m68k_as;
  1258. ar : ar_m68k_ar;
  1259. res : res_none;
  1260. heapsize : 128*1024;
  1261. maxheapsize : 32768*1024;
  1262. stacksize : 8192
  1263. )
  1264. {$endif m68k}
  1265. {$ifdef alpha}
  1266. ,(
  1267. target : target_alpha_LINUX;
  1268. flags : [];
  1269. cpu : alpha;
  1270. short_name : 'LINUX';
  1271. unit_env : 'LINUXUNITS';
  1272. system_unit : 'syslinux';
  1273. smartext : '.sl';
  1274. unitext : '.ppu';
  1275. unitlibext : '.ppl';
  1276. asmext : '.s';
  1277. objext : '.o';
  1278. resext : '.res';
  1279. resobjext : '.or';
  1280. exeext : '';
  1281. os : os_alpha_Linux;
  1282. link : link_alpha_ld;
  1283. assem : as_alpha_as;
  1284. assemsrc : as_alpha_as;
  1285. ar : ar_alpha_ar;
  1286. res : res_none;
  1287. heapsize : 256*1024;
  1288. maxheapsize : 32768*1024;
  1289. stacksize : 8192
  1290. )
  1291. {$endif}
  1292. {$ifdef powerpc}
  1293. ,(
  1294. target : target_powerpc_LINUX;
  1295. flags : [];
  1296. cpu : alpha;
  1297. short_name : 'LINUX';
  1298. unit_env : 'LINUXUNITS';
  1299. system_unit : 'syslinux';
  1300. smartext : '.sl';
  1301. unitext : '.ppu';
  1302. unitlibext : '.ppl';
  1303. asmext : '.s';
  1304. objext : '.o';
  1305. resext : '.res';
  1306. resobjext : '.or';
  1307. exeext : '';
  1308. os : os_powerpc_Linux;
  1309. link : link_powerpc_ld;
  1310. assem : as_powerpc_as;
  1311. assemsrc : as_powerpc_as;
  1312. ar : ar_powerpc_ar;
  1313. res : res_none;
  1314. heapsize : 256*1024;
  1315. maxheapsize : 32768*1024;
  1316. stacksize : 8192
  1317. )
  1318. {$endif}
  1319. );
  1320. {****************************************************************************
  1321. AsmModeInfo
  1322. ****************************************************************************}
  1323. asmmodeinfos : array[1..asmmodecnt] of tasmmodeinfo = (
  1324. (
  1325. id : asmmode_none;
  1326. idtxt : 'none'
  1327. )
  1328. {$ifdef i386}
  1329. ,(
  1330. id : asmmode_i386_direct;
  1331. idtxt : 'DIRECT'
  1332. ),
  1333. (
  1334. id : asmmode_i386_att;
  1335. idtxt : 'ATT'
  1336. ),
  1337. (
  1338. id : asmmode_i386_intel;
  1339. idtxt : 'INTEL'
  1340. )
  1341. {$endif i386}
  1342. {$ifdef m68k}
  1343. ,(
  1344. id : asmmode_m68k_mot;
  1345. idtxt : 'MOT'
  1346. )
  1347. {$endif m68k}
  1348. {$ifdef alpha}
  1349. ,(
  1350. id : asmmode_alpha_direct;
  1351. idtxt : 'DIRECT'
  1352. )
  1353. {$endif}
  1354. {$ifdef powerpc}
  1355. ,(
  1356. id : asmmode_powerpc_direct;
  1357. idtxt : 'DIRECT'
  1358. )
  1359. {$endif}
  1360. );
  1361. {****************************************************************************
  1362. Helpers
  1363. ****************************************************************************}
  1364. function upper(const s : string) : string;
  1365. var
  1366. i : longint;
  1367. begin
  1368. for i:=1 to length(s) do
  1369. if s[i] in ['a'..'z'] then
  1370. upper[i]:=char(byte(s[i])-32)
  1371. else
  1372. upper[i]:=s[i];
  1373. {$ifndef TP}
  1374. {$ifopt H+}
  1375. SetLength(upper,length(s));
  1376. {$else}
  1377. upper[0]:=s[0];
  1378. {$endif}
  1379. {$else}
  1380. upper[0]:=s[0];
  1381. {$endif}
  1382. end;
  1383. function lower(const s : string) : string;
  1384. var
  1385. i : longint;
  1386. begin
  1387. for i:=1 to length(s) do
  1388. if s[i] in ['A'..'Z'] then
  1389. lower[i]:=char(byte(s[i])+32)
  1390. else
  1391. lower[i]:=s[i];
  1392. {$ifndef TP}
  1393. {$ifopt H+}
  1394. setlength(lower,length(s));
  1395. {$else}
  1396. lower[0]:=s[0];
  1397. {$endif}
  1398. {$else}
  1399. lower[0]:=s[0];
  1400. {$endif}
  1401. end;
  1402. function set_target_os(t:tos):boolean;
  1403. var
  1404. i : longint;
  1405. begin
  1406. set_target_os:=false;
  1407. { target 1 is none }
  1408. for i:=2 to oscnt do
  1409. if os_infos[i].id=t then
  1410. begin
  1411. target_os:=os_infos[i];
  1412. set_target_os:=true;
  1413. exit;
  1414. end;
  1415. end;
  1416. function set_target_asm(t:tasm):boolean;
  1417. var
  1418. i : longint;
  1419. begin
  1420. set_target_asm:=false;
  1421. for i:=1 to asmcnt do
  1422. if as_infos[i].id=t then
  1423. begin
  1424. target_asm:=as_infos[i];
  1425. set_target_asm:=true;
  1426. exit;
  1427. end;
  1428. end;
  1429. function set_target_link(t:tlink):boolean;
  1430. var
  1431. i : longint;
  1432. begin
  1433. set_target_link:=false;
  1434. for i:=1 to linkcnt do
  1435. if link_infos[i].id=t then
  1436. begin
  1437. target_link:=link_infos[i];
  1438. set_target_link:=true;
  1439. exit;
  1440. end;
  1441. end;
  1442. function set_target_ar(t:tar):boolean;
  1443. var
  1444. i : longint;
  1445. begin
  1446. set_target_ar:=false;
  1447. for i:=1 to arcnt do
  1448. if ar_infos[i].id=t then
  1449. begin
  1450. target_ar:=ar_infos[i];
  1451. set_target_ar:=true;
  1452. exit;
  1453. end;
  1454. end;
  1455. function set_target_res(t:tres):boolean;
  1456. var
  1457. i : longint;
  1458. begin
  1459. set_target_res:=false;
  1460. for i:=1 to rescnt do
  1461. if res_infos[i].id=t then
  1462. begin
  1463. target_res:=res_infos[i];
  1464. set_target_res:=true;
  1465. exit;
  1466. end;
  1467. end;
  1468. function set_target_info(t:ttarget):boolean;
  1469. var
  1470. i : longint;
  1471. begin
  1472. set_target_info:=false;
  1473. for i:=1 to targetcnt do
  1474. if target_infos[i].target=t then
  1475. begin
  1476. target_info:=target_infos[i];
  1477. set_target_os(target_info.os);
  1478. set_target_asm(target_info.assem);
  1479. set_target_link(target_info.link);
  1480. set_target_ar(target_info.ar);
  1481. set_target_res(target_info.res);
  1482. target_path:=lower(target_info.short_name);
  1483. target_cpu:=target_info.cpu;
  1484. set_target_info:=true;
  1485. exit;
  1486. end;
  1487. end;
  1488. {****************************************************************************
  1489. Load from string
  1490. ****************************************************************************}
  1491. function set_string_target(s : string) : boolean;
  1492. var
  1493. i : longint;
  1494. begin
  1495. set_string_target:=false;
  1496. { this should be case insensitive !! PM }
  1497. s:=upper(s);
  1498. for i:=1 to targetcnt do
  1499. if target_infos[i].short_name=s then
  1500. begin
  1501. set_target_info(target_infos[i].target);
  1502. set_string_target:=true;
  1503. exit;
  1504. end;
  1505. end;
  1506. function set_string_asm(s : string) : boolean;
  1507. var
  1508. i : longint;
  1509. begin
  1510. set_string_asm:=false;
  1511. { this should be case insensitive !! PM }
  1512. s:=upper(s);
  1513. for i:=1 to asmcnt do
  1514. if as_infos[i].idtxt=s then
  1515. begin
  1516. target_asm:=as_infos[i];
  1517. set_string_asm:=true;
  1518. end;
  1519. end;
  1520. function set_string_asmmode(s:string;var t:tasmmode):boolean;
  1521. var
  1522. i : longint;
  1523. begin
  1524. set_string_asmmode:=false;
  1525. { this should be case insensitive !! PM }
  1526. s:=upper(s);
  1527. for i:=1 to asmmodecnt do
  1528. if asmmodeinfos[i].idtxt=s then
  1529. begin
  1530. t:=asmmodeinfos[i].id;
  1531. set_string_asmmode:=true;
  1532. end;
  1533. end;
  1534. {****************************************************************************
  1535. Initialization of default target
  1536. ****************************************************************************}
  1537. procedure default_os(t:ttarget);
  1538. begin
  1539. set_target_info(t);
  1540. if source_os.name='' then
  1541. source_os:=target_os;
  1542. end;
  1543. procedure set_source_os(t:tos);
  1544. var
  1545. i : longint;
  1546. begin
  1547. { can't use message() here (PFV) }
  1548. if source_os.name<>'' then
  1549. Writeln('Warning: Source OS Redefined!');
  1550. for i:=1 to oscnt do
  1551. if os_infos[i].id=t then
  1552. begin
  1553. source_os:=os_infos[i];
  1554. exit;
  1555. end;
  1556. end;
  1557. procedure InitSystems;
  1558. begin
  1559. { first get source OS }
  1560. source_os.name:='';
  1561. { please note then we use cpu86 and cpu68 here on purpose !! }
  1562. {$ifdef cpu86}
  1563. {$ifdef GO32V1}
  1564. set_source_os(os_i386_GO32V1);
  1565. {$else}
  1566. {$ifdef GO32V2}
  1567. set_source_os(os_i386_GO32V2);
  1568. {$else}
  1569. {$ifdef OS2}
  1570. set_source_os(os_i386_OS2);
  1571. if (OS_Mode = osDOS) or (OS_Mode = osDPMI)
  1572. then source_os.scriptext := '.bat';
  1573. {OS/2 via EMX can be run under DOS as well}
  1574. {$else}
  1575. {$ifdef LINUX}
  1576. set_source_os(os_i386_LINUX);
  1577. {$else}
  1578. {$ifdef WIN32}
  1579. set_source_os(os_i386_WIN32);
  1580. {$endif win32}
  1581. {$endif linux}
  1582. {$endif os2}
  1583. {$endif go32v2}
  1584. {$endif go32v1}
  1585. {$endif cpu86}
  1586. {$ifdef cpu68}
  1587. {$ifdef AMIGA}
  1588. set_source_os(os_m68k_Amiga);
  1589. {$else}
  1590. {$ifdef ATARI}
  1591. set_source_os(os_m68k_Atari);
  1592. {$else}
  1593. {$ifdef MACOS}
  1594. set_source_os(os_m68k_MAC);
  1595. {$else}
  1596. {$ifdef LINUX}
  1597. set_source_os(os_m68k_linux);
  1598. {$endif linux}
  1599. {$endif macos}
  1600. {$endif atari}
  1601. {$endif amiga}
  1602. {$endif cpu68}
  1603. { Now default target !! }
  1604. {$ifdef i386}
  1605. {$ifdef GO32V1}
  1606. default_os(target_i386_GO32V1);
  1607. {$else}
  1608. {$ifdef GO32V2}
  1609. default_os(target_i386_GO32V2);
  1610. {$else}
  1611. {$ifdef OS2}
  1612. default_os(target_i386_OS2);
  1613. {$else}
  1614. {$ifdef LINUX}
  1615. default_os(target_i386_LINUX);
  1616. {$else}
  1617. {$ifdef WIN32}
  1618. default_os(target_i386_WIN32);
  1619. {$else}
  1620. default_os(target_i386_GO32V2);
  1621. {$endif win32}
  1622. {$endif linux}
  1623. {$endif os2}
  1624. {$endif go32v2}
  1625. {$endif go32v1}
  1626. {$endif i386}
  1627. {$ifdef m68k}
  1628. {$ifdef AMIGA}
  1629. default_os(target_m68k_Amiga);
  1630. {$else}
  1631. {$ifdef ATARI}
  1632. default_os(target_m68k_Atari);
  1633. {$else}
  1634. {$ifdef MACOS}
  1635. default_os(target_m68k_Mac);
  1636. {$else}
  1637. {$ifdef LINUX}
  1638. default_os(target_m68k_linux);
  1639. {$else}
  1640. default_os(target_m68k_Amiga);
  1641. {$endif linux}
  1642. {$endif macos}
  1643. {$endif atari}
  1644. {$endif amiga}
  1645. {$endif m68k}
  1646. {$ifdef alpha}
  1647. default_os(target_alpha_linux);
  1648. {$endif alpha}
  1649. {$ifdef powerpc}
  1650. default_os(target_powerpc_linux);
  1651. {$endif powerpc}
  1652. end;
  1653. begin
  1654. InitSystems;
  1655. end.
  1656. {
  1657. $Log$
  1658. Revision 1.1 2000-07-13 09:48:33 michael
  1659. + Initial import
  1660. Revision 1.2 1999/09/17 09:16:13 peter
  1661. * updated with compiler versions
  1662. }