Rev 8097 | Rev 9177 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
7983 | leency | 1 | (* |
2 | BSD 2-Clause License |
||
3 | |||
8859 | leency | 4 | Copyright (c) 2019-2021, Anton Krotov |
7983 | leency | 5 | All rights reserved. |
6 | *) |
||
7 | |||
8 | MODULE TARGETS; |
||
9 | |||
8859 | leency | 10 | IMPORT UTILS; |
7983 | leency | 11 | |
8859 | leency | 12 | |
7983 | leency | 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; |
||
8097 | maxcodehac | 29 | RVM32I* = 14; |
8859 | leency | 30 | RVM64I* = 15; |
7983 | leency | 31 | |
32 | cpuX86* = 0; cpuAMD64* = 1; cpuMSP430* = 2; cpuTHUMB* = 3; |
||
8859 | leency | 33 | cpuRVM32I* = 4; cpuRVM64I* = 5; |
7983 | leency | 34 | |
35 | osNONE* = 0; osWIN32* = 1; osWIN64* = 2; |
||
36 | osLINUX32* = 3; osLINUX64* = 4; osKOS* = 5; |
||
37 | |||
8859 | leency | 38 | noDISPOSE = {MSP430, STM32CM3, RVM32I, RVM64I}; |
7983 | leency | 39 | |
8097 | maxcodehac | 40 | noRTL = {MSP430}; |
41 | |||
8859 | leency | 42 | libRVM32I = "RVMxI" + UTILS.slash + "32"; |
43 | libRVM64I = "RVMxI" + UTILS.slash + "64"; |
||
8097 | maxcodehac | 44 | |
8859 | leency | 45 | |
7983 | leency | 46 | TYPE |
47 | |||
48 | STRING = ARRAY 32 OF CHAR; |
||
49 | |||
50 | TARGET = RECORD |
||
51 | |||
8097 | maxcodehac | 52 | target, CPU, OS, RealSize: INTEGER; |
7983 | leency | 53 | ComLinePar*, LibDir, FileExt: STRING |
54 | |||
55 | END; |
||
56 | |||
57 | |||
58 | VAR |
||
59 | |||
8859 | leency | 60 | Targets*: ARRAY 16 OF TARGET; |
7983 | leency | 61 | |
8859 | leency | 62 | CPUs: ARRAY 6 OF |
8097 | maxcodehac | 63 | RECORD |
64 | BitDepth, InstrSize: INTEGER; |
||
65 | LittleEndian: BOOLEAN |
||
66 | END; |
||
67 | |||
68 | target*, CPU*, BitDepth*, OS*, RealSize*, WordSize*, AdrSize*, InstrSize*: INTEGER; |
||
7983 | leency | 69 | ComLinePar*, LibDir*, FileExt*: STRING; |
8097 | maxcodehac | 70 | Import*, Dispose*, RTL*, Dll*, LittleEndian*: BOOLEAN; |
7983 | leency | 71 | |
72 | |||
8097 | maxcodehac | 73 | PROCEDURE Enter (idx, CPU, RealSize, OS: INTEGER; ComLinePar, LibDir, FileExt: STRING); |
7983 | leency | 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; |
||
8097 | maxcodehac | 100 | BitDepth := CPUs[CPU].BitDepth; |
101 | InstrSize := CPUs[CPU].InstrSize; |
||
102 | LittleEndian := CPUs[CPU].LittleEndian; |
||
7983 | leency | 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}; |
||
8097 | maxcodehac | 110 | Dispose := ~(target IN noDISPOSE); |
111 | RTL := ~(target IN noRTL); |
||
7983 | leency | 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 | |||
8097 | maxcodehac | 121 | PROCEDURE EnterCPU (cpu, BitDepth, InstrSize: INTEGER; LittleEndian: BOOLEAN); |
7983 | leency | 122 | BEGIN |
8097 | maxcodehac | 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); |
||
8859 | leency | 135 | EnterCPU(cpuRVM64I, 64, 8, TRUE); |
8097 | maxcodehac | 136 | |
8859 | leency | 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"); |
||
7983 | leency | 153 | END TARGETS.>> |