#!/bin/sh # #set -x IMAGE="" MACHINE="" OPSYS="BSD" MODULEKIND="Int" TARGET="" SHARE="TRUE" DEFS="" CLEAN="TRUE" MKRUN="TRUE" RUNTIME="runtime" NOBOOT="" ASMBLR="as" COMMAND="" IONLY="" CFL="" # # gc params HEAP=2048 RATIO=20 SOFTLIMIT=4096 # # try to guess the machine type # if [ -f /bin/arch ]; then case `/bin/arch` in sun3) set - -sun3 $* ;; sun4) set - -sun4 $* ;; esac fi # # process options # while test "$#" != "0" do case $1 in -m68|-sun3) MACHINE=M68 ;; -sparc|-sun4) MACHINE=SPARC ;; -next) MACHINE=M68 OPSYS=NEXT ;; -encore) MACHINE=NS32 OPSYS=BSD ASMBLR="as -j" ;; -vax) MACHINE=VAX ;; -bsd) OPSYS=BSD ;; -mach) OPSYS=MACH ;; -sunos) OPSYS=SUNOS ;; -v9) OPSYS=V9 ;; -ultrix) OPSYS=ULTRIX ;; -batch) MODULEKIND=Comp ;; -noshare) SHARE="" ;; -run) MKRUN="TRUE" NOBOOT="TRUE" ;; -norun) MKRUN="" CLEAN="" ;; -noclean) CLEAN="" ;; -target) shift if test "$#" = "0" then echo "makeml: must supply machine for -target option" exit 1 fi TARGET=$1 MODULEKIND=Comp ;; -i) COMMAND="System.Control.interp := true;" ;; -ionly) COMMAND="System.Control.interp := true;" IONLY="TRUE" ;; -o) shift if test "$#" = "0" then echo "makeml: must supply image name for -o option" exit 1 fi IMAGE=$1 ;; -runtime) shift if test "$#" = "0" then echo "makeml: must supply runtime directory for -runtime option" exit 1 fi RUNTIME=$1 ;; -mo) shift if test "$#" = "0" then echo "makeml: must supply mo directory for -mo option" exit 1 elif test ! \( -d "$1" \) then echo "makeml: mo directory $1 not found" exit 1 fi MO=$1 ;; -h) shift if test "$#" = "0" then echo "makeml: must supply argument for -h option" exit 1 fi HEAP=$1 ;; -r) shift if test "$#" = "0" then echo "makeml: must supply argument for -r option" exit 1 fi RATIO=$1 ;; -m) shift if test "$#" = "0" then echo "makeml: must supply argument for -m option" exit 1 fi SOFTLIMIT=$1 ;; -D*) DEFS="$DEFS $1" ;; *) echo "makeml: unrecognized option $1" exit 1 ;; esac shift done if test -z "$IMAGE" then if test "$MODULEKIND" = Int then if test -n "$IONLY" then IMAGE=smli else IMAGE=sml fi else IMAGE=smlc fi fi case $MACHINE in M68) case $OPSYS in MACH) OPSYS=BSD # drt: added -Dsun3 option to make Mach header files perform correctly DEFS="$DEFS -Dsun3 -DSUN3" CFL="-f68881" ;; SUNOS) OPSYS=BSD # awa: for gcc, -f68881 should be changed to -m68881 below. DEFS="$DEFS -DSUN3" CFL="-n -Bstatic -f68881" ;; NEXT) DEFS="$DEFS -DBSD" ;; *) echo "For m68 don't use -bsd, use -mach or -next or -sunos" exit 1 esac if test -z "$MO" then MO="../mo.m68" fi MODULE="$MODULEKIND"M68 ;; SPARC) case $OPSYS in MACH) OPSYS=BSD DEFS="$DEFS -Dsun4" ;; SUNOS) OPSYS=BSD DEFS="$DEFS -Dsun4" CFL="-n -Bstatic" ;; *) echo "For sparc don't use -bsd, use -mach or -sunos" exit 1 esac if test -z "$MO" then MO="../mo.sparc" fi MODULE="$MODULEKIND"Sparc ;; VAX) if test "$OPSYS" = ULTRIX then DEFS="$DEFS -DBSD" fi if test -z "$MO" then MO="../mo.vax" fi MODULE="$MODULEKIND"Vax ;; NS32) if test -z "$MO" then MO="../mo.ns32" fi MODULE="$MODULEKIND"NS32 ;; *) echo "makeml: must specify machine type" exit 1 ;; esac if test -n "$TARGET" then case $TARGET in m68|M68|sun3|next) TARGET=M68 ;; sparc|Sparc|SPARC|sun4) TARGET=Sparc ;; vax|Vax|VAX) TARGET=Vax ;; ns32|NS32|encore) TARGET=NS32 ;; *) echo "makeml: invalid argument to -target option" exit 1 esac MODULE="$MODULEKIND"$TARGET fi if test -n "$IONLY" then if test -n "$TARGET" then echo "makeml: -target and -ionly options are incompatible" exit 1 fi MODULE="IntNull" fi MOFILES="$MODULE.mos" DEFS="$DEFS -D$OPSYS" if test -n "$CLEAN" then echo "(cd $RUNTIME; make clean)" (cd $RUNTIME; make clean) fi echo rm -f mo rm -f mo echo ln -s $MO mo ln -s $MO mo if test -n "$MKRUN" then echo "(cd $RUNTIME; rm -f run allmo.o)" (cd $RUNTIME; rm -f run allmo.o) if test -n "$SHARE" then if test "$OPSYS" = NEXT then echo "(cd $RUNTIME; make MACHINE=$MACHINE slinkdata)" (cd $RUNTIME; make MACHINE=$MACHINE slinkdata) echo "$RUNTIME/slinkdata [$RUNTIME/$MOFILES] > $RUNTIME/allmo.s" $RUNTIME/slinkdata `cat $RUNTIME/$MOFILES` > $RUNTIME/allmo.s echo "(cd runtime; cc -c allmo.s)" (cd runtime; cc -c allmo.s) else # # drt: changed this to pass $DEFS value and machine name instead of # just the machine name. # ARG="MACHINE=$MACHINE 'DEFS=$DEFS' linkdata" echo "(cd $RUNTIME; make $ARG)" (cd $RUNTIME; eval make $ARG) echo "$RUNTIME/linkdata [$RUNTIME/$MOFILES] > $RUNTIME/allmo.o" $RUNTIME/linkdata `cat $RUNTIME/$MOFILES` > $RUNTIME/allmo.o fi fi ARG="MACHINE=$MACHINE 'DEFS=$DEFS' 'CFL=$CFL' 'ASMBLR=$ASMBLR'" echo "(cd $RUNTIME; make $ARG)" (cd $RUNTIME; eval make $ARG) fi if test -n "$NOBOOT" then exit 0 fi if test "$MODULEKIND" = Int then STARTUP='('$COMMAND' exportML "'$IMAGE'"; output std_out System.version; output std_out (chr 10) (* newline *));' echo echo $STARTUP '|' $RUNTIME/run -m $SOFTLIMIT -r $RATIO -h $HEAP $MODULE echo $STARTUP | $RUNTIME/run -m $SOFTLIMIT -r $RATIO -h $HEAP $MODULE else echo "$RUNTIME/run -m $SOFTLIMIT -r $RATIO -h $HEAP $MODULE" $RUNTIME/run -m $SOFTLIMIT -r $RATIO -h $HEAP $MODULE <<XXX >$IMAGE XXX fi