TARGETS.ob07 4.9 KB

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