From d78985704c94107fb798d3401078eacf069e95f5 Mon Sep 17 00:00:00 2001 From: Keshav Kini Date: Sat, 30 May 2020 02:01:56 -0700 Subject: [PATCH] sbcl: add option to disable immobile space Programs which generate and compile a lot of code at runtime (such as programming language interpreters like ACL2) are not suited for running on SBCL executables built with the "immobile space" feature, as explained by Douglas Katzman in this mail thread: https://sourceforge.net/p/sbcl/mailman/message/36007057/ In this commit, I add an optional flag to the SBCL package allowing you to disable the "immobile space" features. I also migrated away from specifying enabled/disabled features in a `customize-target-features.lisp` file and towards supplying them as command line arguments to `make.sh`, as has been recommended by the installation instructions since 2012 or so. --- pkgs/development/compilers/sbcl/2.0.0.nix | 26 +++++++++++---------- pkgs/development/compilers/sbcl/default.nix | 26 +++++++++++---------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/pkgs/development/compilers/sbcl/2.0.0.nix b/pkgs/development/compilers/sbcl/2.0.0.nix index bb0056bb9ece..6df98a9a60ea 100644 --- a/pkgs/development/compilers/sbcl/2.0.0.nix +++ b/pkgs/development/compilers/sbcl/2.0.0.nix @@ -1,6 +1,7 @@ { stdenv, fetchurl, writeText, sbclBootstrap , sbclBootstrapHost ? "${sbclBootstrap}/bin/sbcl --disable-debugger --no-userinit --no-sysinit" , threadSupport ? (stdenv.isi686 || stdenv.isx86_64 || "aarch64-linux" == stdenv.hostPlatform.system) +, disableImmobileSpace ? false # Meant for sbcl used for creating binaries portable to non-NixOS via save-lisp-and-die. # Note that the created binaries still need `patchelf --set-interpreter ...` # to get rid of ${glibc} dependency. @@ -21,17 +22,6 @@ stdenv.mkDerivation rec { patchPhase = '' echo '"${version}.nixos"' > version.lisp-expr - echo " - (lambda (features) - (flet ((enable (x) - (pushnew x features)) - (disable (x) - (setf features (remove x features)))) - '' - + (if threadSupport then "(enable :sb-thread)" else "(disable :sb-thread)") - + stdenv.lib.optionalString stdenv.isAarch32 "(enable :arm)" - + '' - )) " > customize-target-features.lisp pwd @@ -80,8 +70,20 @@ stdenv.mkDerivation rec { export HOME=$PWD/test-home ''; + enableFeatures = with stdenv.lib; + optional threadSupport "sb-thread" ++ + optional stdenv.isAarch32 "arm"; + + disableFeatures = with stdenv.lib; + optional (!threadSupport) "sb-thread" ++ + optionals disableImmobileSpace [ "immobile-space" "immobile-code" "compact-instance-header" ]; + buildPhase = '' - sh make.sh --prefix=$out --xc-host="${sbclBootstrapHost}" + sh make.sh --prefix=$out --xc-host="${sbclBootstrapHost}" ${ + stdenv.lib.concatStringsSep " " + (builtins.map (x: "--with-${x}") enableFeatures ++ + builtins.map (x: "--without-${x}") disableFeatures) + } (cd doc/manual ; make info) ''; diff --git a/pkgs/development/compilers/sbcl/default.nix b/pkgs/development/compilers/sbcl/default.nix index 4517db4c3840..d4a00f57b6a4 100644 --- a/pkgs/development/compilers/sbcl/default.nix +++ b/pkgs/development/compilers/sbcl/default.nix @@ -1,6 +1,7 @@ { stdenv, fetchurl, writeText, sbclBootstrap , sbclBootstrapHost ? "${sbclBootstrap}/bin/sbcl --disable-debugger --no-userinit --no-sysinit" , threadSupport ? (stdenv.isi686 || stdenv.isx86_64 || "aarch64-linux" == stdenv.hostPlatform.system) +, disableImmobileSpace ? false # Meant for sbcl used for creating binaries portable to non-NixOS via save-lisp-and-die. # Note that the created binaries still need `patchelf --set-interpreter ...` # to get rid of ${glibc} dependency. @@ -21,17 +22,6 @@ stdenv.mkDerivation rec { patchPhase = '' echo '"${version}.nixos"' > version.lisp-expr - echo " - (lambda (features) - (flet ((enable (x) - (pushnew x features)) - (disable (x) - (setf features (remove x features)))) - '' - + (if threadSupport then "(enable :sb-thread)" else "(disable :sb-thread)") - + stdenv.lib.optionalString stdenv.isAarch32 "(enable :arm)" - + '' - )) " > customize-target-features.lisp pwd @@ -80,8 +70,20 @@ stdenv.mkDerivation rec { export HOME=$PWD/test-home ''; + enableFeatures = with stdenv.lib; + optional threadSupport "sb-thread" ++ + optional stdenv.isAarch32 "arm"; + + disableFeatures = with stdenv.lib; + optional (!threadSupport) "sb-thread" ++ + optionals disableImmobileSpace [ "immobile-space" "immobile-code" "compact-instance-header" ]; + buildPhase = '' - sh make.sh --prefix=$out --xc-host="${sbclBootstrapHost}" + sh make.sh --prefix=$out --xc-host="${sbclBootstrapHost}" ${ + stdenv.lib.concatStringsSep " " + (builtins.map (x: "--with-${x}") enableFeatures ++ + builtins.map (x: "--without-${x}") disableFeatures) + } (cd doc/manual ; make info) '';