Skip to content

Commit 8ef36d1

Browse files
authored
Merge pull request #1976 from o1-labs/brian/macos-fix
Fix devshell for macos
2 parents 64bbfad + a87a3d3 commit 8ef36d1

File tree

4 files changed

+237
-182
lines changed

4 files changed

+237
-182
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
4444
### Changed
4545

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

4849
### Fixed
4950

README-dev.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,3 +241,19 @@ To facilitate this process, use the provided script named `run-debug`. To use th
241241
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.
242242

243243
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/).
244+
245+
### Debugging within the SDK
246+
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:
247+
```sh
248+
npm run link
249+
```
250+
Then in your zkApp codebase, run:
251+
```sh
252+
npm link o1js
253+
```
254+
255+
#### Logging from OCaml
256+
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:
257+
```ocaml
258+
let () = print_endline "This is a log" in
259+
```

README-nix.md

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,7 @@ cd o1js
8181
8282
From a new shell, go to `{REPO_PATH}/o1js` and from there execute `./pin.sh` to
8383
update the submodules and add the flakes entries. Then, you can open a Nix shell
84-
with all the dependencies required executing `nix develop o1js#default`, or
85-
alternatively `nix develop o1js#mina-shell` (which works better from MacOS).
84+
with all the dependencies required executing `nix develop o1js#default`.
8685
8786
```console
8887
./pin.sh
@@ -92,21 +91,7 @@ nix develop o1js#default
9291
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
9392
configuration for `o1js` and `mina`.
9493
95-
In order to make sure that the bindings will be regenerated in the case that you
96-
are modifying them, make sure to comment out the conditionals in
97-
`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
98-
PLONK_WASM_WEB check prevents `proof-systems` from compiling with each build.
99-
100-
```sh
101-
if true; then # [[ -z "${PLONK_WASM_WEB-}" ]]; then
102-
export RUSTFLAGS="-C target-feature=+atomics,+bulk-memory,+mutable-globals -C link-arg=--no-check-features -C link-arg=--max-memory=4294967296"
103-
rustup run nightly-2023-09-01 wasm-pack build --target web --out-dir ../js/web ../../wasm -- -Z build-std=panic_abort,std
104-
else
105-
cp "$PLONK_WASM_WEB"/* -R .
106-
fi
107-
```
108-
109-
Then, you can build o1js and update the bindings.
94+
From within the shell, you can build o1js and update the bindings.
11095
11196
```console
11297
npm run build
@@ -152,7 +137,7 @@ The second flag increases the default number of jobs being 1, so that rebuilding
152137
153138
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.
154139
155-
## Common errors
140+
## Common Issues
156141
157142
Errors while using Nix have been reported. This section collects a set of common
158143
errors and proposes fixes for them.
@@ -305,4 +290,16 @@ Then, the error message would still contain old directories.
305290
306291
#### Fix
307292
308-
Create a new environment for Nix and start from scratch. In particular, run the garbage collector which will remove old dependencies.
293+
Rerun `pin.sh` and `src/mina/nix/pin.sh`.
294+
295+
### Changes to nix flakes aren't taking effect
296+
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:
297+
- The devshell could be missing newly added dependencies.
298+
- Builds executed directly with `nix run` could be generated from old source files.
299+
#### Fix
300+
There are two ways to ensure Nix recognizes flake changes:
301+
- Rerun `pin.sh` to force an update to the registry, then run your command.
302+
- Reference the flake by its directory path rather than its registry name. This forces Nix to use the current contents of the directory:
303+
```bash
304+
nix develop .'?submodules=1#default'
305+
```

0 commit comments

Comments
 (0)