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
11 # This software is part of the SBCL system. See the README file for
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.
22 # The classic form here was to use --userinit $DEVNULL --sysinit
23 # $DEVNULL, but that doesn't work on Win32 because SBCL doesn't handle
24 # device names properly. We still need $DEVNULL to be NUL on Win32
25 # because it's used elsewhere (such as canonicalize-whitespace), so we
26 # need an alternate solution for the init file overrides. --no-foos
27 # have now been available long enough that this should not stop anyone
29 if [ "$OSTYPE" = "cygwin" -o "$OSTYPE" = "msys" ]
31 SBCL_PREFIX
="$PROGRAMFILES/sbcl"
33 SBCL_PREFIX
="/usr/local"
35 SBCL_XC_HOST
="sbcl --no-userinit --no-sysinit"
38 # Parse command-line options.
41 echo "Enter \"$0 --help\" for list of valid options."
47 FANCY_FEATURES
=":sb-core-compression :sb-xref-for-internals :sb-after-xc-core"
54 # Split --foo=bar into --foo and bar.
57 # For ease of scripting skip valued options with empty
59 optarg
=`expr "X$option" : '[^=]*=\(.*\)'` || optarg_ok
=false
60 option
=`expr "X$option" : 'X\([^=]*=\).*'`
63 optarg
=`expr "X$option" : 'X--[^-]*-\(.*\)'` \
64 || bad_option
"Malformed feature toggle: $option"
65 option
=`expr "X$option" : 'X\(--[^-]*\).*'`
76 $optarg_ok && SBCL_PREFIX
=$optarg
79 $oparg_ok && SBCL_ARCH
=$optarg
82 $optarg_ok && SBCL_XC_HOST
=$optarg
85 $optarg_ok && SBCL_HOST_LOCATION
=$optarg
88 $optarg_ok && SBCL_TARGET_LOCATION
=$optarg
90 --dynamic-space-size=)
91 $optarg_ok && SBCL_DYNAMIC_SPACE_SIZE
=$optarg
94 WITH_FEATURES
="$WITH_FEATURES :$optarg"
97 WITHOUT_FEATURES
="$WITHOUT_FEATURES :$optarg"
100 WITH_FEATURES
="$WITH_FEATURES $FANCY_FEATURES"
101 # Lower down we add :sb-thread for platforms where it can be built.
105 bad_option
"Unknown command-line option to $0: \"$option\""
110 bad_option
"Unknown command-line option to $0: \"$option\""
112 legacy_xc_spec
=$option
119 if (test -f customize-target-features.lisp
&& \
120 (test -n "$WITH_FEATURES" ||
test -n "$WITHOUT_FEATURES"))
122 # Actually there's no reason why it would not work, but it would
123 # be confusing to say --with-thread only to have it turned off by
124 # customize-target-features.lisp...
125 echo "ERROR: Both customize-target-features.lisp, and feature-options"
126 echo "to make.sh present -- cannot use both at the same time."
130 # Previously XC host was provided as a positional argument.
131 if test -n "$legacy_xc_spec"
133 SBCL_XC_HOST
="$legacy_xc_spec"
136 if test "$print_help" = "yes"
139 \`make.sh' drives the SBCL build.
141 Usage: $0 [OPTION]...
143 Important: make.sh does not currently control the entirety of the
144 build: configuration file customize-target-features.lisp and certain
145 environment variables play a role as well. see file INSTALL for
149 -h, --help Display this help and exit.
151 --prefix=<path> Specify the install location.
153 Script install.sh installs SBCL under the specified prefix
154 path: runtime as prefix/bin/sbcl, additional files under
155 prefix/lib/sbcl, and documentation under prefix/share.
157 This option also affects the binaries: built-in default for
158 SBCL_HOME is: prefix/lib/sbcl/
160 Default prefix is: /usr/local
162 --dynamic-space-size=<size> Default dynamic-space size for target.
164 This specifies the default dynamic-space size for the SBCL
165 being built. If you need to control the dynamic-space size
166 of the host SBCL, use the --xc-host option.
168 If not provided, the default is platform-specific. <size> is
169 taken to be megabytes unless explicitly suffixed with Gb in
170 order to specify the size in gigabytes.
172 --with-<feature> Build with specified feature.
173 --without-<feature> Build wihout the specfied feature.
175 --fancy Build with several optional features:
179 Plus threading on platforms which support it.
181 --arch=<string> Specify the architecture to build for.
183 Mainly for doing x86 builds on x86-64.
185 --xc-host=<string> Specify the Common Lisp compilation host.
187 The string provided should be a command to invoke the
188 cross-compilation Lisp system in such a way, that it reads
189 commands from standard input, and terminates when it reaches end
190 of file on standard input.
194 "sbcl --disable-debugger --no-sysinit --no-userinit"
195 Use an existing SBCL binary as a cross-compilation
196 host even though you have stuff in your
197 initialization files which makes it behave in such a
198 non-standard way that it keeps the build from
199 working. Also disable the debugger instead of
200 waiting endlessly for a programmer to help it out
201 with input on *DEBUG-IO*. (This is the default.)
204 Use an existing SBCL binary as a cross-compilation
205 host, including your initialization files and
206 building with the debugger enabled. Not recommended
209 "lisp -noinit -batch"
210 Use an existing CMU CL binary as a cross-compilation
211 host when you have weird things in your .cmucl-init
214 --host-location=<string> Location of the source directory on compilation host
216 The string is passed to the command rsync to transfer the
217 necessary files between the target and host directories during
218 the make-target-*.sh steps of cross-compilation (cf. make.sh)
222 user@host-machine:/home/user/sbcl
223 Transfer the files to/from directory /home/user/sbcl
230 # Running make.sh with different options without clean.sh in the middle
235 # Save prefix for make and install.sh.
236 echo "SBCL_PREFIX='$SBCL_PREFIX'" > output
/prefix.def
237 echo "$SBCL_DYNAMIC_SPACE_SIZE" > output
/dynamic-space-size.txt
239 # FIXME: Tweak this script, and the rest of the system, to support
240 # a second bootstrapping pass in which the cross-compilation host is
241 # known to be SBCL itself, so that the cross-compiler can do some
242 # optimizations (especially specializable arrays) that it doesn't
243 # know how to implement how in a portable way. (Or maybe that wouldn't
244 # require a second pass, just testing at build-the-cross-compiler time
245 # whether the cross-compilation host returns suitable values from
246 # UPGRADED-ARRAY-ELEMENT-TYPE?)
248 if [ "$OSTYPE" = "cygwin" -o "$OSTYPE" = "msys" ] ; then
258 .
/generate-version.sh
260 # Now that we've done our option parsing and found various
261 # dependencies, write them out to a file to be sourced by other
264 echo "DEVNULL=\"$DEVNULL\"; export DEVNULL" > output
/build-config
265 echo "GNUMAKE=\"$GNUMAKE\"; export GNUMAKE" >> output
/build-config
266 echo "SBCL_XC_HOST=\"$SBCL_XC_HOST\"; export SBCL_XC_HOST" >> output
/build-config
267 echo "legacy_xc_spec=\"$legacy_xc_spec\"; export legacy_xc_spec" >> output
/build-config
268 if [ -n "$SBCL_HOST_LOCATION" ]; then
269 echo "SBCL_HOST_LOCATION=\"$SBCL_HOST_LOCATION\"; export SBCL_HOST_LOCATION" >> output
/build-config
271 if [ -n "$SBCL_TARGET_LOCATION" ]; then
272 echo "SBCL_TARGET_LOCATION=\"$SBCL_TARGET_LOCATION\"; export SBCL_TARGET_LOCATION" >> output
/build-config
275 # And now, sorting out the per-target dependencies...
282 # it's changed name twice since it was called OSF/1: clearly
283 # the marketers forgot to tell the engineers about Digital Unix
293 sbcl_os
="gnu-kfreebsd"
302 echo unsupported BSD variant
: `uname`
316 CYGWIN
* | WindowsNT | MINGW
* | MSYS
*)
323 echo unsupported OS
type: `uname`
329 if [ "$sbcl_os" = "win32" ] ; then
330 # Use preprocessor or makefile includes instead of copying if
331 # possible, to avoid unexpected use of the original, unchanged
332 # files when re-running only make-target-1 during development.
333 if echo "$1" |
egrep '[.][ch]$'; then
334 echo "#include \"$1\"" >"$2"
335 elif echo "$1" |
egrep '^Config[.]'; then
336 echo "include $1" >"$2"
345 remove_dir_safely
() {
346 if [ "$sbcl_os" = "win32" ] ; then
347 if [ -d "$1" ] ; then
349 elif [ -e "$1" ] ; then
350 echo "I'm afraid to remove non-directory $1."
354 if [ -h "$1" ] ; then
356 elif [ -w "$1" ] ; then
357 echo "I'm afraid to replace non-symlink $1 with a symlink."
363 echo //entering make-config.sh
365 echo //ensuring the existence of output
/ directory
366 if [ ! -d output
] ; then mkdir output
; fi
368 echo //guessing default target CPU architecture from
host architecture
370 *86) guessed_sbcl_arch
=x86
;;
371 i86pc
) guessed_sbcl_arch
=x86
;;
372 *x86_64
) guessed_sbcl_arch
=x86-64
;;
373 amd64
) guessed_sbcl_arch
=x86-64
;;
374 [Aa
]lpha
) guessed_sbcl_arch
=alpha
;;
375 sparc
*) guessed_sbcl_arch
=sparc
;;
376 sun
*) guessed_sbcl_arch
=sparc
;;
377 *ppc
) guessed_sbcl_arch
=ppc
;;
378 ppc64
) guessed_sbcl_arch
=ppc
;;
379 Power
*Macintosh
) guessed_sbcl_arch
=ppc
;;
380 ibmnws
) guessed_sbcl_arch
=ppc
;;
381 parisc
) guessed_sbcl_arch
=hppa
;;
382 9000/800) guessed_sbcl_arch
=hppa
;;
383 mips
*) guessed_sbcl_arch
=mips
;;
384 *arm
*) guessed_sbcl_arch
=arm
;;
385 aarch64
) guessed_sbcl_arch
=arm64
;;
387 # If we're not building on a supported target architecture, we
388 # we have no guess, but it's not an error yet, since maybe
389 # target architecture will be specified explicitly below.
394 # Under Solaris, uname -m returns "i86pc" even if CPU is amd64.
395 if [ "$sbcl_os" = "sunos" ] && [ `isainfo -k` = "amd64" ]; then
396 guessed_sbcl_arch
=x86-64
399 # Under Darwin, uname -m returns "i386" even if CPU is x86_64.
400 if [ "$sbcl_os" = "darwin" ] && [ "`/usr/sbin/sysctl -n hw.optional.x86_64`" = "1" ]; then
401 guessed_sbcl_arch
=x86-64
404 echo //setting up CPU-architecture-dependent information
405 if test -n "$SBCL_ARCH"
408 SBCL_ARCH
=`echo $SBCL_ARCH | tr '[A-Z]' '[a-z]' | tr _ -`
410 sbcl_arch
=${SBCL_ARCH:-$guessed_sbcl_arch}
411 echo sbcl_arch
=\"$sbcl_arch\"
412 if [ "$sbcl_arch" = "" ] ; then
413 echo "can't guess target SBCL architecture, please specify --arch=<name>"
418 # If --fancy, enable threads on platforms where they can be built.
420 x86|x86-64|ppc|arm64
)
421 if ([ "$sbcl_os" = "sunos" ] && [ "$sbcl_arch" = "x86-64" ]) || \
422 [ "$sbcl_os" = "dragonfly" ]
424 echo "No threads on this platform."
426 WITH_FEATURES
="$WITH_FEATURES :sb-thread"
427 echo "Enabling threads due to --fancy."
431 echo "No threads on this platform."
439 WITH_FEATURES
="$WITH_FEATURES :sb-thread"
444 ltf
=`pwd`/local-target-features.lisp-expr
445 echo //initializing
$ltf
446 echo ';;;; This is a machine-generated file.' > $ltf
447 echo ';;;; Please do not edit it by hand.' >> $ltf
448 echo ';;;; See make-config.sh.' >> $ltf
449 echo "(lambda (features) (set-difference (union features (list$WITH_FEATURES " >> $ltf
451 printf ":%s" "$sbcl_arch" >> $ltf
453 echo //setting up OS-dependent information
454 # Under Darwin x86-64, guess whether Darwin 9+ or below.
455 if [ "$sbcl_os" = "darwin" ] && [ "$sbcl_arch" = "x86-64" ]; then
456 darwin_version
=`uname -r`
457 darwin_version_major
=${DARWIN_VERSION_MAJOR:-${darwin_version%%.*}}
458 if (( 8 < $darwin_version_major )); then
459 printf ' :inode64 :darwin9-or-better' >> $ltf
465 rm -f Config target-arch-os.h target-arch.h target-os.h target-lispregs.h
466 rm -f sbcl.mk sbcl.o libsbcl.a
467 # KLUDGE: these two logically belong in the previous section
468 # ("architecture-dependent"); it seems silly to enforce this in terms
469 # of the shell script, though. -- CSR, 2002-02-03
470 link_or_copy
$sbcl_arch-arch.h target-arch.h
471 link_or_copy
$sbcl_arch-lispregs.h target-lispregs.h
474 printf ' :unix' >> $ltf
475 printf ' :elf' >> $ltf
476 printf ' :linux' >> $ltf
478 # If you add other platforms here, don't forget to edit
479 # src/runtime/Config.foo-linux too.
482 printf ' :largefile' >> $ltf
485 printf ' :sb-futex :largefile' >> $ltf
488 printf ' :sb-futex' >> $ltf
493 link_or_copy Config.
$sbcl_arch-linux Config
494 link_or_copy
$sbcl_arch-linux-os.h target-arch-os.h
495 link_or_copy linux-os.h target-os.h
498 printf ' :unix' >> $ltf
499 printf ' :elf' >> $ltf
500 printf ' :osf1' >> $ltf
501 link_or_copy Config.
$sbcl_arch-osf1 Config
502 link_or_copy
$sbcl_arch-osf1-os.h target-arch-os.h
503 link_or_copy osf1-os.h target-os.h
506 printf ' :unix' >> $ltf
507 printf ' :elf' >> $ltf
508 printf ' :hpux' >> $ltf
509 link_or_copy Config.
$sbcl_arch-hpux Config
510 link_or_copy
$sbcl_arch-hpux-os.h target-arch-os.h
511 link_or_copy hpux-os.h target-os.h
514 printf ' :unix' >> $ltf
515 printf ' :bsd' >> $ltf
516 link_or_copy
$sbcl_arch-bsd-os.h target-arch-os.h
517 link_or_copy bsd-os.h target-os.h
520 printf ' :elf' >> $ltf
521 printf ' :freebsd' >> $ltf
522 printf ' :gcc-tls' >> $ltf
523 if [ $sbcl_os = "gnu-kfreebsd" ]; then
524 printf ' :gnu-kfreebsd' >> $ltf
527 if [ $sbcl_arch = "x86" ]; then
528 printf ' :restore-fs-segment-register-from-tls' >> $ltf
530 link_or_copy Config.
$sbcl_arch-$sbcl_os Config
533 printf ' :elf' >> $ltf
534 printf ' :openbsd' >> $ltf
535 link_or_copy Config.
$sbcl_arch-openbsd Config
538 printf ' :netbsd' >> $ltf
539 printf ' :elf' >> $ltf
540 link_or_copy Config.
$sbcl_arch-netbsd Config
543 echo unsupported BSD variant
: `uname`
549 printf ' :unix' >> $ltf
550 printf ' :bsd' >> $ltf
551 printf ' :elf' >> $ltf
552 printf ' :dragonfly' >> $ltf
553 printf ' :sb-qshow' >> $ltf
554 if [ $sbcl_arch = "x86" ]; then
555 printf ' :restore-fs-segment-register-from-tls' >> $ltf
557 link_or_copy
$sbcl_arch-bsd-os.h target-arch-os.h
558 link_or_copy bsd-os.h target-os.h
559 link_or_copy Config.
$sbcl_arch-dragonfly Config
562 printf ' :unix' >> $ltf
563 printf ' :mach-o' >> $ltf
564 printf ' :bsd' >> $ltf
565 printf ' :darwin' >> $ltf
566 if [ $sbcl_arch = "x86" ]; then
567 printf ' :mach-exception-handler :restore-fs-segment-register-from-tls :ud2-breakpoints' >> $ltf
569 if [ $sbcl_arch = "x86-64" ]; then
570 printf ' :mach-exception-handler :ud2-breakpoints' >> $ltf
572 link_or_copy
$sbcl_arch-darwin-os.h target-arch-os.h
573 link_or_copy bsd-os.h target-os.h
574 link_or_copy Config.
$sbcl_arch-darwin Config
577 printf ' :unix' >> $ltf
578 printf ' :elf' >> $ltf
579 printf ' :sunos' >> $ltf
580 if [ $sbcl_arch = "x86-64" ]; then
581 printf ' :largefile' >> $ltf
583 link_or_copy Config.
$sbcl_arch-sunos Config
584 link_or_copy
$sbcl_arch-sunos-os.h target-arch-os.h
585 link_or_copy sunos-os.h target-os.h
588 printf ' :win32' >> $ltf
590 # Optional features -- We enable them by default, but the build
591 # ought to work perfectly without them:
593 printf ' :sb-futex' >> $ltf
594 printf ' :sb-qshow' >> $ltf
596 # Required features -- Some of these used to be optional, but
597 # building without them is no longer considered supported:
599 # (Of course it doesn't provide dlopen, but there is
600 # roughly-equivalent magic nevertheless:)
601 printf ' :sb-dynamic-core :os-provides-dlopen' >> $ltf
602 printf ' :sb-thread :sb-safepoint :sb-thruption :sb-wtimer' >> $ltf
603 printf ' :sb-safepoint-strictly' >> $ltf
605 link_or_copy Config.
$sbcl_arch-win32 Config
606 link_or_copy
$sbcl_arch-win32-os.h target-arch-os.h
607 link_or_copy win32-os.h target-os.h
610 echo unsupported OS
type: `uname`
616 # FIXME: Things like :c-stack-grows-..., etc, should be
617 # *derived-target-features* or equivalent, so that there was a nicer
618 # way to specify them then sprinkling them in this file. They should
619 # still be tweakable by advanced users, though, but probably not
620 # appear in *features* of target. #!+/- should be adjusted to take
621 # them in account as well. At minimum the nicer specification stuff,
624 # (define-feature :dlopen (features)
625 # (union '(:bsd :linux :darwin :sunos) features))
627 # (define-feature :c-stack-grows-downwards-not-upwards (features)
628 # (member :x86 features))
630 # KLUDGE: currently the x86 only works with the generational garbage
631 # collector (indicated by the presence of :GENCGC in *FEATURES*) and
632 # alpha, sparc and ppc with the stop'n'copy collector (indicated by
633 # the absence of :GENCGC in *FEATURES*). This isn't a great
634 # separation, but for now, rather than have :GENCGC in
635 # base-target-features.lisp-expr, we add it into local-target-features
636 # if we're building for x86. -- CSR, 2002-02-21 Then we do something
637 # similar with :STACK-GROWS-FOOWARD, too. -- WHN 2002-03-03
638 if [ "$sbcl_arch" = "x86" ]; then
639 printf ' :gencgc :stack-grows-downward-not-upward :c-stack-is-control-stack' >> $ltf
640 printf ' :compare-and-swap-vops :unwind-to-frame-and-call-vop :raw-instance-init-vops' >> $ltf
641 printf ' :stack-allocatable-closures :stack-allocatable-vectors' >> $ltf
642 printf ' :stack-allocatable-lists :stack-allocatable-fixed-objects' >> $ltf
643 printf ' :alien-callbacks :cycle-counter :inline-constants :precise-arg-count-error' >> $ltf
644 printf ' :memory-barrier-vops :multiply-high-vops :ash-right-vops :symbol-info-vops' >> $ltf
645 printf ' :fp-and-pc-standard-save :raw-signed-word' >> $ltf
647 linux | freebsd | gnu-kfreebsd | netbsd | openbsd | sunos | darwin | win32 | dragonfly
)
648 printf ' :linkage-table' >> $ltf
650 if [ "$sbcl_os" = "win32" ]; then
651 # of course it doesn't provide dlopen, but there is
652 # roughly-equivalent magic nevertheless.
653 printf ' :os-provides-dlopen' >> $ltf
655 if [ "$sbcl_os" = "openbsd" ]; then
656 rm -f src
/runtime
/openbsd-sigcontext.h
657 sh tools-for-build
/openbsd-sigcontext.sh
> src
/runtime
/openbsd-sigcontext.h
659 elif [ "$sbcl_arch" = "x86-64" ]; then
660 printf ' :64-bit :64-bit-registers :gencgc :stack-grows-downward-not-upward :c-stack-is-control-stack :linkage-table' >> $ltf
661 printf ' :compare-and-swap-vops :unwind-to-frame-and-call-vop :raw-instance-init-vops' >> $ltf
662 printf ' :precise-arg-count-error :fp-and-pc-standard-save :unbind-n-vop' >> $ltf
663 printf ' :stack-allocatable-closures :stack-allocatable-vectors' >> $ltf
664 printf ' :stack-allocatable-lists :stack-allocatable-fixed-objects' >> $ltf
665 printf ' :alien-callbacks :cycle-counter :complex-float-vops :raw-signed-word' >> $ltf
666 printf ' :float-eql-vops :integer-eql-vop :inline-constants :memory-barrier-vops' >> $ltf
667 printf ' :multiply-high-vops :sb-simd-pack :ash-right-vops :symbol-info-vops' >> $ltf
668 printf ' :undefined-fun-restarts' >> $ltf
670 linux | darwin |
*bsd
)
671 printf ' :immobile-space :immobile-code :compact-instance-header' >> $ltf
673 elif [ "$sbcl_arch" = "mips" ]; then
674 printf ' :cheneygc :linkage-table' >> $ltf
675 printf ' :stack-allocatable-closures :stack-allocatable-vectors' >> $ltf
676 printf ' :stack-allocatable-lists :stack-allocatable-fixed-objects' >> $ltf
677 printf ' :alien-callbacks' >> $ltf
678 elif [ "$sbcl_arch" = "ppc" ]; then
679 printf ' :gencgc :stack-allocatable-closures :stack-allocatable-vectors' >> $ltf
680 printf ' :stack-allocatable-lists :stack-allocatable-fixed-objects' >> $ltf
681 printf ' :linkage-table :raw-instance-init-vops :memory-barrier-vops' >> $ltf
682 printf ' :compare-and-swap-vops :multiply-high-vops :alien-callbacks' >> $ltf
683 if [ "$sbcl_os" = "linux" ]; then
684 # Use a C program to detect which kind of glibc we're building on,
685 # to bandage across the break in source compatibility between
686 # versions 2.3.1 and 2.3.2
688 # FIXME: integrate to grovel-features, mayhaps
689 $GNUMAKE -C tools-for-build where-is-mcontext
-I ..
/src
/runtime
690 tools-for-build
/where-is-mcontext
> src
/runtime
/ppc-linux-mcontext.h ||
(echo "error running where-is-mcontext"; exit 1)
691 elif [ "$sbcl_os" = "darwin" ]; then
692 # We provide a dlopen shim, so a little lie won't hurt
693 printf ' :os-provides-dlopen' >> $ltf
694 # The default stack ulimit under darwin is too small to run PURIFY.
695 # Best we can do is complain and exit at this stage
696 if [ "`ulimit -s`" = "512" ]; then
697 echo "Your stack size limit is too small to build SBCL."
698 echo "See the limit(1) or ulimit(1) commands and the README file."
702 elif [ "$sbcl_arch" = "sparc" ]; then
703 # Test the compiler in order to see if we are building on Sun
704 # toolchain as opposed to GNU binutils, and write the appropriate
705 # FUNCDEF macro for assembler. No harm in running this on sparc-linux
707 sh tools-for-build
/sparc-funcdef.sh
> src
/runtime
/sparc-funcdef.h
708 if [ "$sbcl_os" = "sunos" ] ||
[ "$sbcl_os" = "linux" ]; then
709 printf ' :gencgc' >> $ltf
712 echo '*** You are running SPARC on non-SunOS, non-Linux. Since'
713 echo '*** GENCGC is untested on this combination, make-config.sh'
714 echo '*** is falling back to CHENEYGC. Please consider adjusting'
715 echo '*** parms.lisp to build with GENCGC instead.'
717 printf ' :cheneygc' >> $ltf
719 if [ "$sbcl_os" = "sunos" ] ||
[ "$sbcl_os" = "linux" ]; then
720 printf ' :linkage-table' >> $ltf
722 printf ' :stack-allocatable-closures :stack-allocatable-lists' >> $ltf
723 elif [ "$sbcl_arch" = "alpha" ]; then
724 printf ' :cheneygc' >> $ltf
725 printf ' :64-bit-registers' >> $ltf
726 printf ' :stack-allocatable-closures :stack-allocatable-lists' >> $ltf
727 printf ' :stack-allocatable-fixed-objects' >> $ltf
728 elif [ "$sbcl_arch" = "hppa" ]; then
729 printf ' :cheneygc' >> $ltf
730 printf ' :stack-allocatable-vectors :stack-allocatable-fixed-objects' >> $ltf
731 printf ' :stack-allocatable-closures :stack-allocatable-lists' >> $ltf
732 elif [ "$sbcl_arch" = "arm" ]; then
733 printf ' :gencgc :linkage-table :alien-callbacks' >> $ltf
734 # As opposed to soft-float or FPA, we support VFP only (and
735 # possibly VFPv2 and higher only), but we'll leave the obvious
736 # hooks in for someone to add the support later.
737 printf ' :arm-vfp :arm-vfpv2' >> $ltf
738 printf ' :ash-right-vops :multiply-high-vops :symbol-info-vops' >> $ltf
739 printf ' :stack-allocatable-lists :stack-allocatable-fixed-objects' >> $ltf
740 printf ' :stack-allocatable-vectors :stack-allocatable-closures' >> $ltf
741 printf ' :precise-arg-count-error :unwind-to-frame-and-call-vop' >> $ltf
742 printf ' :fp-and-pc-standard-save' >> $ltf
743 elif [ "$sbcl_arch" = "arm64" ]; then
744 printf ' :64-bit :64-bit-registers :gencgc :linkage-table :fp-and-pc-standard-save' >> $ltf
745 printf ' :alien-callbacks :precise-arg-count-error :inline-constants' >> $ltf
746 printf ' :ash-right-vops :multiply-high-vops :symbol-info-vops' >> $ltf
747 printf ' :stack-allocatable-lists :stack-allocatable-fixed-objects' >> $ltf
748 printf ' :stack-allocatable-vectors :stack-allocatable-closures' >> $ltf
749 printf ' :unbind-n-vop :unwind-to-frame-and-call-vop :raw-signed-word' >> $ltf
750 printf ' :compare-and-swap-vops :memory-barrier-vops' >> $ltf
752 # Nothing need be done in this case, but sh syntax wants a placeholder.
756 # Use a little C program to try to guess the endianness. Ware
759 # FIXME: integrate to grovel-features, mayhaps
760 $GNUMAKE -C tools-for-build determine-endianness
-I ..
/src
/runtime
761 tools-for-build
/determine-endianness
>> $ltf
763 export sbcl_os sbcl_arch
764 sh tools-for-build
/grovel-features.sh
>> $ltf
766 echo //finishing
$ltf
767 echo ")) (list$WITHOUT_FEATURES)))" >> $ltf
769 # FIXME: The version system should probably be redone along these lines:
771 # echo //setting up version information.
772 # versionfile=version.txt
773 # cp base-version.txt $versionfile
774 # echo " (built `date -u` by `whoami`@`hostname`)" >> $versionfile
775 # echo 'This is a machine-generated file and should not be edited by hand.' >> $versionfile
777 # Make a unique ID for this build (to discourage people from
778 # mismatching sbcl and *.core files).
779 if [ `uname` = "SunOS" ] ; then
780 # use /usr/xpg4/bin/id instead of /usr/bin/id
781 PATH
=/usr
/xpg
4/bin
:$PATH
783 echo '"'`hostname`-`id -un`-`date +%Y-%m-%d-%H-%M-%S`'"' > output
/build-id.tmp
785 if [ -n "$SBCL_HOST_LOCATION" ]; then
786 echo //setting up
host configuration
787 rsync
--delete-after -a output
/ "$SBCL_HOST_LOCATION/output/"
788 rsync
-a local-target-features.lisp-expr version.lisp-expr
"$SBCL_HOST_LOCATION/"