X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcold%2Fshared.lisp;h=479b426c90ce4870f377745555c101ee76c670fb;hb=51bc001b7a98af096af782a672389e51004af068;hp=b92bc79690a96eb88ebc0c181b174a47a7820483;hpb=89a02d3ba803a1d85d745e22b4ac05ef8cb12370;p=sbcl.git diff --git a/src/cold/shared.lisp b/src/cold/shared.lisp index b92bc79..479b426 100644 --- a/src/cold/shared.lisp +++ b/src/cold/shared.lisp @@ -139,6 +139,49 @@ (format t "target backend-subfeatures *SHEBANG-BACKEND-FEATURES*=~@<~S~:>~%" *shebang-backend-subfeatures*)) + +;;; Some feature combinations simply don't work, and sometimes don't +;;; fail until quite a ways into the build. Pick off the more obvious +;;; combinations now, and provide a description of what the actual +;;; failure is (not always obvious from when the build fails). +(let ((feature-compatability-tests + '(("(and sb-thread (not gencgc))" + ":SB-THREAD requires :GENCGC") + ("(and sb-thread (not (or ppc x86 x86-64)))" + ":SB-THREAD not supported on selected architecture") + ("(and gencgc cheneygc)" + ":GENCGC and :CHENEYGC are incompatible") + ("(and cheneygc (not (or alpha hppa mips ppc sparc)))" + ":CHENEYGC not supported on selected architecture") + ("(and gencgc (not (or sparc ppc x86 x86-64)))" + ":GENCGC not supported on selected architecture") + ("(not (or gencgc cheneygc))" + "One of :GENCGC or :CHENEYGC must be enabled") + ("(and win32 (not (and sb-thread + sb-safepoint sb-thruption sb-wtimer + sb-dynamic-core)))" + ":SB-WIN32 requires :SB-THREAD and related features") + ("(and sb-dynamic-core (not (and linkage-table sb-thread)))" + ;; Subtle memory corruption follows when sb-dynamic-core is + ;; active, and non-threaded allocation routines have not been + ;; updated to take the additional indirection into account. + ;; Let's avoid this unusual combination. + ":SB-DYNAMIC-CORE requires :LINKAGE-TABLE and :SB-THREAD") + ("(or (and alpha (or hppa mips ppc sparc x86 x86-64)) + (and hppa (or mips ppc sparc x86 x86-64)) + (and mips (or ppc sparc x86 x86-64)) + (and ppc (or sparc x86 x86-64)) + (and sparc (or x86 x86-64)) + (and x86 x86-64))" + "More than one architecture selected"))) + (failed-test-descriptions nil)) + (dolist (test feature-compatability-tests) + (let ((*features* *shebang-features*)) + (when (read-from-string (concatenate 'string "#+" (first test) "T NIL")) + (push (second test) failed-test-descriptions)))) + (when failed-test-descriptions + (error "Feature compatibility check failed, ~S" + failed-test-descriptions))) ;;;; cold-init-related PACKAGE and SYMBOL tools @@ -345,8 +388,8 @@ (multiple-value-bind (output-truename warnings-p failure-p) (if trace-file (funcall compile-file src :output-file tmp-obj - :trace-file t) - (funcall compile-file src :output-file tmp-obj )) + :trace-file t :allow-other-keys t) + (funcall compile-file src :output-file tmp-obj)) (declare (ignore warnings-p)) (cond ((not output-truename) (error "couldn't compile ~S" src))