Setup static building of nix

This commit is contained in:
Matthew Bauer 2020-06-25 17:19:11 -04:00 committed by John Ericson
parent 88cf6ffce3
commit 07dae2ff77
2 changed files with 85 additions and 69 deletions

View file

@ -1,4 +1,4 @@
{ pkgs }:
{ pkgs, enableStatic }:
with pkgs;
@ -30,35 +30,42 @@ rec {
});
configureFlags =
lib.optionals stdenv.isLinux [
lib.optionals (!enableStatic && stdenv.isLinux) [
"--with-sandbox-shell=${sh}/bin/busybox"
];
nativeBuildDeps =
[
buildPackages.bison
buildPackages.flex
buildPackages.libxml2
buildPackages.libxslt
buildPackages.docbook5
buildPackages.docbook_xsl_ns
buildPackages.autoreconfHook
buildPackages.pkgconfig
# Tests
buildPackages.git
buildPackages.mercurial
buildPackages.ipfs
];
buildDeps =
[ bison
flex
libxml2
libxslt
docbook5
docbook_xsl_ns
[ autoreconfHook
autoconf-archive
autoreconfHook
curl
bzip2 xz brotli zlib editline
openssl pkgconfig sqlite
openssl sqlite
libarchive
boost
nlohmann_json
# Tests
git
mercurial
gmock
]
++ lib.optionals stdenv.isLinux [libseccomp utillinuxMinimal]
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
++ lib.optional (stdenv.isLinux || stdenv.isDarwin)
++ lib.optional (!enableStatic && (stdenv.isLinux || stdenv.isDarwin))
((aws-sdk-cpp.override {
apis = ["s3" "transfer"];
customMemoryManagement = false;

View file

@ -12,63 +12,72 @@ let
builtins.readFile ./.version
+ (if officialRelease then "" else "pre${toString nix.revCount}_${nix.shortRev}");
buildFun = pkgs: enableStatic:
with pkgs; with import ./release-common.nix { inherit pkgs enableStatic; };
stdenv.mkDerivation {
name = "nix-${version}";
src = nix;
outputs = [ "out" "dev" "doc" ];
buildInputs = buildDeps;
nativeBuildInputs = nativeBuildDeps;
propagatedBuildInputs = propagatedDeps;
preConfigure =
lib.optionalString (!enableStatic) ''
# Copy libboost_context so we don't get all of Boost in our closure.
# https://github.com/NixOS/nixpkgs/issues/45462
mkdir -p $out/lib
cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib
rm -f $out/lib/*.a
${lib.optionalString stdenv.isLinux ''
chmod u+w $out/lib/*.so.*
patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.*
''}
(cd perl; autoreconf --install --force --verbose)
'';
configureFlags = configureFlags ++
[ "--sysconfdir=/etc" ];
dontUpdateAutotoolsGnuConfigScripts = true;
enableParallelBuilding = true;
makeFlags = [ "profiledir=$(out)/etc/profile.d" "PRECOMPILE_HEADERS=0" ];
installFlags = "sysconfdir=$(out)/etc";
postInstall = ''
mkdir -p $doc/nix-support
echo "doc manual $doc/share/doc/nix/manual" >> $doc/nix-support/hydra-build-products
'';
doCheck = true;
doInstallCheck = true;
installCheckFlags = "sysconfdir=$(out)/etc";
separateDebugInfo = !enableStatic;
stripAllList = ["bin"];
};
jobs = rec {
build-static = pkgs.lib.genAttrs systems (system:
buildFun (import nixpkgs { inherit system; }).pkgsStatic true);
build = pkgs.lib.genAttrs systems (system:
let pkgs = import nixpkgs { inherit system; }; in
with pkgs;
with import ./release-common.nix { inherit pkgs; };
stdenv.mkDerivation {
name = "nix-${version}";
src = nix;
outputs = [ "out" "dev" "doc" ];
buildInputs = buildDeps;
propagatedBuildInputs = propagatedDeps;
preConfigure =
''
# Copy libboost_context so we don't get all of Boost in our closure.
# https://github.com/NixOS/nixpkgs/issues/45462
mkdir -p $out/lib
cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib
rm -f $out/lib/*.a
${lib.optionalString stdenv.isLinux ''
chmod u+w $out/lib/*.so.*
patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.*
''}
(cd perl; autoreconf --install --force --verbose)
'';
configureFlags = configureFlags ++
[ "--sysconfdir=/etc" ];
enableParallelBuilding = true;
makeFlags = "profiledir=$(out)/etc/profile.d";
installFlags = "sysconfdir=$(out)/etc";
postInstall = ''
mkdir -p $doc/nix-support
echo "doc manual $doc/share/doc/nix/manual" >> $doc/nix-support/hydra-build-products
'';
doCheck = true;
doInstallCheck = true;
installCheckFlags = "sysconfdir=$(out)/etc";
separateDebugInfo = true;
});
buildFun (import nixpkgs { inherit system; }) false);
perlBindings = pkgs.lib.genAttrs systems (system: