Spaces:
Running
Running
| cmake_minimum_required(VERSION 3.22) | |
| project(vecmini VERSION 1.0 LANGUAGES CXX) | |
| set(CMAKE_POSITION_INDEPENDENT_CODE ON) | |
| # Use modern C++17 for cleaner syntax | |
| set(CMAKE_CXX_STANDARD 17) | |
| set(CMAKE_CXX_STANDARD_REQUIRED ON) | |
| set(CMAKE_CXX_EXTENSIONS OFF) | |
| # AVX-256 and Optimization Flags (Safe for Hugging Face cloud CPUs) | |
| add_compile_options(-mavx2 -mfma -O3 -march=x86-64-v3) | |
| # Generates the compile_commands.json file for tools like clangd | |
| set(CMAKE_EXPORT_COMPILE_COMMANDS ON) | |
| # ========================================== | |
| # DEPENDENCIES (OpenMP & Math for your engine) | |
| # ========================================== | |
| find_package(OpenMP REQUIRED) | |
| find_package(BLAS REQUIRED) | |
| find_package(LAPACK REQUIRED) | |
| # ========================================== | |
| # INCLUDES | |
| # ========================================== | |
| include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) | |
| # ========================================== | |
| # PHASE 1: Build your core vector database library | |
| # ========================================== | |
| add_library(vectordb STATIC | |
| src/IndexFlat.cpp | |
| src/clustering.cpp | |
| src/IndexIVF.cpp | |
| src/IndexPQ.cpp | |
| src/IndexIVFPQ.cpp | |
| ) | |
| # ========================================== | |
| # PHASE 2: The Python Bridge (Pybind11) | |
| # ========================================== | |
| find_package(Python3 COMPONENTS Interpreter Development REQUIRED) | |
| execute_process( | |
| COMMAND python3 -m pybind11 --cmakedir | |
| OUTPUT_VARIABLE pybind11_DIR | |
| OUTPUT_STRIP_TRAILING_WHITESPACE | |
| ) | |
| find_package(pybind11 CONFIG REQUIRED) | |
| pybind11_add_module(vecmini src/bindings.cpp) | |
| # Only link your own engine and the required math/threading backends | |
| target_link_libraries(vecmini PRIVATE | |
| vectordb | |
| OpenMP::OpenMP_CXX | |
| ${BLAS_LIBRARIES} | |
| ${LAPACK_LIBRARIES} | |
| ) | |