Skip to content

Commit

Permalink
Fix Nixos Rust toolchain issues
Browse files Browse the repository at this point in the history
Unfortunately Rust is a bit of a headache in Nixos. Previously this
project used the default nixpkgs rustc/cargo packages, but they're a few
versions out of date. This commit switches to using the installation via
Rustup with a pinned toolchain (https://nixos.wiki/wiki/Rust).
  • Loading branch information
byronwasti committed Feb 3, 2024
1 parent f02141e commit c54a45c
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 16 deletions.
3 changes: 3 additions & 0 deletions rust-toolchain.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[toolchain]
channel="1.75.0"
components = ["rustfmt", "clippy", "rust-analyzer"]
56 changes: 40 additions & 16 deletions shell.nix
Original file line number Diff line number Diff line change
@@ -1,20 +1,44 @@
{ pkgs ? import <nixpkgs> {} }:
with pkgs;
mkShell {
nativeBuildInputs = [
bintools-unwrapped
just
fastmod
glibc
cpulimit
rustc
cargo
gcc
rustfmt
clippy
linuxPackages_latest.perf
hyperfine
];
mkShell rec {
buildInputs = with pkgs; [
clang
# Replace llvmPackages with llvmPackages_X, where X is the latest LLVM version (at the time of writing, 16)
llvmPackages.bintools
# bintools-unwrapped
rustup
just
fastmod
glibc
cpulimit
gcc
clippy
linuxPackages_latest.perf
hyperfine
];

RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}";
RUSTC_VERSION = pkgs.lib.readFile ./rust-toolchain.toml;
# https://github.com/rust-lang/rust-bindgen#environment-variables
LIBCLANG_PATH = pkgs.lib.makeLibraryPath [ pkgs.llvmPackages_latest.libclang.lib ];
shellHook = ''
export PATH=$PATH:''${CARGO_HOME:-~/.cargo}/bin
export PATH=$PATH:''${RUSTUP_HOME:-~/.rustup}/toolchains/$RUSTC_VERSION-x86_64-unknown-linux-gnu/bin/
'';
# Add precompiled library to rustc search path
RUSTFLAGS = (builtins.map (a: ''-L ${a}/lib'') [
# add libraries here (e.g. pkgs.libvmi)
]);
# Add glibc, clang, glib and other headers to bindgen search path
BINDGEN_EXTRA_CLANG_ARGS =
# Includes with normal include path
(builtins.map (a: ''-I"${a}/include"'') [
# add dev libraries here (e.g. pkgs.libvmi.dev)
pkgs.glibc.dev
])
# Includes with special directory paths
++ [
''-I"${pkgs.llvmPackages_latest.libclang.lib}/lib/clang/${pkgs.llvmPackages_latest.libclang.version}/include"''
''-I"${pkgs.glib.dev}/include/glib-2.0"''
''-I${pkgs.glib.out}/lib/glib-2.0/include/''
];
}

0 comments on commit c54a45c

Please sign in to comment.