Skip to content

Commit

Permalink
[Chore] Fix rust deps nix build
Browse files Browse the repository at this point in the history
  • Loading branch information
krendelhoff2 committed Oct 8, 2024
1 parent ba11f01 commit 087cc6b
Show file tree
Hide file tree
Showing 3 changed files with 130 additions and 51 deletions.
109 changes: 80 additions & 29 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 13 additions & 2 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@

opam-nix.url = "github:tweag/opam-nix";

rust-overlay.url = "github:oxalica/rust-overlay";

crane.url = "github:ipetkov/crane";

flake-compat.flake = false;

opam-repository.url = "github:ocaml/opam-repository";
Expand All @@ -25,9 +29,10 @@
tezos.flake = false;
};

outputs = inputs@{ self, nixpkgs, nixpkgs-unstable, flake-utils, serokell-nix, nix, ... }:
outputs = inputs@{ self, nixpkgs, nixpkgs-unstable, flake-utils, serokell-nix, nix, rust-overlay, crane, ... }:
let
pkgs = import nixpkgs { system = "x86_64-linux"; };
pkgs-unstable = import nixpkgs-unstable { system = "x86_64-linux"; overlays = [ rust-overlay.overlays.default ]; };
pkgs-darwin = nixpkgs-unstable.legacyPackages."aarch64-darwin";
protocols = nixpkgs.lib.importJSON ./protocols.json;
meta = nixpkgs.lib.importJSON ./meta.json;
Expand All @@ -39,6 +44,12 @@
filter = path: _: !(builtins.elem (baseNameOf path) [ "octez-dev-deps.opam" "tezos-time-measurement.opam" ]);
};

toolchain-version = pkgs-unstable.lib.strings.trim (builtins.readFile "${tezos}/rust-toolchain");

rust-toolchain = pkgs-unstable.rust-bin.stable.${toolchain-version}.default;

craneLib = (crane.mkLib pkgs-unstable).overrideToolchain (p: p.rust-bin.stable.${toolchain-version}.default);

# FIXME Dirty hack! Find out how to remove next release
tezos = pkgs.stdenv.mkDerivation {
name = "tezos";
Expand All @@ -55,7 +66,7 @@

sources = { inherit tezos; inherit (inputs) opam-repository; };

ocaml-overlay = import ./nix/build/ocaml-overlay.nix (inputs // { inherit sources protocols meta; });
ocaml-overlay = import ./nix/build/ocaml-overlay.nix (inputs // { inherit sources protocols meta craneLib rust-toolchain; });
in pkgs-darwin.lib.recursiveUpdate
{
nixosModules = {
Expand Down
57 changes: 37 additions & 20 deletions nix/build/ocaml-overlay.nix
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# SPDX-FileCopyrightText: 2021-2022 Oxhead Alpha
# SPDX-License-Identifier: LicenseRef-MIT-OA

{ sources, protocols, opam-nix, ... }:
{ sources, protocols, opam-nix, craneLib, rust-toolchain, ... }:

self: super:
let
Expand All @@ -10,15 +10,11 @@ in
with opam-nix.lib.${self.system}; let
zcash-overlay = import ./zcash-overlay.nix;
hacks = import ./hacks.nix;
octezSourcesResolved =
self.runCommand "resolve-octez-sources" {} ''
cp --no-preserve=all -Lr ${sources.tezos} $out
'';
octezScope = buildOpamProject' {
repos = with sources; [opam-repository];
recursive = true;
resolveArgs = { };
} octezSourcesResolved { };
resolveArgs = {};
} sources.tezos {};
in {
octezPackages = (octezScope.overrideScope' (pkgs.lib.composeManyExtensions [
(_: # Nullify all the ignored protocols so that we don't build them
Expand All @@ -31,19 +27,40 @@ in {
pkg))
hacks
zcash-overlay
(final: prev: {
tezos-rust-libs = prev.tezos-rust-libs.overrideAttrs (drv: {
postInstall =
drv.postInstall + (let
rust-types-h = pkgs.fetchurl {
url = "https://gitlab.com/tezos/tezos-rust-libs/-/raw/v1.4/librustzcash/include/rust/types.h";
sha256 = "sha256-Q2lEV7JfPpFwfS/fcV7HDbBUSIGovasr7/bcANRuMZA=";
};
in ''
mkdir -p $out/include/rust
cp ${rust-types-h} $out/include/rust/types.h
'');
});
(final: prev:
let
vendored-deps =
let
src = sources.tezos;
commonArgs = {
inherit src;
buildInputs = [ pkgs.ocaml ];
cargoToml = "${src}/src/rust_deps/Cargo.toml";
cargoLock = "${src}/src/rust_deps/Cargo.lock";
postUnpack = ''
cd $sourceRoot/src/rust_deps
sourceRoot="."
'';
strictDeps = true;
OCAMLOPT = "${pkgs.ocaml}/bin/ocamlopt";
OCAML_WHERE_PATH = "ocaml";
OCTEZ_RUST_DEPS_NO_WASMER_HEADERS = true;
};
in craneLib.vendorCargoDeps commonArgs;

injectRustDeps = drv: {
buildInputs = drv.buildInputs ++ [
vendored-deps
rust-toolchain
];
configurePhase = ''
export PATH="${rust-toolchain}/bin:$PATH"
cat ${vendored-deps}/config.toml >> ./src/rust_deps/.cargo/config.toml
'' + drv.configurePhase;
};
in {
octez-rust-deps = prev.octez-rust-deps.overrideAttrs injectRustDeps;
octez-l2-libs = prev.octez-l2-libs.overrideAttrs injectRustDeps;
})
]));
}

0 comments on commit 087cc6b

Please sign in to comment.