Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 361 lines (339 sloc) 12.848 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 @csrhodes 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 @csrhodes 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 @csrhodes 0.9.8.27:
csrhodes authored
101 case `uname -m` in
102 *86) guessed_sbcl_arch=x86 ;;
40e3ba0 @csrhodes 0.9.3.63:
csrhodes authored
103 i86pc) guessed_sbcl_arch=x86 ;;
04d819b @csrhodes 0.9.8.27:
csrhodes authored
104 *x86_64) guessed_sbcl_arch=x86-64 ;;
bd45534 1.0.0.32: support for FreeBSD/x86-64
sa2c authored
105 amd64) guessed_sbcl_arch=x86-64 ;;
f2aa2d0 0.6.12.7:
William Harold Newman authored
106 [Aa]lpha) guessed_sbcl_arch=alpha ;;
68fd2d2 0.7.1.20:
William Harold Newman authored
107 sparc*) guessed_sbcl_arch=sparc ;;
0d669e6 @csrhodes 0.7.1.1:
csrhodes authored
108 sun*) guessed_sbcl_arch=sparc ;;
1071bf1 @csrhodes 1.0.2.11:
csrhodes authored
109 *ppc) guessed_sbcl_arch=ppc ;;
a58ade7 @csrhodes 0.9.9.22:
csrhodes authored
110 ppc64) guessed_sbcl_arch=ppc ;;
5062535 @csrhodes 0.8.2.8:
csrhodes authored
111 Power*Macintosh) guessed_sbcl_arch=ppc ;;
8a19c68 @csrhodes 0.7.6.27:
csrhodes authored
112 parisc) guessed_sbcl_arch=hppa ;;
fd00d78 @csrhodes 0.8.21.18:
csrhodes authored
113 mips*) guessed_sbcl_arch=mips ;;
f2aa2d0 0.6.12.7:
William Harold Newman authored
114 *)
115 # If we're not building on a supported target architecture, we
04d819b @csrhodes 0.9.8.27:
csrhodes authored
116 # we have no guess, but it's not an error yet, since maybe
117 # target architecture will be specified explicitly below.
118 guessed_sbcl_arch=''
119 ;;
f2aa2d0 0.6.12.7:
William Harold Newman authored
120 esac
121
672ac58 0.6.12.6:
William Harold Newman authored
122 echo //setting up CPU-architecture-dependent information
f2aa2d0 0.6.12.7:
William Harold Newman authored
123 sbcl_arch=${SBCL_ARCH:-$guessed_sbcl_arch}
d7f6139 0.6.12.7.flaky1:
William Harold Newman authored
124 echo sbcl_arch=\"$sbcl_arch\"
f2aa2d0 0.6.12.7:
William Harold Newman authored
125 if [ "$sbcl_arch" = "" ] ; then
126 echo "can't guess target SBCL architecture, need SBCL_ARCH environment var"
127 exit 1
128 fi
04d819b @csrhodes 0.9.8.27:
csrhodes authored
129 printf ":%s" "$sbcl_arch" >> $ltf
c5759c0 @csrhodes 0.8.1.15:
csrhodes authored
130
a530bbe Initial revision
William Harold Newman authored
131 for d in src/compiler src/assembly; do
132 echo //setting up symlink $d/target
133 original_dir=`pwd`
04d819b @csrhodes 0.9.8.27:
csrhodes authored
134 remove_dir_safely "$d/target"
eb5265a 0.8.14.9:
William Harold Newman authored
135 cd ./$d
a530bbe Initial revision
William Harold Newman authored
136 if [ -d $sbcl_arch ] ; then
04d819b @csrhodes 0.9.8.27:
csrhodes authored
137 link_or_copy $sbcl_arch target
a530bbe Initial revision
William Harold Newman authored
138 else
04d819b @csrhodes 0.9.8.27:
csrhodes authored
139 echo "missing sbcl_arch directory $PWD/$sbcl_arch"
140 exit 1
a530bbe Initial revision
William Harold Newman authored
141 fi
142 cd $original_dir
143 done
144
f6f77e8 @csrhodes 0.7.10.16:
csrhodes authored
145 echo //setting up symlink src/compiler/assembly
04d819b @csrhodes 0.9.8.27:
csrhodes authored
146 remove_dir_safely src/compiler/assembly
147 original_dir=`pwd`
148 cd src/compiler
149 link_or_copy ../assembly assembly
150 cd $original_dir
f6f77e8 @csrhodes 0.7.10.16:
csrhodes authored
151
a530bbe Initial revision
William Harold Newman authored
152 echo //setting up OS-dependent information
eaf8fba tidied up OpenBSD-vs.-FreeBSD stuff, and src/runtime/Config.x86-*
William Harold Newman authored
153 original_dir=`pwd`
eb5265a 0.8.14.9:
William Harold Newman authored
154 cd ./src/runtime/
68fd2d2 0.7.1.20:
William Harold Newman authored
155 rm -f Config target-arch-os.h target-arch.h target-os.h target-lispregs.h
156 # KLUDGE: these two logically belong in the previous section
157 # ("architecture-dependent"); it seems silly to enforce this in terms
158 # of the shell script, though. -- CSR, 2002-02-03
04d819b @csrhodes 0.9.8.27:
csrhodes authored
159 link_or_copy $sbcl_arch-arch.h target-arch.h
160 link_or_copy $sbcl_arch-lispregs.h target-lispregs.h
161 case "$sbcl_os" in
162 linux)
163 printf ' :elf' >> $ltf
164 printf ' :linux' >> $ltf
46e4281 @jsnell 0.9.18.46:
jsnell authored
165
166 # If you add other platforms here, don't forget to edit
167 # src/runtime/Config.foo-linux too.
168 if [ $sbcl_arch = "x86" ]; then
169 printf ' :largefile' >> $ltf
170 fi
171
04d819b @csrhodes 0.9.8.27:
csrhodes authored
172 if [ $sbcl_arch = "x86-64" ]; then
173 link_or_copy Config.x86_64-linux Config
174 else
175 link_or_copy Config.$sbcl_arch-linux Config
176 fi
177 link_or_copy $sbcl_arch-linux-os.h target-arch-os.h
178 link_or_copy linux-os.h target-os.h
179 ;;
180 osf1)
181 printf ' :elf' >> $ltf
182 printf ' :osf1' >> $ltf
183 link_or_copy Config.$sbcl_arch-osf1 Config
184 link_or_copy $sbcl_arch-osf1-os.h target-arch-os.h
185 link_or_copy osf1-os.h target-os.h
186 ;;
187 *bsd)
188 printf ' :bsd' >> $ltf
189 link_or_copy $sbcl_arch-bsd-os.h target-arch-os.h
190 link_or_copy bsd-os.h target-os.h
191 case "$sbcl_os" in
192 freebsd)
193 printf ' :elf' >> $ltf
194 printf ' :freebsd' >> $ltf
4efb45c 1.0.0.31: pthread-futex: another pthread back-end of mutex
sa2c authored
195 printf ' :sb-pthread-futex' >> $ltf
402958f @jsnell 0.9.13.22:
jsnell authored
196 if [ $sbcl_arch = "x86" ]; then
4efb45c 1.0.0.31: pthread-futex: another pthread back-end of mutex
sa2c authored
197 printf ' :restore-tls-segment-register-from-tls' >> $ltf
402958f @jsnell 0.9.13.22:
jsnell authored
198 fi
04d819b @csrhodes 0.9.8.27:
csrhodes authored
199 link_or_copy Config.$sbcl_arch-freebsd Config
200 ;;
201 openbsd)
202 printf ' :elf' >> $ltf
203 printf ' :openbsd' >> $ltf
204 link_or_copy Config.$sbcl_arch-openbsd Config
205 ;;
206 netbsd)
074ba06 @csrhodes 0.8.9.6.netbsd.1:
csrhodes authored
207 printf ' :netbsd' >> $ltf
04d819b @csrhodes 0.9.8.27:
csrhodes authored
208 printf ' :elf' >> $ltf
209 link_or_copy Config.$sbcl_arch-netbsd Config
210 ;;
211 *)
212 echo unsupported BSD variant: `uname`
213 exit 1
214 ;;
215 esac
216 ;;
217 darwin)
218 printf ' :mach-o' >> $ltf
219 printf ' :bsd' >> $ltf
402958f @jsnell 0.9.13.22:
jsnell authored
220 printf ' :darwin' >> $ltf
221 if [ $sbcl_arch = "x86" ]; then
1adf4db 1.0.4.108: turn mach-exception-handler on for macos/x86 and x86_64
Cyrus Harmon authored
222 printf ' :mach-exception-handler :sb-lutex :restore-fs-segment-register-from-tls' >> $ltf
402958f @jsnell 0.9.13.22:
jsnell authored
223 fi
1cf1aff 1.0.4.54: x86-64/darwin preliminary threads support
Cyrus Harmon authored
224 if [ $sbcl_arch = "x86-64" ]; then
1adf4db 1.0.4.108: turn mach-exception-handler on for macos/x86 and x86_64
Cyrus Harmon authored
225 printf ' :mach-exception-handler :sb-lutex' >> $ltf
1cf1aff 1.0.4.54: x86-64/darwin preliminary threads support
Cyrus Harmon authored
226 fi
04d819b @csrhodes 0.9.8.27:
csrhodes authored
227 link_or_copy $sbcl_arch-darwin-os.h target-arch-os.h
228 link_or_copy bsd-os.h target-os.h
229 link_or_copy Config.$sbcl_arch-darwin Config
230 ;;
231 sunos)
232 printf ' :elf' >> $ltf
0d669e6 @csrhodes 0.7.1.1:
csrhodes authored
233 printf ' :sunos' >> $ltf
402958f @jsnell 0.9.13.22:
jsnell authored
234 if [ $sbcl_arch = "x86" ]; then
235 printf ' :sb-lutex' >> $ltf
236 fi
04d819b @csrhodes 0.9.8.27:
csrhodes authored
237 link_or_copy Config.$sbcl_arch-sunos Config
238 link_or_copy $sbcl_arch-sunos-os.h target-arch-os.h
239 link_or_copy sunos-os.h target-os.h
240 ;;
241 win32)
242 printf ' :win32' >> $ltf
243 link_or_copy Config.$sbcl_arch-win32 Config
244 link_or_copy $sbcl_arch-win32-os.h target-arch-os.h
245 link_or_copy win32-os.h target-os.h
246 ;;
f2aa2d0 0.6.12.7:
William Harold Newman authored
247 *)
04d819b @csrhodes 0.9.8.27:
csrhodes authored
248 echo unsupported OS type: `uname`
249 exit 1
250 ;;
f2aa2d0 0.6.12.7:
William Harold Newman authored
251 esac
eaf8fba tidied up OpenBSD-vs.-FreeBSD stuff, and src/runtime/Config.x86-*
William Harold Newman authored
252 cd $original_dir
a530bbe Initial revision
William Harold Newman authored
253
75b5237 @nikodemus 0.8.14.5: Join the foreign legion!
nikodemus authored
254 # FIXME: Things like :c-stack-grows-..., etc, should be
255 # *derived-target-features* or equivalent, so that there was a nicer
256 # way to specify them then sprinkling them in this file. They should
257 # still be tweakable by advanced users, though, but probably not
258 # appear in *features* of target. #!+/- should be adjusted to take
259 # them in account as well. At minimum the nicer specification stuff,
260 # though:
261 #
262 # (define-feature :dlopen (features)
263 # (union '(:bsd :linux :darwin :sunos) features))
264 #
265 # (define-feature :c-stack-grows-downwards-not-upwards (features)
266 # (member :x86 features))
267
c5759c0 @csrhodes 0.8.1.15:
csrhodes authored
268 # KLUDGE: currently the x86 only works with the generational garbage
269 # collector (indicated by the presence of :GENCGC in *FEATURES*) and
270 # alpha, sparc and ppc with the stop'n'copy collector (indicated by
271 # the absence of :GENCGC in *FEATURES*). This isn't a great
272 # separation, but for now, rather than have :GENCGC in
273 # base-target-features.lisp-expr, we add it into local-target-features
274 # if we're building for x86. -- CSR, 2002-02-21 Then we do something
275 # similar with :STACK-GROWS-FOOWARD, too. -- WHN 2002-03-03
75b5237 @nikodemus 0.8.14.5: Join the foreign legion!
nikodemus authored
276 if [ "$sbcl_arch" = "x86" ]; then
bfb19d3 @nikodemus 1.0.7.19: SB-EXT:COMPARE-AND-SWAP
nikodemus authored
277 printf ' :gencgc :stack-grows-downward-not-upward :c-stack-is-control-stack' >> $ltf
278 printf ' :compare-and-swap-vop :unwind-to-frame-and-call-vop' >> $ltf
93be008 @jsnell 0.9.8.14:
jsnell authored
279 printf ' :stack-allocatable-closures :alien-callbacks' >> $ltf
76237af @rudi 0.9.10.29
rudi authored
280 if [ "$sbcl_os" = "linux" ] || [ "$sbcl_os" = "freebsd" ] || [ "$sbcl_os" = "netbsd" ] || [ "$sbcl_os" = "sunos" ] || [ "$sbcl_os" = "darwin" ] || [ "$sbcl_os" = "win32" ]; then
04d819b @csrhodes 0.9.8.27:
csrhodes authored
281 printf ' :linkage-table' >> $ltf
75b5237 @nikodemus 0.8.14.5: Join the foreign legion!
nikodemus authored
282 fi
48ec282 @csrhodes 0.9.8.34:
csrhodes authored
283 if [ "$sbcl_os" = "win32" ]; then
284 # of course it doesn't provide dlopen, but there is
285 # roughly-equivalent magic nevertheless.
286 printf ' :os-provides-dlopen' >> $ltf
287 fi
78fa16b @csrhodes 0.8.18.14:
csrhodes authored
288 elif [ "$sbcl_arch" = "x86-64" ]; then
bfb19d3 @nikodemus 1.0.7.19: SB-EXT:COMPARE-AND-SWAP
nikodemus authored
289 printf ' :gencgc :stack-grows-downward-not-upward :c-stack-is-control-stack :linkage-table' >> $ltf
290 printf ' :compare-and-swap-vop :unwind-to-frame-and-call-vop' >> $ltf
93be008 @jsnell 0.9.8.14:
jsnell authored
291 printf ' :stack-allocatable-closures :alien-callbacks' >> $ltf
75b5237 @nikodemus 0.8.14.5: Join the foreign legion!
nikodemus authored
292 elif [ "$sbcl_arch" = "mips" ]; then
3da4a7f 0.9.5.11:
Thiemo Seufer authored
293 printf ' :linkage-table' >> $ltf
294 printf ' :stack-allocatable-closures' >> $ltf
c5759c0 @csrhodes 0.8.1.15:
csrhodes authored
295 # Use a little C program to try to guess the endianness. Ware
296 # cross-compilers!
75b5237 @nikodemus 0.8.14.5: Join the foreign legion!
nikodemus authored
297 #
298 # FIXME: integrate to grovel-features, mayhaps
44c608e @jsnell 0.9.11.21:
jsnell authored
299 $GNUMAKE -C tools-for-build determine-endianness -I ../src/runtime
c5759c0 @csrhodes 0.8.1.15:
csrhodes authored
300 tools-for-build/determine-endianness >> $ltf
c65f4c0 @csrhodes 0.8.4.5:
csrhodes authored
301 elif [ "$sbcl_arch" = "ppc" -a "$sbcl_os" = "linux" ]; then
302 # Use a C program to detect which kind of glibc we're building on,
303 # to bandage across the break in source compatibility between
304 # versions 2.3.1 and 2.3.2
75b5237 @nikodemus 0.8.14.5: Join the foreign legion!
nikodemus authored
305 #
306 # FIXME: integrate to grovel-features., maypahps
3a0f361 @csrhodes 0.9.9.36:
csrhodes authored
307 printf ' :gencgc :stack-allocatable-closures :linkage-table' >> $ltf
44c608e @jsnell 0.9.11.21:
jsnell authored
308 $GNUMAKE -C tools-for-build where-is-mcontext -I ../src/runtime
309 tools-for-build/where-is-mcontext > src/runtime/ppc-linux-mcontext.h || (echo "error running where-is-mcontext"; exit 1)
e3f68bd @csrhodes 0.8.4.36:
csrhodes authored
310 elif [ "$sbcl_arch" = "ppc" -a "$sbcl_os" = "darwin" ]; then
3a0f361 @csrhodes 0.9.9.36:
csrhodes authored
311 printf ' :gencgc :stack-allocatable-closures' >> $ltf
75b5237 @nikodemus 0.8.14.5: Join the foreign legion!
nikodemus authored
312 # We provide a dlopen shim, so a little lie won't hurt
93be008 @jsnell 0.9.8.14:
jsnell authored
313 printf " :os-provides-dlopen :linkage-table :alien-callbacks" >> $ltf
e3f68bd @csrhodes 0.8.4.36:
csrhodes authored
314 # The default stack ulimit under darwin is too small to run PURIFY.
315 # Best we can do is complain and exit at this stage
d543ff4 @csrhodes 0.8.4.38:
csrhodes authored
316 if [ "`ulimit -s`" = "512" ]; then
e3f68bd @csrhodes 0.8.4.36:
csrhodes authored
317 echo "Your stack size limit is too small to build SBCL."
318 echo "See the limit(1) or ulimit(1) commands and the README file."
319 exit 1
320 fi
1071bf1 @csrhodes 1.0.2.11:
csrhodes authored
321 elif [ "$sbcl_arch" = "ppc" -a "$sbcl_os" = "netbsd" ]; then
322 printf ' :gencgc :stack-allocatable-closures :linkage-table' >> $ltf
fab1ba8 @csrhodes 0.8.8.2:
csrhodes authored
323 elif [ "$sbcl_arch" = "sparc" ]; then
04d819b @csrhodes 0.9.8.27:
csrhodes authored
324 # Test the compiler in order to see if we are building on Sun
fab1ba8 @csrhodes 0.8.8.2:
csrhodes authored
325 # toolchain as opposed to GNU binutils, and write the appropriate
04d819b @csrhodes 0.9.8.27:
csrhodes authored
326 # FUNCDEF macro for assembler. No harm in running this on sparc-linux
fab1ba8 @csrhodes 0.8.8.2:
csrhodes authored
327 # as well.
328 sh tools-for-build/sparc-funcdef.sh > src/runtime/sparc-funcdef.h
1f7bb60 @nikodemus 0.8.15.18: Linkage table tweaks & alien bugfix
nikodemus authored
329 if [ "$sbcl_os" = "sunos" ] || [ "$sbcl_os" = "linux" ]; then
04d819b @csrhodes 0.9.8.27:
csrhodes authored
330 printf ' :linkage-table' >> $ltf
75b5237 @nikodemus 0.8.14.5: Join the foreign legion!
nikodemus authored
331 fi
2253eba @csrhodes 0.9.1.63:
csrhodes authored
332 printf ' :stack-allocatable-closures' >> $ltf
7c7e627 0.9.1.52:
Alexey Dejneka authored
333 elif [ "$sbcl_arch" = "alpha" ]; then
334 printf ' :stack-allocatable-closures' >> $ltf
c5759c0 @csrhodes 0.8.1.15:
csrhodes authored
335 else
336 # Nothing need be done in this case, but sh syntax wants a placeholder.
337 echo > /dev/null
338 fi
fab1ba8 @csrhodes 0.8.8.2:
csrhodes authored
339
75b5237 @nikodemus 0.8.14.5: Join the foreign legion!
nikodemus authored
340 export sbcl_os sbcl_arch
4bc6b91 @nikodemus 0.8.13.78: Birds of Feather
nikodemus authored
341 sh tools-for-build/grovel-features.sh >> $ltf
342
a530bbe Initial revision
William Harold Newman authored
343 echo //finishing $ltf
344 echo ')' >> $ltf
345
346 # FIXME: The version system should probably be redone along these lines:
347 #
348 # echo //setting up version information.
349 # versionfile=version.txt
350 # cp base-version.txt $versionfile
351 # echo " (built `date -u` by `whoami`@`hostname`)" >> $versionfile
352 # echo 'This is a machine-generated file and should not be edited by hand.' >> $versionfile
9139275 @csrhodes 0.7.9.7:
csrhodes authored
353
354 # Make a unique ID for this build (to discourage people from
355 # mismatching sbcl and *.core files).
eba7d5d @csrhodes 0.8.13.27:
csrhodes authored
356 if [ `uname` = "SunOS" ] ; then
357 # use /usr/xpg4/bin/id instead of /usr/bin/id
358 PATH=/usr/xpg4/bin:$PATH
359 fi
360 echo '"'`hostname`-`id -un`-`date +%Y-%m-%d-%H-%M-%S`'"' > output/build-id.tmp
Something went wrong with that request. Please try again.