Subversion Repositories Kolibri OS

Rev

Rev 7983 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. (*
  2.     BSD 2-Clause License
  3.  
  4.     Copyright (c) 2019-2020, Anton Krotov
  5.     All rights reserved.
  6. *)
  7.  
  8. MODULE TARGETS;
  9.  
  10.  
  11. CONST
  12.  
  13.     MSP430*       =  0;
  14.     Win32C*       =  1;
  15.     Win32GUI*     =  2;
  16.     Win32DLL*     =  3;
  17.     KolibriOS*    =  4;
  18.     KolibriOSDLL* =  5;
  19.     Win64C*       =  6;
  20.     Win64GUI*     =  7;
  21.     Win64DLL*     =  8;
  22.     Linux32*      =  9;
  23.     Linux32SO*    = 10;
  24.     Linux64*      = 11;
  25.     Linux64SO*    = 12;
  26.     STM32CM3*     = 13;
  27.     RVM32I*       = 14;
  28.  
  29.     cpuX86* = 0; cpuAMD64* = 1; cpuMSP430* = 2; cpuTHUMB* = 3;
  30.     cpuRVM32I* = 4;
  31.  
  32.     osNONE*    = 0;  osWIN32*   = 1;  osWIN64* = 2;
  33.     osLINUX32* = 3;  osLINUX64* = 4;  osKOS*   = 5;
  34.  
  35.     noDISPOSE = {MSP430, STM32CM3, RVM32I};
  36.  
  37.     noRTL = {MSP430};
  38.  
  39.  
  40. TYPE
  41.  
  42.     STRING = ARRAY 32 OF CHAR;
  43.  
  44.     TARGET = RECORD
  45.  
  46.         target, CPU, OS, RealSize: INTEGER;
  47.         ComLinePar*, LibDir, FileExt: STRING
  48.  
  49.     END;
  50.  
  51.  
  52. VAR
  53.  
  54.     Targets*: ARRAY 15 OF TARGET;
  55.  
  56.     CPUs: ARRAY 5 OF
  57.         RECORD
  58.             BitDepth, InstrSize: INTEGER;
  59.             LittleEndian: BOOLEAN
  60.         END;
  61.  
  62.     target*, CPU*, BitDepth*, OS*, RealSize*, WordSize*, AdrSize*, InstrSize*: INTEGER;
  63.     ComLinePar*, LibDir*, FileExt*: STRING;
  64.     Import*, Dispose*, RTL*, Dll*, LittleEndian*: BOOLEAN;
  65.  
  66.  
  67. PROCEDURE Enter (idx, CPU, RealSize, OS: INTEGER; ComLinePar, LibDir, FileExt: STRING);
  68. BEGIN
  69.     Targets[idx].target := idx;
  70.     Targets[idx].CPU := CPU;
  71.     Targets[idx].RealSize := RealSize;
  72.     Targets[idx].OS := OS;
  73.     Targets[idx].ComLinePar := ComLinePar;
  74.     Targets[idx].LibDir := LibDir;
  75.     Targets[idx].FileExt := FileExt;
  76. END Enter;
  77.  
  78.  
  79. PROCEDURE Select* (ComLineParam: ARRAY OF CHAR): BOOLEAN;
  80. VAR
  81.     i: INTEGER;
  82.     res: BOOLEAN;
  83.  
  84. BEGIN
  85.     i := 0;
  86.     WHILE (i < LEN(Targets)) & (Targets[i].ComLinePar # ComLineParam) DO
  87.         INC(i)
  88.     END;
  89.  
  90.     res := i < LEN(Targets);
  91.     IF res THEN
  92.         target := Targets[i].target;
  93.         CPU := Targets[i].CPU;
  94.         BitDepth := CPUs[CPU].BitDepth;
  95.         InstrSize := CPUs[CPU].InstrSize;
  96.         LittleEndian := CPUs[CPU].LittleEndian;
  97.         RealSize := Targets[i].RealSize;
  98.         OS := Targets[i].OS;
  99.         ComLinePar := Targets[i].ComLinePar;
  100.         LibDir := Targets[i].LibDir;
  101.         FileExt := Targets[i].FileExt;
  102.  
  103.         Import := OS IN {osWIN32, osWIN64, osKOS};
  104.         Dispose := ~(target IN noDISPOSE);
  105.         RTL := ~(target IN noRTL);
  106.         Dll := target IN {Linux32SO, Linux64SO, Win32DLL, Win64DLL, KolibriOSDLL};
  107.         WordSize := BitDepth DIV 8;
  108.         AdrSize  := WordSize
  109.     END
  110.  
  111.     RETURN res
  112. END Select;
  113.  
  114.  
  115. PROCEDURE EnterCPU (cpu, BitDepth, InstrSize: INTEGER; LittleEndian: BOOLEAN);
  116. BEGIN
  117.     CPUs[cpu].BitDepth := BitDepth;
  118.     CPUs[cpu].InstrSize := InstrSize;
  119.     CPUs[cpu].LittleEndian := LittleEndian
  120. END EnterCPU;
  121.  
  122.  
  123. BEGIN
  124.     EnterCPU(cpuX86,    32, 1, TRUE);
  125.     EnterCPU(cpuAMD64,  64, 1, TRUE);
  126.     EnterCPU(cpuMSP430, 16, 2, TRUE);
  127.     EnterCPU(cpuTHUMB,  32, 2, TRUE);
  128.     EnterCPU(cpuRVM32I, 32, 4, TRUE);
  129.  
  130.     Enter( MSP430,        cpuMSP430,  0,  osNONE,     "msp430",      "MSP430",     ".hex");
  131.     Enter( Win32C,        cpuX86,     8,  osWIN32,    "win32con",    "Windows32",  ".exe");
  132.     Enter( Win32GUI,      cpuX86,     8,  osWIN32,    "win32gui",    "Windows32",  ".exe");
  133.     Enter( Win32DLL,      cpuX86,     8,  osWIN32,    "win32dll",    "Windows32",  ".dll");
  134.     Enter( KolibriOS,     cpuX86,     8,  osKOS,      "kosexe",      "KolibriOS",  "");
  135.     Enter( KolibriOSDLL,  cpuX86,     8,  osKOS,      "kosdll",      "KolibriOS",  ".obj");
  136.     Enter( Win64C,        cpuAMD64,   8,  osWIN64,    "win64con",    "Windows64",  ".exe");
  137.     Enter( Win64GUI,      cpuAMD64,   8,  osWIN64,    "win64gui",    "Windows64",  ".exe");
  138.     Enter( Win64DLL,      cpuAMD64,   8,  osWIN64,    "win64dll",    "Windows64",  ".dll");
  139.     Enter( Linux32,       cpuX86,     8,  osLINUX32,  "linux32exe",  "Linux32",    "");
  140.     Enter( Linux32SO,     cpuX86,     8,  osLINUX32,  "linux32so",   "Linux32",    ".so");
  141.     Enter( Linux64,       cpuAMD64,   8,  osLINUX64,  "linux64exe",  "Linux64",    "");
  142.     Enter( Linux64SO,     cpuAMD64,   8,  osLINUX64,  "linux64so",   "Linux64",    ".so");
  143.     Enter( STM32CM3,      cpuTHUMB,   4,  osNONE,     "stm32cm3",    "STM32CM3",   ".hex");
  144.     Enter( RVM32I,        cpuRVM32I,  4,  osNONE,     "rvm32i",      "RVM32I",     ".bin");
  145. END TARGETS.