mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-13 00:29:48 +02:00

+ darwin/ppc64 support + val/str/read(ln)/write(ln) support for enums + simple cse at the node tree level + if-node simplify support + simple ssa support for memory locations + support for optional overflow/rangecheck boolean parameters for operators * a lot of unification of the ppc32/ppc64 code generators ........ r6380 | jonas | 2007-02-08 21:25:36 +0100 (Thu, 08 Feb 2007) | 4 lines Changed paths: M /branches/fpc_2_3/compiler/ncgld.pas M /branches/fpc_2_3/compiler/tgobj.pas A /branches/fpc_2_3/tests/webtbs/tw8283.pp + support for replacing the memory location of a temp (including local variables) with that of another temp to avoid unnecessary copies (mantis #8283) ........ r6381 | jonas | 2007-02-08 22:53:36 +0100 (Thu, 08 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/nflw.pas A /branches/fpc_2_3/tests/webtbs/tw8282.pp + simplify support for ifn (based on patch by Florian) ........ r6386 | peter | 2007-02-09 13:48:53 +0100 (Fri, 09 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/htypechk.pas M /branches/fpc_2_3/compiler/ncal.pas M /branches/fpc_2_3/compiler/symconst.pas * overflow,rangecheck optional parameters for operators, patch from 8281 ........ r6391 | jonas | 2007-02-09 23:52:13 +0100 (Fri, 09 Feb 2007) | 4 lines Changed paths: M /branches/fpc_2_3/compiler/powerpc/agppcgas.pas M /branches/fpc_2_3/compiler/powerpc64/cpunode.pas D /branches/fpc_2_3/compiler/powerpc64/nppcinl.pas M /branches/fpc_2_3/compiler/ppcgen/ngppcinl.pas * merged fsqrt(s) support to common powerpc unit, activate for ppc32 if -Op970 is used (still default for ppc64, since default cpu there is already ppc970) ........ r6394 | jonas | 2007-02-10 18:58:47 +0100 (Sat, 10 Feb 2007) | 4 lines Changed paths: M /branches/fpc_2_3/compiler/powerpc/cgcpu.pas M /branches/fpc_2_3/compiler/powerpc64/cgcpu.pas M /branches/fpc_2_3/compiler/ppcgen/cgppc.pas * adapted a_jmp_name for darwin/ppc64 * merged g_intf_wrapper for ppc32 and ppc64, and added darwin/ppc64 support to it ........ r6396 | jonas | 2007-02-10 20:16:06 +0100 (Sat, 10 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/cgobj.pas + darwin/ppc64 support for g_indirect_sym_load ........ r6397 | jonas | 2007-02-10 20:22:49 +0100 (Sat, 10 Feb 2007) | 4 lines Changed paths: M /branches/fpc_2_3/compiler/powerpc/cgcpu.pas M /branches/fpc_2_3/compiler/powerpc64/cgcpu.pas M /branches/fpc_2_3/compiler/ppcgen/cgppc.pas + darwin/ppc64 support to ppc64's fixref * moved ppc32 a_load_store to cgppc and use it for darwin/ppc64 as well (its relocatable symbols are only 32 bits large) ........ r6399 | jonas | 2007-02-10 22:02:37 +0100 (Sat, 10 Feb 2007) | 4 lines Changed paths: M /branches/fpc_2_3/compiler/systems.pas + system_x86_64_darwin identifier + set default source system for system_x86_64_darwin and system_powerpc64_darwin ........ r6404 | jonas | 2007-02-10 23:01:23 +0100 (Sat, 10 Feb 2007) | 5 lines Changed paths: M /branches/fpc_2_3/compiler/aasmdata.pas M /branches/fpc_2_3/compiler/aggas.pas M /branches/fpc_2_3/compiler/cgobj.pas M /branches/fpc_2_3/compiler/cgutils.pas M /branches/fpc_2_3/compiler/cresstr.pas M /branches/fpc_2_3/compiler/dbgdwarf.pas M /branches/fpc_2_3/compiler/dbgstabs.pas M /branches/fpc_2_3/compiler/ncgutil.pas M /branches/fpc_2_3/compiler/ogelf.pas M /branches/fpc_2_3/compiler/pdecvar.pas M /branches/fpc_2_3/compiler/pmodules.pas M /branches/fpc_2_3/compiler/symdef.pas M /branches/fpc_2_3/compiler/systems.pas + system_x86_64_darwin identifier + systems_darwin set which collects all darwin variants + added support for darwin/ppc64 and darwin/x86_64 where needed in the generic code ........ r6406 | jonas | 2007-02-10 23:24:32 +0100 (Sat, 10 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/cgobj.pas * ifdef cpu64 -> ifdef cpu64bit ........ r6409 | jonas | 2007-02-11 00:34:04 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/pdecvar.pas * fixed ppc64 compilation ........ r6413 | jonas | 2007-02-11 12:41:27 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/rtl/bsd/system.pp M /branches/fpc_2_3/rtl/darwin/powerpc/sig_cpu.inc M /branches/fpc_2_3/rtl/darwin/signal.inc + darwin/ppc64 support for signal routines ........ r6415 | jonas | 2007-02-11 13:54:53 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/systems/i_linux.pas * set abi of linux/ppc64 to abi_powerpc_sysv ........ r6416 | jonas | 2007-02-11 13:55:51 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/powerpc64/cputarg.pas M /branches/fpc_2_3/compiler/systems/i_bsd.pas M /branches/fpc_2_3/compiler/systems/t_bsd.pas + darwin/ppc64 source and target information ........ r6418 | jonas | 2007-02-11 14:19:55 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/rtl/powerpc64/math.inc * darwin/ppc64 compilation fixes ........ r6419 | jonas | 2007-02-11 14:22:22 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/powerpc/cgcpu.pas M /branches/fpc_2_3/compiler/powerpc64/cgcpu.pas M /branches/fpc_2_3/compiler/ppcgen/cgppc.pas * darwin/ppc64 needs the 32 bit version of a_loadaddr_ref_reg ........ r6420 | jonas | 2007-02-11 14:22:55 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/utils/fpcm/fpcmmain.pp + darwin/ppc64 support ........ r6426 | jonas | 2007-02-11 16:13:19 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/powerpc64/rappcgas.pas * fixed refaddr parsing for darwin/ppc64 ........ r6427 | jonas | 2007-02-11 16:14:21 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/powerpc/agppcgas.pas M /branches/fpc_2_3/compiler/powerpc64/agppcgas.pas A /branches/fpc_2_3/compiler/ppcgen/agppcutl.pas * moved ppc32/ppc64 assembler writer helpers to a common unit ........ r6430 | jonas | 2007-02-11 17:53:23 +0100 (Sun, 11 Feb 2007) | 4 lines Changed paths: D /branches/fpc_2_3/rtl/darwin/powerpc/sig_cpu.inc D /branches/fpc_2_3/rtl/darwin/powerpc/sighnd.inc A /branches/fpc_2_3/rtl/darwin/powerpc64 A /branches/fpc_2_3/rtl/darwin/powerpc64/sig_cpu.inc A /branches/fpc_2_3/rtl/darwin/powerpc64/sighnd.inc A /branches/fpc_2_3/rtl/darwin/ppcgen A /branches/fpc_2_3/rtl/darwin/ppcgen/ppchnd.inc (from /branches/fpc_2_3/rtl/darwin/powerpc/sighnd.inc:6422) A /branches/fpc_2_3/rtl/darwin/ppcgen/sig_ppc.inc (from /branches/fpc_2_3/rtl/darwin/powerpc/sig_cpu.inc:6422) M /branches/fpc_2_3/rtl/darwin/signal.inc * fixed ppc/ppc64 signal include handling (both real files are in ppcgen, dummies in powerpc and powerpc64 which include those files) (1st step because pre-commit filter can't handle replaced files) ........ r6431 | jonas | 2007-02-11 17:53:47 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: A /branches/fpc_2_3/rtl/darwin/powerpc/sig_cpu.inc A /branches/fpc_2_3/rtl/darwin/powerpc/sighnd.inc * second step of signal include patch ........ r6432 | jonas | 2007-02-11 19:00:12 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/systems/t_bsd.pas * changed darwin checks to use systems_darwin constant ........ r6433 | jonas | 2007-02-11 19:05:38 +0100 (Sun, 11 Feb 2007) | 3 lines Changed paths: M /branches/fpc_2_3/compiler/powerpc64/cgcpu.pas * handle non-multiple-of-4 offsets with 64 bit loads/stores for darwin/ppc64 ........ r6434 | jonas | 2007-02-11 19:05:56 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: D /branches/fpc_2_3/compiler/powerpc/agppcgas.pas D /branches/fpc_2_3/compiler/powerpc64/agppcgas.pas A /branches/fpc_2_3/compiler/ppcgen/agppcgas.pas (from /branches/fpc_2_3/compiler/ppcgen/agppcutl.pas:6427) D /branches/fpc_2_3/compiler/ppcgen/agppcutl.pas * completely merged ppc assembler writers ........ r6435 | jonas | 2007-02-11 19:06:40 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/rtl/darwin/console.pp M /branches/fpc_2_3/rtl/darwin/termiosproc.inc * fixed 64 bit compilation ........ r6436 | jonas | 2007-02-11 19:09:28 +0100 (Sun, 11 Feb 2007) | 3 lines Changed paths: M /branches/fpc_2_3/packages/extra/Makefile.fpc * universal interfaces aren't 64 bit ready yet -> only compile for darwin/ppc and darwin/i386 ........ r6438 | jonas | 2007-02-11 19:22:34 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: A /branches/fpc_2_3/tests/test/cg/obj/darwin/powerpc64 A /branches/fpc_2_3/tests/test/cg/obj/darwin/powerpc64/ctest.o A /branches/fpc_2_3/tests/test/cg/obj/darwin/powerpc64/tcext3.o A /branches/fpc_2_3/tests/test/cg/obj/darwin/powerpc64/tcext4.o A /branches/fpc_2_3/tests/test/cg/obj/darwin/powerpc64/tcext5.o + compiled for darwin/ppc64 ........ r6439 | jonas | 2007-02-11 20:24:42 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/ppcgen/cgppc.pas * patch from Thomas to fix linux/ppc64 ........ r6440 | jonas | 2007-02-11 20:25:15 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/systems.pas * fixed setting source OS for darwin/ppc64 ........ r6444 | florian | 2007-02-11 22:24:20 +0100 (Sun, 11 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/globtype.pas M /branches/fpc_2_3/compiler/nopt.pas M /branches/fpc_2_3/compiler/nutils.pas M /branches/fpc_2_3/compiler/optcse.pas M /branches/fpc_2_3/compiler/psub.pas + first node cse implementation ........ r6445 | jonas | 2007-02-11 22:30:07 +0100 (Sun, 11 Feb 2007) | 6 lines Changed paths: M /branches/fpc_2_3/compiler/cresstr.pas * hack to work around strange darwin/ppc64 linker bug: it seems to have problems if you put a global symbol at the end of a section without any data following (at least in case of the resource strings section) -> add dummy byte at the end for darwin/ppc64 (otherwise it messes up the address of the first symbol stub entry) ........ r6449 | jonas | 2007-02-11 23:23:44 +0100 (Sun, 11 Feb 2007) | 4 lines Changed paths: M /branches/fpc_2_3/compiler/systems/i_bsd.pas * cpupowerpc is defined for both ppc32 and ppc64 -> changed to cpupowerpc32 to avoid defining source wrongly on ppc64 ........ r6450 | jonas | 2007-02-11 23:26:34 +0100 (Sun, 11 Feb 2007) | 3 lines Changed paths: M /branches/fpc_2_3/compiler/ppcgen/ngppcset.pas * disable jump tables for darwin/ppc64 for now, don't work yet for some reason ........ r6451 | florian | 2007-02-11 23:54:37 +0100 (Sun, 11 Feb 2007) | 3 lines Changed paths: M /branches/fpc_2_3/compiler/ncal.pas M /branches/fpc_2_3/compiler/nutils.pas M /branches/fpc_2_3/compiler/optcse.pas * improved cse * better complexity calculation for subscript nodes with classes or interfaces ........ r6456 | jonas | 2007-02-12 19:33:22 +0100 (Mon, 12 Feb 2007) | 4 lines Changed paths: M /branches/fpc_2_3/compiler/nutils.pas + support for notn,shln,shrn,equaln,unequaln,gtn,gten,ltn,lten in node_cplexity() * mark muln,divn,modn as more complex ........ r6469 | jonas | 2007-02-13 15:56:01 +0100 (Tue, 13 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/optcse.pas * fixed when cross-compiling a 64 bit compiler from a 32 bit platform ........ r6471 | jonas | 2007-02-13 16:17:16 +0100 (Tue, 13 Feb 2007) | 3 lines Changed paths: M /branches/fpc_2_3/compiler/powerpc64/cputarg.pas * include stabs support (can work on darwin/ppc64, but doesn't work yet) ........ r6473 | jonas | 2007-02-13 16:45:48 +0100 (Tue, 13 Feb 2007) | 3 lines Changed paths: M /branches/fpc_2_3/compiler/powerpc64/cgcpu.pas M /branches/fpc_2_3/compiler/powerpc64/cpupara.pas * R2 is a volatile and usable register under darwin/ppc64 * R13 is a reserved non-volatile register under darwin/ppc64 (tls) ........ r6479 | jonas | 2007-02-13 20:40:50 +0100 (Tue, 13 Feb 2007) | 3 lines Changed paths: M /branches/fpc_2_3/compiler/systems/i_bsd.pas * maxCrecordalign seems to have to be 8 rather 4, in spite of what the ABI docs say (although they are contradictory to some extent) ........ r6487 | jonas | 2007-02-14 15:57:40 +0100 (Wed, 14 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/tests/webtbs/tw8153a.pp * fixed for darwin/ppc64 ........ r6488 | jonas | 2007-02-14 15:58:56 +0100 (Wed, 14 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/tests/webtbs/tw7851a.pp * fixed for darwin/ppc64 ........ r6494 | jonas | 2007-02-15 19:36:55 +0100 (Thu, 15 Feb 2007) | 3 lines Changed paths: M /branches/fpc_2_3/compiler/systems/i_bsd.pas * set default debug info for darwin/ppc64 to dwarf2 since it works better than stabs currently ........ r6500 | jonas | 2007-02-15 21:38:16 +0100 (Thu, 15 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/version.pas * updated version to 2.3.0 ........ r6505 | jonas | 2007-02-15 22:39:28 +0100 (Thu, 15 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/version.pas * changed version to 2.3.1 ........ r6511 | jonas | 2007-02-16 15:17:24 +0100 (Fri, 16 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/powerpc64/itcpugas.pas * system_powerpc_darwin -> system_powerpc64_darwin ........ r6546 | daniel | 2007-02-18 15:48:54 +0100 (Sun, 18 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/ncginl.pas M /branches/fpc_2_3/compiler/ncgld.pas M /branches/fpc_2_3/compiler/ncgrtti.pas M /branches/fpc_2_3/compiler/ncnv.pas M /branches/fpc_2_3/compiler/ninl.pas M /branches/fpc_2_3/compiler/nld.pas M /branches/fpc_2_3/compiler/nutils.pas M /branches/fpc_2_3/compiler/pinline.pas M /branches/fpc_2_3/rtl/inc/astrings.inc M /branches/fpc_2_3/rtl/inc/compproc.inc M /branches/fpc_2_3/rtl/inc/sstrings.inc M /branches/fpc_2_3/rtl/inc/text.inc M /branches/fpc_2_3/rtl/inc/wstrings.inc + Val/str/read/write support for enumeration types. ........ r6547 | daniel | 2007-02-18 17:01:20 +0100 (Sun, 18 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/rtl/inc/sstrings.inc * Fix val code that I broke. ........ r6571 | daniel | 2007-02-20 09:27:44 +0100 (Tue, 20 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/rtl/inc/astrings.inc M /branches/fpc_2_3/rtl/inc/sstrings.inc M /branches/fpc_2_3/rtl/inc/text.inc M /branches/fpc_2_3/rtl/inc/wstrings.inc * o2s -> ord2str, s2o -> str2ord ........ r6572 | daniel | 2007-02-20 09:33:30 +0100 (Tue, 20 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/ncgld.pas M /branches/fpc_2_3/compiler/ncgrtti.pas M /branches/fpc_2_3/compiler/ninl.pas M /branches/fpc_2_3/compiler/nld.pas * o2s -> ord2str, s2o -> str2ord ........ r6574 | daniel | 2007-02-20 12:07:58 +0100 (Tue, 20 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/rtl/inc/compproc.inc * o2s -> ord2str, s2o -> str2ord ........ r6578 | daniel | 2007-02-20 22:18:49 +0100 (Tue, 20 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/rtl/inc/text.inc * Change longint to valsint. ........ r6579 | daniel | 2007-02-20 22:29:09 +0100 (Tue, 20 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/ninl.pas * Handle ordinal currency types. ........ r6580 | jonas | 2007-02-20 22:29:11 +0100 (Tue, 20 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/ncgrtti.pas * fixed compilation for cpurequiresproperalignment ........ r6581 | jonas | 2007-02-20 22:30:21 +0100 (Tue, 20 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/ninl.pas * fixed typo ........ r6582 | daniel | 2007-02-20 22:36:19 +0100 (Tue, 20 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/ninl.pas * Set is_real to true. ........ r6590 | jonas | 2007-02-21 20:23:54 +0100 (Wed, 21 Feb 2007) | 2 lines Changed paths: M /branches/fpc_2_3/compiler/systems/i_bsd.pas * set tf_dwarf_only_local_labels for darwin/ppc64 git-svn-id: trunk@6720 -
911 lines
27 KiB
ObjectPascal
911 lines
27 KiB
ObjectPascal
{
|
|
Copyright (c) 1998-2002 by Florian Klaempfl
|
|
|
|
This unit contains information about the target systems supported
|
|
(these are not processor specific)
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
iu under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge- MA 02139, USA.
|
|
|
|
****************************************************************************
|
|
}
|
|
unit systems;
|
|
|
|
{$i fpcdefs.inc}
|
|
|
|
interface
|
|
|
|
|
|
type
|
|
tendian = (endian_little,endian_big);
|
|
|
|
(*
|
|
IMPORTANT NOTE:
|
|
The value of this enumeration is stored in PPU files.
|
|
Therefore adding new CPU targets should not change the
|
|
values of the pre-existing targets. (CEC)
|
|
FURTHERMORE : Make sure that this branch values, are
|
|
consistant with the main branch version always.
|
|
*)
|
|
tsystemcpu=
|
|
(
|
|
cpu_no, { 0 }
|
|
cpu_i386, { 1 }
|
|
cpu_m68k, { 2 }
|
|
cpu_alpha, { 3 }
|
|
cpu_powerpc, { 4 }
|
|
cpu_sparc, { 5 }
|
|
cpu_vm, { 6 }
|
|
cpu_iA64, { 7 }
|
|
cpu_x86_64, { 8 }
|
|
cpu_mips, { 9 }
|
|
cpu_arm, { 10 }
|
|
cpu_powerpc64 { 11 }
|
|
);
|
|
|
|
tasmmode= (asmmode_none
|
|
{ standard assembler (cpu dependant) with full parsing }
|
|
,asmmode_standard
|
|
,asmmode_i386_att
|
|
,asmmode_i386_intel
|
|
,asmmode_ppc_gas
|
|
,asmmode_ppc_motorola
|
|
,asmmode_arm_gas
|
|
,asmmode_sparc_gas
|
|
,asmmode_x86_64_gas
|
|
,asmmode_m68k_mot
|
|
,asmmode_x86_64_intel
|
|
,asmmode_x86_64_att
|
|
);
|
|
|
|
(* IMPORTANT NOTE:
|
|
the integer value of this enum is stored in PPU
|
|
files to recognize the target, so if you add new targets
|
|
allways add them at end PM
|
|
FURTHERMORE : Make sure that this branch values are
|
|
consistant with the main branch version always. (CEC)
|
|
*)
|
|
type
|
|
tsystem =
|
|
(
|
|
system_none, { 0 }
|
|
obsolete_system_i386_GO32V1,{ 1 }
|
|
system_i386_GO32V2, { 2 }
|
|
system_i386_linux, { 3 }
|
|
system_i386_OS2, { 4 }
|
|
system_i386_Win32, { 5 }
|
|
system_i386_freebsd, { 6 }
|
|
system_m68k_Amiga, { 7 }
|
|
system_m68k_Atari, { 8 }
|
|
system_m68k_Mac, { 9 }
|
|
system_m68k_linux, { 10 }
|
|
system_m68k_PalmOS, { 11 }
|
|
system_alpha_linux, { 12 }
|
|
system_powerpc_linux, { 13 }
|
|
system_powerpc_macos, { 14 }
|
|
system_i386_solaris, { 15 }
|
|
system_i386_beos, { 16 }
|
|
system_i386_netbsd, { 17 }
|
|
system_m68k_netbsd, { 18 }
|
|
system_i386_Netware, { 19 }
|
|
system_i386_qnx, { 20 }
|
|
system_i386_wdosx, { 21 }
|
|
system_sparc_solaris, { 22 }
|
|
system_sparc_linux, { 23 }
|
|
system_i386_openbsd, { 24 }
|
|
system_m68k_openbsd, { 25 }
|
|
system_x86_64_linux, { 26 }
|
|
system_powerpc_darwin, { 27 }
|
|
system_i386_EMX, { 28 }
|
|
system_powerpc_netbsd, { 29 }
|
|
system_powerpc_openbsd, { 30 }
|
|
system_arm_linux, { 31 }
|
|
system_i386_watcom, { 32 }
|
|
system_powerpc_MorphOS, { 33 }
|
|
system_x86_64_freebsd, { 34 }
|
|
system_i386_netwlibc, { 35 }
|
|
system_powerpc_Amiga, { 36 }
|
|
system_x86_64_win64, { 37 }
|
|
system_arm_wince, { 38 }
|
|
system_ia64_win64, { 39 }
|
|
system_i386_wince, { 40 }
|
|
system_x86_6432_linux, { 41 }
|
|
system_arm_gba, { 42 }
|
|
system_powerpc64_linux, { 43 }
|
|
system_i386_darwin, { 44 }
|
|
system_arm_palmos, { 45 }
|
|
system_powerpc64_darwin, { 46 }
|
|
system_arm_nds, { 47 }
|
|
system_i386_embedded, { 48 }
|
|
system_m68k_embedded, { 49 }
|
|
system_alpha_embedded, { 50 }
|
|
system_powerpc_embedded, { 51 }
|
|
system_sparc_embedded, { 52 }
|
|
system_vm_embedded, { 53 }
|
|
system_iA64_embedded, { 54 }
|
|
system_x86_64_embedded, { 55 }
|
|
system_mips_embedded, { 56 }
|
|
system_arm_embedded, { 57 }
|
|
system_powerpc64_embedded, { 58 }
|
|
system_i386_symbian, { 59 }
|
|
system_arm_symbian, { 60 }
|
|
system_x86_64_darwin { 61 }
|
|
);
|
|
|
|
const
|
|
systems_darwin = [system_powerpc_darwin,system_i386_darwin,
|
|
system_powerpc64_darwin,system_x86_64_darwin];
|
|
|
|
type
|
|
tasm = (as_none
|
|
,as_gas { standard gnu assembler }
|
|
,as_i386_as_aout
|
|
,as_i386_nasmcoff
|
|
,as_i386_nasmwin32
|
|
,as_i386_nasmwdosx
|
|
,as_i386_nasmelf
|
|
,as_i386_nasmobj
|
|
,as_i386_nasmbeos
|
|
,as_i386_tasm
|
|
,as_i386_masm
|
|
,as_i386_wasm
|
|
,as_i386_coff
|
|
,as_i386_pecoff
|
|
,as_i386_elf32
|
|
,as_i386_pecoffwdosx
|
|
,as_m68k_mit
|
|
,as_powerpc_mpw
|
|
,as_darwin
|
|
,as_x86_64_masm
|
|
,as_x86_64_pecoff
|
|
,as_i386_pecoffwince
|
|
,as_arm_pecoffwince
|
|
,as_x86_64_elf64
|
|
,as_sparc_elf32
|
|
,as_ggas { gnu assembler called "gas" instead of "as" }
|
|
);
|
|
|
|
tar = (ar_none
|
|
,ar_gnu_ar
|
|
,ar_mpw_ar
|
|
,ar_gnu_ar_scripted
|
|
,ar_gnu_gar
|
|
);
|
|
|
|
tres = (res_none
|
|
,res_gnu_windres,res_emxbind
|
|
,res_m68k_palmos,res_m68k_mpw
|
|
,res_powerpc_mpw,res_elf
|
|
,res_gnu_wince_windres
|
|
);
|
|
|
|
tdbg = (dbg_none
|
|
,dbg_stabs,dbg_dwarf2,dbg_dwarf3
|
|
);
|
|
|
|
tscripttype = (script_none
|
|
,script_dos,script_unix,script_amiga,
|
|
script_mpw
|
|
);
|
|
|
|
tabi = (abi_default
|
|
,abi_powerpc_sysv,abi_powerpc_aix
|
|
);
|
|
|
|
{*****************************************************************************
|
|
Structures
|
|
*****************************************************************************}
|
|
|
|
type
|
|
{ Abstract linker class which is implemented in link module }
|
|
TAbstractLinker = class
|
|
end;
|
|
|
|
TAbstractLinkerClass = class of TAbstractLinker;
|
|
|
|
|
|
{ Abstract assembler class which is implemented in assemble module }
|
|
TAbstractAssembler = class
|
|
end;
|
|
|
|
TAbstractAssemblerClass = class of TAbstractAssembler;
|
|
|
|
|
|
TAbstractResourceFile = class
|
|
constructor create(const fn : ansistring);virtual;abstract;
|
|
end;
|
|
TAbstractResourceFileClass = class of TAbstractResourceFile;
|
|
|
|
|
|
palignmentinfo = ^talignmentinfo;
|
|
talignmentinfo = record
|
|
procalign,
|
|
loopalign,
|
|
jumpalign,
|
|
constalignmin,
|
|
constalignmax,
|
|
varalignmin,
|
|
varalignmax,
|
|
localalignmin,
|
|
localalignmax,
|
|
recordalignmin,
|
|
recordalignmax,
|
|
maxCrecordalign : longint;
|
|
end;
|
|
|
|
tasmflags = (af_none,
|
|
af_outputbinary,af_allowdirect,
|
|
af_needar,af_smartlink_sections,
|
|
af_labelprefix_only_inside_procedure,
|
|
af_supports_dwarf,
|
|
af_no_debug
|
|
);
|
|
|
|
pasminfo = ^tasminfo;
|
|
tasminfo = record
|
|
id : tasm;
|
|
idtxt : string[12];
|
|
asmbin : string[8];
|
|
asmcmd : string[50];
|
|
supported_target : tsystem;
|
|
flags : set of tasmflags;
|
|
labelprefix : string[3];
|
|
comment : string[3];
|
|
end;
|
|
|
|
parinfo = ^tarinfo;
|
|
tarinfo = record
|
|
id : tar;
|
|
arcmd : string[50];
|
|
arfinishcmd : string[10];
|
|
end;
|
|
|
|
presinfo = ^tresinfo;
|
|
tresinfo = record
|
|
id : tres;
|
|
resbin : string[8];
|
|
rescmd : string[50];
|
|
resourcefileclass : TAbstractResourceFileClass;
|
|
end;
|
|
|
|
pdbginfo = ^tdbginfo;
|
|
tdbginfo = record
|
|
id : tdbg;
|
|
idtxt : string[12];
|
|
end;
|
|
|
|
tsystemflags = (tf_none,
|
|
tf_under_development,
|
|
tf_need_export,
|
|
tf_needs_isconsole,
|
|
tf_code_small,
|
|
tf_static_reg_based,
|
|
tf_needs_symbol_size,
|
|
tf_smartlink_sections,
|
|
tf_needs_dwarf_cfi,
|
|
tf_use_8_3,
|
|
tf_pic_uses_got,
|
|
tf_library_needs_pic,
|
|
tf_needs_symbol_type,
|
|
tf_section_threadvars,
|
|
tf_files_case_sensitive,
|
|
tf_files_case_aware,
|
|
tf_p_ext_support,
|
|
tf_has_dllscanner,
|
|
tf_use_function_relative_addresses,
|
|
tf_winlikewidestring,
|
|
tf_dwarf_relative_addresses, // use offsets where the Dwarf spec requires this instead of absolute addresses (the latter is needed by Linux binutils)
|
|
tf_dwarf_only_local_labels // only use local labels inside the Dwarf debug_info section (needed for e.g. Darwin)
|
|
);
|
|
|
|
psysteminfo = ^tsysteminfo;
|
|
{ using packed causes bus errors on processors which require alignment }
|
|
tsysteminfo = record
|
|
system : tsystem;
|
|
name : string[34];
|
|
shortname : string[9];
|
|
flags : set of tsystemflags;
|
|
cpu : tsystemcpu;
|
|
unit_env : string[16];
|
|
extradefines : string[40];
|
|
exeext,
|
|
defext,
|
|
scriptext,
|
|
smartext,
|
|
unitext,
|
|
unitlibext,
|
|
asmext,
|
|
objext,
|
|
resext,
|
|
resobjext : string[4];
|
|
sharedlibext : string[10];
|
|
staticlibext,
|
|
staticlibprefix : string[4];
|
|
sharedlibprefix : string[4];
|
|
sharedClibext : string[10];
|
|
staticClibext,
|
|
staticClibprefix : string[4];
|
|
sharedClibprefix : string[4];
|
|
Cprefix : string[2];
|
|
newline : string[2];
|
|
dirsep : char;
|
|
assem : tasm;
|
|
assemextern : tasm; { external assembler, used by -a }
|
|
link : tabstractlinkerclass;
|
|
linkextern : tabstractlinkerclass; { external linker, used by -s }
|
|
ar : tar;
|
|
res : tres;
|
|
dbg : tdbg;
|
|
script : tscripttype;
|
|
endian : tendian;
|
|
alignment : talignmentinfo;
|
|
{
|
|
Offset from the argument pointer register to the first
|
|
argument's address. On some machines it may depend on
|
|
the data type of the function.
|
|
(see also FIRST_PARM_OFFSET in GCC source)
|
|
}
|
|
first_parm_offset : longint;
|
|
stacksize : longint;
|
|
abi : tabi;
|
|
end;
|
|
|
|
const
|
|
{ alias for supported_target field in tasminfo }
|
|
system_any = system_none;
|
|
|
|
system_wince = [system_arm_wince,system_i386_wince];
|
|
system_linux = [system_i386_linux,system_x86_64_linux,system_powerpc_linux,
|
|
system_arm_linux,system_sparc_linux,system_alpha_linux,system_m68k_linux,
|
|
system_x86_6432_linux];
|
|
{ all real windows systems, no cripple ones like wince, wdosx et. al. }
|
|
system_windows = [system_i386_win32,system_x86_64_win64,system_ia64_win64];
|
|
{ all windows systems }
|
|
system_all_windows = [system_i386_win32,system_x86_64_win64,system_ia64_win64,
|
|
system_arm_wince,system_i386_wince];
|
|
|
|
{ all systems supporting exports from programs or units }
|
|
system_unit_program_exports = [system_i386_win32,
|
|
system_i386_wdosx,
|
|
system_i386_Netware,
|
|
system_i386_netwlibc,
|
|
system_arm_wince,
|
|
system_x86_64_win64,
|
|
system_ia64_win64]+system_linux;
|
|
|
|
system_internal_sysinit = [system_i386_linux,system_i386_win32];
|
|
|
|
system_embedded = [system_i386_embedded,system_m68k_embedded,system_alpha_embedded,
|
|
system_powerpc_embedded,system_sparc_embedded,system_vm_embedded,
|
|
system_iA64_embedded,system_x86_64_embedded,system_mips_embedded,
|
|
system_arm_embedded,system_powerpc64_embedded];
|
|
|
|
|
|
cpu2str : array[TSystemCpu] of string =
|
|
('','i386','m68k','alpha','powerpc','sparc','vm','ia64','x86_64',
|
|
'mips','arm', 'powerpc64');
|
|
|
|
var
|
|
targetinfos : array[tsystem] of psysteminfo;
|
|
arinfos : array[tar] of parinfo;
|
|
resinfos : array[tres] of presinfo;
|
|
asminfos : array[tasm] of pasminfo;
|
|
dbginfos : array[tdbg] of pdbginfo;
|
|
|
|
source_info : tsysteminfo;
|
|
target_cpu : tsystemcpu;
|
|
target_info : tsysteminfo;
|
|
target_asm : tasminfo;
|
|
target_ar : tarinfo;
|
|
target_res : tresinfo;
|
|
target_dbg : tdbginfo;
|
|
target_cpu_string,
|
|
target_os_string : string[12]; { for rtl/<X>/,fcl/<X>/, etc. }
|
|
target_full_string : string[24];
|
|
|
|
function set_target(t:tsystem):boolean;
|
|
function set_target_asm(t:tasm):boolean;
|
|
function set_target_ar(t:tar):boolean;
|
|
function set_target_res(t:tres):boolean;
|
|
function set_target_dbg(t:tdbg):boolean;
|
|
|
|
function find_system_by_string(const s : string) : tsystem;
|
|
function find_asm_by_string(const s : string) : tasm;
|
|
function find_dbg_by_string(const s : string) : tdbg;
|
|
|
|
procedure set_source_info(const ti : tsysteminfo);
|
|
|
|
procedure UpdateAlignment(var d:talignmentinfo;const s:talignmentinfo);
|
|
|
|
procedure RegisterTarget(const r:tsysteminfo);
|
|
procedure RegisterRes(const r:tresinfo; rcf : TAbstractResourceFileClass);
|
|
procedure RegisterAr(const r:tarinfo);
|
|
{ Register the external linker. This routine is called to setup the
|
|
class to use for the linker. It returns the tsysteminfo structure
|
|
updated with the correct linker class for external linking.
|
|
}
|
|
procedure RegisterExternalLinker(var system_info: tsysteminfo; c:TAbstractLinkerClass);
|
|
{ Register the internal linker. This routine is called to setup the
|
|
class to use for the linker. It returns the tsysteminfo structure
|
|
updated with the correct linker class for internal linking.
|
|
|
|
If internal linking is not supported, this class can be set
|
|
to nil.
|
|
}
|
|
procedure RegisterInternalLinker(var system_info : tsysteminfo; c:TAbstractLinkerClass);
|
|
|
|
procedure InitSystems;
|
|
|
|
{$ifdef FreeBSD}
|
|
function GetOSRelDate:Longint;
|
|
{$endif}
|
|
|
|
implementation
|
|
|
|
uses
|
|
cutils{$ifdef FreeBSD},SysCtl,BaseUnix{$endif};
|
|
|
|
{****************************************************************************
|
|
OS runtime version detection utility routine
|
|
****************************************************************************}
|
|
|
|
{$ifdef FreeBSD}
|
|
function GetOSRelDate:Longint;
|
|
|
|
var
|
|
mib : array[0..1] of cint;
|
|
rval : cint;
|
|
len : size_t;
|
|
i : longint;
|
|
v : longint;
|
|
oerrno : cint;
|
|
S : AnsiString;
|
|
|
|
Begin
|
|
s:='ab';
|
|
SetLength(S,50);
|
|
mib[0] := CTL_KERN;
|
|
mib[1] := KERN_OSRELDATE;
|
|
len := 4;
|
|
oerrno:= fpgeterrno;
|
|
if (FPsysctl(pChar(@mib), 2, pchar(@v), @len, NIL, 0) = -1) Then
|
|
Begin
|
|
if (fpgeterrno = ESysENOMEM) Then
|
|
fpseterrno(oerrno);
|
|
GetOSRelDate:=0;
|
|
End
|
|
else
|
|
GetOSRelDate:=v;
|
|
End;
|
|
{$endif}
|
|
|
|
|
|
{****************************************************************************
|
|
Target setting
|
|
****************************************************************************}
|
|
|
|
function set_target(t:tsystem):boolean;
|
|
begin
|
|
set_target:=false;
|
|
if assigned(targetinfos[t]) then
|
|
begin
|
|
target_info:=targetinfos[t]^;
|
|
set_target_asm(target_info.assem);
|
|
set_target_ar(target_info.ar);
|
|
set_target_res(target_info.res);
|
|
set_target_dbg(target_info.dbg);
|
|
target_cpu:=target_info.cpu;
|
|
target_os_string:=lower(target_info.shortname);
|
|
target_cpu_string:=cpu2str[target_cpu];
|
|
target_full_string:=target_cpu_string+'-'+target_os_string;
|
|
set_target:=true;
|
|
exit;
|
|
end;
|
|
end;
|
|
|
|
|
|
function set_target_asm(t:tasm):boolean;
|
|
begin
|
|
set_target_asm:=false;
|
|
if assigned(asminfos[t]) and
|
|
((asminfos[t]^.supported_target=target_info.system) or
|
|
(asminfos[t]^.supported_target=system_any)) then
|
|
begin
|
|
target_asm:=asminfos[t]^;
|
|
set_target_asm:=true;
|
|
exit;
|
|
end;
|
|
end;
|
|
|
|
|
|
function set_target_ar(t:tar):boolean;
|
|
begin
|
|
result:=false;
|
|
if assigned(arinfos[t]) then
|
|
begin
|
|
target_ar:=arinfos[t]^;
|
|
result:=true;
|
|
exit;
|
|
end;
|
|
end;
|
|
|
|
|
|
function set_target_res(t:tres):boolean;
|
|
begin
|
|
result:=false;
|
|
if assigned(resinfos[t]) then
|
|
begin
|
|
target_res:=resinfos[t]^;
|
|
result:=true;
|
|
exit;
|
|
end;
|
|
end;
|
|
|
|
|
|
function set_target_dbg(t:tdbg):boolean;
|
|
begin
|
|
result:=false;
|
|
if assigned(dbginfos[t]) then
|
|
begin
|
|
target_dbg:=dbginfos[t]^;
|
|
result:=true;
|
|
exit;
|
|
end;
|
|
end;
|
|
|
|
|
|
function find_system_by_string(const s : string) : tsystem;
|
|
var
|
|
hs : string;
|
|
t : tsystem;
|
|
begin
|
|
result:=system_none;
|
|
hs:=upper(s);
|
|
for t:=low(tsystem) to high(tsystem) do
|
|
if assigned(targetinfos[t]) and
|
|
(upper(targetinfos[t]^.shortname)=hs) then
|
|
begin
|
|
result:=t;
|
|
exit;
|
|
end;
|
|
end;
|
|
|
|
|
|
function find_asm_by_string(const s : string) : tasm;
|
|
var
|
|
hs : string;
|
|
t : tasm;
|
|
begin
|
|
result:=as_none;
|
|
hs:=upper(s);
|
|
for t:=low(tasm) to high(tasm) do
|
|
if assigned(asminfos[t]) and
|
|
(asminfos[t]^.idtxt=hs) then
|
|
begin
|
|
result:=t;
|
|
exit;
|
|
end;
|
|
end;
|
|
|
|
|
|
function find_dbg_by_string(const s : string) : tdbg;
|
|
var
|
|
hs : string;
|
|
t : tdbg;
|
|
begin
|
|
result:=dbg_none;
|
|
hs:=upper(s);
|
|
for t:=low(tdbg) to high(tdbg) do
|
|
if assigned(dbginfos[t]) and
|
|
(dbginfos[t]^.idtxt=hs) then
|
|
begin
|
|
result:=t;
|
|
exit;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure UpdateAlignment(var d:talignmentinfo;const s:talignmentinfo);
|
|
begin
|
|
with d do
|
|
begin
|
|
{ general update rules:
|
|
minimum: if higher then update
|
|
maximum: if lower then update or if undefined then update }
|
|
if s.procalign>procalign then
|
|
procalign:=s.procalign;
|
|
if s.loopalign>loopalign then
|
|
loopalign:=s.loopalign;
|
|
if s.jumpalign>jumpalign then
|
|
jumpalign:=s.jumpalign;
|
|
if s.constalignmin>constalignmin then
|
|
constalignmin:=s.constalignmin;
|
|
if (constalignmax=0) or
|
|
((s.constalignmax>0) and (s.constalignmax<constalignmax)) then
|
|
constalignmax:=s.constalignmax;
|
|
if s.varalignmin>varalignmin then
|
|
varalignmin:=s.varalignmin;
|
|
if (varalignmax=0) or
|
|
((s.varalignmax>0) and (s.varalignmax<varalignmax)) then
|
|
varalignmax:=s.varalignmax;
|
|
if s.localalignmin>localalignmin then
|
|
localalignmin:=s.localalignmin;
|
|
if (localalignmax=0) or
|
|
((s.localalignmax>0) and (s.localalignmax<localalignmax)) then
|
|
localalignmax:=s.localalignmax;
|
|
if s.recordalignmin>recordalignmin then
|
|
recordalignmin:=s.recordalignmin;
|
|
if (recordalignmax=0) or
|
|
((s.recordalignmax>0) and (s.recordalignmax<recordalignmax)) then
|
|
recordalignmax:=s.recordalignmax;
|
|
if (maxCrecordalign=0) or
|
|
((s.maxCrecordalign>0) and (s.maxCrecordalign<maxCrecordalign)) then
|
|
maxCrecordalign:=s.maxCrecordalign;
|
|
end;
|
|
end;
|
|
|
|
|
|
{****************************************************************************
|
|
Target registration
|
|
****************************************************************************}
|
|
|
|
procedure RegisterTarget(const r:tsysteminfo);
|
|
var
|
|
t : tsystem;
|
|
begin
|
|
t:=r.system;
|
|
if assigned(targetinfos[t]) then
|
|
writeln('Warning: Target is already registered!')
|
|
else
|
|
Getmem(targetinfos[t],sizeof(tsysteminfo));
|
|
targetinfos[t]^:=r;
|
|
end;
|
|
|
|
|
|
procedure RegisterRes(const r:tresinfo; rcf : TAbstractResourceFileClass);
|
|
var
|
|
t : tres;
|
|
begin
|
|
t:=r.id;
|
|
if assigned(resinfos[t]) then
|
|
writeln('Warning: resourcecompiler is already registered!')
|
|
else
|
|
Getmem(resinfos[t],sizeof(tresinfo));
|
|
resinfos[t]^:=r;
|
|
resinfos[t]^.resourcefileclass:=rcf;
|
|
end;
|
|
|
|
|
|
procedure RegisterAr(const r:tarinfo);
|
|
var
|
|
t : tar;
|
|
begin
|
|
t:=r.id;
|
|
if assigned(arinfos[t]) then
|
|
writeln('Warning: ar is already registered!')
|
|
else
|
|
Getmem(arinfos[t],sizeof(tarinfo));
|
|
arinfos[t]^:=r;
|
|
end;
|
|
|
|
procedure RegisterExternalLinker(var system_info: tsysteminfo; c:TAbstractLinkerClass);
|
|
begin
|
|
system_info.linkextern := c;
|
|
end;
|
|
|
|
procedure RegisterInternalLinker(var system_info : tsysteminfo; c:TAbstractLinkerClass);
|
|
begin
|
|
system_info.link := c;
|
|
end;
|
|
|
|
|
|
|
|
procedure DeregisterInfos;
|
|
var
|
|
assem : tasm;
|
|
target : tsystem;
|
|
ar : tar;
|
|
res : tres;
|
|
dbg : tdbg;
|
|
begin
|
|
for target:=low(tsystem) to high(tsystem) do
|
|
if assigned(targetinfos[target]) then
|
|
begin
|
|
freemem(targetinfos[target],sizeof(tsysteminfo));
|
|
targetinfos[target]:=nil;
|
|
end;
|
|
for assem:=low(tasm) to high(tasm) do
|
|
if assigned(asminfos[assem]) then
|
|
begin
|
|
freemem(asminfos[assem],sizeof(tasminfo));
|
|
asminfos[assem]:=nil;
|
|
end;
|
|
for ar:=low(tar) to high(tar) do
|
|
if assigned(arinfos[ar]) then
|
|
begin
|
|
freemem(arinfos[ar],sizeof(tarinfo));
|
|
arinfos[ar]:=nil;
|
|
end;
|
|
for res:=low(tres) to high(tres) do
|
|
if assigned(resinfos[res]) then
|
|
begin
|
|
freemem(resinfos[res],sizeof(tresinfo));
|
|
resinfos[res]:=nil;
|
|
end;
|
|
for dbg:=low(tdbg) to high(tdbg) do
|
|
if assigned(dbginfos[dbg]) then
|
|
begin
|
|
freemem(dbginfos[dbg],sizeof(tdbginfo));
|
|
dbginfos[dbg]:=nil;
|
|
end;
|
|
end;
|
|
|
|
|
|
{****************************************************************************
|
|
Initialization of default target
|
|
****************************************************************************}
|
|
|
|
procedure default_target(t:tsystem);
|
|
begin
|
|
set_target(t);
|
|
if source_info.name='' then
|
|
source_info:=target_info;
|
|
end;
|
|
|
|
|
|
procedure set_source_info(const ti : tsysteminfo);
|
|
begin
|
|
{ can't use message() here (PFV) }
|
|
if source_info.name<>'' then
|
|
Writeln('Warning: Source OS Redefined!');
|
|
source_info:=ti;
|
|
end;
|
|
|
|
|
|
procedure InitSystems;
|
|
begin
|
|
{ Now default target, this is dependent on the target cpu define,
|
|
when the define is the same as the source cpu then we use the source
|
|
os, else we pick a default }
|
|
{$ifdef i386}
|
|
{$ifdef cpu86}
|
|
default_target(source_info.system);
|
|
{$define default_target_set}
|
|
{$else cpu86}
|
|
{$ifdef linux}
|
|
default_target(system_i386_linux);
|
|
{$define default_target_set}
|
|
{$endif}
|
|
{$ifdef freebsd}
|
|
default_target(system_i386_freebsd);
|
|
{$define default_target_set}
|
|
{$endif}
|
|
{$ifdef darwin}
|
|
default_target(system_i386_darwin);
|
|
{$define default_target_set}
|
|
{$endif}
|
|
{$endif cpu86}
|
|
{ default is linux }
|
|
{$ifndef default_target_set}
|
|
default_target(system_i386_linux);
|
|
{$endif default_target_set}
|
|
{$endif i386}
|
|
|
|
{$ifdef x86_64}
|
|
{$ifdef cpux86_64}
|
|
default_target(source_info.system);
|
|
{$define default_target_set}
|
|
{$else cpux86_64}
|
|
{$ifdef MSWindows}
|
|
default_target(system_x86_64_win64);
|
|
{$define default_target_set}
|
|
{$endif}
|
|
{$ifdef linux}
|
|
default_target(system_x86_64_linux);
|
|
{$define default_target_set}
|
|
{$endif}
|
|
{$ifdef freebsd}
|
|
default_target(system_x86_64_freebsd);
|
|
{$define default_target_set}
|
|
{$endif}
|
|
{$ifdef darwin}
|
|
default_target(system_x86_64_darwin);
|
|
{$define source_system_set}
|
|
{$endif}
|
|
{$endif cpux86_64}
|
|
{ default is linux }
|
|
{$ifndef default_target_set}
|
|
default_target(system_x86_64_linux);
|
|
{$endif default_target_set}
|
|
{$endif x86_64}
|
|
|
|
{$ifdef m68k}
|
|
{$ifdef cpu68}
|
|
default_target(source_info.target);
|
|
{$else cpu68}
|
|
default_target(system_m68k_linux);
|
|
{$endif cpu68}
|
|
{$endif m68k}
|
|
|
|
{$ifdef alpha}
|
|
{$ifdef cpualpha}
|
|
default_target(source_info.system);
|
|
{$else cpualpha}
|
|
default_target(system_alpha_linux);
|
|
{$endif cpualpha}
|
|
{$endif alpha}
|
|
|
|
{$ifdef powerpc}
|
|
{$ifdef cpupowerpc}
|
|
default_target(source_info.system);
|
|
{$define default_target_set}
|
|
{$else cpupowerpc}
|
|
{$ifdef linux}
|
|
default_target(system_powerpc_linux);
|
|
{$define default_target_set}
|
|
{$endif}
|
|
{$ifdef darwin}
|
|
default_target(system_powerpc_darwin);
|
|
{$define default_target_set}
|
|
{$endif}
|
|
{$endif cpupowerpc}
|
|
{$ifndef default_target_set}
|
|
default_target(system_powerpc_linux);
|
|
{$endif default_target_set}
|
|
{$endif powerpc}
|
|
|
|
{$ifdef POWERPC64}
|
|
{$ifdef cpupowerpc64}
|
|
default_target(source_info.system);
|
|
{$define default_target_set}
|
|
{$else cpupowerpc64}
|
|
{$ifdef darwin}
|
|
default_target(system_powerpc64_darwin);
|
|
{$define default_target_set}
|
|
{$endif}
|
|
{$ifdef linux}
|
|
default_target(system_powerpc64_linux);
|
|
{$define default_target_set}
|
|
{$endif}
|
|
{$endif cpupowerpc64}
|
|
{$ifndef default_target_set}
|
|
default_target(system_powerpc64_linux);
|
|
{$define default_target_set}
|
|
{$endif}
|
|
{$endif POWERPC64}
|
|
|
|
{$ifdef sparc}
|
|
{$ifdef cpusparc}
|
|
default_target(source_info.system);
|
|
{$else cpusparc}
|
|
default_target(system_sparc_linux);
|
|
{$endif cpusparc}
|
|
{$endif sparc}
|
|
|
|
{$ifdef arm}
|
|
{$ifdef cpuarm}
|
|
default_target(source_info.system);
|
|
{$else cpuarm}
|
|
default_target(system_arm_linux);
|
|
{$endif cpuarm}
|
|
{$endif arm}
|
|
end;
|
|
|
|
|
|
initialization
|
|
source_info.name:='';
|
|
finalization
|
|
DeregisterInfos;
|
|
end.
|