Skip to content
This repository has been archived by the owner on Aug 18, 2020. It is now read-only.

Commit

Permalink
[nix] Split overlays into their own files
Browse files Browse the repository at this point in the history
This is a pure refactoring of the nix logic.  The primary goal is
to modularize the overlays and subsequently make rebasing easier by
removing these lines from the `default.nix`.
  • Loading branch information
angerman committed Oct 2, 2018
1 parent 886ba71 commit 1971f92
Show file tree
Hide file tree
Showing 7 changed files with 108 additions and 99 deletions.
112 changes: 13 additions & 99 deletions default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -29,111 +29,25 @@ with pkgs.lib;
with pkgs.haskell.lib;

let
justStaticExecutablesGitRev = import ./scripts/set-git-rev {
inherit pkgs gitrev;
inherit (cardanoPkgs) ghc;
};
addRealTimeTestLogs = drv: overrideCabal drv (attrs: {
testTarget = "--show-details=streaming";
# the GHC we are using
# at some point use: pkgs.haskell.compiler.ghc843;
ghc = overrideDerivation pkgs.haskell.compiler.ghc822 (drv: {
patches = drv.patches ++ [ ./ghc-8.0.2-darwin-rec-link.patch ];
});

requiredOverlay = self: super: {
inherit pkgs;
srcroot = ./.;
cardano-sl-core = overrideCabal super.cardano-sl-core (drv: {
configureFlags = (drv.configureFlags or []) ++ [
"-f-asserts"
];
});
cardano-sl = overrideCabal super.cardano-sl (drv: {
# production full nodes shouldn't use wallet as it means different constants
configureFlags = (drv.configureFlags or []) ++ [
"-f-asserts"
];
passthru = {
inherit enableProfiling;
};
});
cardano-sl-wallet-static = justStaticExecutablesGitRev self.cardano-sl-wallet;
cardano-sl-client = addRealTimeTestLogs super.cardano-sl-client;
cardano-sl-generator = addRealTimeTestLogs super.cardano-sl-generator;
cardano-sl-networking = addRealTimeTestLogs super.cardano-sl-networking;
cardano-sl-auxx-static = justStaticExecutablesGitRev self.cardano-sl-auxx;
cardano-sl-wallet-new-static = justStaticExecutablesGitRev self.cardano-sl-wallet-new;
cardano-sl-node-static = justStaticExecutablesGitRev self.cardano-sl-node;
cardano-sl-explorer-static = justStaticExecutablesGitRev self.cardano-sl-explorer;
cardano-report-server-static = justStaticExecutablesGitRev self.cardano-report-server;
cardano-sl-faucet-static = justStaticExecutablesGitRev self.cardano-sl-faucet;
cardano-sl-tools-static = justStaticExecutablesGitRev self.cardano-sl-tools;
# Undo configuration-nix.nix change to hardcode security binary on darwin
# This is needed for macOS binary not to fail during update system (using http-client-tls)
# Instead, now the binary is just looked up in $PATH as it should be installed on any macOS
x509-system = overrideDerivation super.x509-system (drv: {
postPatch = ":";
});

# TODO: get rid of pthreads option once cryptonite 0.25 is released
# DEVOPS-393: https://github.com/haskell-crypto/cryptonite/issues/193
cryptonite = appendPatch (appendConfigureFlag super.cryptonite "--ghc-option=-optl-pthread") ./pkgs/cryptonite-segfault-blake.patch;

# Due to https://github.com/input-output-hk/stack2nix/issues/56
hfsevents = self.callPackage ./pkgs/hfsevents.nix { inherit (pkgs.darwin.apple_sdk.frameworks) Cocoa CoreServices; };
mkDerivation = args: super.mkDerivation (args // {
enableLibraryProfiling = enableProfiling;
enableExecutableProfiling = enableProfiling;
# Static linking for everything to work around
# https://ghc.haskell.org/trac/ghc/ticket/14444
# This will be the default in nixpkgs since
# https://github.com/NixOS/nixpkgs/issues/29011
enableSharedExecutables = false;
} // optionalAttrs (args ? src) {
src = localLib.cleanSourceTree args.src;
});
};
benchmarkOverlay = self: super: {
mkDerivation = args: super.mkDerivation (args // optionalAttrs (localLib.isCardanoSL args.pname) {
# Enables building but not running of benchmarks for all
# cardano-sl packages when enableBenchmarks argument is true.
doBenchmark = true;
configureFlags = (args.configureFlags or []) ++ ["--enable-benchmarks"];
} // optionalAttrs (localLib.isBenchmark args) {
# Provide a dummy installPhase for benchmark packages.
installPhase = "mkdir -p $out";
});
};

