summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNorbert Melzer <timmelzer@gmail.com>2022-09-14 23:07:48 +0200
committerYt <happysalada@proton.me>2022-09-16 09:06:05 -0400
commit9afb94475819cf490d8d024a29f6f374560041e5 (patch)
tree44fe502b0a8cf34000a54e2d198133159a867088
parent684a9bc32a249f7a7f278e889a37e4fcd8ea965b (diff)
mixRelease: add flag for stripping debug from BEAM files
-rw-r--r--pkgs/development/beam-modules/mix-release.nix7
1 files changed, 7 insertions, 0 deletions
diff --git a/pkgs/development/beam-modules/mix-release.nix b/pkgs/development/beam-modules/mix-release.nix
index 0b7229a21b5a..1a926148d599 100644
--- a/pkgs/development/beam-modules/mix-release.nix
+++ b/pkgs/development/beam-modules/mix-release.nix
@@ -18,6 +18,7 @@
, mixNixDeps ? { }
, elixir ? inputs.elixir
, hex ? inputs.hex.override { inherit elixir; }
+, stripDebug ? true
, ...
}@attrs:
let
@@ -25,6 +26,8 @@ let
overridable = builtins.removeAttrs attrs [ "compileFlags" "mixNixDeps" ];
in
assert mixNixDeps != { } -> mixFodDeps == null;
+assert stripDebug -> !enableDebugInfo;
+
stdenv.mkDerivation (overridable // {
# rg is used as a better grep to search for erlang references in the final release
nativeBuildInputs = nativeBuildInputs ++ [ erlang hex elixir makeWrapper git ripgrep ];
@@ -116,6 +119,10 @@ stdenv.mkDerivation (overridable // {
substituteInPlace "$file" --replace "${erlang}/lib/erlang" "$out"
done
fi
+ '' + lib.optionalString stripDebug ''
+ # strip debug symbols to avoid hardreferences to "foreign" closures actually
+ # not needed at runtime, while at the same time reduce size of BEAM files.
+ erl -noinput -eval 'lists:foreach(fun(F) -> io:format("Stripping ~p.~n", [F]), beam_lib:strip(F) end, filelib:wildcard("'"$out"'/**/*.beam"))' -s init stop
'';
# TODO investigate why the resulting closure still has