|
@@ -170,6 +170,8 @@ END Arrangement;
|
|
|
|
|
|
TYPE FileFormat = PROCEDURE (linker: GenericLinker.Linker; arrangement: Arrangement; writer: Files.Writer);
|
|
TYPE FileFormat = PROCEDURE (linker: GenericLinker.Linker; arrangement: Arrangement; writer: Files.Writer);
|
|
|
|
|
|
|
|
+VAR defaults: Options.Defaults;
|
|
|
|
+
|
|
PROCEDURE Align(this, to: LONGINT): LONGINT;
|
|
PROCEDURE Align(this, to: LONGINT): LONGINT;
|
|
BEGIN
|
|
BEGIN
|
|
this := this + (-this) MOD to;
|
|
this := this + (-this) MOD to;
|
|
@@ -902,8 +904,13 @@ VAR options: Options.Options;
|
|
use: SET;
|
|
use: SET;
|
|
exportString: ARRAY 1024 OF CHAR;
|
|
exportString: ARRAY 1024 OF CHAR;
|
|
error: BOOLEAN;
|
|
error: BOOLEAN;
|
|
|
|
+ parsed: BOOLEAN;
|
|
|
|
+ position: LONGINT;
|
|
|
|
+ name: ARRAY 32 OF CHAR;
|
|
|
|
+ reader: Streams.Reader;
|
|
BEGIN
|
|
BEGIN
|
|
NEW (options);
|
|
NEW (options);
|
|
|
|
+ options.Add('p',"platform", Options.String);
|
|
options.Add (0X, "silent", Options.Flag);
|
|
options.Add (0X, "silent", Options.Flag);
|
|
options.Add ('a', "useAll", Options.Flag);
|
|
options.Add ('a', "useAll", Options.Flag);
|
|
options.Add ('s', "strict", Options.Flag);
|
|
options.Add ('s', "strict", Options.Flag);
|
|
@@ -914,7 +921,22 @@ BEGIN
|
|
options.Add (0X, "logFileName", Options.String);
|
|
options.Add (0X, "logFileName", Options.String);
|
|
options.Add(0X,"linkRoot", Options.String);
|
|
options.Add(0X,"linkRoot", Options.String);
|
|
options.Add(0X,"exports", Options.String);
|
|
options.Add(0X,"exports", Options.String);
|
|
- IF ~options.Parse (context.arg, context.error) THEN context.result := Commands.CommandParseError; RETURN; END;
|
|
|
|
|
|
+
|
|
|
|
+ position := context.arg.Pos();
|
|
|
|
+ parsed := options.Parse(context.arg,NIL);
|
|
|
|
+ IF options.GetString("platform", name) THEN
|
|
|
|
+ reader := defaults.Get(name);
|
|
|
|
+ IF reader = NIL THEN
|
|
|
|
+ context.error.String("Unknown platform"); context.error.Ln
|
|
|
|
+ ELSE
|
|
|
|
+ parsed := options.Parse(reader, NIL) & parsed;
|
|
|
|
+ context.arg.SetPos(position);
|
|
|
|
+ context.arg.SetPos(position);
|
|
|
|
+ parsed := options.Parse(context.arg, context.error) & parsed; (* reparse overwrites *)
|
|
|
|
+ END;
|
|
|
|
+ END;
|
|
|
|
+
|
|
|
|
+ IF ~parsed THEN context.result := Commands.CommandParseError; RETURN; END;
|
|
silent := options.GetFlag ("silent");
|
|
silent := options.GetFlag ("silent");
|
|
useAll := options.GetFlag ("useAll");
|
|
useAll := options.GetFlag ("useAll");
|
|
strict := options.GetFlag ("strict");
|
|
strict := options.GetFlag ("strict");
|
|
@@ -981,6 +1003,17 @@ BEGIN
|
|
IF error THEN context.result := Commands.CommandError; END;
|
|
IF error THEN context.result := Commands.CommandError; END;
|
|
END Link;
|
|
END Link;
|
|
|
|
|
|
|
|
+PROCEDURE ShowDefaults*(context: Commands.Context);
|
|
|
|
+BEGIN
|
|
|
|
+ defaults.Show(context.out);
|
|
|
|
+END ShowDefaults;
|
|
|
|
+
|
|
|
|
+BEGIN
|
|
|
|
+ NEW(defaults);
|
|
|
|
+ defaults.Add("Win32C","--fileFormat=PE32CUI --fileName=oberon.exe --extension=GofW --displacement=401000H");
|
|
|
|
+ defaults.Add("Linux32G","--fileFormat=Raw --fileName=oberon --extension=.GofU --displacement=08048000H");
|
|
|
|
+ defaults.Add("RPI","--fileName=kernel.img --extension=.Goa --displacement=8000H -sa ");
|
|
|
|
+
|
|
END StaticLinker.
|
|
END StaticLinker.
|
|
|
|
|
|
StaticLinker.Link --fileName=test.exe --fileFormat=PE32 --displacement=401000H Test ~
|
|
StaticLinker.Link --fileName=test.exe --fileFormat=PE32 --displacement=401000H Test ~
|