diff --git a/nix/default.nix b/nix/default.nix index b16cebaf..660d7cc3 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -16,7 +16,7 @@ let src = gitignoreSource ./..; in { - inherit pkgs src; + inherit pkgs src sbt; clang = pkgs.clang_10; diff --git a/scala-native.nix b/scala-native.nix index ab4a89e6..f7e9eac2 100644 --- a/scala-native.nix +++ b/scala-native.nix @@ -1,7 +1,11 @@ { project ? import ./nix { } }: -project.pkgs.stdenv.mkDerivation rec { +let + stdenv = project.pkgs.stdenvNoCC; +in + +stdenv.mkDerivation rec { pname = "scala-native"; version = "0.4.1-SNAPSHOT"; @@ -16,18 +20,18 @@ project.pkgs.stdenv.mkDerivation rec { let name = "${pname}-${version}"; in - project.pkgs.stdenv.mkDerivation { + stdenv.mkDerivation { inherit src; name = "${name}-scala-native"; - patches = [ ./toClass.diff ]; + patches = [ ./toClass.diff ./stableNirOutput.diff ]; - nativeBuildInputs = [ project.pkgs.sbt ]; + nativeBuildInputs = [ project.sbt ]; dontStrip = true; outputHashAlgo = "sha256"; - outputHash = "1s1ki5jmh6r5d50ma8d032xgmvhmy2gv9aw4142ybc3ggfwbi3mk"; + outputHash = "0m9jchavxxpsl1jg6gjsxbmybrq8lp44lyab6fki8w282386hqhy"; outputHashMode = "recursive"; preHook = '' @@ -52,6 +56,8 @@ project.pkgs.stdenv.mkDerivation rec { buildPhase = '' runHook preBuild + export SCALANATIVE_MODE=release-fast + sbt --sbt-dir "$HOME/sbt" --ivy "$HOME/.ivy2" --batch publishLocal '++2.13.6' \ auxlib/publishLocal \ clib/publishLocal \ diff --git a/shell.nix b/shell.nix index 94b1460f..3c4c517b 100644 --- a/shell.nix +++ b/shell.nix @@ -2,12 +2,14 @@ }: let scala-native = import ./scala-native.nix { inherit project; }; + mkShell = project.pkgs.mkShell.override { stdenv = project.pkgs.stdenvNoCC; }; in -project.pkgs.mkShell { +mkShell { CLANG_PATH = project.clang + "/bin/clang"; CLANGPP_PATH = project.clang + "/bin/clang++"; - buildInputs = builtins.attrValues project.devTools; + nativeBuildInputs = builtins.attrValues project.devTools; + shellHook = '' ${project.ci.pre-commit-check.shellHook} mkdir --parents "$HOME/.ivy2/local" diff --git a/stableNirOutput.diff b/stableNirOutput.diff new file mode 100644 index 00000000..3a7456c8 --- /dev/null +++ b/stableNirOutput.diff @@ -0,0 +1,25 @@ +diff --git a/nir/src/main/scala/scala/scalanative/nir/serialization/BinarySerializer.scala b/nir/src/main/scala/scala/scalanative/nir/serialization/BinarySerializer.scala +index eb788a30..f9877297 100644 +--- a/nir/src/main/scala/scala/scalanative/nir/serialization/BinarySerializer.scala ++++ b/nir/src/main/scala/scala/scalanative/nir/serialization/BinarySerializer.scala +@@ -30,8 +30,9 @@ final class BinarySerializer { + import bufferUnderyling.currentPosition + + def serialize(defns: Seq[Defn], outputStream: OutputStream): Unit = { +- val names = defns.map(_.name) +- val filenames = initFiles(defns) ++ val sortedDefns = defns.sortBy(_.name) ++ val names = sortedDefns.map(_.name) ++ val filenames = initFiles(sortedDefns) + val positions = mutable.UnrolledBuffer.empty[Int] + + Prelude.writeTo(buffer, +@@ -48,7 +49,7 @@ final class BinarySerializer { + putInt(0) + } + +- defns ++ sortedDefns + .zip(positions) + .foreach { + case (defn, marker) =>