debugOverlay = self: super: {
mkDerivation = args: super.mkDerivation (args // {
# TODO: DEVOPS-355
dontStrip = true;
configureFlags = (args.configureFlags or []) ++ [ "--ghc-options=-g --disable-executable-stripping --disable-library-stripping" "--profiling-detail=toplevel-functions"];
});
};

# Overlay logic for *haskell* packages.
requiredOverlay = import ./nix/overlays/required.nix pkgs localLib enableProfiling gitrev ghc;
benchmarkOverlay = import ./nix/overlays/benchmark.nix pkgs localLib;
debugOverlay = import ./nix/overlays/debug.nix pkgs;
# Disabling optimization for cardano-sl packages will
# return a build ~20% faster (measured in DEVOPS-1032).
fasterBuildOverlay = self: super: {
mkDerivation = args: super.mkDerivation (args // optionalAttrs (localLib.isCardanoSL args.pname) {
configureFlags = (args.configureFlags or []) ++ [ "--ghc-options=-O0" ];
});
};

dontCheckOverlay = self: super: {
mkDerivation = args: super.mkDerivation (args // {
doCheck = false;
});
};

metricOverlay = self: super: {
mkDerivation = args: super.mkDerivation (args // {
enablePhaseMetrics = true;
});
};
fasterBuildOverlay = import ./nix/overlays/faster-build.nix pkgs localLib;
dontCheckOverlay = import ./nix/overlays/dont-check.nix pkgs;
metricOverlay = import ./nix/overlays/metric.nix pkgs;

# This will yield a set of haskell packages, based on the given compiler.
cardanoPkgsBase = ((import ./pkgs { inherit pkgs; }).override {
ghc = overrideDerivation pkgs.haskell.compiler.ghc822 (drv: {
patches = drv.patches ++ [ ./ghc-8.0.2-darwin-rec-link.patch ];
});
inherit ghc;
});

