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} )