Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /config/trunk/_heap2exec
ViewVC logotype

Diff of /config/trunk/_heap2exec

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1747, Fri Jan 14 23:53:21 2005 UTC revision 1923, Thu Apr 20 15:28:53 2006 UTC
# Line 1  Line 1 
1  #!@SHELL@  #!@SHELL@
2    
3    CMD=`basename "$0"`
4    
5    usage() {
6            echo "usage: $CMD [--linkwith-<format>] heapfile execfile"
7            echo "       <format> = exec | so | a"
8            exit 1
9    }
10    
11    die () {
12            echo "${CMD}: $1"
13            exit 1
14    }
15    
16  if [ x${SMLNJ_HOME} = x ] ; then  if [ x${SMLNJ_HOME} = x ] ; then
17      BIN_DIR="@BINDIR@"      BIN_DIR="@BINDIR@"
18  else  else
# Line 8  Line 21 
21    
22  ARCH_N_OPSYS=`"$BIN_DIR/.arch-n-opsys"`  ARCH_N_OPSYS=`"$BIN_DIR/.arch-n-opsys"`
23  if [ "$?" != "0" ]; then  if [ "$?" != "0" ]; then
24    echo "$CMD: unable to determine architecture/operating system"          die "unable to determine architecture/operating system"
   exit 1  
25  fi  fi
26  eval $ARCH_N_OPSYS  eval $ARCH_N_OPSYS
27    
28  RUNX=${BIN_DIR}/.run/runx.${ARCH}-${OPSYS}  RUNX=${BIN_DIR}/.run/runx.${ARCH}-${OPSYS}
29    RUN_SO=${BIN_DIR}/.run/run.${ARCH}-${OPSYS}.so
30    RUN_A=${BIN_DIR}/.run/run.${ARCH}-${OPSYS}.a
31  H2A=${BIN_DIR}/heap2asm  H2A=${BIN_DIR}/heap2asm
32    
33    FORMAT=
34  if [ $# != 2 ] ; then  if [ $# != 2 ] ; then
35      echo usage: $0 heapfile execfile          if [ $# = 3 ] ; then
36      exit 1                  case $1 in
37                            --linkwith-exec)
38                                    FORMAT=exec
39                                    ;;
40                            --linkwith-so)
41                                    FORMAT=so
42                                    ;;
43                            --linkwith-a)
44                                    FORMAT=a
45                                    ;;
46                            *)
47                                    usage
48                                    ;;
49                    esac
50                    shift
51            else
52                    usage
53            fi
54    else
55            case ${OPSYS} in
56                    darwin)
57                            FORMAT=exec
58                            ;;
59                    freebsd|linux)
60                            FORMAT=a
61                            ;;
62                    *)
63                            die "no default runtime link format known for ${OPSYS}"
64                            ;;
65                    esac
66    fi
67    if [ -z "$FORMAT" ] ; then
68            die "no runtime object format specified"
69  fi  fi
70    
71  heapfile=$1  heapfile=$1
72  execfile=$2  execfile=$2
73    
74  if [ -f $RUNX ] ; then  CC=cc
75      if [ -f $H2A ]; then  LD=ld
76          ${H2A} "$heapfile" "$execfile".s  
77          cc -c "$execfile".s  EXEC_PROG=
78          ld -o "$execfile" ${RUNX} "$execfile".o -lc  EXEC_FLAGS=
79          rm "$execfile".[so]  EXEC_LIBS=
80      else  SO_PROG=
81          echo $0: heap2asm is not installed  SO_FLAGS=
82    SO_LIBS=
83    A_PROG=
84    A_FLAGS=
85    A_LIBS=
86    
87    case ${OPSYS} in
88            darwin)
89                    EXEC_PROG=${LD}
90                    EXEC_LIBS=-lc
91                    ;;
92            freebsd)
93                    SO_PROG=${CC}
94                    SO_FLAGS=-Wl,--export-dynamic
95                    SO_LIBS=-lm
96                    A_PROG=${CC}
97                    A_FLAGS=-Wl,--export-dynamic
98                    A_LIBS=-lm
99                    ;;
100            linux)
101                    SO_PROG=${CC}
102                    SO_FLAGS=-Wl,--export-dynamic
103                    A_PROG=${CC}
104                    A_FLAGS=-Wl,--export-dynamic
105                    A_LIBS="-lm -ldl"
106                    ;;
107            *)
108                    ;;
109    esac
110    
111    if [ ! -f $H2A ]; then
112            echo "${CMD}: heap2asm is not installed"
113          exit 2          exit 2
114      fi      fi
115    
116    RESULT=0
117    if ${H2A} "$heapfile" "$execfile".s ; then
118            if [ -f "$execfile".s ] ; then
119                    if ${CC} -c -o "$execfile".o "$execfile".s ; then
120                            rm "$execfile".s
121                    else
122                            rm "$execfile".s
123                            die "${execfile}.o creation failed"
124                    fi
125  else  else
126      echo $0: linkable runtime system object not available                  die "${execfile}.s creation failed"
127            fi
128            if [ "$FORMAT" = exec -a -f "${RUNX}" ] ; then
129                    [ -z "${EXEC_PROG}" ] && die "no linker specified for runtime format $FORMAT"
130                    ${EXEC_PROG} ${EXEC_FLAGS} -o "$execfile" ${RUNX} "$execfile".o ${EXEC_LIBS}
131                    RESULT=$?
132            elif [ "$FORMAT" = so -a -f "${RUN_SO}" ] ; then
133                    [ -z "${SO_PROG}" ] && die "no linker specified for runtime format $FORMAT"
134                    ${SO_PROG} ${SO_FLAGS} -o "$execfile" ${RUN_SO} "$execfile".o ${SO_LIBS}
135                    RESULT=$?
136            elif [ "$FORMAT" = a -a -f "${RUN_A}" ] ; then
137                    [ -z "${A_PROG}" ] && die "no linker specified for runtime format $FORMAT"
138                    ${A_PROG} ${A_FLAGS} -o "$execfile" ${RUN_A} "$execfile".o ${A_LIBS}
139                    RESULT=$?
140            else
141                    echo "${CMD}: linkable runtime system object ($FORMAT) not available"
142                    rm "$execfile".o
143      exit 2      exit 2
144  fi  fi
145            rm "$execfile".o
146    else
147            die "heap2asm failed"
148    fi
149    
150    if [ $RESULT != 0 ] ; then
151            die "linking failed with return code $RESULT"
152    fi
153    
154  exit 0  exit 0

Legend:
Removed from v.1747  
changed lines
  Added in v.1923

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0