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

SCM Repository

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

Annotation of /config/trunk/_heap2exec

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5233 - (view) (download)

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

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