Spaces:
Running
Running
File size: 1,755 Bytes
e87a50a 5587ea9 e87a50a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | 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}
)
|