+ RTL part of WinCE patches from Yuri Sidorov

git-svn-id: trunk@572 -
This commit is contained in:
florian 2005-07-03 15:52:27 +00:00
parent 1f8d6aa678
commit 8adc1c9b0c
11 changed files with 1532 additions and 59 deletions

3
.gitattributes vendored
View File

@ -4176,6 +4176,9 @@ rtl/win32/wprt0_10.as -text
rtl/win64/Makefile svneol=native#text/plain
rtl/win64/Makefile.fpc svneol=native#text/plain
rtl/win64/system.pp svneol=native#text/plain
rtl/wince/Makefile.fpc svneol=native#text/plain
rtl/wince/system.pp svneol=native#text/plain
rtl/wince/wprt0.as svneol=native#text/plain
rtl/x86_64/int64p.inc svneol=native#text/plain
rtl/x86_64/makefile.cpu -text
rtl/x86_64/math.inc svneol=native#text/plain

View File

@ -19,12 +19,14 @@
procedure fpc_cpuinit;
begin
{$IFNDEF WINCE}
asm
rfs r0
and r0,r0,#0xffe0ffff
orr r0,r0,#0x00020000
wfs r0
end;
{$ENDIF}
end;
{****************************************************************************

View File

@ -58,20 +58,27 @@ end;
procedure chdir(const s:string);[IOCHECK];
begin
{$ifndef WINCE}
If (s='') or (InOutRes <> 0) then
exit;
dirfn(TDirFnType(@SetCurrentDirectory),s);
if Inoutres=2 then
Inoutres:=3;
{$else WINCE}
InOutRes:=1;
{$endif WINCE}
end;
procedure GetDir (DriveNr: byte; var Dir: ShortString);
{$ifndef WINCE}
const
Drive:array[0..3]of char=(#0,':',#0,#0);
{$endif WINCE}
var
defaultdrive:boolean;
DirBuf,SaveBuf:array[0..259] of Char;
begin
{$ifndef WINCE}
defaultdrive:=drivenr=0;
if not defaultdrive then
begin
@ -92,6 +99,9 @@ begin
dir:=strpas(DirBuf);
if not FileNameCaseSensitive then
dir:=upcase(dir);
{$else WINCE}
Dir:='\';
{$endif WINCE}
end;
{

View File

@ -29,7 +29,11 @@ end;
function do_isdevice(handle:thandle):boolean;
begin
{$ifndef WINCE}
do_isdevice:=(getfiletype(handle)=2);
{$else WINCE}
do_isdevice:=False;
{$endif WINCE}
end;

View File

@ -20,11 +20,11 @@
{ memory functions }
function GetProcessHeap : THandle;
stdcall;external 'kernel32' name 'GetProcessHeap';
stdcall;external KernelDLL name 'GetProcessHeap';
function HeapAlloc(hHeap : DWord; dwFlags : DWord; dwBytes : SIZE_T) : pointer;
stdcall;external 'kernel32' name 'HeapAlloc';
stdcall;external KernelDLL name 'HeapAlloc';
function HeapFree(hHeap : THandle; dwFlags : dword; lpMem: pointer) : boolean;
stdcall;external 'kernel32' name 'HeapFree';
stdcall;external KernelDLL name 'HeapFree';
{$IFDEF SYSTEMDEBUG}
function WinAPIHeapSize(hHeap : THandle; dwFlags : DWord; ptr : Pointer) : DWord;
stdcall;external 'kernel32' name 'HeapSize';

View File

@ -171,76 +171,84 @@ threadvar
{ misc. functions }
function GetLastError : DWORD;
stdcall;external 'kernel32' name 'GetLastError';
stdcall;external KernelDLL name 'GetLastError';
{ time and date functions }
function GetTickCount : longint;
stdcall;external 'kernel32' name 'GetTickCount';
stdcall;external KernelDLL name 'GetTickCount';
{$ifndef WINCE}
{ process functions }
procedure ExitProcess(uExitCode : UINT);
stdcall;external 'kernel32' name 'ExitProcess';
stdcall;external KernelDLL name 'ExitProcess';
{ Startup }
procedure GetStartupInfo(p : pointer);
stdcall;external 'kernel32' name 'GetStartupInfoA';
stdcall;external KernelDLL name 'GetStartupInfoA';
function GetStdHandle(nStdHandle:DWORD):THANDLE;
stdcall;external 'kernel32' name 'GetStdHandle';
stdcall;external KernelDLL name 'GetStdHandle';
{$endif WINCE}
{ command line/enviroment functions }
function GetCommandLine : pchar;
stdcall;external 'kernel32' name 'GetCommandLineA';
stdcall;external KernelDLL name 'GetCommandLine' + ApiSuffix;
{$ifndef WINCE}
function GetCurrentProcessId:DWORD;
stdcall; external 'kernel32' name 'GetCurrentProcessId';
stdcall; external KernelDLL name 'GetCurrentProcessId';
function Win32GetCurrentThreadId:DWORD;
stdcall; external 'kernel32' name 'GetCurrentThreadId';
stdcall; external KernelDLL name 'GetCurrentThreadId';
{$endif WINCE}
{ module functions }
function GetModuleFileName(l1:longint;p:pointer;l2:longint):longint;
stdcall;external 'kernel32' name 'GetModuleFileNameA';
stdcall;external KernelDLL name 'GetModuleFileName' + ApiSuffix;
function GetModuleHandle(p : pointer) : longint;
stdcall;external 'kernel32' name 'GetModuleHandleA';
stdcall;external KernelDLL name 'GetModuleHandle' + ApiSuffix;
function GetCommandFile:pchar;forward;
{ file functions }
function WriteFile(fh:thandle;buf:pointer;len:longint;var loaded:longint;
overlap:pointer):longint;
stdcall;external 'kernel32' name 'WriteFile';
stdcall;external KernelDLL name 'WriteFile';
function ReadFile(fh:thandle;buf:pointer;len:longint;var loaded:longint;
overlap:pointer):longint;
stdcall;external 'kernel32' name 'ReadFile';
stdcall;external KernelDLL name 'ReadFile';
function CloseHandle(h : thandle) : longint;
stdcall;external 'kernel32' name 'CloseHandle';
stdcall;external KernelDLL name 'CloseHandle';
function DeleteFile(p : pchar) : longint;
stdcall;external 'kernel32' name 'DeleteFileA';
stdcall;external KernelDLL name 'DeleteFile' + ApiSuffix;
function MoveFile(old,_new : pchar) : longint;
stdcall;external 'kernel32' name 'MoveFileA';
stdcall;external KernelDLL name 'MoveFile' + ApiSuffix;
function SetFilePointer(l1,l2 : thandle;l3 : pointer;l4 : longint) : longint;
stdcall;external 'kernel32' name 'SetFilePointer';
stdcall;external KernelDLL name 'SetFilePointer';
function GetFileSize(h:thandle;p:pointer) : longint;
stdcall;external 'kernel32' name 'GetFileSize';
stdcall;external KernelDLL name 'GetFileSize';
function CreateFile(lpFileName:pchar; dwDesiredAccess:DWORD; dwShareMode:DWORD;
lpSecurityAttributes:PSECURITYATTRIBUTES; dwCreationDisposition:DWORD;
dwFlagsAndAttributes:DWORD; hTemplateFile:DWORD):longint;
stdcall;external 'kernel32' name 'CreateFileA';
stdcall;external KernelDLL name 'CreateFile' + ApiSuffix;
function SetEndOfFile(h : thandle) : longbool;
stdcall;external 'kernel32' name 'SetEndOfFile';
stdcall;external KernelDLL name 'SetEndOfFile';
{$ifndef WINCE}
function GetFileType(Handle:thandle):DWord;
stdcall;external 'kernel32' name 'GetFileType';
stdcall;external KernelDLL name 'GetFileType';
{$endif WINCE}
function GetFileAttributes(p : pchar) : dword;
stdcall;external 'kernel32' name 'GetFileAttributesA';
stdcall;external KernelDLL name 'GetFileAttributes' + ApiSuffix;
{ Directory }
function CreateDirectory(name : pointer;sec : pointer) : longbool;
stdcall;external 'kernel32' name 'CreateDirectoryA';
stdcall;external KernelDLL name 'CreateDirectory' + ApiSuffix;
function RemoveDirectory(name:pointer):longbool;
stdcall;external 'kernel32' name 'RemoveDirectoryA';
stdcall;external KernelDLL name 'RemoveDirectory' + ApiSuffix;
{$ifndef WINCE}
function SetCurrentDirectory(name : pointer) : longbool;
stdcall;external 'kernel32' name 'SetCurrentDirectoryA';
stdcall;external KernelDLL name 'SetCurrentDirectory' + ApiSuffix;
function GetCurrentDirectory(bufsize : longint;name : pchar) : longbool;
stdcall;external 'kernel32' name 'GetCurrentDirectoryA';
stdcall;external KernelDLL name 'GetCurrentDirectory' + ApiSuffix;
{$endif WINCE}
Procedure Errno2InOutRes;
Begin

View File

@ -37,3 +37,12 @@ type
LockSemaphore : THandle;
SpinCount : ULONG_PTR;
end;
const
{$ifdef WINCE}
KernelDLL = 'coredll';
ApiSuffix = 'W';
{$else WINCE}
KernelDLL = 'kernel32';
ApiSuffix = 'A';
{$endif WINCE}

View File

@ -20,38 +20,41 @@
*****************************************************************************}
const
{ GlobalAlloc, GlobalFlags }
GMEM_FIXED = 0;
GMEM_ZEROINIT = 64;
{ LocalAlloc flags }
LMEM_FIXED = 0;
LMEM_ZEROINIT = 64;
{$ifndef WINCE}
function TlsAlloc : DWord;
stdcall;external 'kernel32' name 'TlsAlloc';
function TlsGetValue(dwTlsIndex : DWord) : pointer;
stdcall;external 'kernel32' name 'TlsGetValue';
function TlsSetValue(dwTlsIndex : DWord;lpTlsValue : pointer) : LongBool;
stdcall;external 'kernel32' name 'TlsSetValue';
stdcall;external KernelDLL name 'TlsAlloc';
function TlsFree(dwTlsIndex : DWord) : LongBool;
stdcall;external 'kernel32' name 'TlsFree';
stdcall;external KernelDLL name 'TlsFree';
{$endif WINCE}
function TlsGetValue(dwTlsIndex : DWord) : pointer;
stdcall;external KernelDLL name 'TlsGetValue';
function TlsSetValue(dwTlsIndex : DWord;lpTlsValue : pointer) : LongBool;
stdcall;external KernelDLL name 'TlsSetValue';
function CreateThread(lpThreadAttributes : pointer;
dwStackSize : SIZE_T; lpStartAddress : pointer;lpParameter : pointer;
dwCreationFlags : DWord;var lpThreadId : DWord) : THandle;
stdcall;external 'kernel32' name 'CreateThread';
stdcall;external KernelDLL name 'CreateThread';
procedure ExitThread(dwExitCode : DWord);
stdcall;external 'kernel32' name 'ExitThread';
function GlobalAlloc(uFlags:DWord; dwBytes:DWORD):Pointer;
stdcall;external 'kernel32' name 'GlobalAlloc';
function GlobalFree(hMem : Pointer):Pointer; stdcall;external 'kernel32' name 'GlobalFree';
procedure Sleep(dwMilliseconds: DWord); stdcall;external 'kernel32' name 'Sleep';
function WinSuspendThread (threadHandle : THandle) : dword; stdcall;external 'kernel32' name 'SuspendThread';
function WinResumeThread (threadHandle : THandle) : dword; stdcall;external 'kernel32' name 'ResumeThread';
function TerminateThread (threadHandle : THandle; var exitCode : dword) : boolean; stdcall;external 'kernel32' name 'TerminateThread';
function WaitForSingleObject (hHandle : THandle;Milliseconds: dword): dword; stdcall;external 'kernel32' name 'WaitForSingleObject';
function WinThreadSetPriority (threadHandle : THandle; Prio: longint): boolean; stdcall;external 'kernel32' name 'SetThreadPriority';
function WinThreadGetPriority (threadHandle : THandle): LongInt; stdcall;external 'kernel32' name 'GetThreadPriority';
function WinGetCurrentThreadId : dword; stdcall;external 'kernel32' name 'GetCurrentThread';
function CreateEvent(lpEventAttributes:pointer;bManualReset:longbool;bInitialState:longbool;lpName:pchar): THandle; stdcall; external 'kernel32' name 'CreateEventA';
function ResetEvent(hEvent:THandle):LONGBOOL; stdcall; external 'kernel32' name 'ResetEvent';
function SetEvent(hEvent:THandle):LONGBOOL; stdcall; external 'kernel32' name 'SetEvent';
stdcall;external KernelDLL name 'ExitThread';
function LocalAlloc(uFlags:DWord; dwBytes:DWORD):Pointer;
stdcall;external KernelDLL name 'LocalAlloc';
function LocalFree(hMem : Pointer):Pointer; stdcall;external KernelDLL name 'LocalFree';
procedure Sleep(dwMilliseconds: DWord); stdcall;external KernelDLL name 'Sleep';
function WinSuspendThread (threadHandle : THandle) : dword; stdcall;external KernelDLL name 'SuspendThread';
function WinResumeThread (threadHandle : THandle) : dword; stdcall;external KernelDLL name 'ResumeThread';
function TerminateThread (threadHandle : THandle; var exitCode : dword) : boolean; stdcall;external KernelDLL name 'TerminateThread';
function WaitForSingleObject (hHandle : THandle;Milliseconds: dword): dword; stdcall;external KernelDLL name 'WaitForSingleObject';
function WinThreadSetPriority (threadHandle : THandle; Prio: longint): boolean; stdcall;external KernelDLL name 'SetThreadPriority';
function WinThreadGetPriority (threadHandle : THandle): LongInt; stdcall;external KernelDLL name 'GetThreadPriority';
function CreateEvent(lpEventAttributes:pointer;bManualReset:longbool;bInitialState:longbool;lpName:pchar): THandle; stdcall; external KernelDLL name 'CreateEvent' + ApiSuffix;
{$ifndef WINCE}
function ResetEvent(hEvent:THandle):LONGBOOL; stdcall; external KernelDLL name 'ResetEvent';
function SetEvent(hEvent:THandle):LONGBOOL; stdcall; external KernelDLL name 'SetEvent';
{$endif WINCE}
CONST
WAIT_OBJECT_0 = 0;
@ -94,14 +97,14 @@ CONST
{ exceptions which use threadvars but }
{ these aren't allocated yet ... }
{ allocate room on the heap for the thread vars }
dataindex:=pointer(GlobalAlloc(GMEM_FIXED or GMEM_ZEROINIT,threadvarblocksize));
dataindex:=pointer(LocalAlloc(LMEM_FIXED or LMEM_ZEROINIT,threadvarblocksize));
TlsSetValue(tlskey,dataindex);
end;
procedure SysReleaseThreadVars;
begin
GlobalFree(TlsGetValue(tlskey));
LocalFree(TlsGetValue(tlskey));
end;
@ -244,16 +247,16 @@ CONST
*****************************************************************************}
procedure WinInitCriticalSection(var cs : TRTLCriticalSection);
stdcall;external 'kernel32' name 'InitializeCriticalSection';
stdcall;external KernelDLL name 'InitializeCriticalSection';
procedure WinDoneCriticalSection(var cs : TRTLCriticalSection);
stdcall;external 'kernel32' name 'DeleteCriticalSection';
stdcall;external KernelDLL name 'DeleteCriticalSection';
procedure WinEnterCriticalSection(var cs : TRTLCriticalSection);
stdcall;external 'kernel32' name 'EnterCriticalSection';
stdcall;external KernelDLL name 'EnterCriticalSection';
procedure WinLeaveCriticalSection(var cs : TRTLCriticalSection);
stdcall;external 'kernel32' name 'LeaveCriticalSection';
stdcall;external KernelDLL name 'LeaveCriticalSection';
procedure SySInitCriticalSection(var cs);
begin

241
rtl/wince/Makefile.fpc Normal file
View File

@ -0,0 +1,241 @@
#
# Makefile.fpc for Free Pascal WinCE RTL
#
[package]
main=rtl
[target]
loaders= wprt0 #wdllprt0 gprt0 wcygprt0
units=$(SYSTEMUNIT) objpas # ctypes objpas macpas strings \
# lineinfo heaptrc matrix \
# windows winsock initc cmem dynlibs signals \
# dos crt objects graph messages \
# rtlconsts sysconst sysutils math types \
# strutils convutils dateutils varutils variants typinfo classes \
# cpu mmx charset ucomplex getopts \
# wincrt winmouse winevent sockets printer \
# video mouse keyboard \
# winsysut
rsts=math varutils typinfo variants classes dateutils sysconst
[require]
nortl=y
[install]
fpcpackage=y
[default]
fpcdir=../..
target=wince
[compiler]
includedir=$(INC) $(PROCINC) $(RTL)/win
sourcedir=$(INC) $(PROCINC)
[prerules]
RTL=..
INC=$(RTL)/inc
PROCINC=$(RTL)/$(CPU_TARGET)
#WININC=wininc
UNITPREFIX=rtl
SYSTEMUNIT=system
PRT0=wprt0
# Use new feature from 1.0.5 version
# that generates release PPU files
# which will not be recompiled
ifdef RELEASE
override FPCOPT+=-Ur
endif
# Paths
OBJPASDIR=$(RTL)/objpas
GRAPHDIR=$(INC)/graph
# Files used by windows.pp
# include $(WININC)/makefile.inc
#WINDOWS_SOURCE_FILES=$(addprefix $(WININC)/,$(addsuffix .inc,$(WINDOWS_FILES)))
[rules]
SYSTEMPPU=$(addsuffix $(PPUEXT),$(SYSTEMUNIT))
# Get the system independent include file names.
# This will set the following variables :
# SYSINCNAMES
include $(INC)/makefile.inc
SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES))
# Get the processor dependent include file names.
# This will set the following variables :
# CPUINCNAMES
include $(PROCINC)/makefile.cpu
SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES))
# Put system unit dependencies together.
SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS)
#
# Loaders
#
wprt0$(OEXT) : $(PRT0).as
$(AS) -o $(UNITTARGETDIRPREFIX)wprt0$(OEXT) $(PRT0).as
gprt0$(OEXT) : gprt0.as
wdllprt0$(OEXT) : wdllprt0.as
wcygprt0$(OEXT) : wcygprt0.as
#
# System Units (System, Objpas, Strings)
#
$(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pp $(SYSDEPS)
$(COMPILER) -Us -Sg $(SYSTEMUNIT).pp #-Fi..\win
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp
strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc\
$(PROCINC)/strings.inc $(PROCINC)/stringss.inc\
$(SYSTEMUNIT)$(PPUEXT)
#
# System Dependent Units
#
#windows$(PPUEXT) : windows.pp $(WINDOWS_SOURCE_FILES) $(SYSTEMUNIT)$(PPUEXT)
# $(COMPILER) -I$(WININC) windows.pp
#messages$(PPUEXT): messages.pp $(WININC)/messages.inc $(SYSTEMUNIT)$(PPUEXT)
# $(COMPILER) -I$(WININC) messages.pp
#opengl32$(PPUEXT) : opengl32.pp windows$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
#winsock$(PPUEXT) : winsock.pp windows$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
#sockets$(PPUEXT) : sockets.pp windows$(PPUEXT) winsock$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
# $(INC)/sockets.inc $(INC)/socketsh.inc
#initc$(PPUEXT) : initc.pp $(SYSTEMUNIT)$(PPUEXT)
#wincrt$(PPUEXT) : wincrt.pp $(SYSTEMUNIT)$(PPUEXT) windows$(PPUEXT) graph$(PPUEXT)
#winmouse$(PPUEXT) : winmouse.pp $(SYSTEMUNIT)$(PPUEXT) windows$(PPUEXT) graph$(PPUEXT)
#dynlibs$(PPUEXT) : $(INC)/dynlibs.pp windows$(PPUEXT)
#
# TP7 Compatible RTL Units
#
#dos$(PPUEXT) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
#crt$(PPUEXT) : crt.pp $(INC)/textrec.inc $(SYSTEMUNIT)$(PPUEXT) objpas$(PPUEXT) dos$(PPUEXT) windows$(PPUEXT)
#objects$(PPUEXT) : $(INC)/objects.pp $(SYSTEMUNIT)$(PPUEXT)
#
# Graph
#
#include $(GRAPHDIR)/makefile.inc
#GRAPHINCDEPS=$(addprefix $(GRAPHDIR)/,$(GRAPHINCNAMES))
#graph$(PPUEXT) : graph.pp strings$(PPUEXT) windows$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
# $(GRAPHINCDEPS)
# $(COMPILER) -I$(GRAPHDIR) graph.pp
#
# Delphi Compatible Units
#
#sysutils$(PPUEXT) : sysutils.pp $(wildcard $(OBJPASDIR)/sysutils/*.inc) \
# objpas$(PPUEXT) dos$(PPUEXT) windows$(PPUEXT) sysconst$(PPUEXT)
# $(COMPILER) -Fi$(OBJPASDIR)/sysutils sysutils.pp
#classes$(PPUEXT) : classes.pp $(wildcard $(OBJPASDIR)/classes/*.inc) \
# sysutils$(PPUEXT) typinfo$(PPUEXT) rtlconsts$(PPUEXT) sysconst$(PPUEXT)
# $(COMPILER) -Fi$(OBJPASDIR)/classes classes.pp
#winsysut$(PPUEXT) : winsysut.pp sysutils$(PPUEXT)
# $(COMPILER) winsysut.pp
#typinfo$(PPUEXT): $(OBJPASDIR)/typinfo.pp objpas$(PPUEXT)
# $(COMPILER) -Sg $(OBJPASDIR)/typinfo.pp
#math$(PPUEXT): $(OBJPASDIR)/math.pp objpas$(PPUEXT) sysutils$(PPUEXT)
# $(COMPILER) $(OBJPASDIR)/math.pp
#varutils$(PPUEXT) : $(OBJPASDIR)/cvarutil.inc $(OBJPASDIR)/varutils.inc \
# $(OBJPASDIR)/varutilh.inc varutils.pp sysutils$(PPUEXT)
# $(COMPILER) -Fi$(OBJPASDIR) varutils.pp
#variants$(PPUEXT) : $(INC)/variants.pp varutils$(PPUEXT) sysutils$(PPUEXT) sysconst$(PPUEXT) typinfo$(PPUEXT) rtlconsts$(PPUEXT)
# $(COMPILER) -Fi$(INC) $(INC)/variants.pp
#types$(PPUEXT) : $(OBJPASDIR)/types.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
# $(COMPILER) $(OBJPASDIR)/types.pp
#rtlconsts$(PPUEXT) : objpas$(PPUEXT) $(OBJPASDIR)/rtlconsts.pp
# $(COMPILER) $(OBJPASDIR)/rtlconsts.pp
#sysconst$(PPUEXT) : $(OBJPASDIR)/sysconst.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
# $(COMPILER) $(OBJPASDIR)/sysconst.pp
#dateutils$(PPUEXT) : $(OBJPASDIR)/dateutils.pp
# $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/dateutils.pp
#convutils$(PPUEXT) : $(OBJPASDIR)/convutils.pp
# $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/convutils.pp
#strutils$(PPUEXT) : $(OBJPASDIR)/strutils.pp
# $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/strutils.pp
#
# Mac Pascal Model
#
#macpas$(PPUEXT) : $(INC)/macpas.pp $(SYSTEMUNIT)$(PPUEXT)
# $(COMPILER) $(INC)/macpas.pp $(REDIR)
#
# Other system-independent RTL Units
#
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMUNIT)$(PPUEXT)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -Sg $(INC)/heaptrc.pp
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
charset$(PPUEXT) : $(INC)/charset.pp $(SYSTEMUNIT)$(PPUEXT)
cmem$(PPUEXT) : $(INC)/cmem.pp $(SYSTEMUNIT)$(PPUEXT)
ucomplex$(PPUEXT) : $(INC)/ucomplex.pp math$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
#
# Other system-dependent RTL Units
#
#callspec$(PPUEXT) : $(INC)/callspec.pp $(SYSTEMUNIT)$(PPUEXT)
#ctypes$(PPUEXT) : $(INC)/ctypes.pp $(SYSTEMUNIT)$(PPUEXT)
#variants$(PPUEXT) : $(INC)/variants.pp varutils$(PPUEXT) typinfo$(PPUEXT)

