1,7 → 1,7 |
(* |
(* |
BSD 2-Clause License |
|
Copyright (c) 2018, 2019, Anton Krotov |
Copyright (c) 2018-2019, Anton Krotov |
All rights reserved. |
*) |
|
49,7 → 49,7 |
END Target; |
|
|
PROCEDURE keys (VAR options: PROG.OPTIONS); |
PROCEDURE keys (VAR options: PROG.OPTIONS; VAR out: PARS.PATH); |
VAR |
param: PARS.PATH; |
i, j: INTEGER; |
60,9 → 60,10 |
checking: SET; |
|
BEGIN |
out := ""; |
checking := options.checking; |
end := FALSE; |
i := 4; |
i := 3; |
REPEAT |
UTILS.GetArg(i, param); |
|
76,14 → 77,13 |
DEC(i) |
END |
|
ELSIF param = "-base" THEN |
ELSIF param = "-out" THEN |
INC(i); |
UTILS.GetArg(i, param); |
IF STRINGS.StrToInt(param, value) THEN |
options.base := ((value DIV 64) * 64) * 1024 |
END; |
IF param[0] = "-" THEN |
DEC(i) |
ELSE |
out := param |
END |
|
ELSIF param = "-ram" THEN |
202,7 → 202,7 |
|
IF inname = "" THEN |
C.Ln; |
C.StringLn("Usage: Compiler <main module> <output> <target> [optional settings]"); C.Ln; |
C.StringLn("Usage: Compiler <main module> <target> [optional settings]"); C.Ln; |
IF UTILS.bit_depth = 64 THEN |
C.StringLn('target = console | gui | dll | console64 | gui64 | dll64 | kos | obj | elfexe | elfso | elfexe64 | elfso64 | msp430'); C.Ln; |
ELSIF UTILS.bit_depth = 32 THEN |
209,13 → 209,13 |
C.StringLn('target = console | gui | dll | kos | obj | elfexe | elfso | msp430'); C.Ln; |
END; |
C.StringLn("optional settings:"); C.Ln; |
C.StringLn(" -out <file name> output"); C.Ln; |
C.StringLn(" -stk <size> set size of stack in megabytes"); C.Ln; |
C.StringLn(" -base <address> set base address of image in kilobytes"); C.Ln; |
C.StringLn(' -ver <major.minor> set version of program'); C.Ln; |
C.StringLn(' -nochk <"ptibcwra"> disable runtime checking (pointers, types, indexes,'); |
C.StringLn(' BYTE, CHR, WCHR)'); C.Ln; |
C.StringLn(" -ram <size> set size of RAM in bytes (MSP430)"); C.Ln; |
C.StringLn(" -rom <size> set size of ROM in bytes (MSP430)"); C.Ln; |
C.StringLn(" -ver <major.minor> set version of program ('obj' target)"); C.Ln; |
C.StringLn(" -ram <size> set size of RAM in bytes ('msp430' target)"); C.Ln; |
C.StringLn(" -rom <size> set size of ROM in bytes ('msp430' target)"); C.Ln; |
UTILS.Exit(0) |
END; |
|
230,16 → 230,7 |
path := temp |
END; |
|
UTILS.GetArg(2, outname); |
IF outname = "" THEN |
ERRORS.Error(205) |
END; |
IF PATHS.isRelative(outname) THEN |
PATHS.RelPath(app_path, outname, temp); |
outname := temp |
END; |
|
UTILS.GetArg(3, param); |
UTILS.GetArg(2, param); |
IF param = "" THEN |
ERRORS.Error(205) |
END; |
271,11 → 262,6 |
|
CASE target OF |
|mConst.Target_iConsole, mConst.Target_iGUI, mConst.Target_iDLL: |
IF target = mConst.Target_iDLL THEN |
options.base := 10000000H |
ELSE |
options.base := 400000H |
END; |
STRINGS.append(lib_path, "Windows32") |
|
|mConst.Target_iKolibri, mConst.Target_iObject: |
297,8 → 283,35 |
|
STRINGS.append(lib_path, UTILS.slash); |
|
keys(options); |
keys(options, outname); |
IF outname = "" THEN |
outname := path; |
STRINGS.append(outname, modname); |
CASE target OF |
|mConst.Target_iConsole, mConst.Target_iGUI, mConst.Target_iConsole64, mConst.Target_iGUI64: |
STRINGS.append(outname, ".exe") |
|
|mConst.Target_iObject: |
STRINGS.append(outname, ".obj") |
|
|mConst.Target_iKolibri, mConst.Target_iELF32, mConst.Target_iELF64: |
|
|mConst.Target_iELFSO32, mConst.Target_iELFSO64: |
STRINGS.append(outname, ".so") |
|
|mConst.Target_iDLL, mConst.Target_iDLL64: |
STRINGS.append(outname, ".dll") |
|
|mConst.Target_iMSP430: |
STRINGS.append(outname, ".hex") |
END |
ELSE |
IF PATHS.isRelative(outname) THEN |
PATHS.RelPath(app_path, outname, temp); |
outname := temp |
END |
END; |
|
PARS.init(bit_depth, target, options); |
|
PARS.program.dll := target IN {mConst.Target_iELFSO32, mConst.Target_iELFSO64, mConst.Target_iDLL, mConst.Target_iDLL64, mConst.Target_iObject}; |
308,6 → 321,7 |
|
time := UTILS.GetTickCount() - UTILS.time; |
|
C.Int(PARS.lines); C.String(" lines, "); |
C.Int(time DIV 100); C.String("."); C.Int2(time MOD 100); C.String(" sec, "); |
C.Int(WRITER.counter); C.StringLn(" bytes"); |
|