Subversion Repositories Kolibri OS

Rev

Rev 8097 | Rev 9177 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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