diff options
author | Matthew Bauer <matthew.bauer@obsidian.systems> | 2020-06-25 17:19:11 -0400 |
---|---|---|
committer | John Ericson <John.Ericson@Obsidian.Systems> | 2020-06-29 20:34:26 +0000 |
commit | 07dae2ff7727b915a1b687cdec9aca894d7c2f72 (patch) | |
tree | cbbf8fd5fadcccc5373c51e80032c6ed80286235 | |
parent | 88cf6ffce3c01f4f1c50250ef46c0d7bf23f41c7 (diff) |
Setup static building of nix
-rw-r--r-- | release-common.nix | 37 | ||||
-rw-r--r-- | release.nix | 85 |
2 files changed, 69 insertions, 53 deletions
diff --git a/release-common.nix b/release-common.nix index 4316c3c23..2cf9c233e 100644 --- a/release-common.nix +++ b/release-common.nix @@ -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; diff --git a/release.nix b/release.nix index fbf9e4721..d2785be13 100644 --- a/release.nix +++ b/release.nix @@ -12,63 +12,72 @@ let builtins.readFile ./.version + (if officialRelease then "" else "pre${toString nix.revCount}_${nix.shortRev}"); - jobs = rec { + buildFun = pkgs: enableStatic: + with pkgs; with import ./release-common.nix { inherit pkgs enableStatic; }; + stdenv.mkDerivation { + name = "nix-${version}"; - build = pkgs.lib.genAttrs systems (system: + src = nix; - let pkgs = import nixpkgs { inherit system; }; in + outputs = [ "out" "dev" "doc" ]; - with pkgs; + buildInputs = buildDeps; - with import ./release-common.nix { inherit pkgs; }; + nativeBuildInputs = nativeBuildDeps; - stdenv.mkDerivation { - name = "nix-${version}"; + propagatedBuildInputs = propagatedDeps; - src = nix; + 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.* + ''} - outputs = [ "out" "dev" "doc" ]; + (cd perl; autoreconf --install --force --verbose) + ''; - buildInputs = buildDeps; + configureFlags = configureFlags ++ + [ "--sysconfdir=/etc" ]; - propagatedBuildInputs = propagatedDeps; + dontUpdateAutotoolsGnuConfigScripts = true; - 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.* - ''} + enableParallelBuilding = true; - (cd perl; autoreconf --install --force --verbose) - ''; + makeFlags = [ "profiledir=$(out)/etc/profile.d" "PRECOMPILE_HEADERS=0" ]; - configureFlags = configureFlags ++ - [ "--sysconfdir=/etc" ]; + installFlags = "sysconfdir=$(out)/etc"; - enableParallelBuilding = true; + postInstall = '' + mkdir -p $doc/nix-support + echo "doc manual $doc/share/doc/nix/manual" >> $doc/nix-support/hydra-build-products + ''; - makeFlags = "profiledir=$(out)/etc/profile.d"; + doCheck = true; - installFlags = "sysconfdir=$(out)/etc"; + doInstallCheck = true; + installCheckFlags = "sysconfdir=$(out)/etc"; - postInstall = '' - mkdir -p $doc/nix-support - echo "doc manual $doc/share/doc/nix/manual" >> $doc/nix-support/hydra-build-products - ''; + separateDebugInfo = !enableStatic; + + stripAllList = ["bin"]; + }; - doCheck = true; - doInstallCheck = true; - installCheckFlags = "sysconfdir=$(out)/etc"; + jobs = rec { - separateDebugInfo = true; - }); + + build-static = pkgs.lib.genAttrs systems (system: + buildFun (import nixpkgs { inherit system; }).pkgsStatic true); + + + build = pkgs.lib.genAttrs systems (system: + buildFun (import nixpkgs { inherit system; }) false); perlBindings = pkgs.lib.genAttrs systems (system: |