Faissnama
This project shows how new java.foreign
API (project Panama) can be used to
call C/C++ library - Faiss - from Java.
MaOS
Step 1 - build & install faiss
-
Download faiss
git clone https://github.com/facebookresearch/faiss.git cd faiss
-
Install OpenMP
brew install libomp
-
Create build directory
cmake -B build \ -DFAISS_ENABLE_GPU=OFF \ -DFAISS_ENABLE_PYTHON=OFF \ -DBUILD_TESTING=OFF \ -DBUILD_SHARED_LIBS=ON \ -DCMAKE_BUILD_TYPE=Release \ -DFAISS_OPT_LEVEL=avx2 \ -DFAISS_ENABLE_C_API=ON \ -DOpenMP_C_FLAGS=-fopenmp=lomp \ -DOpenMP_CXX_FLAGS=-fopenmp=lomp \ -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ -DOpenMP_libomp_LIBRARY="/opt/homebrew/opt/libomp/lib/libomp.dylib" \ -DOpenMP_CXX_FLAGS="-Xpreprocessor -fopenmp /opt/homebrew/opt/libomp/lib/libomp.dylib \ -I/opt/homebrew/opt/libomp/include" -DOpenMP_CXX_LIB_NAMES="libomp" \ -DOpenMP_C_FLAGS="-Xpreprocessor -fopenmp --I/opt/homebrew/opt/libomp/include" .
-
Build faiss
make -k -C build -j faiss
-
build & install faiss C API
cd build/c_api && make && sudo make install sudo cp libfaiss_c.dylib /usr/local/lib/
Step 2 - generate C bindings
-
Download & extract jextract
wget https://download.java.net/java/early_access/jextract/2/openjdk-19-jextract+2-3_macos-x64_bin.tar.gz && tar -xzf openjdk-19-jextract+2-3_macos-x64_bin.tar.gz
-
Generate faiss C bindings (they will be created in
faiss
directory)cd scripts && ./create_bindings.sh
Linux
todo