TARGETS.ob07 5.0 KB

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