diff options
author | Araq <rumpf_a@web.de> | 2011-04-12 01:13:42 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2011-04-12 01:13:42 +0200 |
commit | cd292568d775d55d9abb51e962882ecda12c03a9 (patch) | |
tree | 85451f0e1f17dc0463350915f12bdd0a82a73455 /nim/platform.pas | |
parent | 46c41e43690cba9bc1caff6a994bb6915df8a1b7 (diff) | |
download | Nim-cd292568d775d55d9abb51e962882ecda12c03a9.tar.gz |
big repo cleanup
Diffstat (limited to 'nim/platform.pas')
-rwxr-xr-x | nim/platform.pas | 662 |
1 files changed, 0 insertions, 662 deletions
diff --git a/nim/platform.pas b/nim/platform.pas deleted file mode 100755 index c2fa711b9..000000000 --- a/nim/platform.pas +++ /dev/null @@ -1,662 +0,0 @@ -// -// -// The Nimrod Compiler -// (c) Copyright 2009 Andreas Rumpf -// -// See the file "copying.txt", included in this -// distribution, for details about the copyright. -// -unit platform; - -// This module contains data about the different processors -// and operating systems. -// Note: Unfortunately if an OS or CPU is listed here this does not mean that -// Nimrod has been tested on this platform or that the RTL has been ported. -// Feel free to test for your excentric platform! - -interface - -{$include 'config.inc'} - -uses - nsystem, strutils; - -type - TSystemOS = ( - // Also add OS in initialization section and alias conditionals to - // condsyms (end of module). - osNone, - osDos, - osWindows, - osOs2, - osLinux, - osMorphos, - osSkyos, - osSolaris, - osIrix, - osNetbsd, - osFreebsd, - osOpenbsd, - osAix, - osPalmos, - osQnx, - osAmiga, - osAtari, - osNetware, - osMacos, - osMacosx, - osEcmaScript, - osNimrodVM - ); -type - TInfoOSProp = ( - ospNeedsPIC, // OS needs PIC for libraries - ospCaseInsensitive, // OS filesystem is case insensitive - ospPosix // OS is posix-like - ); - - TInfoOSProps = set of TInfoOSProp; - TInfoOS = record{@tuple} - name: string; - parDir: string; - dllFrmt: string; - altDirSep: string; - objExt: string; - newLine: string; - pathSep: string; - dirSep: string; - scriptExt: string; - curDir: string; - exeExt: string; - extSep: string; - props: TInfoOSProps; - end; -const - OS: array [succ(low(TSystemOS))..high(TSystemOS)] of TInfoOS = ( - ( - name: 'DOS'; - parDir: '..'; - dllFrmt: '$1.dll'; - altDirSep: '/'+''; - objExt: '.obj'; - newLine: #13#10; - pathSep: ';'+''; - dirSep: '\'+''; - scriptExt: '.bat'; - curDir: '.'+''; - exeExt: '.exe'; - extSep: '.'+''; - props: {@set}[ospCaseInsensitive]; - ), - ( - name: 'Windows'; - parDir: '..'; - dllFrmt: '$1.dll'; - altDirSep: '/'+''; - objExt: '.obj'; - newLine: #13#10; - pathSep: ';'+''; - dirSep: '\'+''; - scriptExt: '.bat'; - curDir: '.'+''; - exeExt: '.exe'; - extSep: '.'+''; - props: {@set}[ospCaseInsensitive]; - ), - ( - name: 'OS2'; - parDir: '..'; - dllFrmt: '$1.dll'; - altDirSep: '/'+''; - objExt: '.obj'; - newLine: #13#10; - pathSep: ';'+''; - dirSep: '\'+''; - scriptExt: '.bat'; - curDir: '.'+''; - exeExt: '.exe'; - extSep: '.'+''; - props: {@set}[ospCaseInsensitive]; - ), - ( - name: 'Linux'; - parDir: '..'; - dllFrmt: 'lib$1.so'; - altDirSep: '/'+''; - objExt: '.o'; - newLine: #10+''; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: '.sh'; - curDir: '.'+''; - exeExt: ''; - extSep: '.'+''; - props: {@set}[ospNeedsPIC, ospPosix]; - ), - ( - name: 'MorphOS'; - parDir: '..'; - dllFrmt: 'lib$1.so'; - altDirSep: '/'+''; - objExt: '.o'; - newLine: #10+''; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: '.sh'; - curDir: '.'+''; - exeExt: ''; - extSep: '.'+''; - props: {@set}[ospNeedsPIC, ospPosix]; - ), - ( - name: 'SkyOS'; - parDir: '..'; - dllFrmt: 'lib$1.so'; - altDirSep: '/'+''; - objExt: '.o'; - newLine: #10+''; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: '.sh'; - curDir: '.'+''; - exeExt: ''; - extSep: '.'+''; - props: {@set}[ospNeedsPIC, ospPosix]; - ), - ( - name: 'Solaris'; - parDir: '..'; - dllFrmt: 'lib$1.so'; - altDirSep: '/'+''; - objExt: '.o'; - newLine: #10+''; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: '.sh'; - curDir: '.'+''; - exeExt: ''; - extSep: '.'+''; - props: {@set}[ospNeedsPIC, ospPosix]; - ), - ( - name: 'Irix'; - parDir: '..'; - dllFrmt: 'lib$1.so'; - altDirSep: '/'+''; - objExt: '.o'; - newLine: #10+''; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: '.sh'; - curDir: '.'+''; - exeExt: ''; - extSep: '.'+''; - props: {@set}[ospNeedsPIC, ospPosix]; - ), - ( - name: 'NetBSD'; - parDir: '..'; - dllFrmt: 'lib$1.so'; - altDirSep: '/'+''; - objExt: '.o'; - newLine: #10+''; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: '.sh'; - curDir: '.'+''; - exeExt: ''; - extSep: '.'+''; - props: {@set}[ospNeedsPIC, ospPosix]; - ), - ( - name: 'FreeBSD'; - parDir: '..'; - dllFrmt: 'lib$1.so'; - altDirSep: '/'+''; - objExt: '.o'; - newLine: #10+''; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: '.sh'; - curDir: '.'+''; - exeExt: ''; - extSep: '.'+''; - props: {@set}[ospNeedsPIC, ospPosix]; - ), - ( - name: 'OpenBSD'; - parDir: '..'; - dllFrmt: 'lib$1.so'; - altDirSep: '/'+''; - objExt: '.o'; - newLine: #10+''; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: '.sh'; - curDir: '.'+''; - exeExt: ''; - extSep: '.'+''; - props: {@set}[ospNeedsPIC, ospPosix]; - ), - ( - name: 'AIX'; - parDir: '..'; - dllFrmt: 'lib$1.so'; - altDirSep: '/'+''; - objExt: '.o'; - newLine: #10+''; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: '.sh'; - curDir: '.'+''; - exeExt: ''; - extSep: '.'+''; - props: {@set}[ospNeedsPIC, ospPosix]; - ), - ( - name: 'PalmOS'; - parDir: '..'; - dllFrmt: 'lib$1.so'; - altDirSep: '/'+''; - objExt: '.o'; - newLine: #10+''; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: '.sh'; - curDir: '.'+''; - exeExt: ''; - extSep: '.'+''; - props: {@set}[ospNeedsPIC]; - ), - ( - name: 'QNX'; - parDir: '..'; - dllFrmt: 'lib$1.so'; - altDirSep: '/'+''; - objExt: '.o'; - newLine: #10+''; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: '.sh'; - curDir: '.'+''; - exeExt: ''; - extSep: '.'+''; - props: {@set}[ospNeedsPIC, ospPosix]; - ), - ( - name: 'Amiga'; - parDir: '..'; - dllFrmt: '$1.library'; - altDirSep: '/'+''; - objExt: '.o'; - newLine: #10+''; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: '.sh'; - curDir: '.'+''; - exeExt: ''; - extSep: '.'+''; - props: {@set}[ospNeedsPIC]; - ), - ( - name: 'Atari'; - parDir: '..'; - dllFrmt: '$1.dll'; - altDirSep: '/'+''; - objExt: '.o'; - newLine: #10+''; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: ''; - curDir: '.'+''; - exeExt: '.tpp'; - extSep: '.'+''; - props: {@set}[ospNeedsPIC]; - ), - ( - name: 'Netware'; - parDir: '..'; - dllFrmt: '$1.nlm'; - altDirSep: '/'+''; - objExt: ''; - newLine: #13#10; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: '.sh'; - curDir: '.'+''; - exeExt: '.nlm'; - extSep: '.'+''; - props: {@set}[ospCaseInsensitive]; - ), - ( - name: 'MacOS'; - parDir: '::'; - dllFrmt: '$1Lib'; - altDirSep: ':'+''; - objExt: '.o'; - newLine: #13+''; - pathSep: ','+''; - dirSep: ':'+''; - scriptExt: ''; - curDir: ':'+''; - exeExt: ''; - extSep: '.'+''; - props: {@set}[ospCaseInsensitive]; - ), - ( - name: 'MacOSX'; - parDir: '..'; - dllFrmt: 'lib$1.dylib'; - altDirSep: ':'+''; - objExt: '.o'; - newLine: #10+''; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: '.sh'; - curDir: '.'+''; - exeExt: ''; - extSep: '.'+''; - props: {@set}[ospNeedsPIC, ospPosix]; - ), - ( - name: 'EcmaScript'; - parDir: '..'; - dllFrmt: 'lib$1.so'; - altDirSep: '/'+''; - objExt: '.o'; - newLine: #10+''; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: '.sh'; - curDir: '.'+''; - exeExt: ''; - extSep: '.'+''; - props: {@set}[]; - ), - ( - name: 'NimrodVM'; - parDir: '..'; - dllFrmt: 'lib$1.so'; - altDirSep: '/'+''; - objExt: '.o'; - newLine: #10+''; - pathSep: ':'+''; - dirSep: '/'+''; - scriptExt: '.sh'; - curDir: '.'+''; - exeExt: ''; - extSep: '.'+''; - props: {@set}[]; - ) -); -type - TSystemCPU = ( - // Also add CPU for in initialization section and alias conditionals to - // condsyms (end of module). - cpuNone, - cpuI386, - cpuM68k, - cpuAlpha, - cpuPowerpc, - cpuSparc, - cpuVm, - cpuIa64, - cpuAmd64, - cpuMips, - cpuArm, - cpuEcmaScript, - cpuNimrodVM - ); -type - TEndian = (littleEndian, bigEndian); - TInfoCPU = record{@tuple} - name: string; - intSize: int; - endian: TEndian; - floatSize: int; - bit: int; - end; -const - EndianToStr: array [TEndian] of string = ('littleEndian', 'bigEndian'); - CPU: array [succ(low(TSystemCPU))..high(TSystemCPU)] of TInfoCPU = ( - ( - name: 'i386'; - intSize: 32; - endian: littleEndian; - floatSize: 64; - bit: 32; - ), - ( - name: 'm68k'; - intSize: 32; - endian: bigEndian; - floatSize: 64; - bit: 32; - ), - ( - name: 'alpha'; - intSize: 64; - endian: littleEndian; - floatSize: 64; - bit: 64; - ), - ( - name: 'powerpc'; - intSize: 32; - endian: bigEndian; - floatSize: 64; - bit: 32; - ), - ( - name: 'sparc'; - intSize: 32; - endian: bigEndian; - floatSize: 64; - bit: 32; - ), - ( - name: 'vm'; - intSize: 32; - endian: littleEndian; - floatSize: 64; - bit: 32; - ), - ( - name: 'ia64'; - intSize: 64; - endian: littleEndian; - floatSize: 64; - bit: 64; - ), - ( - name: 'amd64'; - intSize: 64; - endian: littleEndian; - floatSize: 64; - bit: 64; - ), - ( - name: 'mips'; - intSize: 32; - endian: bigEndian; - floatSize: 64; - bit: 32; - ), - ( - name: 'arm'; - intSize: 32; - endian: littleEndian; - floatSize: 64; - bit: 32; - ), - ( - name: 'ecmascript'; - intSize: 32; - endian: bigEndian; - floatSize: 64; - bit: 32; - ), - ( - name: 'nimrodvm'; - intSize: 32; - endian: bigEndian; - floatSize: 64; - bit: 32; - ) -); - -var - targetCPU, hostCPU: TSystemCPU; - targetOS, hostOS: TSystemOS; - -function NameToOS(const name: string): TSystemOS; -function NameToCPU(const name: string): TSystemCPU; - -var - IntSize: int; - floatSize: int; - PtrSize: int; - tnl: string; // target newline - -procedure setTarget(o: TSystemOS; c: TSystemCPU); - -implementation - -procedure setTarget(o: TSystemOS; c: TSystemCPU); -begin - assert(c <> cpuNone); - assert(o <> osNone); - targetCPU := c; - targetOS := o; - intSize := cpu[c].intSize div 8; - floatSize := cpu[c].floatSize div 8; - ptrSize := cpu[c].bit div 8; - tnl := os[o].newLine; -end; - -function NameToOS(const name: string): TSystemOS; -var - i: TSystemOS; -begin - for i := succ(osNone) to high(TSystemOS) do - if cmpIgnoreStyle(name, OS[i].name) = 0 then begin - result := i; exit - end; - result := osNone -end; - -function NameToCPU(const name: string): TSystemCPU; -var - i: TSystemCPU; -begin - for i := succ(cpuNone) to high(TSystemCPU) do - if cmpIgnoreStyle(name, CPU[i].name) = 0 then begin - result := i; exit - end; - result := cpuNone -end; - -// this is Ok for the Pascal version, but the Nimrod version needs a different -// mechanism -{@emit -procedure nimCPU(): cstring; importc; noconv;} -{@emit -procedure nimOS(): cstring; importc; noconv;} - -{@ignore} -initialization -{$ifdef i386} - hostCPU := cpuI386; -{$endif} -{$ifdef m68k} - hostCPU := cpuM68k; -{$endif} -{$ifdef alpha} - hostCPU := cpuAlpha; -{$endif} -{$ifdef powerpc} - hostCPU := cpuPowerpc; -{$endif} -{$ifdef sparc} - hostCPU := cpuSparc; -{$endif} -{$ifdef vm} - hostCPU := cpuVm; -{$endif} -{$ifdef ia64} - hostCPU := cpuIa64; -{$endif} -{$ifdef amd64} - hostCPU := cpuAmd64; -{$endif} -{$ifdef mips} - hostCPU := cpuMips; -{$endif} -{$ifdef arm} - hostCPU := cpuArm; -{$endif} -{$ifdef DOS} - hostOS := osDOS; -{$endif} -{$ifdef Windows} - hostOS := osWindows; -{$endif} -{$ifdef OS2} - hostOS := osOS2; -{$endif} -{$ifdef Linux} - hostOS := osLinux; -{$endif} -{$ifdef MorphOS} - hostOS := osMorphOS; -{$endif} -{$ifdef SkyOS} - hostOS := osSkyOS; -{$endif} -{$ifdef Solaris} - hostOS := osSolaris; -{$endif} -{$ifdef Irix} - hostOS := osIrix; -{$endif} -{$ifdef NetBSD} - hostOS := osNetBSD; -{$endif} -{$ifdef FreeBSD} - hostOS := osFreeBSD; -{$endif} -{$ifdef OpenBSD} - hostOS := osOpenBSD; -{$endif} -{$ifdef PalmOS} - hostOS := osPalmOS; -{$endif} -{$ifdef QNX} - hostOS := osQNX; -{$endif} -{$ifdef Amiga} - hostOS := osAmiga; -{$endif} -{$ifdef Atari} - hostOS := osAtari; -{$endif} -{$ifdef Netware} - hostOS := osNetware; -{$endif} -{$ifdef MacOS} - hostOS := osMacOS; -{$endif} -{$ifdef MacOSX} - hostOS := osMacOSX; -{$endif} -{$ifdef darwin} // BUGFIX - hostOS := osMacOSX; -{$endif} -{@emit - hostCPU := nameToCPU(toString(nimCPU())); -} -{@emit - hostOS := nameToOS(toString(nimOS())); -} - setTarget(hostOS, hostCPU); // assume no cross-compiling -end. |