Subversion Repositories Kolibri OS

Rev

Rev 8097 | Rev 9177 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 8097 Rev 8859
Line 1... Line 1...
1
(*
1
(*
2
    BSD 2-Clause License
2
    BSD 2-Clause License
Line 3... Line 3...
3
 
3
 
4
    Copyright (c) 2018-2020, Anton Krotov
4
    Copyright (c) 2018-2021, Anton Krotov
5
    All rights reserved.
5
    All rights reserved.
Line 6... Line 6...
6
*)
6
*)
Line 7... Line 7...
7
 
7
 
8
MODULE Compiler;
8
MODULE Compiler;
Line -... Line 9...
-
 
9
 
-
 
10
IMPORT ST := STATEMENTS, PARS, UTILS, PATHS, PROG, C := CONSOLE,
-
 
11
       ERRORS, STRINGS, WRITER, MSP430, THUMB, TARGETS, SCAN;
-
 
12
 
-
 
13
 
-
 
14
CONST
-
 
15
 
-
 
16
    DEF_WINDOWS   = "WINDOWS";
-
 
17
    DEF_LINUX     = "LINUX";
9
 
18
    DEF_KOLIBRIOS = "KOLIBRIOS";
10
IMPORT ST := STATEMENTS, PARS, UTILS, PATHS, PROG, C := CONSOLE,
19
    DEF_CPU_X86   = "CPU_X86";
11
       ERRORS, STRINGS, WRITER, MSP430, THUMB, TARGETS, SCAN;
20
    DEF_CPU_X8664 = "CPU_X8664";
12
 
21
 
13
 
22
 
Line 92... Line 101...
92
                        EXCL(checking, ST.chkWCHR)
101
                        EXCL(checking, ST.chkWCHR)
93
                    ELSIF param[j] = "r" THEN
102
                    ELSIF param[j] = "r" THEN
94
                        EXCL(checking, ST.chkCHR);
103
                        EXCL(checking, ST.chkCHR);
95
                        EXCL(checking, ST.chkWCHR);
104
                        EXCL(checking, ST.chkWCHR);
96
                        EXCL(checking, ST.chkBYTE)
105
                        EXCL(checking, ST.chkBYTE)
-
 
106
                    ELSIF param[j] = "s" THEN
-
 
107
                        EXCL(checking, ST.chkSTK)
97
                    ELSIF param[j] = "a" THEN
108
                    ELSIF param[j] = "a" THEN
98
                        checking := {}
109
                        checking := {}
99
                    END;
110
                    END;
Line 100... Line 111...
100
 
111
 
Line 175... Line 186...
175
    options.pic := FALSE;
186
    options.pic := FALSE;
176
    options.lower := FALSE;
187
    options.lower := FALSE;
177
    options.checking := ST.chkALL;
188
    options.checking := ST.chkALL;
Line 178... Line 189...
178
 
189
 
-
 
190
    PATHS.GetCurrentDirectory(app_path);
-
 
191
 
-
 
192
    UTILS.GetArg(0, temp);
-
 
193
    PATHS.split(temp, path, modname, ext);
-
 
194
    IF PATHS.isRelative(path) THEN
-
 
195
        PATHS.RelPath(app_path, path, temp);
-
 
196
        path := temp
179
    PATHS.GetCurrentDirectory(app_path);
197
    END;
Line 180... Line 198...
180
    lib_path := app_path;
198
    lib_path := path;
-
 
199
 
-
 
200
    UTILS.GetArg(1, inname);
Line 181... Line 201...
181
 
