Example script
Here is an example script file. This is the script file usedto build all of the Stony Brook compilers. It demonstrates most of the script featuresand capabilities.
SCRIPT compiler;
BEGIN
IF NOT (
ParamIs(2, "Modula2") OR
ParamIs(2, "Ada") OR
ParamIs(2, "Pascal") OR
ParamIs(2, "StdPascal")
)
THEN
Error("Compiler languagenot specified in param2");
ELSIF NOT (ParamIs(3, "GenIA32") ORParamIs(3, "GenSPARC")) THEN
Error("Processortype not specified in param3");
ELSIF NOT (ParamIs(4, "Gen32") OR ParamIs(4,"Gen16")) THEN
Error("Code gen sizenot specified in param4");
END;
IF ParamIs(1, "Win32") THEN
IF ParamIs(3, "GenIA32")THEN
IF ParamIs(4, "Gen32") THEN
IF ParamIs(2, "Modula2") THEN
CreateProject(Win32, "m2\m2-win-IA32-GenIA32");
ELSIF ParamIs(2, "Ada") THEN
CreateProject(Win32, "ada\ada-win-IA32-GenIA32");
ELSIF ParamIs(2, "Pascal") THEN
CreateProject(Win32, "ppc\ppc-win-IA32-GenIA32");
ELSIF ParamIs(2, "StdPascal") THEN
CreateProject(Win32, "ppc\ppcs-win-IA32-GenIA32");
END;
SetDirectory(SYM, "symIA32w");
SetDirectory(OBJ, "objIA32w");
IF ParamIs(2, "StdPascal") THEN
SetDirectory(SYM, "ssymIA32w");
SetDirectory(OBJ, "sobjIA32w");
END;
ELSE
IF ParamIs(2, "Modula2") THEN
CreateProject(Win32, "m2\m2-win-IA32-GenIA16");
ELSIF ParamIs(2, "Ada") THEN
CreateProject(Win32, "ada\ada-win-IA32-GenIA16");
ELSIF ParamIs(2, "Pascal") THEN
CreateProject(Win32, "ppc\ppc-win-IA32-GenIA16");
END;
SetDirectory(SYM, "symIA16w");
SetDirectory(OBJ, "objIA16w");
END;
AddModule(Project, "..\core\core-win-IA32");
ELSIF ParamIs(3, "GenSPARC")THEN
IF ParamIs(4, "Gen32") THEN
IF ParamIs(2, "Modula2") THEN
CreateProject(Win32, "m2\m2-win-IA32-GenSPARC32");
ELSIF ParamIs(2, "Ada") THEN
CreateProject(Win32, "ada\ada-win-IA32-GenSPARC32");
ELSIF ParamIs(2, "Pascal") THEN
CreateProject(Win32, "ppc\ppc-win-IA32-GenSPARC32");
ELSIF ParamIs(2, "StdPascal") THEN
CreateProject(Win32, "ppc\ppcs-win-IA32-GenSPARC32");
END;
AddModule(Project, "..\core\core-win-IA32");
SetDirectory(SYM, "symSPARC32w");
SetDirectory(OBJ, "objSPARC32w");
IF ParamIs(2, "StdPascal") THEN
SetDirectory(SYM, "ssymSPARC32w");
SetDirectory(OBJ, "sobjSPARC32w");
END;
ELSE
Error("Code generation combo not supported");
END;
END;
ELSIF ParamIs(1, "Linux") THEN
IF ParamIs(3, "GenIA32")THEN
IF ParamIs(4, "Gen32") THEN
IF ParamIs(2, "Modula2") THEN
CreateProject(Linux, "m2\m2-linux-IA32-GenIA32");
ELSIF ParamIs(2, "Ada") THEN
CreateProject(Linux, "ada\ada-linux-IA32-GenIA32");
ELSIF ParamIs(2, "Pascal") THEN
CreateProject(Linux, "ppc\ppc-linux-IA32-GenIA32");
ELSIF ParamIs(2, "StdPascal") THEN
CreateProject(Linux, "ppc\ppcs-linux-IA32-GenIA32");
END;
AddModule(Project, "..\core\core-linux-IA32");
SetDirectory(SYM, "symIA32l");
SetDirectory(OBJ, "objIA32l");
IF ParamIs(2, "StdPascal") THEN
SetDirectory(SYM, "ssymIA32l");
SetDirectory(OBJ, "sobjIA32l");
END;
ELSE
Error("Code generation combo not supported");
END;
ELSE
Error("Code generation combo not supported");
END;
IF HostIs(Win32) THEN
(* to find libc and other shared objects *)
SetDirectory(LIB, "..\crosslink\linux");
END;
ELSIF ParamIs(1, "SunOS") THEN
IF ParamIs(3, "GenSPARC")THEN
IF ParamIs(4, "Gen32") THEN
IF ParamIs(2, "Modula2") THEN
CreateProject(SunOS, "m2\m2-sunos-SPARC32-GenSPARC32");
ELSIF ParamIs(2, "Ada") THEN
CreateProject(SunOS, "ada\ada-sunos-SPARC32-GenSPARC32");
ELSIF ParamIs(2, "Pascal") THEN
CreateProject(SunOS, "ppc\ppc-sunos-SPARC32-GenSPARC32");
ELSIF ParamIs(2, "StdPascal") THEN
CreateProject(SunOS, "ppc\ppcs-sunos-SPARC32-GenSPARC32");
END;
AddModule(Project, "..\core\core-sunos-SPARC32");
SetDirectory(SYM, "symSPARC32s");
SetDirectory(OBJ, "objSPARC32s");
IF ParamIs(2, "StdPascal") THEN
SetDirectory(SYM, "ssymSPARC32s");
SetDirectory(OBJ, "sobjSPARC32s");
END;
ELSE
Error("Code generation combo not supported");
END;
ELSE
Error("Code generation combo not supported");
END;
IF HostIs(Win32) THEN
(* to find libc and other shared objects *)
SetDirectory(LIB, "..\crosslink\sunos");
END;
ELSE
Error("Host systemmust be supplied as param1");
END;
AddValidVersionTag("Modula2,Ada,Pascal,StdPascal");
AddValidVersionTag("GenIA32,GenSPARC");
AddValidVersionTag("Gen32,Gen16");
AddValidVersionTag("GenBigEndian,GenLittleEndian");
AddValidVersionTag("ShowMem");
IF ParamIs(3, "GenIA32") THEN
AddVersionTag("GenIA32,GenLittleEndian");
SetDirectory(DEF, "def;..\cgia32\def;..\cg\def");
SetDirectory(MOD, "mod;..\cgia32\mod;..\cg\mod");
ELSIF ParamIs(3, "GenSPARC") THEN
AddVersionTag("GenSPARC,GenBigEndian");
SetDirectory(DEF, "def;..\cgsparc\def;..\cg\def");
SetDirectory(MOD, "mod;..\cgsparc\mod;..\cg\mod");
END;
IF ParamIs(4, "Gen32") THEN
AddVersionTag("Gen32");
ELSE
AddVersionTag("Gen16");
END;
CallScript("..\enabler", PARAM3);
IF ParamIs(2, "Modula2") THEN
AddVersionTag("Modula2");
ELSIF ParamIs(2, "Ada") THEN
AddVersionTag("Ada");
SetProjectBuildNumberTag("Ada95");
ELSIF ParamIs(2, "Pascal") THEN
AddVersionTag("Pascal");
ELSIF ParamIs(2, "StdPascal") THEN
AddVersionTag("Pascal");
AddVersionTag("StdPascal");
END;
SetProjectOption(PrjRecompileForDebug, No);
SetCompilerOption(PackedRecords, GlobalOption,No);
SetCompilerOption(InlineSingleCalls, GlobalOption,Yes);
SetCompilerOption(Lines, GlobalOption, Yes);
SetCompilerOption(OptimizeSpace, GlobalOption,No);
SetCompilerOption(ConditionalCommonSubs, GlobalOption,Yes);
SetLinkerOption(LinkConsoleApp, Yes);
SetLinkerOption(LinkSystemVersion, 4.00);
(*
SetCompilerOption(Debug, GlobalOption, Yes);
SetLinkerOption(LinkDebug, Yes);
*)
(*
SetCompilerOption(CodeListing, GlobalOption, Yes);
*)
(*
SetLinkerOption(LinkOtherLinker, Yes);
*)
IF ParamIs(2, "Modula2") THEN
AddModule(M2Program, "m2");
Select(M2Program, "m2");
SetDefaultProgram("m2");
ELSIF ParamIs(2, "Ada") THEN
AddModule(M2Program, "Ada");
Select(M2Program, "Ada");
SetDefaultProgram("Ada");
ELSIF ParamIs(2, "Pascal") OR ParamIs(2,"StdPascal") THEN
AddModule(M2Program, "ppc");
Select(M2Program, "ppc");
SetDefaultProgram("PPC");
END;
LinkSelected;
ExitProgram;
END compiler.