redox/flake.nix
Konstantin Shabanov 7992e91522 nix: Fix stripping
Reduces prefix size from 7.6G to 3.1G.
2026-11-02 14:30:35 +07:00

196 lines
6.2 KiB
Nix

{
description = "The Nix-flake for Redox development on NixOS";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
nixpkgs,
rust-overlay,
...
}:
let
systems = [
"i686-linux"
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
overlays = [ rust-overlay.overlays.default ];
pkgsFor =
system:
import nixpkgs {
inherit system overlays;
};
forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f (pkgsFor system));
in
{
formatter = forAllSystems (pkgs: pkgs.nixfmt-tree);
# TODO: Create Redox OS Image as package
# TODO: No cross-compile for now, as there is no pkgsCross.aarch64-unknown-redox and so on
# TODO: Get rid of make env step: package custom libtool and setup rust toolchain properly
devShells = forAllSystems (pkgs: {
# Podman config taken from https://nixos.wiki/wiki/Podman and https://gist.github.com/adisbladis/187204cb772800489ee3dac4acdd9947
# Provides a script that copies required files to ~/
default =
let
podmanSetupScript =
let
registriesConf = pkgs.writeText "registries.conf" ''
[registries.search]
registries = ['docker.io']
[registries.block]
registries = []
'';
in
pkgs.writeScript "podman-setup" ''
#!${pkgs.runtimeShell}
# Dont overwrite customised configuration
if ! test -f ~/.config/containers/policy.json; then
install -Dm555 ${pkgs.skopeo.src}/default-policy.json ~/.config/containers/policy.json
fi
if ! test -f ~/.config/containers/registries.conf; then
install -Dm555 ${registriesConf} ~/.config/containers/registries.conf
fi
systemctl --user start podman.socket || true
export PODMAN_SYSTEMD_UNIT=podman.socket
'';
# Provides a fake "docker" binary mapping to podman
dockerCompat = pkgs.runCommand "docker-podman-compat" { } ''
mkdir -p $out/bin
ln -s ${pkgs.podman}/bin/podman $out/bin/docker
'';
in
pkgs.mkShell rec {
buildInputs = with pkgs; [
# Podman
dockerCompat
podman # Docker compat
runc # Container runtime
conmon # Container runtime monitor
skopeo # Interact with container registry
slirp4netns # User-mode networking for unprivileged namespaces
fuse-overlayfs # CoW for images, much faster than default vfs
# with FSTOOLS_IN_PODMAN=1 these are not needed
# without it, the installer fails to link FUSE somehow
#fuse
qemu_kvm # for host arch
qemu
];
LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath buildInputs;
SKIP_CHECK_TOOLS = "1";
FSTOOLS_IN_PODMAN = "1";
PODMAN_BUILD = "1";
shellHook = ''
# Install required configuration
${podmanSetupScript}
echo "Redox podman build environment loaded"
'';
};
#TODO: This isn't tested yet, use at your own risk
native = (pkgs.mkShell.override { stdenv = pkgs.gcc14Stdenv; }) rec {
nativeBuildInputs =
let
autoreconf269 = pkgs.writeShellScriptBin "autoreconf2.69" "${pkgs.autoconf269}/bin/autoreconf";
in
with pkgs;
[
(pkgs.writeShellScriptBin "${pkgs.stdenv.hostPlatform.system}-gnu-strip" ''
${pkgs.bintools-unwrapped}/bin/strip $@
'')
ant
autoconf
autoreconf269 # gnu-binutils
automake
bison
cmake
curl
doxygen
(file.overrideAttrs (attrs: {
version = "5.46";
src = fetchurl {
urls = [
"https://astron.com/pub/file/file-5.46.tar.gz"
"https://distfiles.macports.org/file/file-5.46.tar.gz"
];
hash = "sha256-ycx3x8VgxUMTXtxVWvYJ1WGdvvARmX6YjOQKPXXYYIg=";
};
}))
flex
gettext
gnumake
gnupatch
gperf
help2man
just
llvmPackages.clang
llvmPackages.llvm
lua
m4
meson
nasm
ninja
perl
perlPackages.HTMLParser
perlPackages.Po4a
pkg-config
pkgconf
(python3.withPackages (ps: with ps; [ mako ]))
qemu_kvm
rust-cbindgen
scons
texinfo
unzip
waf
wget
xdg-utils
xxd
zip
]
++ pkgs.lib.optionals pkgs.stdenv.hostPlatform.isx86 [
pkgs.syslinux
];
buildInputs = with pkgs; [
(pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml)
gmp # relibc
mpfr # relibc
libmpc # relibc
fuse # fuser
libpng # netsurf
fontconfig # orbutils
SDL # prboom
utilmacros # libX11
xtrans # libX11
];
hardeningDisable = [ "format" ];
LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath buildInputs;
PERL_PATH = "${pkgs.perl}/bin/perl";
SKIP_CHECK_TOOLS = "1";
PODMAN_BUILD = "0";
PREFIX_BINARY = "0";
shellHook = with pkgs; ''
export PKG_CONFIG_PATH="${fuse.dev}/lib/pkgconfig\
:${libpng.dev}/lib/pkgconfig"
'';
};
});
};
}