fpc/compiler/new/pp.pas
1999-08-01 18:22:31 +00:00

265 lines
6.1 KiB
ObjectPascal

{
$Id$
Copyright (c) 1993-98 by Florian Klaempfl
Commandline compiler for Free Pascal
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 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.
****************************************************************************}
{
possible compiler switches (* marks a currently required switch):
-----------------------------------------------------------------
USE_RHIDE generates errors and warning in an format recognized
by rhide
TP to compile the compiler with Turbo or Borland Pascal
GDB* support of the GNU Debugger
I386 generate a compiler for the Intel i386+
M68K generate a compiler for the M68000
USEOVERLAY compiles a TP version which uses overlays
EXTDEBUG some extra debug code is executed
SUPPORT_MMX only i386: releases the compiler switch
MMX which allows the compiler to generate
MMX instructions
EXTERN_MSG Don't compile the msgfiles in the compiler, always
use external messagefiles, default for TP
NOAG386INT no Intel Assembler output
NOAG386NSM no NASM output
-----------------------------------------------------------------
Required switches for a i386 compiler be compiled by Free Pascal Compiler:
GDB;I386
Required switches for a i386 compiler be compiled by Turbo Pascal:
GDB;I386;TP
Required switches for a 68000 compiler be compiled by Turbo Pascal:
GDB;M68k;TP
}
{$ifdef FPC}
{$ifndef GDB}
{ people can try to compile without GDB }
{ $error The compiler switch GDB must be defined}
{$endif GDB}
{ but I386 or M68K must be defined }
{ and only one of the two }
{$ifndef I386}
{$ifndef M68K}
{$fatal One of the switches I386 or M68K must be defined}
{$endif M68K}
{$endif I386}
{$ifdef I386}
{$ifdef M68K}
{$fatal ONLY one of the switches I386 or M68K must be defined}
{$endif M68K}
{$endif I386}
{$ifdef support_mmx}
{$ifndef i386}
{$fatal I386 switch must be on for MMX support}
{$endif i386}
{$endif support_mmx}
{$endif}
{$ifdef TP}
{$IFNDEF DPMI}
{$M 24000,0,655360}
{$ELSE}
{$M 65000}
{$ENDIF DPMI}
{$E+,N+,F+,S-,R-}
{$endif TP}
program pp;
{$IFDEF TP}
{$UNDEF PROFILE}
{$IFDEF DPMI}
{$UNDEF USEOVERLAY}
{$ENDIF}
{$ENDIF}
{$ifdef FPC}
{$UNDEF USEOVERLAY}
{$ENDIF}
uses
{$ifdef useoverlay}
{$ifopt o+}
Overlay,ppovin,
{$else}
{$error You must compile with the $O+ switch}
{$endif}
{$endif useoverlay}
{$ifdef profile}
profile,
{$endif profile}
{$ifdef FPC}
{$ifdef heaptrc}
ppheap,
{$endif heaptrc}
{$ifdef linux}
catch,
{$endif}
{$endif FPC}
globals,compiler
;
{$ifdef useoverlay}
{$O files}
{$O globals}
{$O hcodegen}
{$O pass_1}
{$O pass_2}
{$O tree}
{$O types}
{$O objects}
{$O options}
{$O cobjects}
{$O globals}
{$O systems}
{$O parser}
{$O pbase}
{$O pdecl}
{$O pexports}
{$O pexpr}
{$O pmodules}
{$O pstatmnt}
{$O psub}
{$O psystem}
{$O ptconst}
{$O script}
{$O switches}
{$O temp_gen}
{$O comphook}
{$O dos}
{$O scanner}
{$O symtable}
{$O objects}
{$O aasm}
{$O link}
{$O assemble}
{$O messages}
{$O gendef}
{$O import}
{$ifdef i386}
{$O os2_targ}
{$O win_targ}
{$endif i386}
{$ifdef gdb}
{$O gdb}
{$endif gdb}
{$ifdef i386}
{$O opts386}
{$O i386base}
{$O i386asm}
{$O tgeni386}
{$ifndef NOOPT}
{$O aopt386}
{$endif}
{$IfNDef Nora386dir}
{$O ra386dir}
{$endif}
{$IfNDef Nora386int}
{$O ra386int}
{$endif}
{$IfNDef Nora386att}
{$O ra386att}
{$endif}
{$ifndef NoAg386Int}
{$O ag386int}
{$endif}
{$ifndef NoAg386Att}
{$O ag386att}
{$endif}
{$ifndef NoAg386Nsm}
{$O ag386nsm}
{$endif}
{$endif}
{$ifdef m68k}
{$O opts68k}
{$O m68k}
{$O cga68k}
{$O tgen68k}
{$O cg68kadd}
{$O cg68kcal}
{$O cg68kcnv}
{$O cg68kcon}
{$O cg68kflw}
{$O cg68kld}
{$O cg68kinl}
{$O cg68kmat}
{$O cg68kset}
{$IfNDef Nora68kMot}
{$O ra68kmot}
{$endif}
{$IfNDef Noag68kGas}
{$O ag68kgas}
{$endif}
{$IfNDef Noag68kMot}
{$O ag68kmot}
{$endif}
{$IfNDef Noag68kMit}
{$O ag68kmit}
{$endif}
{$endif}
{$endif useoverlay}
var
oldexit : pointer;
procedure myexit;{$ifndef FPC}far;{$endif}
begin
exitproc:=oldexit;
{ Show Runtime error if there was an error }
if (erroraddr<>nil) then
begin
case exitcode of
202 : begin
erroraddr:=nil;
Writeln('Error: Stack Overflow');
end;
203 : begin
erroraddr:=nil;
Writeln('Error: Out of memory');
end;
end;
Writeln('Compilation aborted at line ',aktfilepos.line);
end;
end;
begin
oldexit:=exitproc;
exitproc:=@myexit;
{$ifdef fpc}
heapblocks:=true;
{$endif}
{$ifdef UseOverlay}
InitOverlay;
{$endif}
{ Call the compiler with empty command, so it will take the parameters }
Halt(Compile(''));
end.
{
$Log$
Revision 1.2 1999-08-01 18:22:37 florian
* made it again compilable
Revision 1.1 1998/12/26 15:20:31 florian
+ more changes for the new version
}