We have fixed the static build of PostgreSQL upstream, so we don't need our separate overlay anymore. One more step towards building a static executable on other platforms.
48 lines
1.3 KiB
Nix
48 lines
1.3 KiB
Nix
{ compiler
|
|
, name
|
|
, pkgs
|
|
, src
|
|
}:
|
|
let
|
|
# This builds a static PostgREST executable based on pkgsStatic.
|
|
inherit (pkgs) pkgsStatic;
|
|
inherit (pkgsStatic.haskell) lib;
|
|
|
|
packagesStatic =
|
|
pkgsStatic.haskell.packages."${compiler}".override (old: {
|
|
ghc = pkgsStatic.pkgsBuildHost.haskell.compiler."${compiler}".override {
|
|
# Using the bundled libffi generally works better for cross-compiling
|
|
libffi = null;
|
|
# Building sphinx fails on some platforms
|
|
enableDocs = false;
|
|
# Cross compiling with native bignum works better than with gmp
|
|
enableNativeBignum = true;
|
|
};
|
|
});
|
|
|
|
makeExecutableStatic = drv: pkgs.lib.pipe drv [
|
|
lib.compose.justStaticExecutables
|
|
|
|
# To successfully compile a redistributable, fully static executable we need to:
|
|
# 1. avoid any references to /nix/store to prevent blowing up the closure size.
|
|
(drv: drv.overrideAttrs {
|
|
allowedReferences = [
|
|
pkgsStatic.openssl.etc
|
|
];
|
|
})
|
|
|
|
# 2. be able to run the executable.
|
|
(drv: drv.overrideAttrs {
|
|
passthru.tests.version = pkgsStatic.testers.testVersion {
|
|
package = drv;
|
|
};
|
|
})
|
|
];
|
|
|
|
in
|
|
{
|
|
inherit packagesStatic;
|
|
|
|
postgrestStatic = makeExecutableStatic (packagesStatic.callCabal2nix name src { });
|
|
}
|