Subversion Repositories Kolibri OS

Rev

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

Rev 7693 Rev 7696
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, 2019, Anton Krotov
4
    Copyright (c) 2018-2019, Anton Krotov
5
    All rights reserved.
5
    All rights reserved.
Line 6... Line 6...
6
*)
6
*)
Line 47... Line 47...
47
 
47
 
48
    RETURN res
48
    RETURN res
Line 49... Line 49...
49
END Target;
49
END Target;
50
 
50
 
51
 
51
 
52
PROCEDURE keys (VAR options: PROG.OPTIONS);
52
PROCEDURE keys (VAR options: PROG.OPTIONS; VAR out: PARS.PATH);
53
VAR
53
VAR
54
    param: PARS.PATH;
54
    param: PARS.PATH;
55
    i, j:  INTEGER;
55
    i, j:  INTEGER;
56
    end:   BOOLEAN;
56
    end:   BOOLEAN;
57
    value: INTEGER;
57
    value: INTEGER;
Line 58... Line 58...
58
    minor,
58
    minor,
-
 
59
    major: INTEGER;
59
    major: INTEGER;
60
    checking: SET;
60
    checking: SET;
61
 
61
 
62
BEGIN
62
BEGIN
63
    out := "";
63
    checking := options.checking;
64
    checking := options.checking;
Line 64... Line 65...
64
    end := FALSE;
65
    end := FALSE;
65
    i := 4;
66
    i := 3;
Line 74... Line 75...
74
            END;
75
            END;
75
            IF param[0] = "-" THEN
76
            IF param[0] = "-" THEN
76
                DEC(i)
77
                DEC(i)
77
            END
78
            END
Line 78... Line 79...
78
 
79
 
79
        ELSIF param = "-base" THEN
80
        ELSIF param = "-out" THEN
80
            INC(i);
81
            INC(i);
81
            UTILS.GetArg(i, param);
-
 
82
            IF STRINGS.StrToInt(param, value) THEN
-
 
83
                options.base := ((value DIV 64) * 64) * 1024
-
 
84
            END;
82
            UTILS.GetArg(i, param);
85
            IF param[0] = "-" THEN
83
            IF param[0] = "-" THEN
-
 
84
                DEC(i)
-
 
85
            ELSE
86
                DEC(i)
86
                out := param
Line 87... Line 87...
87
            END
87
            END
88
 
88
 
89
        ELSIF param = "-ram" THEN
89
        ELSIF param = "-ram" THEN
Line 200... Line 200...
200
        C.String(" ("); C.Int(UTILS.bit_depth); C.StringLn("-bit)");
200
        C.String(" ("); C.Int(UTILS.bit_depth); C.StringLn("-bit)");
201
    C.StringLn("Copyright (c) 2018-2019, Anton Krotov");
201
    C.StringLn("Copyright (c) 2018-2019, Anton Krotov");
Line 202... Line 202...
202
 
202
 
203
    IF inname = "" THEN
203
    IF inname = "" THEN
204
        C.Ln;
204
        C.Ln;
205
        C.StringLn("Usage: Compiler 
[optional settings]"); C.Ln;
205
        C.StringLn("Usage: Compiler 
[optional settings]"); C.Ln;
206
        IF UTILS.bit_depth = 64 THEN
206
        IF UTILS.bit_depth = 64 THEN
207
            C.StringLn('target = console | gui | dll | console64 | gui64 | dll64 | kos | obj | elfexe | elfso | elfexe64 | elfso64 | msp430'); C.Ln;
207
            C.StringLn('target = console | gui | dll | console64 | gui64 | dll64 | kos | obj | elfexe | elfso | elfexe64 | elfso64 | msp430'); C.Ln;
208
        ELSIF UTILS.bit_depth = 32 THEN
208
        ELSIF UTILS.bit_depth = 32 THEN
209
            C.StringLn('target = console | gui | dll | kos | obj | elfexe | elfso | msp430'); C.Ln;
209
            C.StringLn('target = console | gui | dll | kos | obj | elfexe | elfso | msp430'); C.Ln;
210
        END;
210
        END;
-
 
211
        C.StringLn("optional settings:"); C.Ln;
211
        C.StringLn("optional settings:"); C.Ln;
212
        C.StringLn("  -out        output"); C.Ln;
212
        C.StringLn("  -stk             set size of stack in megabytes"); C.Ln;
-
 
213
        C.StringLn("  -base 
set base address of image in kilobytes"); C.Ln;
-
 
214
        C.StringLn('  -ver      set version of program'); C.Ln;
213
        C.StringLn("  -stk             set size of stack in megabytes"); C.Ln;
215
        C.StringLn('  -nochk <"ptibcwra">    disable runtime checking (pointers, types, indexes,');
214
        C.StringLn('  -nochk <"ptibcwra">    disable runtime checking (pointers, types, indexes,');
-
 
215
        C.StringLn('                         BYTE, CHR, WCHR)'); C.Ln;
216
        C.StringLn('                         BYTE, CHR, WCHR)'); C.Ln;
216
        C.StringLn("  -ver      set version of program ('obj' target)"); C.Ln;
217
        C.StringLn("  -ram             set size of RAM in bytes (MSP430)"); C.Ln;
217
        C.StringLn("  -ram             set size of RAM in bytes ('msp430' target)"); C.Ln;
218
        C.StringLn("  -rom             set size of ROM in bytes (MSP430)"); C.Ln;
218
        C.StringLn("  -rom             set size of ROM in bytes ('msp430' target)"); C.Ln;
219
        UTILS.Exit(0)
219
        UTILS.Exit(0)
Line 220... Line 220...
220
    END;
220
    END;
Line 228... Line 228...
228
    IF PATHS.isRelative(path) THEN
228
    IF PATHS.isRelative(path) THEN
229
        PATHS.RelPath(app_path, path, temp);
229
        PATHS.RelPath(app_path, path, temp);
230
        path := temp
230
        path := temp
231
    END;
231
    END;
Line 232... Line -...
232
 
-
 
233
    UTILS.GetArg(2, outname);
-
 
234
    IF outname = "" THEN
-
 
235
        ERRORS.Error(205)
-
 
236
    END;
-
 
237
    IF PATHS.isRelative(outname) THEN
-
 
238
        PATHS.RelPath(app_path, outname, temp);
-
 
239
        outname := temp
-
 
240
    END;
-
 
241
 
232
 
242
    UTILS.GetArg(3, param);
233
    UTILS.GetArg(2, param);
243
    IF param = "" THEN
234
    IF param = "" THEN
244
        ERRORS.Error(205)
235
        ERRORS.Error(205)
Line 245... Line 236...
245
    END;
236
    END;
Line 269... Line 260...
269
    STRINGS.append(lib_path, "lib");
260
    STRINGS.append(lib_path, "lib");
270
    STRINGS.append(lib_path, UTILS.slash);
261
    STRINGS.append(lib_path, UTILS.slash);
Line 271... Line 262...
271
 
262
 
272
    CASE target OF
263
    CASE target OF
273
    |mConst.Target_iConsole, mConst.Target_iGUI, mConst.Target_iDLL:
-
 
274
        IF target = mConst.Target_iDLL THEN
-
 
275
            options.base := 10000000H
-
 
276
        ELSE
-
 
277
            options.base := 400000H
-
 
278
        END;
264
    |mConst.Target_iConsole, mConst.Target_iGUI, mConst.Target_iDLL:
Line 279... Line 265...
279
        STRINGS.append(lib_path, "Windows32")
265
        STRINGS.append(lib_path, "Windows32")
280
 
266
 
Line 295... Line 281...
295
 
281
 
Line 296... Line 282...
296
    END;
282
    END;
Line 297... Line 283...
297
 
283
 
-
 
284
    STRINGS.append(lib_path, UTILS.slash);
-
 
285
 
-
 
286
    keys(options, outname);
-
 
287
    IF outname = "" THEN
-
 
288
        outname := path;
-
 
289
        STRINGS.append(outname, modname);
-
 
290
        CASE target OF
-
 
291
        |mConst.Target_iConsole, mConst.Target_iGUI, mConst.Target_iConsole64, mConst.Target_iGUI64:
-
 
292
            STRINGS.append(outname, ".exe")
-
 
293
 
-
 
294
        |mConst.Target_iObject:
-
 
295
            STRINGS.append(outname, ".obj")
-
 
296
 
-
 
297
        |mConst.Target_iKolibri, mConst.Target_iELF32, mConst.Target_iELF64:
-
 
298
 
-
 
299
        |mConst.Target_iELFSO32, mConst.Target_iELFSO64:
-
 
300
            STRINGS.append(outname, ".so")
-
 
301
 
-
 
302
        |mConst.Target_iDLL, mConst.Target_iDLL64:
-
 
303
            STRINGS.append(outname, ".dll")
-
 
304
 
-
 
305
        |mConst.Target_iMSP430:
-
 
306
            STRINGS.append(outname, ".hex")
-
 
307
        END
-
 
308
    ELSE
-
 
309
        IF PATHS.isRelative(outname) THEN
-
 
310
            PATHS.RelPath(app_path, outname, temp);
Line 298... Line 311...
298
    STRINGS.append(lib_path, UTILS.slash);
311
            outname := temp
Line 299... Line 312...
299
 
312
        END
300
    keys(options);
313
    END;
Line 301... Line 314...
301
 
314
 
Line 302... Line 315...
302
    PARS.init(bit_depth, target, options);
315
    PARS.init(bit_depth, target, options);
Line -... Line 316...
-
 
316
 
303
 
317
    PARS.program.dll := target IN {mConst.Target_iELFSO32, mConst.Target_iELFSO64, mConst.Target_iDLL, mConst.Target_iDLL64, mConst.Target_iObject};
304
    PARS.program.dll := target IN {mConst.Target_iELFSO32, mConst.Target_iELFSO64, mConst.Target_iDLL, mConst.Target_iDLL64, mConst.Target_iObject};
318
    PARS.program.obj := target = mConst.Target_iObject;
Line 305... Line 319...
305
    PARS.program.obj := target = mConst.Target_iObject;
319
 
306
 
320
    ST.compile(path, lib_path, modname, outname, target, options);