vecmini-engine / CMakeLists.txt
levanel
updated cmake
5587ea9
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}
)