Simplify the Nix toolchain
This commit is contained in:
parent
4b38dbb145
commit
c1917e56fa
87
flake.lock
87
flake.lock
|
@ -16,56 +16,37 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
"nixpkgs-lib": "nixpkgs-lib"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1710146030,
|
||||
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||
"lastModified": 1715865404,
|
||||
"narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_2": {
|
||||
"inputs": {
|
||||
"systems": "systems_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1710146030,
|
||||
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"git-hooks": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"flake-utils": "flake-utils_2",
|
||||
"gitignore": "gitignore",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"nixpkgs-stable": "nixpkgs-stable"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1712055707,
|
||||
"narHash": "sha256-4XLvuSIDZJGS17xEwSrNuJLL7UjDYKGJSbK1WWX2AK8=",
|
||||
"lastModified": 1715870890,
|
||||
"narHash": "sha256-nacSOeXtUEM77Gn0G4bTdEOeFIrkCBXiyyFZtdGwuH0=",
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"rev": "e35aed5fda3cc79f88ed7f1795021e559582093a",
|
||||
"rev": "fa606cccd7b0ccebe2880051208e4a0f61bfc8c1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -111,6 +92,18 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-lib": {
|
||||
"locked": {
|
||||
"lastModified": 1714640452,
|
||||
"narHash": "sha256-QBx10+k6JWz6u7VsohfSw8g8hjdBZEf8CFzXH1/1Z94=",
|
||||
"type": "tarball",
|
||||
"url": "https://github.com/NixOS/nixpkgs/archive/50eb7ecf4cd0a5756d7275c8ba36790e5bd53e33.tar.gz"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
"url": "https://github.com/NixOS/nixpkgs/archive/50eb7ecf4cd0a5756d7275c8ba36790e5bd53e33.tar.gz"
|
||||
}
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1710695816,
|
||||
|
@ -145,40 +138,10 @@
|
|||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"flake-parts": "flake-parts",
|
||||
"git-hooks": "git-hooks",
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_2": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
|
|
58
flake.nix
58
flake.nix
|
@ -20,29 +20,30 @@
|
|||
"github:lxsameer/nixpkgs/c738ee8ad1c35383037c20fa13eaac17c8ae98c5";
|
||||
#inputs.nixpkgs.url = "/home/lxsameer/src/nixpkgs/";
|
||||
inputs.git-hooks.url = "github:cachix/git-hooks.nix";
|
||||
inputs.flake-utils.url = "github:numtide/flake-utils";
|
||||
inputs.flake-parts.url = "github:hercules-ci/flake-parts";
|
||||
|
||||
outputs = { self, nixpkgs, git-hooks, flake-utils, ... }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
outputs = { self, nixpkgs, git-hooks, flake-parts, ... }@inputs:
|
||||
flake-parts.lib.mkFlake { inherit inputs; } {
|
||||
systems = [ "aarch64-darwin" "riscv64-linux" "x86_64-linux" ];
|
||||
|
||||
flake = { };
|
||||
perSystem = { config, self', inputs', system, pkgs, lib, ... }:
|
||||
let
|
||||
version = "1.0.0";
|
||||
|
||||
overlays = [ (import ./nix/overlays.nix { }).muslComp ];
|
||||
|
||||
overlays = (lib.attrsets.attrValues (import ./nix/overlays.nix { }));
|
||||
utils = import ./nix/utils.nix { inherit nixpkgs; };
|
||||
|
||||
# Create a package set based on the build system
|
||||
pkgs_set = utils.get_pkgs system overlays;
|
||||
hostPkgs = pkgs_set.host;
|
||||
pkgs = pkgs_set.target;
|
||||
hostPkgs = pkgs;
|
||||
targetPkgs = utils.getPkgs system overlays;
|
||||
|
||||
# Create a stdenv based on LLVM
|
||||
stdenv = pkgs.stdenvAdapters.overrideCC pkgs.stdenv
|
||||
pkgs.llvmPackages_18.clangUseLLVM;
|
||||
stdenv = targetPkgs.stdenvAdapters.overrideCC targetPkgs.stdenv
|
||||
targetPkgs.llvmPackages_18.clangUseLLVM;
|
||||
|
||||
gc = pkgs.callPackage ./nix/boehmgc.nix { inherit stdenv; };
|
||||
gc = targetPkgs.callPackage ./nix/boehmgc.nix { inherit stdenv; };
|
||||
|
||||
zlib' = pkgs.zlib-ng.overrideAttrs (old: {
|
||||
zlib' = targetPkgs.zlib-ng.overrideAttrs (old: {
|
||||
cmakeFlags = [
|
||||
"-DCMAKE_INSTALL_PREFIX=/"
|
||||
"-DBUILD_SHARED_LIBS=OFF"
|
||||
|
@ -58,21 +59,26 @@
|
|||
# that zlib with our override of zlib-ng
|
||||
clang' = stdenv.cc.overrideAttrs (old: {
|
||||
propagatedBuildInputs = [ stdenv.cc.bintools ]
|
||||
++ [ pkgs.zlib.static ];
|
||||
++ [ targetPkgs.zlib.static ];
|
||||
});
|
||||
|
||||
llvm = pkgs.llvmPackages_18.llvm.overrideAttrs
|
||||
(old: { propagatedBuildInputs = [ pkgs.zlib.static ]; });
|
||||
llvm = targetPkgs.llvmPackages_18.llvm.overrideAttrs
|
||||
(old: { propagatedBuildInputs = [ targetPkgs.zlib.static ]; });
|
||||
|
||||
# This is the actual stdenv that we need to use anywhere else
|
||||
stdenv' = pkgs.stdenvAdapters.overrideCC pkgs.stdenv clang';
|
||||
stdenv' =
|
||||
targetPkgs.stdenvAdapters.overrideCC targetPkgs.stdenv clang';
|
||||
|
||||
nativeBuildToolsDeps = (with hostPkgs; [ cmake ninja ccache ]);
|
||||
|
||||
buildToolsDeps =
|
||||
(with pkgs; [ llvm llvmPackages_18.mlir llvmPackages_18.clang iwyu ]);
|
||||
buildToolsDeps = (with targetPkgs; [
|
||||
llvm
|
||||
llvmPackages_18.mlir
|
||||
llvmPackages_18.clang
|
||||
iwyu
|
||||
]);
|
||||
|
||||
buildDeps = (with pkgs; [
|
||||
buildDeps = (with targetPkgs; [
|
||||
gc
|
||||
zlib'
|
||||
llvm
|
||||
|
@ -83,20 +89,23 @@
|
|||
testDeps = (with hostPkgs; [ gtest gmock gbenchmark ]);
|
||||
|
||||
in {
|
||||
inherit pkgs;
|
||||
devShells.default = (pkgs.mkShell.override { stdenv = stdenv'; }) {
|
||||
devShells.default =
|
||||
(targetPkgs.mkShell.override { stdenv = stdenv'; }) {
|
||||
inherit (self.checks.${system}.git-hook-check) shellHook;
|
||||
|
||||
nativeBuildInputs = nativeBuildToolsDeps ++ buildToolsDeps;
|
||||
buildInputs = buildDeps ++ testDeps
|
||||
++ self.checks.${system}.git-hook-check.enabledPackages;
|
||||
CPP_LS = "serene-clangd";
|
||||
};
|
||||
|
||||
packages.blah = buildDeps ++ testDeps ++ nativeBuildToolsDeps
|
||||
++ buildToolsDeps;
|
||||
packages.devshell = stdenv'.mkDerivation {
|
||||
inherit version;
|
||||
name = "devshell";
|
||||
|
||||
src = ./.;
|
||||
doBuild = false;
|
||||
doUnpack = false;
|
||||
doCheck = false;
|
||||
nativeBuildInputs = nativeBuildToolsDeps ++ buildToolsDeps;
|
||||
|
@ -118,5 +127,6 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -13,17 +13,24 @@
|
|||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
{ ... }: {
|
||||
{ ... }:
|
||||
with builtins;
|
||||
let getEnv = p: (p.env or { }).NIX_LDFLAGS or p.NIX_LDFLAGS or "";
|
||||
in {
|
||||
# Most of these overlays are do to bugs and problems
|
||||
# in upstream nixpkgs. But thanks to their design
|
||||
# We can fix them using these overlays and contribute
|
||||
# them upstream little by little.
|
||||
muslComp = (final: prev: {
|
||||
sereneDev = (final: prev:
|
||||
if !prev.stdenv.hostPlatform.isLinux then
|
||||
prev
|
||||
else {
|
||||
|
||||
p11-kit = prev.p11-kit.overrideAttrs
|
||||
(old: { patches = [ ./nix/patches/p11-kit_skip_test.patch ]; });
|
||||
|
||||
cpio = prev.cpio.overrideAttrs (old: {
|
||||
nativeBuildInputs = [ prev.autoreconfHook ];
|
||||
nativeBuildInputs = [ final.autoreconfHook ];
|
||||
NIX_CFLAGS_COMPILE = "-Wno-implicit-function-declaration";
|
||||
});
|
||||
|
||||
|
@ -56,33 +63,36 @@
|
|||
# default in lld-18. We need to explicitly turn it off for
|
||||
# these problematic packages untill they fix it upstream.
|
||||
libxcrypt = prev.libxcrypt.overrideAttrs (old: {
|
||||
NIX_LDFLAGS = [ ] ++ final.lib.optional (prev.stdenv.cc.isClang)
|
||||
[ "--undefined-version" ];
|
||||
env.NIX_LDFLAGS = "${getEnv old} --undefined-version";
|
||||
|
||||
#old.NIX_FLAGS ++ final.lib.optional (prev.stdenv.cc.isClang)
|
||||
});
|
||||
|
||||
ncurses = prev.ncurses.overrideAttrs (old: {
|
||||
NIX_LDFLAGS = [ ] ++ final.lib.optional (prev.stdenv.cc.isClang)
|
||||
[ "--undefined-version" ];
|
||||
});
|
||||
ncurses = prev.ncurses.overrideAttrs
|
||||
(old: { env.NIX_LDFLAGS = "${getEnv old} --undefined-version"; });
|
||||
|
||||
libbsd = prev.libbsd.overrideAttrs (old: {
|
||||
NIX_LDFLAGS = [ ] ++ final.lib.optional (prev.stdenv.cc.isClang)
|
||||
[ "--undefined-version" ];
|
||||
env.NIX_LDFLAGS = "${getEnv old} --undefined-version";
|
||||
# NIX_LDFLAGS = [ ] ++ final.lib.optional (prev.stdenv.cc.isClang)
|
||||
# [ "--undefined-version" ];
|
||||
});
|
||||
|
||||
libxml2 = prev.libxml2.overrideAttrs (old: {
|
||||
propagatedBuildInputs = old.propagatedBuildInputs ++ [ prev.zlib.static ];
|
||||
NIX_LDFLAGS = [ ] ++ final.lib.optional (prev.stdenv.cc.isClang)
|
||||
[ "--undefined-version" ];
|
||||
env.NIX_LDFLAGS = "${getEnv old} --undefined-version";
|
||||
propagatedBuildInputs = old.propagatedBuildInputs
|
||||
++ [ final.zlib.static ];
|
||||
# NIX_LDFLAGS = [ ] ++ final.lib.optional (prev.stdenv.cc.isClang)
|
||||
# [ "--undefined-version" ];
|
||||
});
|
||||
|
||||
binutils = prev.binutils.overrideAttrs (old: {
|
||||
buildInputs = [ prev.zlib prev.gettext prev.zlib.static ];
|
||||
NIX_LDFLAGS = [ "--undefined-version" ];
|
||||
# binutils = prev.binutils.overrideAttrs (old: {
|
||||
# env.NIX_LDFLAGS = (getEnv old NIX_LDFLAGS " ") ++ "--undefined-version";
|
||||
# buildInputs = [ final.zlib final.gettext final.zlib.static ];
|
||||
# });
|
||||
|
||||
});
|
||||
|
||||
#==============================================================
|
||||
|
||||
iwyu = (final: prev: {
|
||||
iwyu = (prev.include-what-you-use.overrideAttrs (old:
|
||||
let version = "0.22";
|
||||
in {
|
||||
|
@ -96,5 +106,6 @@
|
|||
cmakeFlags = [ "-DCMAKE_PREFIX_PATH=${prev.llvmPackages_18.llvm.dev}" ];
|
||||
|
||||
})).override { llvmPackages = prev.__splicedPackages.llvmPackages_18; };
|
||||
|
||||
});
|
||||
}
|
||||
|
|
|
@ -14,9 +14,8 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
{ nixpkgs }: {
|
||||
get_pkgs = system: overlays: {
|
||||
host = import nixpkgs { inherit system; };
|
||||
target = if system == "x86_64-linux" then
|
||||
getPkgs = system: overlays:
|
||||
if system == "x86_64-linux" then
|
||||
import nixpkgs {
|
||||
inherit system overlays;
|
||||
linker = "lld";
|
||||
|
@ -26,5 +25,5 @@
|
|||
}
|
||||
else
|
||||
import nixpkgs { inherit system overlays; };
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue