-
Notifications
You must be signed in to change notification settings - Fork 548
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Proof-of-concept Nix environments for Ibex development #2156
Draft
hcallahan-lowrisc
wants to merge
19
commits into
lowRISC:master
Choose a base branch
from
hcallahan-lowrisc:nix_env_init_poc
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Proof-of-concept Nix environments for Ibex development #2156
hcallahan-lowrisc
wants to merge
19
commits into
lowRISC:master
from
hcallahan-lowrisc:nix_env_init_poc
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- Changes in /vendor should be applied using a vendoring patch, or fixed upstream Signed-off-by: Harry Callahan <[email protected]>
This improves portability across different operating systems Signed-off-by: Harry Callahan <[email protected]>
There was problems running vcs simulations with this command, as something to do with launching verdi is not working correctly. It seems we are missing deps for some executable, but the error messages are really unhelpful on tracking down exactly what. This seems to work, for now. Signed-off-by: Harry Callahan <[email protected]>
This ensures any logging we do before the call to 'run_one()' will appear in the correct order in the file. Signed-off-by: Harry Callahan <[email protected]>
This is in-line with how we handle other environment variables in the build, and we set the variable inside the appropriate dictionary when invoking the command (run_rtl.py in this case).
This matches the dependencies given in the python-requirements.txt file in the repo root, but uses the pyproject.toml format and the poetry tool to allow nix to import this information to construct a python environment. The poetry.lock file allows each python dep to be pinned, and would need to be updated using the poetry tool to bump any dependency. e.g. ``` nix shell nixpkgs#poetry poetry update ```
@GregAC @rswarbrick you may find this interesting to play around with |
- The default devShell has enough dependencies to run verilator simulations of Ibex - Some other dependencies are setup but yet unusued.
hcallahan-lowrisc
force-pushed
the
nix_env_init_poc
branch
4 times, most recently
from
March 29, 2024 09:01
353d23b
to
d8cad20
Compare
This adds a devShell that employees can use to bootstrap access to non-public EDA tooling. Evaluation will fail without appropriate credentials to fetch the repository 'lowrisc-nix-private'. Disclaimer: EXPERIMENTAL These shells will only be functional in the appropriate restricted environments. This is an experiment at tracking dependencies on proprietary tooling that is less out-of-band compared to simply assuming the underlying environment is pre-populated. For obvious reasons, this will always have much weaker reproducibility guarantees than freely-available software and open-source deps. However we can still lean on Nix to make bootstrapping non-public environments fast, ergonomic and hopefully reproducible within the constricted space. Using a nix flake input that is a private repository, we can effectively pin a version of the private dependencies (hash+timestamp etc) without exposing what they are. As nix is lazily evaluated, these inputs will not attempt to be fetched unless we evaluate an output which depends on them, and hence they should happily co-exist with other flake attributes for most consumers. To avoid the flake.lock in this repository from exposing the transitive deps of the private input, that flake does not track it's inputs in the standard way. Hence, impure evaluation mode is required when using these outputs. e.g. ``` nix develop .#eda_shell_lowrisc nix develop .#eda_shell_lowrisc --command bash -c \ "make -C dv/uvm/core_ibex SIMULATOR=xlm ITERATIONS=4 TEST=riscv_rand_instr_test" ``` Signed-off-by: Harry Callahan <[email protected]>
hcallahan-lowrisc
force-pushed
the
nix_env_init_poc
branch
from
March 29, 2024 09:39
d8cad20
to
00bec32
Compare
HU90m
approved these changes
Apr 5, 2024
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ran this locally and it worked great!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Add a Nix flake to provide development environments for Ibex simulation and synthesis.
The goal of this is to try and utilize the principled properties of Nix (the tool, the language, etc) to easily bootstrap reproducible development environments. This should work on any x86_64-linux system where nix is installable (macOS support is also possible), as there is no dependency on system libraries at all.
Precursors
N.B. The first time running
nix develop
may take a little while to fetch and build dependencies. This is normal (no system library deps etc.), and the second time everything will be cached.Demo 1 (verilator sims)
make reset
when switching between sims)Demo 2 (synthesis)
Demo 3 (HDL simulations including bootstrapping internal lowrisc tools)
N.B. this will only evaluate for lowrisc internal environments with appropriate credentials. See the commit message (350969a) for more details