Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 354 lines (332 sloc) 12.423 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 ;;
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 Christophe Rhodes 0.7.1.1:
csrhodes authored
108 sun*) guessed_sbcl_arch=sparc ;;
68fd2d2 0.7.1.20:
William Harold Newman authored
109 ppc) guessed_sbcl_arch=ppc ;;
a58ade7 Christophe Rhodes 0.9.9.22:
csrhodes authored
110 ppc64) guessed_sbcl_arch=ppc ;;
5062535 Christophe Rhodes 0.8.2.8:
csrhodes authored
111 Power*Macintosh) guessed_sbcl_arch=ppc ;;
8a19c68 Christophe Rhodes 0.7.6.27:
csrhodes authored
112 parisc) guessed_sbcl_arch=hppa ;;
fd00d78 Christophe Rhodes 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 Christophe Rhodes 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 Christophe Rhodes 0.9.8.27:
csrhodes authored
129 printf ":%s" "$sbcl_arch" >> $ltf
c5759c0 Christophe Rhodes 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 Christophe Rhodes 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 Christophe Rhodes 0.9.8.27:
csrhodes authored
137 link_or_copy $sbcl_arch target
a530bbe Initial revision
William Harold Newman authored
138 else
04d819b Christophe Rhodes 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 Christophe Rhodes 0.7.10.16:
csrhodes authored
145 echo //setting up symlink src/compiler/assembly
04d819b Christophe Rhodes 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 Christophe Rhodes 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 Christophe Rhodes 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 Juho Snellman 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 Christophe Rhodes 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 Juho Snellman 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 Juho Snellman 0.9.13.22:
jsnell authored
198 fi
04d819b Christophe Rhodes 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 Christophe Rhodes 0.8.9.6.netbsd.1:
csrhodes authored
207 printf ' :netbsd' >> $ltf
04d819b Christophe Rhodes 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 Juho Snellman 0.9.13.22:
jsnell authored
220 printf ' :darwin' >> $ltf
221 if [ $sbcl_arch = "x86" ]; then
222 printf ' :sb-lutex :restore-fs-segment-register-from-tls' >> $ltf
223 fi
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
224 link_or_copy $sbcl_arch-darwin-os.h target-arch-os.h
225 link_or_copy bsd-os.h target-os.h
226 link_or_copy Config.$sbcl_arch-darwin Config
227 ;;
228 sunos)
229 printf ' :elf' >> $ltf
0d669e6 Christophe Rhodes 0.7.1.1:
csrhodes authored
230 printf ' :sunos' >> $ltf
402958f Juho Snellman 0.9.13.22:
jsnell authored
231 if [ $sbcl_arch = "x86" ]; then
232 printf ' :sb-lutex' >> $ltf
233 fi
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
234 link_or_copy Config.$sbcl_arch-sunos Config
235 link_or_copy $sbcl_arch-sunos-os.h target-arch-os.h
236 link_or_copy sunos-os.h target-os.h
237 ;;
238 win32)
239 printf ' :win32' >> $ltf
240 link_or_copy Config.$sbcl_arch-win32 Config
241 link_or_copy $sbcl_arch-win32-os.h target-arch-os.h
242 link_or_copy win32-os.h target-os.h
243 ;;
f2aa2d0 0.6.12.7:
William Harold Newman authored
244 *)
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
245 echo unsupported OS type: `uname`
246 exit 1
247 ;;
f2aa2d0 0.6.12.7:
William Harold Newman authored
248 esac
eaf8fba tidied up OpenBSD-vs.-FreeBSD stuff, and src/runtime/Config.x86-*
William Harold Newman authored
249 cd $original_dir
a530bbe Initial revision
William Harold Newman authored
250
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
251 # FIXME: Things like :c-stack-grows-..., etc, should be
252 # *derived-target-features* or equivalent, so that there was a nicer
253 # way to specify them then sprinkling them in this file. They should
254 # still be tweakable by advanced users, though, but probably not
255 # appear in *features* of target. #!+/- should be adjusted to take
256 # them in account as well. At minimum the nicer specification stuff,
257 # though:
258 #
259 # (define-feature :dlopen (features)
260 # (union '(:bsd :linux :darwin :sunos) features))
261 #
262 # (define-feature :c-stack-grows-downwards-not-upwards (features)
263 # (member :x86 features))
264
c5759c0 Christophe Rhodes 0.8.1.15:
csrhodes authored
265 # KLUDGE: currently the x86 only works with the generational garbage
266 # collector (indicated by the presence of :GENCGC in *FEATURES*) and
267 # alpha, sparc and ppc with the stop'n'copy collector (indicated by
268 # the absence of :GENCGC in *FEATURES*). This isn't a great
269 # separation, but for now, rather than have :GENCGC in
270 # base-target-features.lisp-expr, we add it into local-target-features
271 # if we're building for x86. -- CSR, 2002-02-21 Then we do something
272 # similar with :STACK-GROWS-FOOWARD, too. -- WHN 2002-03-03
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
273 if [ "$sbcl_arch" = "x86" ]; then
c5759c0 Christophe Rhodes 0.8.1.15:
csrhodes authored
274 printf ' :gencgc :stack-grows-downward-not-upward :c-stack-is-control-stack' >> $ltf
93be008 Juho Snellman 0.9.8.14:
jsnell authored
275 printf ' :stack-allocatable-closures :alien-callbacks' >> $ltf
76237af Rudi Schlatte 0.9.10.29
rudi authored
276 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
277 printf ' :linkage-table' >> $ltf
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
278 fi
48ec282 Christophe Rhodes 0.9.8.34:
csrhodes authored
279 if [ "$sbcl_os" = "win32" ]; then
280 # of course it doesn't provide dlopen, but there is
281 # roughly-equivalent magic nevertheless.
282 printf ' :os-provides-dlopen' >> $ltf
283 fi
78fa16b Christophe Rhodes 0.8.18.14:
csrhodes authored
284 elif [ "$sbcl_arch" = "x86-64" ]; then
285 printf ' :gencgc :stack-grows-downward-not-upward :c-stack-is-control-stack :linkage-table' >> $ltf
93be008 Juho Snellman 0.9.8.14:
jsnell authored
286 printf ' :stack-allocatable-closures :alien-callbacks' >> $ltf
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
287 elif [ "$sbcl_arch" = "mips" ]; then
3da4a7f 0.9.5.11:
Thiemo Seufer authored
288 printf ' :linkage-table' >> $ltf
289 printf ' :stack-allocatable-closures' >> $ltf
c5759c0 Christophe Rhodes 0.8.1.15:
csrhodes authored
290 # Use a little C program to try to guess the endianness. Ware
291 # cross-compilers!
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
292 #
293 # FIXME: integrate to grovel-features, mayhaps
44c608e Juho Snellman 0.9.11.21:
jsnell authored
294 $GNUMAKE -C tools-for-build determine-endianness -I ../src/runtime
c5759c0 Christophe Rhodes 0.8.1.15:
csrhodes authored
295 tools-for-build/determine-endianness >> $ltf
c65f4c0 Christophe Rhodes 0.8.4.5:
csrhodes authored
296 elif [ "$sbcl_arch" = "ppc" -a "$sbcl_os" = "linux" ]; then
297 # Use a C program to detect which kind of glibc we're building on,
298 # to bandage across the break in source compatibility between
299 # versions 2.3.1 and 2.3.2
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
300 #
301 # FIXME: integrate to grovel-features., maypahps
3a0f361 Christophe Rhodes 0.9.9.36:
csrhodes authored
302 printf ' :gencgc :stack-allocatable-closures :linkage-table' >> $ltf
44c608e Juho Snellman 0.9.11.21:
jsnell authored
303 $GNUMAKE -C tools-for-build where-is-mcontext -I ../src/runtime
304 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
305 elif [ "$sbcl_arch" = "ppc" -a "$sbcl_os" = "darwin" ]; then
3a0f361 Christophe Rhodes 0.9.9.36:
csrhodes authored
306 printf ' :gencgc :stack-allocatable-closures' >> $ltf
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
307 # We provide a dlopen shim, so a little lie won't hurt
93be008 Juho Snellman 0.9.8.14:
jsnell authored
308 printf " :os-provides-dlopen :linkage-table :alien-callbacks" >> $ltf
e3f68bd Christophe Rhodes 0.8.4.36:
csrhodes authored
309 # The default stack ulimit under darwin is too small to run PURIFY.
310 # Best we can do is complain and exit at this stage
d543ff4 Christophe Rhodes 0.8.4.38:
csrhodes authored
311 if [ "`ulimit -s`" = "512" ]; then
e3f68bd Christophe Rhodes 0.8.4.36:
csrhodes authored
312 echo "Your stack size limit is too small to build SBCL."
313 echo "See the limit(1) or ulimit(1) commands and the README file."
314 exit 1
315 fi
fab1ba8 Christophe Rhodes 0.8.8.2:
csrhodes authored
316 elif [ "$sbcl_arch" = "sparc" ]; then
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
317 # Test the compiler in order to see if we are building on Sun
fab1ba8 Christophe Rhodes 0.8.8.2:
csrhodes authored
318 # toolchain as opposed to GNU binutils, and write the appropriate
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
319 # FUNCDEF macro for assembler. No harm in running this on sparc-linux
fab1ba8 Christophe Rhodes 0.8.8.2:
csrhodes authored
320 # as well.
321 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
322 if [ "$sbcl_os" = "sunos" ] || [ "$sbcl_os" = "linux" ]; then
04d819b Christophe Rhodes 0.9.8.27:
csrhodes authored
323 printf ' :linkage-table' >> $ltf
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
324 fi
2253eba Christophe Rhodes 0.9.1.63:
csrhodes authored
325 printf ' :stack-allocatable-closures' >> $ltf
7c7e627 0.9.1.52:
Alexey Dejneka authored
326 elif [ "$sbcl_arch" = "alpha" ]; then
327 printf ' :stack-allocatable-closures' >> $ltf
c5759c0 Christophe Rhodes 0.8.1.15:
csrhodes authored
328 else
329 # Nothing need be done in this case, but sh syntax wants a placeholder.
330 echo > /dev/null
331 fi
fab1ba8 Christophe Rhodes 0.8.8.2:
csrhodes authored
332
75b5237 Nikodemus Siivola 0.8.14.5: Join the foreign legion!
nikodemus authored
333 export sbcl_os sbcl_arch
4bc6b91 Nikodemus Siivola 0.8.13.78: Birds of Feather
nikodemus authored
334 sh tools-for-build/grovel-features.sh >> $ltf
335
a530bbe Initial revision
William Harold Newman authored
336 echo //finishing $ltf
337 echo ')' >> $ltf
338
339 # FIXME: The version system should probably be redone along these lines:
340 #
341 # echo //setting up version information.
342 # versionfile=version.txt
343 # cp base-version.txt $versionfile
344 # echo " (built `date -u` by `whoami`@`hostname`)" >> $versionfile
345 # echo 'This is a machine-generated file and should not be edited by hand.' >> $versionfile
9139275 Christophe Rhodes 0.7.9.7:
csrhodes authored
346
347 # Make a unique ID for this build (to discourage people from
348 # mismatching sbcl and *.core files).
eba7d5d Christophe Rhodes 0.8.13.27:
csrhodes authored
349 if [ `uname` = "SunOS" ] ; then
350 # use /usr/xpg4/bin/id instead of /usr/bin/id
351 PATH=/usr/xpg4/bin:$PATH
352 fi
353 echo '"'`hostname`-`id -un`-`date +%Y-%m-%d-%H-%M-%S`'"' > output/build-id.tmp
Something went wrong with that request. Please try again.