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

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