aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Bauer <matthew.bauer@obsidian.systems>2020-06-25 17:19:11 -0400
committerJohn Ericson <John.Ericson@Obsidian.Systems>2020-06-29 20:34:26 +0000
commit07dae2ff7727b915a1b687cdec9aca894d7c2f72 (patch)
treecbbf8fd5fadcccc5373c51e80032c6ed80286235
parent88cf6ffce3c01f4f1c50250ef46c0d7bf23f41c7 (diff)
Setup static building of nix
-rw-r--r--release-common.nix37
-rw-r--r--release.nix85
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: