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.