add SB-EXT:*SUPPRESS-PRINT-ERRORS* modelled after *BREAK-ON-SIGNALS*
[sbcl.git] / make-config.sh
index 98564dd..62f08b4 100644 (file)
@@ -42,6 +42,10 @@ bad_option() {
     exit 1
 }
 
     exit 1
 }
 
+WITH_FEATURES=""
+WITHOUT_FEATURES=""
+
+fancy=false
 some_options=false
 for option
 do
 some_options=false
 for option
 do
@@ -49,11 +53,16 @@ do
   # Split --foo=bar into --foo and bar.
   case $option in
       *=*)
   # Split --foo=bar into --foo and bar.
   case $option in
       *=*)
-        # For ease of scripting treat skip valued options with empty
+        # For ease of scripting skip valued options with empty
         # values.
         optarg=`expr "X$option" : '[^=]*=\(.*\)'` || optarg_ok=false
         option=`expr "X$option" : 'X\([^=]*=\).*'`
         ;;
         # values.
         optarg=`expr "X$option" : '[^=]*=\(.*\)'` || optarg_ok=false
         option=`expr "X$option" : 'X\([^=]*=\).*'`
         ;;
+      --with*)
+        optarg=`expr "X$option" : 'X--[^-]*-\(.*\)'` \
+            || bad_option "Malformed feature toggle: $option"
+        option=`expr "X$option" : 'X\(--[^-]*\).*'`
+        ;;
       *)
         optarg=""
         ;;
       *)
         optarg=""
         ;;
@@ -65,12 +74,26 @@ do
       --prefix=)
         $optarg_ok && SBCL_PREFIX=$optarg
         ;;
       --prefix=)
         $optarg_ok && SBCL_PREFIX=$optarg
         ;;
+      --arch=)
+        $oparg_ok && SBCL_ARCH=$optarg
+        ;;
       --xc-host=)
         $optarg_ok && SBCL_XC_HOST=$optarg
         ;;
       --dynamic-space-size=)
         $optarg_ok && SBCL_DYNAMIC_SPACE_SIZE=$optarg
        ;;
       --xc-host=)
         $optarg_ok && SBCL_XC_HOST=$optarg
         ;;
       --dynamic-space-size=)
         $optarg_ok && SBCL_DYNAMIC_SPACE_SIZE=$optarg
        ;;
+      --with)
+        WITH_FEATURES="$WITH_FEATURES :$optarg"
+        ;;
+      --without)
+        WITHOUT_FEATURES="$WITHOUT_FEATURES :$optarg"
+       ;;
+      --fancy)
+        WITH_FEATURES="$WITH_FEATURES :sb-core-compression :sb-xref-for-internals :sb-after-xc-core"
+        # Lower down we add :sb-thread for platforms where it can be built.
+        fancy=true
+        ;;
       -*)
         bad_option "Unknown command-line option to $0: \"$option\""
         ;;
       -*)
         bad_option "Unknown command-line option to $0: \"$option\""
         ;;
@@ -86,6 +109,17 @@ do
   some_options=true
 done
 
   some_options=true
 done
 
+if (test -f customize-target-features.lisp && \
+    (test -n "$WITH_FEATURES" || test -n "$WITHOUT_FEATURES"))
+then
+    # Actually there's no reason why it would not work, but it would
+    # be confusing to say --with-thread only to have it turned off by
+    # customize-target-features.lisp...
+    echo "ERROR: Both customize-target-features.lisp, and feature-options"
+    echo "to make.sh present -- cannot use both at the same time."
+    exit 1
+fi
+
 # Previously XC host was provided as a positional argument. 
 if test -n "$legacy_xc_spec"
 then
 # Previously XC host was provided as a positional argument. 
 if test -n "$legacy_xc_spec"
 then
@@ -128,6 +162,13 @@ Options:
       taken to be megabytes unless explicitly suffixed with Gb in
       order to specify the size in gigabytes.
 
       taken to be megabytes unless explicitly suffixed with Gb in
       order to specify the size in gigabytes.
 
