Skip to content
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

docs: added section for potential contributors #4

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,59 @@ console.log(results1.labels); // [ 3, 0, 1, 2 ]
console.log(results1.distances); // [ 0, 1, 1, 4 ]
```

## Setup for contibutors
Copy link
Owner

@ewfian ewfian May 25, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I recommend putting this part in a new CONTRIBUTING.md as there are also Windows and Linux related information (I can add the Windows and Linux parts later).


This section is only relevant for you, in case you'd like to contribute to this project:

```sh
# install JS/node dependencies
npm i

# in case you forked, deps/faiss submodule wouldn't by default;
# checkout the FAISS source submodule
git submodule update --init --recursive

# compile the binding code
npm run build:debug

# test
npm run test
```

### Pitfall: M1/M2 OpenMP linking architecture mismatch

In case you see this warning:

> ld: warning: ignoring file /usr/local/opt/libomp/lib/libomp.dylib, building for macOS-arm64 but attempting to link with file built for macOS-x86_64

...or testing the library errors out with:

`dlopen(faiss-node/build/Debug/faiss-node.node, 0x0001): symbol not found in flat namespace (___kmpc_barrier)``
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"``" duplicated


You're probably running on an machine with a M1/M2 chip and running into a multi-architecture linking issue.
`node-faiss` must be linked against `OpenMP`, but the binary architecute of the compiled library and the
architecture of `OpenMP` library must match. You'll run into this issue if one of the architectures differ:

```zsh
user@dev faiss-node % arch
arm64
user@dev % file /usr/local/opt/libomp/lib/libomp.dylib
/usr/local/opt/libomp/lib/libomp.dylib: Mach-O 64-bit dynamically linked shared library x86_64
user@dev %
```

You might need to reinstall `Homebrew` for M1/M2 and install `libomp` again from a host terminal
process that is running in `arm64` architecture or explicity request for `arm64` when installing OpenMP:
`arch -arm64 brew install libomp`.

In case linking still ends up with the same error, try:
```zsh
export LDFLAGS="-L/opt/homebrew/opt/libomp/lib"
export CPPFLAGS="-I/opt/homebrew/opt/libomp/include"
```

Run `npm run build` again and make sure that `libomp.dylib` is picked from `/opt/homebrew` (arm64) folder.

## License

MIT