Build with LLVM and musl
This commit is contained in:
parent
9d8350f5b2
commit
0a68bacd50
9 changed files with 152 additions and 63 deletions
27
flake.nix
27
flake.nix
|
@ -99,13 +99,23 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
overlays = load ./overlay "overlay";
|
overlays = load ./overlay "overlay";
|
||||||
legacyPackages = eachSystem (system: platform:
|
legacyPackages = eachSystem (system: platform: let
|
||||||
import nixpkgs {
|
pkgs = import nixpkgs {
|
||||||
localSystem = builtins.currentSystem or platform;
|
localSystem = builtins.currentSystem or system;
|
||||||
crossSystem = platform;
|
crossSystem = platform;
|
||||||
overlays = [ self.overlays.default ];
|
overlays = [ self.overlays.default ];
|
||||||
config.allowUnsupportedSystem = true;
|
config = {
|
||||||
});
|
allowBroken = true;
|
||||||
|
allowUnsupportedSystem = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in pkgs // {
|
||||||
|
config = pkgs.config // {
|
||||||
|
replaceStdenv = { pkgs }: self.lib.stdenv pkgs pkgs.stdenv;
|
||||||
|
replaceCrossStdenv = { buildPackages, baseStdenv }:
|
||||||
|
self.lib.stdenv self.legacyPackages.${system} baseStdenv;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
packages = eachSystem (system: platform:
|
packages = eachSystem (system: platform:
|
||||||
let pkgs = self.legacyPackages.${system};
|
let pkgs = self.legacyPackages.${system};
|
||||||
|
@ -126,6 +136,13 @@
|
||||||
targetHost = config.networking.fqdnOrHostName;
|
targetHost = config.networking.fqdnOrHostName;
|
||||||
targetUser = null;
|
targetUser = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
nixpkgs = let
|
||||||
|
platform = self.lib.platforms.x86_64-linux;
|
||||||
|
in {
|
||||||
|
buildPlatform = builtins.currentSystem or platform.system;
|
||||||
|
hostPlatform = platform;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -205,7 +205,7 @@ in {
|
||||||
enable = true;
|
enable = true;
|
||||||
envFile.text = let
|
envFile.text = let
|
||||||
ls-colours = pkgs.runCommand "ls-colours" { } ''
|
ls-colours = pkgs.runCommand "ls-colours" { } ''
|
||||||
${lib.getExe pkgs.vivid} generate catppuccin-mocha >$out
|
${lib.getExe pkgs.buildPackages.vivid} generate catppuccin-mocha >$out
|
||||||
'' |> builtins.readFile;
|
'' |> builtins.readFile;
|
||||||
in ''
|
in ''
|
||||||
load-env {
|
load-env {
|
||||||
|
|
|
@ -33,7 +33,7 @@ in lib.mkIf (osConfig.hardware.graphics.enable or false) {
|
||||||
};
|
};
|
||||||
|
|
||||||
services.mopidy = {
|
services.mopidy = {
|
||||||
enable = true;
|
# enable = true;
|
||||||
extensionPackages = with pkgs; [
|
extensionPackages = with pkgs; [
|
||||||
mopidy-iris
|
mopidy-iris
|
||||||
mopidy-local
|
mopidy-local
|
||||||
|
|
|
@ -4,13 +4,25 @@ let inherit (nixpkgs) lib;
|
||||||
in lib.mapAttrs (system: platform: lib.systems.elaborate platform) {
|
in lib.mapAttrs (system: platform: lib.systems.elaborate platform) {
|
||||||
"x86_64-linux" = {
|
"x86_64-linux" = {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
|
config = "x86_64-unknown-linux-musl";
|
||||||
|
useLLVM = true;
|
||||||
|
linker = "lld";
|
||||||
|
gcc.arch = "x86-64-v3";
|
||||||
};
|
};
|
||||||
|
|
||||||
"aarch64-linux" = {
|
"aarch64-linux" = {
|
||||||
system = "aarch64-linux";
|
system = "aarch64-linux";
|
||||||
|
config = "aarch64-unknown-linux-musl";
|
||||||
|
useLLVM = true;
|
||||||
|
linker = "lld";
|
||||||
|
gcc.arch = "armv8-a";
|
||||||
};
|
};
|
||||||
|
|
||||||
"riscv64-linux" = {
|
"riscv64-linux" = {
|
||||||
system = "riscv64-linux";
|
system = "riscv64-linux";
|
||||||
|
config = "riscv64-unknown-linux-musl";
|
||||||
|
useLLVM = true;
|
||||||
|
linker = "lld";
|
||||||
|
gcc.arch = "rv64imacfd";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
42
lib/stdenv.nix
Normal file
42
lib/stdenv.nix
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
{ ... }: pkgs: stdenv:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (lib) optionalAttrs optionals toList;
|
||||||
|
inherit (pkgs) lib;
|
||||||
|
inherit (stdenv) targetPlatform;
|
||||||
|
in pkgs.addAttrsToDerivation (prevAttrs: let
|
||||||
|
overrideAlloc = prevAttrs.overrideAlloc or true;
|
||||||
|
|
||||||
|
inputs = optionals overrideAlloc [ pkgs.mimalloc ];
|
||||||
|
|
||||||
|
cflags = [ "-pipe" ];
|
||||||
|
ldflags = [
|
||||||
|
"-O2"
|
||||||
|
"--hash-style=gnu"
|
||||||
|
] ++ optionals overrideAlloc [ "-lmimalloc" ];
|
||||||
|
|
||||||
|
rustflags = [
|
||||||
|
"-C" "opt-level=2"
|
||||||
|
"-C" "linker-flavor=ld.lld"
|
||||||
|
"-C" "lto"
|
||||||
|
"-C" "linker-plugin-lto"
|
||||||
|
"-C" "link-arg=--icf=safe"
|
||||||
|
"-C" "link-arg=--lto-O2"
|
||||||
|
] ++ optionals (targetPlatform.isx86_64 && targetPlatform ? gcc.arch) [
|
||||||
|
"-C" "target-cpu=${targetPlatform.gcc.arch}"
|
||||||
|
] ++ (map (flag: [ "-C" "link-arg=${flag}" ]) ldflags |> lib.flatten);
|
||||||
|
in {
|
||||||
|
buildInputs = prevAttrs.buildInputs or [ ] ++ inputs;
|
||||||
|
|
||||||
|
env = prevAttrs.env or { } // optionalAttrs (!prevAttrs ? NIX_CFLAGS_COMPILE) {
|
||||||
|
NIX_CFLAGS_COMPILE = toList prevAttrs.env.NIX_CFLAGS_COMPILE or [ ] ++ cflags |> toString;
|
||||||
|
} // optionalAttrs (prevAttrs ? env.NIX_LDFLAGS) {
|
||||||
|
NIX_LDFLAGS = toList prevAttrs.NIX_LDFLAGS or [ ] ++ ldflags |> toString;
|
||||||
|
};
|
||||||
|
|
||||||
|
NIX_RUSTFLAGS = prevAttrs.NIX_RUSTFLAGS or [ ] ++ rustflags;
|
||||||
|
} // optionalAttrs (prevAttrs ? NIX_CFLAGS_COMPILE) {
|
||||||
|
NIX_CFLAGS_COMPILE = toList prevAttrs.NIX_CFLAGS_COMPILE or [ ] ++ cflags;
|
||||||
|
} // optionalAttrs (!prevAttrs ? env.NIX_LDFLAGS) {
|
||||||
|
NIX_LDFLAGS = toList prevAttrs.NIX_LDFLAGS or [ ] ++ ldflags;
|
||||||
|
}) stdenv
|
|
@ -11,6 +11,7 @@
|
||||||
iosched
|
iosched
|
||||||
kernel
|
kernel
|
||||||
locale-en_EU
|
locale-en_EU
|
||||||
|
musl
|
||||||
network
|
network
|
||||||
nix
|
nix
|
||||||
openssh
|
openssh
|
||||||
|
|
7
nixos/module/musl.nix
Normal file
7
nixos/module/musl.nix
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{ ...}: { modulesPath, ... }: {
|
||||||
|
disabledModules = [
|
||||||
|
(modulesPath + "/config/ldso.nix")
|
||||||
|
(modulesPath + "/programs/nix-ld.nix")
|
||||||
|
(modulesPath + "/config/stub-ld.nix")
|
||||||
|
];
|
||||||
|
}
|
|
@ -1,9 +1,35 @@
|
||||||
{ nixpkgs, ... }: final: prev:
|
{ self, nixpkgs, ... }: final: prev:
|
||||||
let
|
let
|
||||||
inherit (nixpkgs) lib;
|
inherit (nixpkgs) lib;
|
||||||
inherit (lib) toList;
|
inherit (lib) toList;
|
||||||
inherit (prev.stdenv) hostPlatform;
|
inherit (prev.stdenv) buildPlatform hostPlatform;
|
||||||
|
inherit (self.lib) removePackages;
|
||||||
in {
|
in {
|
||||||
|
bind = prev.bind.overrideAttrs (prevAttrs: {
|
||||||
|
buildInputs = prevAttrs.buildInputs or [ ]
|
||||||
|
|> removePackages [ "jemalloc" ];
|
||||||
|
});
|
||||||
|
|
||||||
|
keyutils = prev.keyutils.overrideAttrs (prevAttrs: {
|
||||||
|
NIX_LDFLAGS = toList prevAttrs.NIX_LDFLAGS or [ ] ++ [ "--undefined-version" ];
|
||||||
|
});
|
||||||
|
|
||||||
|
kexec-tools = prev.kexec-tools.override { stdenv = final.gccStdenv; };
|
||||||
|
|
||||||
|
llvmPackages = prev.llvmPackages // {
|
||||||
|
libcxx = prev.llvmPackages.libcxx.override {
|
||||||
|
devExtraCmakeFlags = [ "-DLIBCXX_HAS_MUSL_LIBC=1" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
netbsd = prev.netbsd.overrideScope (final: prev: {
|
||||||
|
compatIfNeeded = [ final.compat ];
|
||||||
|
|
||||||
|
compat = prev.compat.overrideAttrs (prevAttrs: {
|
||||||
|
makeFlags = prevAttrs.makeFlags ++ [ "OBJCOPY=:" ];
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
numactl = prev.numactl.overrideAttrs (prevAttrs: {
|
numactl = prev.numactl.overrideAttrs (prevAttrs: {
|
||||||
patches = prevAttrs.patches or [ ] ++ [
|
patches = prevAttrs.patches or [ ] ++ [
|
||||||
(final.fetchpatch {
|
(final.fetchpatch {
|
||||||
|
@ -13,19 +39,33 @@ in {
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
redis = prev.redis.overrideAttrs {
|
python3 = (prev.python3.overrideAttrs (prevAttrs: {
|
||||||
doCheck = false;
|
postFixup = prevAttrs.postFixup + ''
|
||||||
};
|
cat <<EOF >>"$out/nix-support/setup-hook"
|
||||||
|
setuptoolsDistutilsHook() {
|
||||||
|
export SETUPTOOLS_USE_DISTUTILS="stdlib"
|
||||||
|
}
|
||||||
|
|
||||||
python312 = prev.python312.override {
|
addEnvHooks "\$hostOffset" setuptoolsDistutilsHook
|
||||||
|
EOF
|
||||||
|
'';
|
||||||
|
})).override {
|
||||||
|
enableLTO = false;
|
||||||
packageOverrides = final: prev: {
|
packageOverrides = final: prev: {
|
||||||
pywebview = prev.pywebview.overrideAttrs ({
|
html5-parser = prev.html5-parser.overrideAttrs (prevAttrs: {
|
||||||
doCheck = false;
|
env = prevAttrs.env or { } // {
|
||||||
doInstallCheck = false;
|
LD = "${final.buildPackages.stdenv.cc.targetPrefix}ld";
|
||||||
|
};
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
python3Packages = final.python3.pkgs;
|
||||||
|
|
||||||
|
redis = prev.redis.overrideAttrs {
|
||||||
|
doCheck = false;
|
||||||
|
};
|
||||||
|
|
||||||
sioyek = prev.sioyek.overrideAttrs (prevAttrs: {
|
sioyek = prev.sioyek.overrideAttrs (prevAttrs: {
|
||||||
env = prevAttrs.env or { } // {
|
env = prevAttrs.env or { } // {
|
||||||
NIX_CFLAGS_COMPILE = toList prevAttrs.env.NIX_CFLAGS_COMPILE or [ ]
|
NIX_CFLAGS_COMPILE = toList prevAttrs.env.NIX_CFLAGS_COMPILE or [ ]
|
||||||
|
@ -33,10 +73,22 @@ in {
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
time = prev.time.overrideAttrs (prevAttrs: {
|
||||||
|
env = prevAttrs.env or { } // {
|
||||||
|
CFLAGS = toList prevAttrs.env.CFLAGS or [ ] ++ [
|
||||||
|
"-Wno-error=implicit-function-declaration"
|
||||||
|
] |> toString;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
zeromq = prev.zeromq.overrideAttrs (prevAttrs: {
|
zeromq = prev.zeromq.overrideAttrs (prevAttrs: {
|
||||||
postPatch = prevAttrs.postPatch or "" + ''
|
postPatch = prevAttrs.postPatch or "" + ''
|
||||||
substituteInPlace CMakeLists.txt \
|
substituteInPlace CMakeLists.txt \
|
||||||
--replace-fail 'CACHELINE_SIZE EQUAL "undefined"' 'CACHELINE_SIZE STREQUAL "undefined"'
|
--replace-fail 'CACHELINE_SIZE EQUAL "undefined"' 'CACHELINE_SIZE STREQUAL "undefined"'
|
||||||
'';
|
'';
|
||||||
});
|
});
|
||||||
|
|
||||||
|
zlib = prev.zlib.override {
|
||||||
|
splitStaticOutput = false;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ let
|
||||||
inherit (nixpkgs) lib;
|
inherit (nixpkgs) lib;
|
||||||
in {
|
in {
|
||||||
mimalloc = (prev.mimalloc.overrideAttrs (prevAttrs: {
|
mimalloc = (prev.mimalloc.overrideAttrs (prevAttrs: {
|
||||||
|
overrideAlloc = false;
|
||||||
postPatch = prevAttrs.postPatch or "" + ''
|
postPatch = prevAttrs.postPatch or "" + ''
|
||||||
sed -E -i \
|
sed -E -i \
|
||||||
-e 's/(\{ )1(, UNINIT, MI_OPTION_LEGACY\(purge_decommits,reset_decommits\) \})/\10\2/' \
|
-e 's/(\{ )1(, UNINIT, MI_OPTION_LEGACY\(purge_decommits,reset_decommits\) \})/\10\2/' \
|
||||||
|
@ -33,10 +34,6 @@ in {
|
||||||
|
|
||||||
fractal = prev.fractal.overrideAttrs (prevAttrs: {
|
fractal = prev.fractal.overrideAttrs (prevAttrs: {
|
||||||
nativeBuildInputs = prevAttrs.nativeBuildInputs or [ ] ++ [ final.makeBinaryWrapper ];
|
nativeBuildInputs = prevAttrs.nativeBuildInputs or [ ] ++ [ final.makeBinaryWrapper ];
|
||||||
buildInputs = prevAttrs.buildInputs or [ ] ++ [ final.mimalloc ];
|
|
||||||
|
|
||||||
NIX_RUSTFLAGS = lib.toList prevAttrs.NIX_RUSTFLAGS or [ ] ++ [ "-C" "link-arg=-lmimalloc" ];
|
|
||||||
|
|
||||||
postInstall = prevAttrs.postInstall or "" + ''
|
postInstall = prevAttrs.postInstall or "" + ''
|
||||||
wrapProgram "$out/bin/fractal" \
|
wrapProgram "$out/bin/fractal" \
|
||||||
--set MIMALLOC_RESERVE_HUGE_OS_PAGES 1
|
--set MIMALLOC_RESERVE_HUGE_OS_PAGES 1
|
||||||
|
@ -47,47 +44,8 @@ in {
|
||||||
mpv = final.mpv-unwrapped;
|
mpv = final.mpv-unwrapped;
|
||||||
extraMakeWrapperArgs = [ "--set" "MIMALLOC_RESERVE_HUGE_OS_PAGES" "1" ];
|
extraMakeWrapperArgs = [ "--set" "MIMALLOC_RESERVE_HUGE_OS_PAGES" "1" ];
|
||||||
};
|
};
|
||||||
} // lib.genAttrs [
|
|
||||||
"bat"
|
|
||||||
"bottom"
|
|
||||||
"cryptsetup"
|
|
||||||
"dbus-broker"
|
|
||||||
"erlang"
|
|
||||||
"fd"
|
|
||||||
"firefox-unwrapped"
|
|
||||||
"fuzzel"
|
|
||||||
"helix"
|
|
||||||
"kitty"
|
|
||||||
"mako"
|
|
||||||
"mpv-unwrapped"
|
|
||||||
"niri"
|
|
||||||
"nix"
|
|
||||||
"nushell"
|
|
||||||
"openssh"
|
|
||||||
"pipewire"
|
|
||||||
"pueue"
|
|
||||||
"ripgrep"
|
|
||||||
"sd"
|
|
||||||
"sioyek"
|
|
||||||
"sudo-rs"
|
|
||||||
"systemd"
|
|
||||||
"swayidle"
|
|
||||||
"swaylock"
|
|
||||||
"swaylock-effects"
|
|
||||||
"thunderbird-unwrapped"
|
|
||||||
"uutils-coreutils"
|
|
||||||
"uutils-coreutils-noprefix"
|
|
||||||
"waybar"
|
|
||||||
"wirepluber"
|
|
||||||
"xdg-desktop-portal-gnome"
|
|
||||||
"xdg-desktop-portal-gtk"
|
|
||||||
] (pkg: prev.${pkg}.overrideAttrs (prevAttrs: {
|
|
||||||
buildInputs = prevAttrs.buildInputs or [ ] ++ [ final.mimalloc ];
|
|
||||||
env = prevAttrs.env or { } // lib.optionalAttrs (prevAttrs ? env.NIX_LDFLAGS) {
|
|
||||||
NIX_LDFLAGS = toString (lib.toList prevAttrs.env.NIX_LDFLAGS or [ ] ++ [ "-lmimalloc" ]);
|
|
||||||
};
|
|
||||||
|
|
||||||
NIX_RUSTFLAGS = lib.toList prevAttrs.NIX_RUSTFLAGS or [ ] ++ [ "-C" "link-arg=-lmimalloc" ];
|
perl = prev.perl.overrideAttrs {
|
||||||
} // lib.optionalAttrs (!prevAttrs ? env.NIX_LDFLAGS) {
|
overrideAlloc = false;
|
||||||
NIX_LDFLAGS = lib.toList prevAttrs.NIX_LDFLAGS or [ ] ++ [ "-lmimalloc" ];
|
};
|
||||||
}))
|
}
|
||||||
|
|
Loading…
Reference in a new issue