1126
rtl/wince/system.pp Normal file

File diff suppressed because it is too large Load Diff

67
rtl/wince/wprt0.as Normal file
View File

@ -0,0 +1,67 @@
/*
Startup code for WinCE port of Free Pascal
Written by Yury Sidorov 2005
*/
.section .text
.balign 4
.globl mainCRTStartup
mainCRTStartup:
.globl _mainCRTStartup
_mainCRTStartup:
mov r0,#1
b do_start
.globl WinMainCRTStartup
WinMainCRTStartup:
.globl _WinMainCRTStartup
_WinMainCRTStartup:
mov r0,#0
do_start:
ldr r1, _PISCONSOLE
strb r0,[r1]
bl _FPC_EXE_Entry
.globl asm_exit
asm_exit:
eor r0,r0,r0
bl exitthread
_PISCONSOLE:
.long U_SYSTEM_ISCONSOLE
.globl exitthread
exitthread:
ldr ip,.L100
ldr pc,[ip]
.L100:
.long .L10
.section .idata$2
.rva .L7
.long 0,0
.rva .L6
.rva .L8
.section .idata$4
.L7:
.rva .L9
.long 0
.section .idata$5
.L8:
.section .idata$5
.L10:
.rva .L9
.long 0
.section .idata$6
.L9:
.short 0
.ascii "ExitThread\000"
.balign 2,0
.section .idata$7
.L6:
.ascii "coredll.dll\000"