flake.nix 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. {
  2. description = "Deterministic Rust WASM build";
  3. inputs = {
  4. nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
  5. crane.url = "github:ipetkov/crane";
  6. rust-overlay = {
  7. url = "github:oxalica/rust-overlay";
  8. inputs.nixpkgs.follows = "nixpkgs";
  9. };
  10. flake-utils.url = "github:numtide/flake-utils";
  11. };
  12. outputs =
  13. {
  14. self,
  15. nixpkgs,
  16. crane,
  17. rust-overlay,
  18. flake-utils,
  19. ...
  20. }:
  21. flake-utils.lib.eachDefaultSystem (
  22. system:
  23. let
  24. pkgs = import nixpkgs {
  25. inherit system;
  26. overlays = [ (import rust-overlay) ];
  27. };
  28. rustToolchain = pkgs.rust-bin.stable."1.92.0".default.override {
  29. targets = [ "wasm32-unknown-unknown" ];
  30. };
  31. craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain;
  32. src = pkgs.lib.cleanSourceWith {
  33. src = ./.;
  34. filter =
  35. path: type:
  36. let
  37. baseName = builtins.baseNameOf path;
  38. parentDir = builtins.baseNameOf (builtins.dirOf path);
  39. in
  40. (parentDir == "proof" && pkgs.lib.hasSuffix ".zk.bin" baseName)
  41. || (craneLib.filterCargoSources path type);
  42. name = "source";
  43. };
  44. commonArgs = {
  45. inherit src;
  46. strictDeps = true;
  47. CARGO_BUILD_TARGET = "wasm32-unknown-unknown";
  48. CARGO_INCREMENTAL = "0";
  49. RUSTFLAGS = "";
  50. cargoExtraArgs = "--lib";
  51. doCheck = false;
  52. };
  53. cargoArtifacts = craneLib.buildDepsOnly commonArgs;
  54. wasmLib = craneLib.buildPackage (
  55. commonArgs
  56. // {
  57. inherit cargoArtifacts;
  58. installPhaseCommand = ''
  59. mkdir -p $out
  60. cp target/wasm32-unknown-unknown/release/*.wasm $out
  61. '';
  62. }
  63. );
  64. in
  65. {
  66. packages.default = wasmLib;
  67. devShells.default = craneLib.devShell {
  68. inputsFrom = [ wasmLib ];
  69. packages = with pkgs; [
  70. nixfmt-rfc-style
  71. ];
  72. CARGO_BUILD_TARGET = "wasm32-unknown-unknown";
  73. };
  74. }
  75. );
  76. }