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

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