Subversion Repositories Kolibri OS

Rev

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.