Revision bb688ffbc18dbfbb922578d8a8f1085bd511b824 authored by Pierrick Couderc on 29 June 2023, 12:30:11 UTC, committed by Pierrick Couderc on 29 June 2023, 13:32:08 UTC
1 parent 6502326
Raw File
default.nix
# WARNING!
# This file is provided as a courtesy and comes with no guarantees that it will
# continue to work in the future.
let
  sources = import ./nix/sources.nix;
  pkgs = sources.pkgs;

  overlays = pkgs.callPackage ./nix/overlays.nix {};
  tezos-opam-repository = pkgs.callPackage ./nix/tezos-opam-repo.nix {};

  packageSet = pkgs.opamPackages.overrideScope' (pkgs.lib.composeManyExtensions [
    # Set the opam-repository which has the package descriptions.
    (final: prev: {
      repository = prev.repository.override {src = tezos-opam-repository;};
    })

    # First overlay simply picks the package versions from Tezos'
    # opam-repository.
    overlays.pick-latest-packages

    # Tweak common packages.
    overlays.common-overlay

    # Overlays for MacOS
    (
      if pkgs.stdenv.isDarwin
      then overlays.darwin-overlay
      else final: prev: {}
    )

    # Tweak the dependencies.
    overlays.fix-rust-packages
  ]);

  packages =
    builtins.filter
    pkgs.lib.attrsets.isDerivation
    (builtins.attrValues packageSet);

  packageLibDirs = builtins.filter builtins.pathExists (
    builtins.map (package: "${package}/lib/${package.pname}") packages
  );

  packageIncludeArgs = builtins.map (dir: "-I${dir}") packageLibDirs;

  fakeOpamSwitchPrefix =
    pkgs.runCommand
    "fake-opam-switch-prefix"
    {}
    ''
      mkdir -p $out/share/zcash-params
      cp ${tezos-opam-repository}/zcash-params/sapling-output.params $out/share/zcash-params
      cp ${tezos-opam-repository}/zcash-params/sapling-spend.params $out/share/zcash-params
    '';

  mkFrameworkFlags = frameworks:
    pkgs.lib.concatStringsSep " " (
      pkgs.lib.concatMap
      (
        framework: [
          "-F${pkgs.darwin.apple_sdk.frameworks.${framework}}/Library/Frameworks"
          "-framework ${framework}"
        ]
      )
      frameworks
    );
in
  pkgs.stdenv.mkDerivation {
    name = "tezos";

    NIX_LDFLAGS = pkgs.lib.optional pkgs.stdenv.isDarwin (
      mkFrameworkFlags [
        "CoreFoundation"
        "IOKit"
        "AppKit"
        "Security"
      ]
    );

    NIX_CFLAGS_COMPILE =
      # Silence errors (-Werror) for unsupported flags on MacOS.
      pkgs.lib.optionals
      pkgs.stdenv.isDarwin
      ["-Wno-unused-command-line-argument"]
      ++
      # Make sure headers files are in scope.
      packageIncludeArgs;

    hardeningDisable =
      pkgs.lib.optionals
      (pkgs.stdenv.isAarch64 && pkgs.stdenv.isDarwin)
      ["stackprotector"];

    buildInputs = packages ++ [pkgs.makeWrapper];

    # Disable OPAM usage in Makefile.
    TEZOS_WITHOUT_OPAM = true;

    # $OPAM_SWITCH_PREFIX is used to find the ZCash parameters.
    OPAM_SWITCH_PREFIX = fakeOpamSwitchPrefix;

    src = pkgs.lib.sources.cleanSourceWith {
      filter = name: type:
        if type == "directory"
        then name != "_build" && name != "target"
        else true;
      src = pkgs.lib.sources.cleanSource ./.;
    };

    dontConfigure = true;
    dontCheck = true;

    buildPhase = ''
      make experimental-release
    '';

    installPhase = ''
      mkdir -p $out/bin
      find . -maxdepth 1 -iname 'octez-*' -type f -executable -exec cp {} $out/bin \;
    '';

    postFixup = ''
      for file in $(find $out/bin -type f); do
        wrapProgram $file --set OPAM_SWITCH_PREFIX ${fakeOpamSwitchPrefix}
      done
    '';

    passthru = {
      ocamlVersion = packageSet.ocaml.version;
    };
  }
back to top