+  --with-<feature>     Build with specified feature.
+  --without-<feature>  Build wihout the specfied feature.
+
+  --arch=<string>      Specify the architecture to build for.
+
+      Mainly for doing x86 builds on x86-64.
+
   --xc-host=<string>   Specify the Common Lisp compilation host.
 
       The string provided should be a command to invoke the
   --xc-host=<string>   Specify the Common Lisp compilation host.
 
       The string provided should be a command to invoke the
@@ -191,10 +232,10 @@ generate_version
 # dependencies, write them out to a file to be sourced by other
 # scripts.
 
 # dependencies, write them out to a file to be sourced by other
 # scripts.
 
-echo "export DEVNULL=\"$DEVNULL\"" > output/build-config
-echo "export GNUMAKE=\"$GNUMAKE\"" >> output/build-config
-echo "export SBCL_XC_HOST=\"$SBCL_XC_HOST\"" >> output/build-config
-echo "export legacy_xc_spec=\"$legacy_xc_spec\"" >> output/build-config
+echo "DEVNULL=\"$DEVNULL\"; export DEVNULL" > output/build-config
+echo "GNUMAKE=\"$GNUMAKE\"; export GNUMAKE" >> output/build-config
+echo "SBCL_XC_HOST=\"$SBCL_XC_HOST\"; export SBCL_XC_HOST" >> output/build-config
+echo "legacy_xc_spec=\"$legacy_xc_spec\"; export legacy_xc_spec" >> output/build-config
 
 # And now, sorting out the per-target dependencies...
 
 
 # And now, sorting out the per-target dependencies...
 
@@ -274,13 +315,6 @@ echo //entering make-config.sh
 echo //ensuring the existence of output/ directory
 if [ ! -d output ] ; then mkdir output; fi
 
 echo //ensuring the existence of output/ directory
 if [ ! -d output ] ; then mkdir output; fi
 
-ltf=`pwd`/local-target-features.lisp-expr
-echo //initializing $ltf
-echo ';;;; This is a machine-generated file.' > $ltf
-echo ';;;; Please do not edit it by hand.' >> $ltf
-echo ';;;; See make-config.sh.' >> $ltf
-printf '(' >> $ltf
-
 echo //guessing default target CPU architecture from host architecture
 case `uname -m` in
     *86) guessed_sbcl_arch=x86 ;;
 echo //guessing default target CPU architecture from host architecture
 case `uname -m` in
     *86) guessed_sbcl_arch=x86 ;;
@@ -315,16 +349,42 @@ if [ "$sbcl_os" = "darwin" ] && [ "`/usr/sbin/sysctl -n hw.optional.x86_64`" = "
 fi
 
 echo //setting up CPU-architecture-dependent information
 fi
 
 echo //setting up CPU-architecture-dependent information
+if test -n "$SBCL_ARCH"
+then
+    # Normalize it.
+    SBCL_ARCH=`echo $SBCL_ARCH | tr '[A-Z]' '[a-z]' | tr _ -`
+fi
 sbcl_arch=${SBCL_ARCH:-$guessed_sbcl_arch}
 echo sbcl_arch=\"$sbcl_arch\"
 if [ "$sbcl_arch" = "" ] ; then
 sbcl_arch=${SBCL_ARCH:-$guessed_sbcl_arch}
 echo sbcl_arch=\"$sbcl_arch\"
 if [ "$sbcl_arch" = "" ] ; then
-    echo "can't guess target SBCL architecture, need SBCL_ARCH environment var"
+    echo "can't guess target SBCL architecture, please specify --arch=<name>"
     exit 1
 fi
     exit 1
 fi
+if $fancy
+then
+    # If --fancy, enable threads on platforms where they can be built.
+    case $sbcl_arch in
+        x86|x86-64|ppc)
+            WITH_FEATURES="$WITH_FEATURES :sb-thread"
+            echo "Enabling threads due to --fancy."
+            ;;
+        *)
+            echo "No threads on this platform."
+            ;;
+    esac
+fi
+
+ltf=`pwd`/local-target-features.lisp-expr
+echo //initializing $ltf
+echo ';;;; This is a machine-generated file.' > $ltf
+echo ';;;; Please do not edit it by hand.' >> $ltf
+echo ';;;; See make-config.sh.' >> $ltf
+echo "((lambda (features) (set-difference features (list$WITHOUT_FEATURES)))" >> $ltf
+printf " (union (list$WITH_FEATURES) (list " >> $ltf
+
 printf ":%s" "$sbcl_arch" >> $ltf
 
 echo //setting up OS-dependent information
 printf ":%s" "$sbcl_arch" >> $ltf
 
 echo //setting up OS-dependent information
