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 |
205 | C.StringLn("Usage: Compiler |
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 |
212 | C.StringLn(" -stk |
- | |
213 | C.StringLn(" -base set base address of image in kilobytes"); C.Ln; |
- | |
214 | C.StringLn(' -ver |
213 | C.StringLn(" -stk |
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 |
217 | C.StringLn(" -ram |
217 | C.StringLn(" -ram |
218 | C.StringLn(" -rom |
218 | C.StringLn(" -rom |
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); |