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