Skip to content

Commit

Permalink
Merge pull request #1976 from o1-labs/brian/macos-fix
Browse files Browse the repository at this point in the history
Fix devshell for macos
  • Loading branch information
Geometer1729 authored Jan 23, 2025
2 parents 64bbfad + a87a3d3 commit 8ef36d1
Show file tree
Hide file tree
Showing 4 changed files with 237 additions and 182 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
### Changed

- Changed an internal type to improve IntelliSense on ZkProgram methods https://github.com/o1-labs/o1js/pull/1933
- Updated o1js nix devshell to build rust on all executions of `npm run build:update-bindings`

### Fixed

Expand Down
16 changes: 16 additions & 0 deletions README-dev.md
Original file line number Diff line number Diff line change
Expand Up @@ -241,3 +241,19 @@ To facilitate this process, use the provided script named `run-debug`. To use th
This script initializes a Node.js process with the `--inspect-brk` flag that starts the Node.js inspector and breaks before the user script starts (i.e., it pauses execution until a debugger is attached). The `--enable-source-maps` flag ensures that source maps are used to allow easy debugging of o1js code directly.

After the Node.js process is running, open the Chrome browser and navigate to `chrome://inspect` to attach the Chrome Debugger to the Node.js process. You can set breakpoints, inspect variables, and profile the performance of your zkApp or o1js. For more information on using the Chrome Debugger, see the [DevTools documentation](https://developer.chrome.com/docs/devtools/).

### Debugging within the SDK
To debug a call into the SDK, you can link your local copy of the SDK with `npm link`. After that, you'll be able to add log statements, set breakpoints, and make code changes. Within the SDK, run:
```sh
npm run link
```
Then in your zkApp codebase, run:
```sh
npm link o1js
```

#### Logging from OCaml
If you need to debug a call into the OCaml code, the process is a little more complicated. The OCaml is compiled into JavaScript with js_of_ocaml during `npm run build:update-bindings`, so you'll need to add your logs into the OCaml code and rebuild the bindings to see them. Logging from OCaml in a way that will reflect as JS `console.log`s in the compiled code can be done like this:
```ocaml
let () = print_endline "This is a log" in
```
35 changes: 16 additions & 19 deletions README-nix.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,7 @@ cd o1js
From a new shell, go to `{REPO_PATH}/o1js` and from there execute `./pin.sh` to
update the submodules and add the flakes entries. Then, you can open a Nix shell
with all the dependencies required executing `nix develop o1js#default`, or
alternatively `nix develop o1js#mina-shell` (which works better from MacOS).
with all the dependencies required executing `nix develop o1js#default`.
```console
./pin.sh
Expand All @@ -92,21 +91,7 @@ nix develop o1js#default
The first time you run this command, you can expect it to take hours (or even a full day) to complete. Then, you will observe that the current devshell becomes a Nix shell with the right
configuration for `o1js` and `mina`.
In order to make sure that the bindings will be regenerated in the case that you
are modifying them, make sure to comment out the conditionals in
`src/mina/src/lib/crypto/kimchi_bindings/js/node_js/build.sh` and `src/mina/src/lib/crypto/kimchi_bindings/js/web/build.sh` locally. That's because otherwise the
PLONK_WASM_WEB check prevents `proof-systems` from compiling with each build.
```sh
if true; then # [[ -z "${PLONK_WASM_WEB-}" ]]; then
export RUSTFLAGS="-C target-feature=+atomics,+bulk-memory,+mutable-globals -C link-arg=--no-check-features -C link-arg=--max-memory=4294967296"
rustup run nightly-2023-09-01 wasm-pack build --target web --out-dir ../js/web ../../wasm -- -Z build-std=panic_abort,std
else
cp "$PLONK_WASM_WEB"/* -R .
fi
```
Then, you can build o1js and update the bindings.
From within the shell, you can build o1js and update the bindings.
```console
npm run build
Expand Down Expand Up @@ -152,7 +137,7 @@ The second flag increases the default number of jobs being 1, so that rebuilding
The last two lines tell Nix to use the Mina Foundation's cache whenever possible, which should as well speed things up when building code that has been build in Mina's CI before.
## Common errors
## Common Issues
Errors while using Nix have been reported. This section collects a set of common
errors and proposes fixes for them.
Expand Down Expand Up @@ -305,4 +290,16 @@ Then, the error message would still contain old directories.
#### Fix
Create a new environment for Nix and start from scratch. In particular, run the garbage collector which will remove old dependencies.
Rerun `pin.sh` and `src/mina/nix/pin.sh`.
### Changes to nix flakes aren't taking effect
On MacOS, nix may ignore changes to files when nix commands are run and reuse the flake cached in its registry. Running commands like `nix develop o1js` and `nix run o1js#update-bindings` will reuse the cached version of the flake. As a result:
- The devshell could be missing newly added dependencies.
- Builds executed directly with `nix run` could be generated from old source files.
#### Fix
There are two ways to ensure Nix recognizes flake changes:
- Rerun `pin.sh` to force an update to the registry, then run your command.
- Reference the flake by its directory path rather than its registry name. This forces Nix to use the current contents of the directory:
```bash
nix develop .'?submodules=1#default'
```
Loading

0 comments on commit 8ef36d1

Please sign in to comment.