Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 345 lines (325 sloc) 12.14 kb
a530bbe Initial revision
William Harold Newman authored
1 #!/bin/sh
babd45f 0.9.4.72:
Thiemo Seufer authored
2 set -e
a530bbe Initial revision
William Harold Newman authored
3
4 # The make-config.sh script uses information about the target machine
5 # to set things up for compilation. It's vaguely like a stripped-down
6 # version of autoconf. It's intended to be run as part of make.sh. The
7 # only time you'd want to run it by itself is if you're trying to
8 # cross-compile the system or if you're doing some kind of
9 # troubleshooting.
10
11 # This software is part of the SBCL system. See the README file for
12 # more information.
13 #
14 # This software is derived from the CMU CL system, which was
15 # written at Carnegie Mellon University and released into the
16 # public domain. The software is in the public domain and is
17 # provided with absolutely no warranty. See the COPYING and CREDITS
18 # files for more information.
19
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
20 case `uname` in
21 Linux)
22 sbcl_os="linux"
23 ;;
24 OSF1)
25 # it's changed name twice since it was called OSF/1: clearly
26 # the marketers forgot to tell the engineers about Digital Unix
27 # _or_ OSF/1 ...
28 sbcl_os="osf1"
29 ;;
30 *BSD)
31 case `uname` in
32 FreeBSD)
33 sbcl_os="freebsd"
34 ;;
35 OpenBSD)
36 sbcl_os="openbsd"
37 ;;
38 NetBSD)
39 sbcl_os="netbsd"
40 ;;
41 *)
42 echo unsupported BSD variant: `uname`
43 exit 1
44 ;;
45 esac
46 ;;
47 Darwin)
48 sbcl_os="darwin"
49 ;;
50 SunOS)
51 sbcl_os="sunos"
52 ;;
53 CYGWIN* | WindowsNT | MINGW*)
54 sbcl_os="win32"
55 ;;
56 *)
57 echo unsupported OS type: `uname`
58 exit 1
59 ;;
60 esac
61
62 link_or_copy() {
63 if [ "$sbcl_os" = "win32" ] ; then
64 cp -r "$1" "$2"
65 else
66 ln -s "$1" "$2"
67 fi
68 }
69
70 remove_dir_safely() {
71 if [ "$sbcl_os" = "win32" ] ; then
72 if [ -d "$1" ] ; then
73 rm -rf "$1"
74 elif [ -e "$1" ] ; then
75 echo "I'm afraid to remove non-directory $1."
76 exit 1
77 fi
78 else
79 if [ -h "$1" ] ; then
80 rm "$1"
81 elif [ -w "$1" ] ; then
82 echo "I'm afraid to replace non-symlink $1 with a symlink."
83 exit 1
84 fi
85 fi
86 }
87
a530bbe Initial revision
William Harold Newman authored
88 echo //entering make-config.sh
89
f2aa2d0 0.6.12.7:
William Harold Newman authored
90 echo //ensuring the existence of output/ directory
91 if [ ! -d output ] ; then mkdir output; fi
92
a530bbe Initial revision
William Harold Newman authored
93 ltf=`pwd`/local-target-features.lisp-expr
94 echo //initializing $ltf
672ac58 0.6.12.6:
William Harold Newman authored
95 echo ';;;; This is a machine-generated file.' > $ltf
d7f6139 0.6.12.7.flaky1:
William Harold Newman authored
96 echo ';;;; Please do not edit it by hand.' >> $ltf
97 echo ';;;; See make-config.sh.' >> $ltf
0d669e6 Christophe Rhodes 0.7.1.1:
csrhodes authored
98 printf '(' >> $ltf
a530bbe Initial revision
William Harold Newman authored
99
f2aa2d0 0.6.12.7:
William Harold Newman authored
100 echo //guessing default target CPU architecture from host architecture
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
101 case `uname -m` in
102 *86) guessed_sbcl_arch=x86 ;;
40e3ba0 Christophe Rhodes 0.9.3.63:
csrhodes authored
103 i86pc) guessed_sbcl_arch=x86 ;;
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
104 *x86_64) guessed_sbcl_arch=x86-64 ;;
f2aa2d0 0.6.12.7:
William Harold Newman authored
105 [Aa]lpha) guessed_sbcl_arch=alpha ;;
68fd2d2 0.7.1.20:
William Harold Newman authored
106 sparc*) guessed_sbcl_arch=sparc ;;
0d669e6 Christophe Rhodes 0.7.1.1:
csrhodes authored
107 sun*) guessed_sbcl_arch=sparc ;;
68fd2d2 0.7.1.20:
William Harold Newman authored
108 ppc) guessed_sbcl_arch=ppc ;;
a58ade7 Christophe Rhodes 0.9.9.22:
csrhodes authored
109 ppc64) guessed_sbcl_arch=ppc ;;
5062535 Christophe Rhodes 0.8.2.8:
csrhodes authored
110 Power*Macintosh) guessed_sbcl_arch=ppc ;;
8a19c68 Christophe Rhodes 0.7.6.27:
csrhodes authored
111 parisc) guessed_sbcl_arch=hppa ;;
fd00d78 Christophe Rhodes 0.8.21.18:
csrhodes authored
112 mips*) guessed_sbcl_arch=mips ;;
f2aa2d0 0.6.12.7:
William Harold Newman authored
113 *)
114 # If we're not building on a supported target architecture, we
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
115 # we have no guess, but it's not an error yet, since maybe
116 # target architecture will be specified explicitly below.
117 guessed_sbcl_arch=''
118 ;;
f2aa2d0 0.6.12.7:
William Harold Newman authored
119 esac
120
672ac58 0.6.12.6:
William Harold Newman authored
121 echo //setting up CPU-architecture-dependent information
f2aa2d0 0.6.12.7:
William Harold Newman authored
122 sbcl_arch=${SBCL_ARCH:-$guessed_sbcl_arch}
d7f6139 0.6.12.7.flaky1:
William Harold Newman authored
123 echo sbcl_arch=\"$sbcl_arch\"
f2aa2d0 0.6.12.7:
William Harold Newman authored
124 if [ "$sbcl_arch" = "" ] ; then
125 echo "can't guess target SBCL architecture, need SBCL_ARCH environment var"
126 exit 1
127 fi
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
128 printf ":%s" "$sbcl_arch" >> $ltf
c5759c0 Christophe Rhodes 0.8.1.15:
csrhodes authored
129
a530bbe Initial revision
William Harold Newman authored
130 for d in src/compiler src/assembly; do
131 echo //setting up symlink $d/target
132 original_dir=`pwd`
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
133 remove_dir_safely "$d/target"
eb5265a 0.8.14.9:
William Harold Newman authored
134 cd ./$d
a530bbe Initial revision
William Harold Newman authored
135 if [ -d $sbcl_arch ] ; then
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
136 link_or_copy $sbcl_arch target
a530bbe Initial revision
William Harold Newman authored
137 else
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
138 echo "missing sbcl_arch directory $PWD/$sbcl_arch"
139 exit 1
a530bbe Initial revision
William Harold Newman authored
140 fi
141 cd $original_dir
142 done
143
f6f77e8 Christophe Rhodes 0.7.10.16:
csrhodes authored
144 echo //setting up symlink src/compiler/assembly
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
145 remove_dir_safely src/compiler/assembly
146 original_dir=`pwd`
147 cd src/compiler
148 link_or_copy ../assembly assembly
149 cd $original_dir
f6f77e8 Christophe Rhodes 0.7.10.16:
csrhodes authored
150
a530bbe Initial revision
William Harold Newman authored
151 echo //setting up OS-dependent information
eaf8fba tidied up OpenBSD-vs.-FreeBSD stuff, and src/runtime/Config.x86-*
William Harold Newman authored
152 original_dir=`pwd`
eb5265a 0.8.14.9:
William Harold Newman authored
153 cd ./src/runtime/
68fd2d2 0.7.1.20:
William Harold Newman authored
154 rm -f Config target-arch-os.h target-arch.h target-os.h target-lispregs.h
155 # KLUDGE: these two logically belong in the previous section
156 # ("architecture-dependent"); it seems silly to enforce this in terms
157 # of the shell script, though. -- CSR, 2002-02-03
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
158 link_or_copy $sbcl_arch-arch.h target-arch.h
159 link_or_copy $sbcl_arch-lispregs.h target-lispregs.h
160 case "$sbcl_os" in
161 linux)
162 printf ' :elf' >> $ltf
163 printf ' :linux' >> $ltf
164 if [ $sbcl_arch = "x86-64" ]; then
165 link_or_copy Config.x86_64-linux Config
166 else
167 link_or_copy Config.$sbcl_arch-linux Config
168 fi
169 link_or_copy $sbcl_arch-linux-os.h target-arch-os.h
170 link_or_copy linux-os.h target-os.h
171 ;;
172 osf1)
173 printf ' :elf' >> $ltf
174 printf ' :osf1' >> $ltf
175 link_or_copy Config.$sbcl_arch-osf1 Config
176 link_or_copy $sbcl_arch-osf1-os.h target-arch-os.h
177 link_or_copy osf1-os.h target-os.h
178 ;;
179 *bsd)
180 printf ' :bsd' >> $ltf
181 link_or_copy $sbcl_arch-bsd-os.h target-arch-os.h
182 link_or_copy bsd-os.h target-os.h
183 case "$sbcl_os" in
184 freebsd)
185 printf ' :elf' >> $ltf
186 printf ' :freebsd' >> $ltf
402958f Juho Snellman 0.9.13.22:
jsnell authored
187 if [ $sbcl_arch = "x86" ]; then
188 printf ' :sb-lutex :restore-tls-segment-register-from-tls' >> $ltf
189 fi
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
190 link_or_copy Config.$sbcl_arch-freebsd Config
191 ;;
192 openbsd)
193 printf ' :elf' >> $ltf
194 printf ' :openbsd' >> $ltf
195 link_or_copy Config.$sbcl_arch-openbsd Config
196 ;;
197 netbsd)
074ba06 Christophe Rhodes 0.8.9.6.netbsd.1:
csrhodes authored
198 printf ' :netbsd' >> $ltf
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
199 printf ' :elf' >> $ltf
200 link_or_copy Config.$sbcl_arch-netbsd Config
201 ;;
202 *)
203 echo unsupported BSD variant: `uname`
204 exit 1
205 ;;
206 esac
207 ;;
208 darwin)
209 printf ' :mach-o' >> $ltf
210 printf ' :bsd' >> $ltf
402958f Juho Snellman 0.9.13.22:
jsnell authored
211 printf ' :darwin' >> $ltf
212 if [ $sbcl_arch = "x86" ]; then
213 printf ' :sb-lutex :restore-fs-segment-register-from-tls' >> $ltf
214 fi
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
215 link_or_copy $sbcl_arch-darwin-os.h target-arch-os.h
216 link_or_copy bsd-os.h target-os.h
217 link_or_copy Config.$sbcl_arch-darwin Config
218 ;;
219 sunos)
220 printf ' :elf' >> $ltf
0d669e6 Christophe Rhodes 0.7.1.1:
csrhodes authored
221 printf ' :sunos' >> $ltf
402958f Juho Snellman 0.9.13.22:
jsnell authored
222 if [ $sbcl_arch = "x86" ]; then
223 printf ' :sb-lutex' >> $ltf
224 fi
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
225 link_or_copy Config.$sbcl_arch-sunos Config
226 link_or_copy $sbcl_arch-sunos-os.h target-arch-os.h
227 link_or_copy sunos-os.h target-os.h
228 ;;
229 win32)
230 printf ' :win32' >> $ltf
231 link_or_copy Config.$sbcl_arch-win32 Config
232 link_or_copy $sbcl_arch-win32-os.h target-arch-os.h
233 link_or_copy win32-os.h target-os.h
234 ;;
f2aa2d0 0.6.12.7:
William Harold Newman authored
235 *)
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
236 echo unsupported OS type: `uname`
237 exit 1
238 ;;
f2aa2d0 0.6.12.7:
William Harold Newman authored
239 esac
eaf8fba tidied up OpenBSD-vs.-FreeBSD stuff, and src/runtime/Config.x86-*
William Harold Newman authored
240 cd $original_dir
a530bbe Initial revision
William Harold Newman authored
241
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
242 # FIXME: Things like :c-stack-grows-..., etc, should be
243 # *derived-target-features* or equivalent, so that there was a nicer
244 # way to specify them then sprinkling them in this file. They should
245 # still be tweakable by advanced users, though, but probably not
246 # appear in *features* of target. #!+/- should be adjusted to take
247 # them in account as well. At minimum the nicer specification stuff,
248 # though:
249 #
250 # (define-feature :dlopen (features)
251 # (union '(:bsd :linux :darwin :sunos) features))
252 #
253 # (define-feature :c-stack-grows-downwards-not-upwards (features)
254 # (member :x86 features))
255
c5759c0 Christophe Rhodes 0.8.1.15:
csrhodes authored
256 # KLUDGE: currently the x86 only works with the generational garbage
257 # collector (indicated by the presence of :GENCGC in *FEATURES*) and
258 # alpha, sparc and ppc with the stop'n'copy collector (indicated by
259 # the absence of :GENCGC in *FEATURES*). This isn't a great
260 # separation, but for now, rather than have :GENCGC in
261 # base-target-features.lisp-expr, we add it into local-target-features
262 # if we're building for x86. -- CSR, 2002-02-21 Then we do something
263 # similar with :STACK-GROWS-FOOWARD, too. -- WHN 2002-03-03
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
264 if [ "$sbcl_arch" = "x86" ]; then
c5759c0 Christophe Rhodes 0.8.1.15:
csrhodes authored
265 printf ' :gencgc :stack-grows-downward-not-upward :c-stack-is-control-stack' >> $ltf
93be008 Juho Snellman 0.9.8.14:
jsnell authored
266 printf ' :stack-allocatable-closures :alien-callbacks' >> $ltf
76237af Rudi Schlatte 0.9.10.29
rudi authored
267 if [ "$sbcl_os" = "linux" ] || [ "$sbcl_os" = "freebsd" ] || [ "$sbcl_os" = "netbsd" ] || [ "$sbcl_os" = "sunos" ] || [ "$sbcl_os" = "darwin" ] || [ "$sbcl_os" = "win32" ]; then
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
268 printf ' :linkage-table' >> $ltf
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
269 fi
48ec282 Christophe Rhodes 0.9.8.34:
csrhodes authored
270 if [ "$sbcl_os" = "win32" ]; then
271 # of course it doesn't provide dlopen, but there is
272 # roughly-equivalent magic nevertheless.
273 printf ' :os-provides-dlopen' >> $ltf
274 fi
78fa16b Christophe Rhodes 0.8.18.14:
csrhodes authored
275 elif [ "$sbcl_arch" = "x86-64" ]; then
276 printf ' :gencgc :stack-grows-downward-not-upward :c-stack-is-control-stack :linkage-table' >> $ltf
93be008 Juho Snellman 0.9.8.14:
jsnell authored
277 printf ' :stack-allocatable-closures :alien-callbacks' >> $ltf
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
278 elif [ "$sbcl_arch" = "mips" ]; then
3da4a7f 0.9.5.11:
Thiemo Seufer authored
279 printf ' :linkage-table' >> $ltf
280 printf ' :stack-allocatable-closures' >> $ltf
c5759c0 Christophe Rhodes 0.8.1.15:
csrhodes authored
281 # Use a little C program to try to guess the endianness. Ware
282 # cross-compilers!
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
283 #
284 # FIXME: integrate to grovel-features, mayhaps
44c608e Juho Snellman 0.9.11.21:
jsnell authored
285 $GNUMAKE -C tools-for-build determine-endianness -I ../src/runtime
c5759c0 Christophe Rhodes 0.8.1.15:
csrhodes authored
286 tools-for-build/determine-endianness >> $ltf
c65f4c0 Christophe Rhodes 0.8.4.5:
csrhodes authored
287 elif [ "$sbcl_arch" = "ppc" -a "$sbcl_os" = "linux" ]; then
288 # Use a C program to detect which kind of glibc we're building on,
289 # to bandage across the break in source compatibility between
290 # versions 2.3.1 and 2.3.2
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
291 #
292 # FIXME: integrate to grovel-features., maypahps
3a0f361 Christophe Rhodes 0.9.9.36:
csrhodes authored
293 printf ' :gencgc :stack-allocatable-closures :linkage-table' >> $ltf
44c608e Juho Snellman 0.9.11.21:
jsnell authored
294 $GNUMAKE -C tools-for-build where-is-mcontext -I ../src/runtime
295 tools-for-build/where-is-mcontext > src/runtime/ppc-linux-mcontext.h || (echo "error running where-is-mcontext"; exit 1)
e3f68bd Christophe Rhodes 0.8.4.36:
csrhodes authored
296 elif [ "$sbcl_arch" = "ppc" -a "$sbcl_os" = "darwin" ]; then
3a0f361 Christophe Rhodes 0.9.9.36:
csrhodes authored
297 printf ' :gencgc :stack-allocatable-closures' >> $ltf
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
298 # We provide a dlopen shim, so a little lie won't hurt
93be008 Juho Snellman 0.9.8.14:
jsnell authored
299 printf " :os-provides-dlopen :linkage-table :alien-callbacks" >> $ltf
e3f68bd Christophe Rhodes 0.8.4.36:
csrhodes authored
300 # The default stack ulimit under darwin is too small to run PURIFY.
301 # Best we can do is complain and exit at this stage
d543ff4 Christophe Rhodes 0.8.4.38:
csrhodes authored
302 if [ "`ulimit -s`" = "512" ]; then
e3f68bd Christophe Rhodes 0.8.4.36:
csrhodes authored
303 echo "Your stack size limit is too small to build SBCL."
304 echo "See the limit(1) or ulimit(1) commands and the README file."
305 exit 1
306 fi
fab1ba8 Christophe Rhodes 0.8.8.2:
csrhodes authored
307 elif [ "$sbcl_arch" = "sparc" ]; then
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
308 # Test the compiler in order to see if we are building on Sun
fab1ba8 Christophe Rhodes 0.8.8.2:
csrhodes authored
309 # toolchain as opposed to GNU binutils, and write the appropriate
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
310 # FUNCDEF macro for assembler. No harm in running this on sparc-linux
fab1ba8 Christophe Rhodes 0.8.8.2:
csrhodes authored
311 # as well.
312 sh tools-for-build/sparc-funcdef.sh > src/runtime/sparc-funcdef.h
1f7bb60 Nikodemus Siivola 0.8.15.18: Linkage table tweaks & alien bugfix
nikodemus authored
313 if [ "$sbcl_os" = "sunos" ] || [ "$sbcl_os" = "linux" ]; then
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
314 printf ' :linkage-table' >> $ltf
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
315 fi
2253eba Christophe Rhodes 0.9.1.63:
csrhodes authored
316 printf ' :stack-allocatable-closures' >> $ltf
7c7e627 0.9.1.52:
Alexey Dejneka authored
317 elif [ "$sbcl_arch" = "alpha" ]; then
318 printf ' :stack-allocatable-closures' >> $ltf
c5759c0 Christophe Rhodes 0.8.1.15:
csrhodes authored
319 else
320 # Nothing need be done in this case, but sh syntax wants a placeholder.
321 echo > /dev/null
322 fi
fab1ba8 Christophe Rhodes 0.8.8.2:
csrhodes authored
323
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
324 export sbcl_os sbcl_arch
4bc6b91 Nikodemus Siivola 0.8.13.78: Birds of Feather
nikodemus authored
325 sh tools-for-build/grovel-features.sh >> $ltf
326
a530bbe Initial revision
William Harold Newman authored
327 echo //finishing $ltf
328 echo ')' >> $ltf
329
330 # FIXME: The version system should probably be redone along these lines:
331 #
332 # echo //setting up version information.
333 # versionfile=version.txt
334 # cp base-version.txt $versionfile
335 # echo " (built `date -u` by `whoami`@`hostname`)" >> $versionfile
336 # echo 'This is a machine-generated file and should not be edited by hand.' >> $versionfile
9139275 Christophe Rhodes 0.7.9.7:
csrhodes authored
337
338 # Make a unique ID for this build (to discourage people from
339 # mismatching sbcl and *.core files).
eba7d5d Christophe Rhodes 0.8.13.27:
csrhodes authored
340 if [ `uname` = "SunOS" ] ; then
341 # use /usr/xpg4/bin/id instead of /usr/bin/id
342 PATH=/usr/xpg4/bin:$PATH
343 fi
344 echo '"'`hostname`-`id -un`-`date +%Y-%m-%d-%H-%M-%S`'"' > output/build-id.tmp
Something went wrong with that request. Please try again.