-
 # Under Darwin x86-64, guess whether Darwin 9+ or below.
 if [ "$sbcl_os" = "darwin" ] && [ "$sbcl_arch" = "x86-64" ]; then
     darwin_version=`uname -r`
 # Under Darwin x86-64, guess whether Darwin 9+ or below.
 if [ "$sbcl_os" = "darwin" ] && [ "$sbcl_arch" = "x86-64" ]; then
     darwin_version=`uname -r`
@@ -355,7 +415,10 @@ case "$sbcl_os" in
                printf ' :largefile' >> $ltf
                ;;
             x86 | x86-64)
                printf ' :largefile' >> $ltf
                ;;
             x86 | x86-64)
-               printf ' :sb-thread :largefile' >> $ltf
+               printf ' :sb-thread :sb-futex :largefile' >> $ltf
+               ;;
+            ppc)
+               printf ' :sb-futex' >> $ltf
                ;;
         esac
 
                ;;
         esac
 
@@ -420,10 +483,10 @@ case "$sbcl_os" in
         printf ' :bsd' >> $ltf
         printf ' :darwin' >> $ltf
         if [ $sbcl_arch = "x86" ]; then
         printf ' :bsd' >> $ltf
         printf ' :darwin' >> $ltf
         if [ $sbcl_arch = "x86" ]; then
-            printf ' :mach-exception-handler :sb-lutex :restore-fs-segment-register-from-tls :ud2-breakpoints' >> $ltf
+            printf ' :mach-exception-handler :restore-fs-segment-register-from-tls :ud2-breakpoints' >> $ltf
         fi
         if [ $sbcl_arch = "x86-64" ]; then
         fi
         if [ $sbcl_arch = "x86-64" ]; then
-            printf ' :mach-exception-handler :sb-lutex :ud2-breakpoints' >> $ltf
+            printf ' :mach-exception-handler :ud2-breakpoints' >> $ltf
         fi
         link_or_copy $sbcl_arch-darwin-os.h target-arch-os.h
         link_or_copy bsd-os.h target-os.h
         fi
         link_or_copy $sbcl_arch-darwin-os.h target-arch-os.h
         link_or_copy bsd-os.h target-os.h
@@ -436,9 +499,6 @@ case "$sbcl_os" in
         if [ $sbcl_arch = "x86-64" ]; then
             printf ' :largefile' >> $ltf
         fi
         if [ $sbcl_arch = "x86-64" ]; then
             printf ' :largefile' >> $ltf
         fi
-        if [ $sbcl_arch = "x86" ] || [ $sbcl_arch = "x86-64" ]; then
-            printf ' :sb-lutex' >> $ltf
-        fi
         link_or_copy Config.$sbcl_arch-sunos Config
         link_or_copy $sbcl_arch-sunos-os.h target-arch-os.h
         link_or_copy sunos-os.h target-os.h
         link_or_copy Config.$sbcl_arch-sunos Config
         link_or_copy $sbcl_arch-sunos-os.h target-arch-os.h
         link_or_copy sunos-os.h target-os.h
@@ -564,7 +624,7 @@ export sbcl_os sbcl_arch
 sh tools-for-build/grovel-features.sh >> $ltf
 
 echo //finishing $ltf
 sh tools-for-build/grovel-features.sh >> $ltf
 
 echo //finishing $ltf
-echo ')' >> $ltf
+echo ')))' >> $ltf
 
 # FIXME: The version system should probably be redone along these lines:
 #
 
 # FIXME: The version system should probably be redone along these lines:
 #