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 /sml/trunk/system/cmb-cross
ViewVC logotype

Annotation of /sml/trunk/system/cmb-cross

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6435 - (view) (download)

1 : jhr 5378 #!/bin/sh
2 :     #
3 : jhr 5557 # COPYRIGHT (c) 2019 The Fellowship of SML/NJ (http://www.smlnj.org)
4 :     # All rights reserved.
5 : jhr 5378 #
6 : jhr 6041 # usage: cmb-cross [ -32 | -64 ] [ -z ] <TARGET>
7 :     # <TARGET> -- one of amd64-unix, ppc-unix, sparc-unix, x86-unix, or x86-win32
8 : jhr 5557 #
9 : jhr 6041 # cross compile to the specified TARGET
10 : jhr 5557 #
11 : jhr 5378
12 : jhr 6041 usage() {
13 :     echo "usage: cmb-cross [ options ] <target>"
14 :     echo " Options:"
15 :     echo " -32 | -64 -- size option for compiler"
16 :     echo " -z -- archive result as gzipped tar file"
17 :     echo " -C<ctl>=<v> -- control argument passed to compile command"
18 :     echo " <target> -- one of amd64-unix, ppc-unix, sparc-unix,"
19 :     echo " x86-unix, or x86-win32"
20 :     exit 1
21 :     }
22 :    
23 : jhr 5557 this=$0
24 :     here=`pwd`
25 :     cd ../..
26 :     twoup=`pwd`
27 :     cd $here
28 :    
29 : jhr 6041 SIZE_OPT=
30 : jhr 5794 CTL_FLAGS=
31 : jhr 6041 MAKE_TARBALL=no
32 :     TARGET=
33 : jhr 5794
34 : jhr 6041 #
35 :     # Parse command line
36 :     #
37 :     while [ "$#" != 0 ] ; do
38 :     arg=$1; shift
39 :     case $arg in
40 :     -32) SIZE_OPT="-32" ;;
41 :     -64) SIZE_OPT="-64" ;;
42 :     -z) MAKE_TARBALL=yes ;;
43 :     -C) CTL_FLAGS="$CTL_FLAGS $arg" ;;
44 :     amd64-unix|ppc-unix|sparc-unix|x86-unix|x86-win32)
45 :     TARGET=$arg
46 :     ;;
47 :     *)
48 :     echo "$this: unknown argument \"$arg\""
49 :     usage
50 :     ;;
51 :     esac
52 :     done
53 : jhr 5378
54 : jhr 6041 if [ x"$TARGET" = x ] ; then
55 :     usage
56 :     fi
57 :    
58 : jhr 6267 # if the size was not specified on the command line, then we use
59 :     # the size from the sml executable.
60 :     #
61 :     if [ x"SIZE_OPT" = x ] ; then
62 :     SIZE=`../../bin/sml @SMLwordsize`
63 :     SIZE_OPT="-$SIZE"
64 :     fi
65 :    
66 : jhr 5794 to_lower() {
67 :     echo $@ | tr "[:upper:]" "[:lower:]"
68 :     }
69 :    
70 :     to_upper() {
71 :     echo $@ | tr "[:lower:]" "[:upper:]"
72 :     }
73 :    
74 : jhr 5557 # check linking command
75 :     LINK=$twoup/bin/.link-sml
76 :     if [ ! -x $LINK ] ; then
77 :     echo $this: link script $LINK is not operational.
78 :     exit 1
79 :     fi
80 :    
81 :     # get host ARCH and OPSYS variables
82 :     if [ -f $twoup/bin/.arch-n-opsys ]; then
83 : jhr 6226 ARCH_N_OPSYS=`$twoup/bin/.arch-n-opsys $SIZE_OPT`
84 : jhr 5557 if [ "$?" = "0" ]; then
85 :     eval $ARCH_N_OPSYS
86 :     fi
87 :     else
88 :     echo "$this: .arch-n-opsys is missing"
89 :     exit 1
90 :     fi
91 :    
92 : jhr 5794 HOST_ARCH=$(to_upper $ARCH)
93 :     HOST_OPSYS=$(to_upper $OPSYS)
94 : jhr 5557
95 : jhr 6041 # determine the TARGET ARCH, OPSYS, SIZE, and ENDIANESS variables
96 :     #
97 :     case $TARGET in
98 : jhr 5557 amd64-unix)
99 :     architecture=amd64
100 :     TARGET_ARCH=AMD64;
101 :     TARGET_OPSYS=UNIX
102 :     TARGET_SIZE=64
103 :     TARGET_ENDIANESS=LITTLE
104 :     ;;
105 :     ppc-unix)
106 :     architecture=ppc
107 :     TARGET_ARCH=PPC;
108 :     TARGET_OPSYS=UNIX
109 :     TARGET_SIZE=32
110 :     TARGET_ENDIANESS=BIG
111 :     ;;
112 :     sparc-unix)
113 :     architecture=sparc
114 :     TARGET_ARCH=SPARC;
115 :     TARGET_OPSYS=UNIX
116 :     TARGET_SIZE=32
117 :     TARGET_ENDIANESS=BIG
118 :     ;;
119 :     x86-unix)
120 :     architecture=x86
121 :     TARGET_ARCH=X86;
122 :     TARGET_OPSYS=UNIX
123 :     TARGET_SIZE=32
124 :     TARGET_ENDIANESS=LITTLE
125 :     ;;
126 :     x86-win32)
127 :     architecture=x86
128 :     TARGET_ARCH=X86;
129 :     TARGET_OPSYS=WIN32
130 :     TARGET_SIZE=32
131 :     TARGET_ENDIANESS=LITTLE
132 :     ;;
133 : jhr 6041 *) echo "cmb-cross: unrecognized TARGET '$TARGET'"
134 : jhr 5378 exit 1
135 :     ;;
136 :     esac
137 :    
138 : jhr 5557 # lower-case architecture name
139 : jhr 5794 architecture=$(to_lower $TARGET_ARCH)
140 : jhr 5557
141 : jhr 5378 unset VERSIONTOOL_BUMP_RELEASE
142 :    
143 : jhr 6041 echo "$this: build $TARGET-cross bin/boot files"
144 :     ../../bin/sml $SIZE_OPT -DNO_PLUGINS \$smlnj/cmb.cm << XXXX
145 : jhr 6435 #set (CMB.symval "CMB_CROSS") (SOME 1);
146 : jhr 5557 #set (CMB.symval "ARCH_${HOST_ARCH}") NONE;
147 :     #set (CMB.symval "OPSYS_${HOST_OPSYS}") NONE;
148 :     #set (CMB.symval "ARCH_${TARGET_ARCH}") (SOME 1);
149 :     #set (CMB.symval "OPSYS_${TARGET_OPSYS}") (SOME 1);
150 :     #set (CMB.symval "TARGET_SIZE_${TARGET_SIZE}") (SOME 1);
151 :     #set (CMB.symval "TARGET_${TARGET_ENDIANESS}_ENDIAN") (SOME 1);
152 : jhr 6041 CMB.make' (SOME "$TARGET-cross");
153 : jhr 5557 XXXX
154 :    
155 :     # the following is equivalent to running
156 :     #
157 : jhr 6226 # ./makeml $SIZE_OPT -boot $TARGET-cross.boot.x86-unix -rebuild $architecture
158 : jhr 5557 #
159 : jhr 6041 echo "$this: cross compile to $TARGET"
160 : jhr 5557
161 : jhr 5569 if [ $HOST_OPSYS = win32 ] ; then
162 : jhr 5794 SUFFIX=$(to_lower "${HOST_ARCH}-win32")
163 : jhr 5557 else
164 : jhr 5794 SUFFIX=$(to_lower "${HOST_ARCH}-unix")
165 : jhr 5557 fi
166 : jhr 6041 CROSS_BIN_DIR="${TARGET}-cross.bin.${SUFFIX}"
167 :     CROSS_BOOT_DIR="${TARGET}-cross.boot.${SUFFIX}"
168 : jhr 5557
169 :     MODE="@SMLrebuild=${architecture}"
170 :    
171 :     CM_PATHCONFIG=${CM_PATHCONFIG:-$twoup/lib/pathconfig}
172 :     export CM_PATHCONFIG
173 :    
174 : jhr 5569 cd $CROSS_BOOT_DIR
175 : jhr 5557
176 : jhr 6041 echo $this: $LINK $SIZE_OPT @SMLboot=BOOTLIST @SMLheap=sml $MODE $CTL_FLAGS
177 :     if $LINK $SIZE_OPT @SMLboot=BOOTLIST @SMLheap=sml $MODE $CTL_FLAGS ; then
178 : jhr 5569 # back to the system directory
179 :     #
180 :     cd $here
181 : jhr 6041 # the new boot/bin files will be in "${architecture}.boot.${TARGET}"
182 :     # and "${architecture}.bin.${TARGET}"; we rename them with the
183 : jhr 5569 # standard naming convention by replacing "${architecture}" with "sml"
184 :     #
185 :     for xxx in bin boot ; do
186 : jhr 6041 if [ -d "${architecture}.${xxx}.${TARGET}" ] ; then
187 :     rm -rf "sml.${xxx}.${TARGET}"
188 :     mv "${architecture}.${xxx}.${TARGET}" "sml.${xxx}.${TARGET}"
189 : jhr 5569 else
190 : jhr 6041 echo "$this: ${architecture}.${xxx}.${TARGET} is missing!"
191 : jhr 5569 exit 1
192 :     fi
193 :     done
194 : jhr 5557 echo $this: New binfiles are ready.
195 : jhr 5569 # cleanup
196 :     #
197 :     rm -rf ${CROSS_BIN_DIR} ${CROSS_BOOT_DIR}
198 : jhr 5557 else
199 :     echo $this: Something broke.
200 :     exit 1
201 :     fi
202 : jhr 5569
203 : jhr 6041 if [ $MAKE_TARBALL = "yes" ] ; then
204 :     tar -cf - sml.boot.${TARGET} | gzip > boot.$TARGET.tgz
205 : jhr 5569 fi

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