2021-09-03 19:21:37 +02:00
|
|
|
(*
|
|
|
|
BSD 2-Clause License
|
|
|
|
|
2023-01-21 15:34:25 +01:00
|
|
|
Copyright (c) 2019-2021, 2023, Anton Krotov
|
2021-09-03 19:21:37 +02:00
|
|
|
All rights reserved.
|
|
|
|
*)
|
|
|
|
|
|
|
|
MODULE TARGETS;
|
|
|
|
|
|
|
|
IMPORT UTILS;
|
|
|
|
|
|
|
|
|
|
|
|
CONST
|
|
|
|
|
|
|
|
MSP430* = 0;
|
|
|
|
Win32C* = 1;
|
|
|
|
Win32GUI* = 2;
|
|
|
|
Win32DLL* = 3;
|
|
|
|
KolibriOS* = 4;
|
|
|
|
KolibriOSDLL* = 5;
|
|
|
|
Win64C* = 6;
|
|
|
|
Win64GUI* = 7;
|
|
|
|
Win64DLL* = 8;
|
|
|
|
Linux32* = 9;
|
|
|
|
Linux32SO* = 10;
|
|
|
|
Linux64* = 11;
|
|
|
|
Linux64SO* = 12;
|
|
|
|
STM32CM3* = 13;
|
|
|
|
RVM32I* = 14;
|
|
|
|
RVM64I* = 15;
|
|
|
|
|
|
|
|
cpuX86* = 0; cpuAMD64* = 1; cpuMSP430* = 2; cpuTHUMB* = 3;
|
|
|
|
cpuRVM32I* = 4; cpuRVM64I* = 5;
|
|
|
|
|
|
|
|
osNONE* = 0; osWIN32* = 1; osWIN64* = 2;
|
|
|
|
osLINUX32* = 3; osLINUX64* = 4; osKOS* = 5;
|
|
|
|
|
|
|
|
noDISPOSE = {MSP430, STM32CM3, RVM32I, RVM64I};
|
|
|
|
|
|
|
|
noRTL = {MSP430};
|
|
|
|
|
|
|
|
libRVM32I = "RVMxI" + UTILS.slash + "32";
|
|
|
|
libRVM64I = "RVMxI" + UTILS.slash + "64";
|
|
|
|
|
|
|
|
|
|
|
|
TYPE
|
|
|
|
|
|
|
|
STRING = ARRAY 32 OF CHAR;
|
|
|
|
|
|
|
|
TARGET = RECORD
|
|
|
|
|
|
|
|
target, CPU, OS, RealSize: INTEGER;
|
|
|
|
ComLinePar*, LibDir, FileExt: STRING
|
|
|
|
|
|
|
|
END;
|
|
|
|
|
|
|
|
|
|
|
|
VAR
|
|
|
|
|
|
|
|
Targets*: ARRAY 16 OF TARGET;
|
|
|
|
|
|
|
|
CPUs: ARRAY 6 OF
|
|
|
|
RECORD
|
|
|
|
BitDepth, InstrSize: INTEGER;
|
|
|
|
LittleEndian: BOOLEAN
|
|
|
|
END;
|
|
|
|
|
|
|
|
target*, CPU*, BitDepth*, OS*, RealSize*, WordSize*, AdrSize*, InstrSize*: INTEGER;
|
|
|
|
ComLinePar*, LibDir*, FileExt*: STRING;
|
2023-01-21 15:34:25 +01:00
|
|
|
Import*, Dispose*, RTL*, Dll*, LittleEndian*, WinLin*: BOOLEAN;
|
2021-09-03 19:21:37 +02:00
|
|
|
|
|
|
|
|
|
|
|
PROCEDURE Enter (idx, CPU, RealSize, OS: INTEGER; ComLinePar, LibDir, FileExt: STRING);
|
|
|
|
BEGIN
|
|
|
|
Targets[idx].target := idx;
|
|
|
|
Targets[idx].CPU := CPU;
|
|
|
|
Targets[idx].RealSize := RealSize;
|
|
|
|
Targets[idx].OS := OS;
|
|
|
|
Targets[idx].ComLinePar := ComLinePar;
|
|
|
|
Targets[idx].LibDir := LibDir;
|
|
|
|
Targets[idx].FileExt := FileExt;
|
|
|
|
END Enter;
|
|
|
|
|
|
|
|
|
|
|
|
PROCEDURE Select* (ComLineParam: ARRAY OF CHAR): BOOLEAN;
|
|
|
|
VAR
|
|
|
|
i: INTEGER;
|
|
|
|
res: BOOLEAN;
|
|
|
|
|
|
|
|
BEGIN
|
|
|
|
i := 0;
|
|
|
|
WHILE (i < LEN(Targets)) & (Targets[i].ComLinePar # ComLineParam) DO
|
|
|
|
INC(i)
|
|
|
|
END;
|
|
|
|
|
|
|
|
res := i < LEN(Targets);
|
|
|
|
IF res THEN
|
|
|
|
target := Targets[i].target;
|
|
|
|
CPU := Targets[i].CPU;
|
|
|
|
BitDepth := CPUs[CPU].BitDepth;
|
|
|
|
InstrSize := CPUs[CPU].InstrSize;
|
|
|
|
LittleEndian := CPUs[CPU].LittleEndian;
|
|
|
|
RealSize := Targets[i].RealSize;
|
|
|
|
OS := Targets[i].OS;
|
|
|
|
ComLinePar := Targets[i].ComLinePar;
|
|
|
|
LibDir := Targets[i].LibDir;
|
|
|
|
FileExt := Targets[i].FileExt;
|
|
|
|
|
|
|
|
Import := OS IN {osWIN32, osWIN64, osKOS};
|
|
|
|
Dispose := ~(target IN noDISPOSE);
|
|
|
|
RTL := ~(target IN noRTL);
|
|
|
|
Dll := target IN {Linux32SO, Linux64SO, Win32DLL, Win64DLL, KolibriOSDLL};
|
2023-01-21 15:34:25 +01:00
|
|
|
WinLin := OS IN {osWIN32, osLINUX32, osWIN64, osLINUX64};
|
2021-09-03 19:21:37 +02:00
|
|
|
WordSize := BitDepth DIV 8;
|
|
|
|
AdrSize := WordSize
|
|
|
|
END
|
|
|
|
|
|
|
|
RETURN res
|
|
|
|
END Select;
|
|
|
|
|
|
|
|
|
|
|
|
PROCEDURE EnterCPU (cpu, BitDepth, InstrSize: INTEGER; LittleEndian: BOOLEAN);
|
|
|
|
BEGIN
|
|
|
|
CPUs[cpu].BitDepth := BitDepth;
|
|
|
|
CPUs[cpu].InstrSize := InstrSize;
|
|
|
|
CPUs[cpu].LittleEndian := LittleEndian
|
|
|
|
END EnterCPU;
|
|
|
|
|
|
|
|
|
|
|
|
BEGIN
|
|
|
|
EnterCPU(cpuX86, 32, 1, TRUE);
|
|
|
|
EnterCPU(cpuAMD64, 64, 1, TRUE);
|
|
|
|
EnterCPU(cpuMSP430, 16, 2, TRUE);
|
|
|
|
EnterCPU(cpuTHUMB, 32, 2, TRUE);
|
|
|
|
EnterCPU(cpuRVM32I, 32, 4, TRUE);
|
|
|
|
EnterCPU(cpuRVM64I, 64, 8, TRUE);
|
|
|
|
|
|
|
|
Enter( MSP430, cpuMSP430, 0, osNONE, "msp430", "MSP430", ".hex");
|
|
|
|
Enter( Win32C, cpuX86, 8, osWIN32, "win32con", "Windows", ".exe");
|
|
|
|
Enter( Win32GUI, cpuX86, 8, osWIN32, "win32gui", "Windows", ".exe");
|
|
|
|
Enter( Win32DLL, cpuX86, 8, osWIN32, "win32dll", "Windows", ".dll");
|
|
|
|
Enter( KolibriOS, cpuX86, 8, osKOS, "kosexe", "KolibriOS", "");
|
|
|
|
Enter( KolibriOSDLL, cpuX86, 8, osKOS, "kosdll", "KolibriOS", ".obj");
|
|
|
|
Enter( Win64C, cpuAMD64, 8, osWIN64, "win64con", "Windows", ".exe");
|
|
|
|
Enter( Win64GUI, cpuAMD64, 8, osWIN64, "win64gui", "Windows", ".exe");
|
|
|
|
Enter( Win64DLL, cpuAMD64, 8, osWIN64, "win64dll", "Windows", ".dll");
|
|
|
|
Enter( Linux32, cpuX86, 8, osLINUX32, "linux32exe", "Linux", "");
|
|
|
|
Enter( Linux32SO, cpuX86, 8, osLINUX32, "linux32so", "Linux", ".so");
|
|
|
|
Enter( Linux64, cpuAMD64, 8, osLINUX64, "linux64exe", "Linux", "");
|
|
|
|
Enter( Linux64SO, cpuAMD64, 8, osLINUX64, "linux64so", "Linux", ".so");
|
|
|
|
Enter( STM32CM3, cpuTHUMB, 4, osNONE, "stm32cm3", "STM32CM3", ".hex");
|
|
|
|
Enter( RVM32I, cpuRVM32I, 4, osNONE, "rvm32i", libRVM32I, ".bin");
|
|
|
|
Enter( RVM64I, cpuRVM64I, 8, osNONE, "rvm64i", libRVM64I, ".bin");
|
2020-05-25 22:48:33 +02:00
|
|
|
END TARGETS.
|