diff --git a/README.md b/README.md index 4c138b1..536c8f4 100755 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ git submodule update --init --recursive **macOS:** ```bash -brew install llvm libomp boost protobuf +brew install llvm libomp boost protobuf zeromq export CC=$(brew --prefix llvm)/bin/clang export CXX=$(brew --prefix llvm)/bin/clang++ @@ -59,7 +59,7 @@ uv sync --extra diskann **Linux (Ubuntu/Debian):** ```bash -sudo apt-get install libomp-dev libboost-all-dev protobuf-compiler libabsl-dev libmkl-full-dev libaio-dev +sudo apt-get install libomp-dev libboost-all-dev protobuf-compiler libabsl-dev libmkl-full-dev libaio-dev libzmq3-dev # Install with HNSW backend (default, recommended for most users) uv sync diff --git a/packages/leann-backend-diskann/CMakeLists.txt b/packages/leann-backend-diskann/CMakeLists.txt index ee9d932..2638282 100644 --- a/packages/leann-backend-diskann/CMakeLists.txt +++ b/packages/leann-backend-diskann/CMakeLists.txt @@ -1,8 +1,8 @@ -# packages/leann-backend-diskann/CMakeLists.txt (最终简化版) +# packages/leann-backend-diskann/CMakeLists.txt (simplified version) cmake_minimum_required(VERSION 3.20) project(leann_backend_diskann_wrapper) -# 告诉 CMake 直接进入 DiskANN 子模块并执行它自己的 CMakeLists.txt -# DiskANN 会自己处理所有事情,包括编译 Python 绑定 +# Tell CMake to directly enter the DiskANN submodule and execute its own CMakeLists.txt +# DiskANN will handle everything itself, including compiling Python bindings add_subdirectory(src/third_party/DiskANN) diff --git a/packages/leann-backend-diskann/pyproject.toml b/packages/leann-backend-diskann/pyproject.toml index 8f02feb..24637cc 100644 --- a/packages/leann-backend-diskann/pyproject.toml +++ b/packages/leann-backend-diskann/pyproject.toml @@ -8,11 +8,11 @@ version = "0.1.0" dependencies = ["leann-core==0.1.0", "numpy"] [tool.scikit-build] -# 关键:简化的 CMake 路径 +# Key: simplified CMake path cmake.source-dir = "third_party/DiskANN" -# 关键:Python 包在根目录,路径完全匹配 +# Key: Python package in root directory, paths match exactly wheel.packages = ["leann_backend_diskann"] -# 使用默认的 redirect 模式 +# Use default redirect mode editable.mode = "redirect" cmake.build-type = "Release" build.verbose = true diff --git a/packages/leann-backend-hnsw/CMakeLists.txt b/packages/leann-backend-hnsw/CMakeLists.txt index bcadd12..2b86b0a 100644 --- a/packages/leann-backend-hnsw/CMakeLists.txt +++ b/packages/leann-backend-hnsw/CMakeLists.txt @@ -1,6 +1,7 @@ -# 最终简化版 cmake_minimum_required(VERSION 3.24) project(leann_backend_hnsw_wrapper) +set(CMAKE_C_COMPILER_WORKS 1) +set(CMAKE_CXX_COMPILER_WORKS 1) # Set OpenMP path for macOS if(APPLE) @@ -11,15 +12,9 @@ if(APPLE) set(OpenMP_omp_LIBRARY "/opt/homebrew/opt/libomp/lib/libomp.dylib") endif() -# Build ZeroMQ from source -set(ZMQ_BUILD_TESTS OFF CACHE BOOL "" FORCE) -set(ENABLE_DRAFTS OFF CACHE BOOL "" FORCE) -set(ENABLE_PRECOMPILED OFF CACHE BOOL "" FORCE) -set(WITH_PERF_TOOL OFF CACHE BOOL "" FORCE) -set(WITH_DOCS OFF CACHE BOOL "" FORCE) -set(BUILD_SHARED OFF CACHE BOOL "" FORCE) -set(BUILD_STATIC ON CACHE BOOL "" FORCE) -add_subdirectory(third_party/libzmq) +# Use system ZeroMQ instead of building from source +find_package(PkgConfig REQUIRED) +pkg_check_modules(ZMQ REQUIRED libzmq) # Add cppzmq headers include_directories(third_party/cppzmq) @@ -29,6 +24,7 @@ set(MSGPACK_USE_BOOST OFF CACHE BOOL "" FORCE) add_compile_definitions(MSGPACK_NO_BOOST) include_directories(third_party/msgpack-c/include) +# Faiss configuration - streamlined build set(FAISS_ENABLE_PYTHON ON CACHE BOOL "" FORCE) set(FAISS_ENABLE_GPU OFF CACHE BOOL "" FORCE) set(FAISS_ENABLE_EXTRAS OFF CACHE BOOL "" FORCE) @@ -36,4 +32,24 @@ set(BUILD_TESTING OFF CACHE BOOL "" FORCE) set(FAISS_ENABLE_C_API OFF CACHE BOOL "" FORCE) set(FAISS_OPT_LEVEL "generic" CACHE STRING "" FORCE) +# Disable additional SIMD versions to speed up compilation +set(FAISS_ENABLE_AVX2 OFF CACHE BOOL "" FORCE) +set(FAISS_ENABLE_AVX512 OFF CACHE BOOL "" FORCE) + +# Additional optimization options from INSTALL.md +set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE) +set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) # Static library is faster to build + +# Avoid building demos and benchmarks +set(BUILD_DEMOS OFF CACHE BOOL "" FORCE) +set(BUILD_BENCHS OFF CACHE BOOL "" FORCE) + +# NEW: Tell Faiss to only build the generic version +set(FAISS_BUILD_GENERIC ON CACHE BOOL "" FORCE) +set(FAISS_BUILD_AVX2 OFF CACHE BOOL "" FORCE) +set(FAISS_BUILD_AVX512 OFF CACHE BOOL "" FORCE) + +# IMPORTANT: Disable building AVX versions to speed up compilation +set(FAISS_BUILD_AVX_VERSIONS OFF CACHE BOOL "" FORCE) + add_subdirectory(third_party/faiss) \ No newline at end of file diff --git a/packages/leann-backend-hnsw/pyproject.toml b/packages/leann-backend-hnsw/pyproject.toml index 12df4d6..274f2b4 100644 --- a/packages/leann-backend-hnsw/pyproject.toml +++ b/packages/leann-backend-hnsw/pyproject.toml @@ -15,4 +15,8 @@ wheel.packages = ["leann_backend_hnsw"] editable.mode = "redirect" cmake.build-type = "Release" build.verbose = true -build.tool-args = ["-j8"] \ No newline at end of file +build.tool-args = ["-j8"] + +# CMake definitions to optimize compilation +[tool.scikit-build.cmake.define] +CMAKE_BUILD_PARALLEL_LEVEL = "8" \ No newline at end of file diff --git a/packages/leann-backend-hnsw/third_party/faiss b/packages/leann-backend-hnsw/third_party/faiss index 2547df4..954f1a3 160000 --- a/packages/leann-backend-hnsw/third_party/faiss +++ b/packages/leann-backend-hnsw/third_party/faiss @@ -1 +1 @@ -Subproject commit 2547df4377ae097e2eabc9b019c15135b1fea2b4 +Subproject commit 954f1a3497518cb0e540a6d2e53ad885fd331db5