201
    STRINGS.replace(inname, "\", UTILS.slash);
182
    UTILS.GetArg(1, inname);
202
    STRINGS.replace(inname, "/", UTILS.slash);
183
 
203
 
184
    C.Ln;
204
    C.Ln;
Line 185... Line 205...
185
    C.String("Akron Oberon Compiler v"); C.Int(UTILS.vMajor); C.String("."); C.Int2(UTILS.vMinor);
205
    C.String("Akron Oberon Compiler v"); C.Int(UTILS.vMajor); C.String("."); C.Int2(UTILS.vMinor);
186
        C.String(" ("); C.Int(UTILS.bit_depth); C.StringLn("-bit)");
206
        C.String(" ("); C.Int(UTILS.bit_depth); C.StringLn("-bit) " + UTILS.Date);
187
    C.StringLn("Copyright (c) 2018-2020, Anton Krotov");
207
    C.StringLn("Copyright (c) 2018-2021, Anton Krotov");
188
 
208
 
Line 218... Line 238...
218
        C.StringLn("  -ram            set size of RAM in bytes (MSP430) or Kbytes (STM32)"); C.Ln;
238
        C.StringLn("  -ram            set size of RAM in bytes (MSP430) or Kbytes (STM32)"); C.Ln;
219
        C.StringLn("  -rom            set size of ROM in bytes (MSP430) or Kbytes (STM32)"); C.Ln;
239
        C.StringLn("  -rom            set size of ROM in bytes (MSP430) or Kbytes (STM32)"); C.Ln;
220
        UTILS.Exit(0)
240
        UTILS.Exit(0)
221
    END;
241
    END;
Line 222... Line 242...
222
 
242
 
223
    C.StringLn("--------------------------------------------");
243
    C.Dashes;
Line 224... Line 244...
224
    PATHS.split(inname, path, modname, ext);
244
    PATHS.split(inname, path, modname, ext);
225
 
245
 
226
    IF ext # UTILS.FILE_EXT THEN
246
    IF ext # UTILS.FILE_EXT THEN
Line 243... Line 263...
243
        target := TARGETS.target
263
        target := TARGETS.target
244
    ELSE
264
    ELSE
245
        ERRORS.Error(206)
265
        ERRORS.Error(206)
246
    END;
266
    END;
Line 247... Line 267...
247
 
267
 
248
    IF target = TARGETS.MSP430 THEN
268
    IF TARGETS.CPU = TARGETS.cpuMSP430 THEN
249
        options.ram := MSP430.minRAM;
269
        options.ram := MSP430.minRAM;
250
        options.rom := MSP430.minROM
270
        options.rom := MSP430.minROM
Line 251... Line 271...
251
    END;
271
    END;
252
 
272
 
253
    IF target = TARGETS.STM32CM3 THEN
273
    IF (TARGETS.CPU = TARGETS.cpuTHUMB) & (TARGETS.OS = TARGETS.osNONE) THEN
254
        options.ram := THUMB.STM32_minRAM;
274
        options.ram := THUMB.minRAM;
Line 255... Line 275...
255
        options.rom := THUMB.STM32_minROM
275
        options.rom := THUMB.minROM
256
    END;
276
    END;
257
 
277
 
Line 276... Line 296...
276
        END
296
        END
277
    END;
297
    END;
Line 278... Line 298...
278
 
298
 
Line -... Line 299...
-
 
299
    PARS.init(options);
-
 
300
 
-
 
301
    CASE TARGETS.OS OF
-
 
302
    |TARGETS.osNONE:
-
 
303
    |TARGETS.osWIN32,
-
 
304
     TARGETS.osWIN64:   SCAN.NewDef(DEF_WINDOWS)
-
 
305
    |TARGETS.osLINUX32,
-
 
306
     TARGETS.osLINUX64: SCAN.NewDef(DEF_LINUX)
-
 
307
    |TARGETS.osKOS:     SCAN.NewDef(DEF_KOLIBRIOS)
-
 
308
    END;
-
 
309
 
-
 
310
    CASE TARGETS.CPU OF
-
 
311
    |TARGETS.cpuX86:    SCAN.NewDef(DEF_CPU_X86)
-
 
312
    |TARGETS.cpuAMD64:  SCAN.NewDef(DEF_CPU_X8664)
-
 
313
    |TARGETS.cpuMSP430:
-
 
314
    |TARGETS.cpuTHUMB:
-
 
315
    |TARGETS.cpuRVM32I:
-
 
316
    |TARGETS.cpuRVM64I:
279
    PARS.init(options);
317
    END;
Line 280... Line 318...
280
 
318
 
281
    ST.compile(path, lib_path, modname, outname, target, options);
319
    ST.compile(path, lib_path, modname, outname, target, options);
282
 
320
 
283
    time := UTILS.GetTickCount() - UTILS.time;
321
    time := UTILS.GetTickCount() - UTILS.time;
284
    C.StringLn("--------------------------------------------");
322
    C.Dashes;
Line 285... Line 323...
285
    C.Int(PARS.lines); C.String(" lines, ");
323
    C.Int(PARS.lines); C.String(" lines, ");