Skip to content

Commit

Permalink
make shell.nix better (#1858)
Browse files Browse the repository at this point in the history
* make shell.nix better

* Mention using RUST_BOOTSTRAP_CONFIG

* Move things to `buildInputs` and add `glibc.out glibc.static`

This fixes the nofile-limit.rs UI test.

* short lines for the short line fans

* Fix pkgs
  • Loading branch information
Nilstrieb committed Mar 1, 2024
1 parent 231c30f commit 9ef55c5
Showing 1 changed file with 24 additions and 57 deletions.
81 changes: 24 additions & 57 deletions src/building/suggested.md
Original file line number Diff line number Diff line change
Expand Up @@ -276,67 +276,34 @@ If you're using nix, you can use the following nix-shell to work on Rust:

```nix
{ pkgs ? import <nixpkgs> {} }:
# This file contains a development shell for working on rustc.
let
# Build configuration for rust-lang/rust. Based on `config.example.toml` (then called
# `config.toml.example`) from `1bd30ce2aac40c7698aa4a1b9520aa649ff2d1c5`
config = pkgs.writeText "rustc-config" ''
profile = "compiler" # you may want to choose a different profile, like `library` or `tools`
[build]
patch-binaries-for-nix = true
# The path to (or name of) the GDB executable to use. This is only used for
# executing the debuginfo test suite.
gdb = "${pkgs.gdb}/bin/gdb"
python = "${pkgs.python3Full}/bin/python"
[rust]
debug = true
incremental = true
deny-warnings = false
# Indicates whether some LLVM tools, like llvm-objdump, will be made available in the
# sysroot.
llvm-tools = true
# Print backtrace on internal compiler errors during bootstrap
backtrace-on-ice = true
'';
ripgrepConfig =
let
# Files that are ignored by ripgrep when searching.
ignoreFile = pkgs.writeText "rustc-rgignore" ''
configure
config.example.toml
x.py
LICENSE-MIT
LICENSE-APACHE
COPYRIGHT
**/*.txt
**/*.toml
**/*.yml
**/*.nix
*.md
src/ci
src/etc/
src/llvm-emscripten/
src/llvm-project/
src/rtstartup/
src/rustllvm/
src/stdsimd/
src/tools/rls/rls-analysis/test_data/
'';
in
pkgs.writeText "rustc-ripgreprc" "--ignore-file=${ignoreFile}";
in
pkgs.mkShell {
name = "rustc";
nativeBuildInputs = with pkgs; [
gcc_multi binutils cmake ninja openssl pkgconfig python39 git curl cacert patchelf nix psutils
binutils cmake ninja pkg-config python3 git curl cacert patchelf nix
];
buildInputs = with pkgs; [
openssl glibc.out glibc.static
];
RIPGREP_CONFIG_PATH = ripgrepConfig;
# Avoid creating text files for ICEs.
RUSTC_ICE = "0";
}
```

Note that when using nix on a not-NixOS distribution, it may be necessary to set
**`patch-binaries-for-nix = true` in `config.toml`**.
Bootstrap tries to detect whether it's running in nix and enable patching automatically,
but this detection can have false negatives.

You can also use your nix shell to manage `config.toml`:

```nix
let
config = pkgs.writeText "rustc-config" ''
# Your config.toml content goes here
''
pkgs.mkShell {
/* ... */
# This environment varaible tells bootstrap where our config.toml is.
RUST_BOOTSTRAP_CONFIG = config;
}
```
Expand Down

0 comments on commit 9ef55c5

Please sign in to comment.