activeOverlays = [ requiredOverlay ]
Expand Down
11 changes: 11 additions & 0 deletions nix/overlays/benchmark.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
pkgs: localLib: self: super: with pkgs.lib; {
mkDerivation = args: super.mkDerivation (args // optionalAttrs (localLib.isCardanoSL args.pname) {
# Enables building but not running of benchmarks for all
# cardano-sl packages when enableBenchmarks argument is true.
doBenchmark = true;
configureFlags = (args.configureFlags or []) ++ ["--enable-benchmarks"];
} // optionalAttrs (localLib.isBenchmark args) {
# Provide a dummy installPhase for benchmark packages.
installPhase = "mkdir -p $out";
});
}
7 changes: 7 additions & 0 deletions nix/overlays/debug.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
pkgs: self: super: {
mkDerivation = args: super.mkDerivation (args // {
# TODO: DEVOPS-355
dontStrip = true;
configureFlags = (args.configureFlags or []) ++ [ "--ghc-options=-g --disable-executable-stripping --disable-library-stripping" "--profiling-detail=toplevel-functions"];
});
}
5 changes: 5 additions & 0 deletions nix/overlays/dont-check.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pkgs: self: super: {
mkDerivation = args: super.mkDerivation (args // {
doCheck = false;
});
}
5 changes: 5 additions & 0 deletions nix/overlays/faster-build.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pkgs: localLib: self: super: {
mkDerivation = args: super.mkDerivation (args // optionalAttrs (localLib.isCardanoSL args.pname) {
configureFlags = (args.configureFlags or []) ++ [ "--ghc-options=-O0" ];
});
}
5 changes: 5 additions & 0 deletions nix/overlays/metric.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pkgs: self: super: {
mkDerivation = args: super.mkDerivation (args // {
enablePhaseMetrics = true;
});
}
62 changes: 62 additions & 0 deletions nix/overlays/required.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
pkgs: localLib: enableProfiling: gitrev: ghc:
self: super:
with pkgs.haskell.lib; with pkgs.lib;
let
justStaticExecutablesGitRev = import ../../scripts/set-git-rev {
inherit pkgs gitrev ghc;
};
addRealTimeTestLogs = drv: overrideCabal drv (attrs: {
testTarget = "--show-details=streaming";
});
in {
srcroot = ./.;
cardano-sl-core = overrideCabal super.cardano-sl-core (drv: {
configureFlags = (drv.configureFlags or []) ++ [
"-f-asserts"
];
});
cardano-sl = overrideCabal super.cardano-sl (drv: {
# production full nodes shouldn't use wallet as it means different constants
configureFlags = (drv.configureFlags or []) ++ [
"-f-asserts"
];
passthru = {
inherit enableProfiling;
};
});
cardano-sl-wallet-static = justStaticExecutablesGitRev super.cardano-sl-wallet;
cardano-sl-client = addRealTimeTestLogs super.cardano-sl-client;
cardano-sl-generator = addRealTimeTestLogs super.cardano-sl-generator;
cardano-sl-networking = addRealTimeTestLogs super.cardano-sl-networking;
cardano-sl-auxx-static = justStaticExecutablesGitRev super.cardano-sl-auxx;
cardano-sl-wallet-new-static = justStaticExecutablesGitRev super.cardano-sl-wallet-new;
cardano-sl-node-static = justStaticExecutablesGitRev self.cardano-sl-node;
cardano-sl-explorer-static = justStaticExecutablesGitRev self.cardano-sl-explorer;
cardano-report-server-static = justStaticExecutablesGitRev self.cardano-report-server;
cardano-sl-faucet-static = justStaticExecutablesGitRev self.cardano-sl-faucet;
cardano-sl-tools-static = justStaticExecutablesGitRev super.cardano-sl-tools;
# Undo configuration-nix.nix change to hardcode security binary on darwin
# This is needed for macOS binary not to fail during update system (using http-client-tls)
# Instead, now the binary is just looked up in $PATH as it should be installed on any macOS
x509-system = overrideDerivation super.x509-system (drv: {
postPatch = ":";
});

# TODO: get rid of pthreads option once cryptonite 0.25 is released
# DEVOPS-393: https://github.com/haskell-crypto/cryptonite/issues/193
cryptonite = appendPatch (appendConfigureFlag super.cryptonite "--ghc-option=-optl-pthread") ../../pkgs/cryptonite-segfault-blake.patch;

# Due to https://github.com/input-output-hk/stack2nix/issues/56
hfsevents = self.callPackage ../../pkgs/hfsevents.nix { inherit (pkgs.darwin.apple_sdk.frameworks) Cocoa CoreServices; };
mkDerivation = args: super.mkDerivation (args // {
enableLibraryProfiling = enableProfiling;
enableExecutableProfiling = enableProfiling;
# Static linking for everything to work around
# https://ghc.haskell.org/trac/ghc/ticket/14444
# This will be the default in nixpkgs since
# https://github.com/NixOS/nixpkgs/issues/29011
enableSharedExecutables = false;
} // optionalAttrs (args ? src) {
src = localLib.cleanSourceTree args.src;
});
}

0 comments on commit 1971f92

Please sign in to comment.