From 89a02d3ba803a1d85d745e22b4ac05ef8cb12370 Mon Sep 17 00:00:00 2001 From: Nikodemus Siivola Date: Thu, 1 Dec 2011 19:33:14 +0200 Subject: [PATCH] add --with- and --without- support to make.sh customize-target-features.lisp still works, but the system refuses to mix it with --with[out] options to avoid confusion. --- NEWS | 2 ++ make-config.sh | 34 +++++++++++++++++++++++++++++++--- src/cold/shared.lisp | 2 +- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 3f0c6ae..b702cea 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,8 @@ ;;;; -*- coding: utf-8; fill-column: 78 -*- changes relative to sbcl-1.0.54: * enhancements to building SBCL: + ** --with- and --without- can be used to specify + which features to build with. ** --arch option can be used to specify the architecture to build for. (Mainly useful for building 32-bit SBCL's on x86-64 hosts, not full-blows cross-compilation.) diff --git a/make-config.sh b/make-config.sh index 472cd3a..7b03394 100644 --- a/make-config.sh +++ b/make-config.sh @@ -42,6 +42,9 @@ bad_option() { exit 1 } +WITH_FEATURES="" +WITHOUT_FEATURES="" + some_options=false for option do @@ -49,11 +52,16 @@ do # 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\([^=]*=\).*'` ;; + --with*) + optarg=`expr "X$option" : 'X--[^-]*-\(.*\)'` \ + || bad_option "Malformed feature toggle: $option" + option=`expr "X$option" : 'X\(--[^-]*\).*'` + ;; *) optarg="" ;; @@ -74,6 +82,12 @@ do --dynamic-space-size=) $optarg_ok && SBCL_DYNAMIC_SPACE_SIZE=$optarg ;; + --with) + WITH_FEATURES="$WITH_FEATURES :$optarg" + ;; + --without) + WITHOUT_FEATURES="$WITHOUT_FEATURES :$optarg" + ;; -*) bad_option "Unknown command-line option to $0: \"$option\"" ;; @@ -89,6 +103,16 @@ do 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." +fi + # Previously XC host was provided as a positional argument. if test -n "$legacy_xc_spec" then @@ -131,6 +155,9 @@ Options: taken to be megabytes unless explicitly suffixed with Gb in order to specify the size in gigabytes. + --with- Build with specified feature. + --without- Build wihout the specfied feature. + --arch= Specify the architecture to build for. Mainly for doing x86 builds on x86-64. @@ -286,7 +313,8 @@ 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 "((lambda (features) (set-difference features (list$WITHOUT_FEATURES)))" >> $ltf +printf " (union (list$WITH_FEATURES) (list " >> $ltf echo //guessing default target CPU architecture from host architecture case `uname -m` in @@ -571,7 +599,7 @@ export sbcl_os sbcl_arch 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: # diff --git a/src/cold/shared.lisp b/src/cold/shared.lisp index 2077803..b92bc79 100644 --- a/src/cold/shared.lisp +++ b/src/cold/shared.lisp @@ -113,7 +113,7 @@ (setf *shebang-features* (let* ((default-features (append (read-from-file "base-target-features.lisp-expr") - (read-from-file "local-target-features.lisp-expr"))) + (eval (read-from-file "local-target-features.lisp-expr")))) (customizer-file-name "customize-target-features.lisp") (customizer (if (probe-file customizer-file-name) (compile nil -- 1.7.10.4