Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
12e67b1
filter
shaleengarg Mar 30, 2026
e8684ea
Merge branch 'master' into filter_pass
shaleengarg Apr 6, 2026
1c54807
merge
shaleengarg Apr 6, 2026
ecfaa7b
removing dead code
shaleengarg Apr 7, 2026
e7da08e
unified implementation of add_filters_from_json
shaleengarg Apr 15, 2026
444d584
grouping numeric insertions for transactionality and performance
shaleengarg Apr 16, 2026
e276382
addMany instead of a looped add
shaleengarg Apr 16, 2026
5db20c8
cleanup
shaleengarg Apr 16, 2026
eea6ff3
put batch todo comments
shaleengarg Apr 16, 2026
6011c2e
commenting for better understanding
shaleengarg Apr 16, 2026
9e84b6d
Merge branch 'master' into filter_pass
shaleengarg Apr 23, 2026
cbda89a
name changes
shaleengarg Apr 24, 2026
f6d18ba
docs updated for understanding
shaleengarg Apr 24, 2026
dd7f97a
timing function to time individual components of filterd search
shaleengarg Apr 30, 2026
cdd5c37
no need to copy data from mdbx
shaleengarg Apr 30, 2026
46c09bd
Merge branch 'master' into filter_pass
shaleengarg May 4, 2026
b4c0488
using return type OperationResult to propagate the logs
shaleengarg May 4, 2026
7afeddf
comments updated
shaleengarg May 4, 2026
38b19c8
filter adding gt, gte, lt, lte
shaleengarg May 6, 2026
523cb30
reject filters with : in key or value
shaleengarg May 6, 2026
3810ed5
do meta data fetch only for vectors that satisfy the filters
shaleengarg May 7, 2026
546430d
fix numeric bucket duplicate cliff; pin function alignment to 64B
shaleengarg May 12, 2026
b0e8425
filter: fix stale index entries on upsert; sync meta.filter on delete…
shaleengarg May 12, 2026
a46d0b8
safe filter bitmap deserialization
shaleengarg May 12, 2026
3e33557
filter parameters validation
shaleengarg May 12, 2026
750e5d8
bounding the filter mdbx size by reducing the number of updates withi…
shaleengarg May 13, 2026
7743296
moving to cpp from hpp
shaleengarg May 13, 2026
8cfb915
removing search timing for testing
shaleengarg May 13, 2026
e9cca02
numeric filters using only floats
shaleengarg May 13, 2026
4cb445d
Numeric bitmap-only bucket state can lose IDs. Bucket::is_empty() onl…
shaleengarg May 13, 2026
02acc13
testing
shaleengarg May 13, 2026
92e4f12
filter docs
shaleengarg May 13, 2026
49b286f
mac compile time flags to use xcrun to find the correct clang version
shaleengarg May 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 71 additions & 39 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,54 +1,56 @@
# For Server x86_64 install clang for fp16 support and use the following commands
cmake_minimum_required(VERSION 3.14)
project(ndd)


#check for the correct clang version
find_program(CLANG_CANDIDATE_C
NAMES clang-21 clang-20 clang-19 clang
)

find_program(CLANG_CANDIDATE_CXX
NAMES clang++-21 clang++-20 clang++-19 clang++
)
# Select a Clang toolchain before project() so CMake configures the matching
# standard library and platform SDK paths.
if(NOT DEFINED CMAKE_C_COMPILER AND NOT DEFINED ENV{CC})
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
execute_process(
COMMAND xcrun --find clang
OUTPUT_VARIABLE CLANG_CANDIDATE_C
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
else()
find_program(CLANG_CANDIDATE_C NAMES clang-21 clang-20 clang-19 clang)
endif()

if (NOT CLANG_CANDIDATE_C OR NOT CLANG_CANDIDATE_CXX)
message(FATAL_ERROR "Clang not found. Please install clang >= 19.")
if(CLANG_CANDIDATE_C)
set(CMAKE_C_COMPILER "${CLANG_CANDIDATE_C}" CACHE FILEPATH "C compiler")
endif()
endif()

# Query clang version
execute_process(
COMMAND ${CLANG_CANDIDATE_C} --version
OUTPUT_VARIABLE CLANG_VERSION_OUTPUT
ERROR_VARIABLE CLANG_VERSION_ERROR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT DEFINED CMAKE_CXX_COMPILER AND NOT DEFINED ENV{CXX})
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
execute_process(
COMMAND xcrun --find clang++
OUTPUT_VARIABLE CLANG_CANDIDATE_CXX
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
else()
find_program(CLANG_CANDIDATE_CXX NAMES clang++-21 clang++-20 clang++-19 clang++)
endif()

if (NOT CLANG_VERSION_OUTPUT)
message(FATAL_ERROR "Failed to query clang version.")
if(CLANG_CANDIDATE_CXX)
set(CMAKE_CXX_COMPILER "${CLANG_CANDIDATE_CXX}" CACHE FILEPATH "C++ compiler")
endif()
endif()

# Extract major version
string(REGEX MATCH "clang version ([0-9]+)" _match "${CLANG_VERSION_OUTPUT}")
set(CLANG_VERSION_MAJOR "${CMAKE_MATCH_1}")
project(ndd)

if (NOT CLANG_VERSION_MAJOR)
message(FATAL_ERROR
"Unable to determine clang version from:\n${CLANG_VERSION_OUTPUT}\n"
)
if(NOT CMAKE_C_COMPILER_ID MATCHES "Clang" OR NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
message(FATAL_ERROR "Clang >= 17 is required. Set CC/CXX or CMAKE_C_COMPILER/CMAKE_CXX_COMPILER to a Clang toolchain.")
endif()

if (CLANG_VERSION_MAJOR LESS 17)
message(FATAL_ERROR
"Clang ${CLANG_VERSION_MAJOR} detected, but clang >= 17 is required "
)
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 17)
message(FATAL_ERROR "Clang ${CMAKE_CXX_COMPILER_VERSION} detected, but Clang >= 17 is required.")
endif()

# Lock compilers
set(CMAKE_C_COMPILER "${CLANG_CANDIDATE_C}" CACHE STRING "" FORCE)
set(CMAKE_CXX_COMPILER "${CLANG_CANDIDATE_CXX}" CACHE STRING "" FORCE)
if(APPLE AND (CMAKE_C_COMPILER MATCHES "[/\\\\]Android[/\\\\].*[/\\\\]ndk[/\\\\]" OR CMAKE_CXX_COMPILER MATCHES "[/\\\\]Android[/\\\\].*[/\\\\]ndk[/\\\\]"))
message(FATAL_ERROR "Android NDK Clang was selected for a macOS build. Use Xcode Command Line Tools Clang, for example: CC=$(xcrun --find clang) CXX=$(xcrun --find clang++) cmake ...")
endif()

message(STATUS "Using Clang ${CLANG_VERSION_MAJOR}")
message(STATUS "Using ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
message(STATUS "C compiler : ${CMAKE_C_COMPILER}")
message(STATUS "C++ compiler: ${CMAKE_CXX_COMPILER}")

Expand Down Expand Up @@ -250,6 +252,15 @@ endif()

message(STATUS "Binary name: ${NDD_BINARY_NAME}")

# Filter sources are split out so filter headers only expose declarations.
set(NDD_FILTER_SOURCES
src/filter/category_index.cpp
src/filter/filter.cpp
src/filter/numeric_index.cpp
)

add_library(ndd_filter STATIC ${NDD_FILTER_SOURCES})

# Add new src/*.cpp files here when they should be compiled into ndd.
set(NDD_CORE_SOURCES
src/sparse/inverted_index.cpp
Expand Down Expand Up @@ -289,6 +300,15 @@ target_include_directories(ndd_core PRIVATE
${OPENSSL_INCLUDE_DIR}
${CURL_INCLUDE_DIRS}
)
target_include_directories(ndd_filter PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/src/core
${CMAKE_CURRENT_SOURCE_DIR}/src/filter
${CMAKE_CURRENT_SOURCE_DIR}/src/utils
${CMAKE_CURRENT_SOURCE_DIR}/third_party
${CMAKE_CURRENT_SOURCE_DIR}/third_party/json
${LMDB_INCLUDE_DIR}
)
target_include_directories(${NDD_BINARY_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/src/server
Expand All @@ -307,8 +327,9 @@ target_include_directories(${NDD_BINARY_NAME} PRIVATE

# Set compiler flags
if(NOT DEBUG)
target_compile_options(ndd_core PRIVATE -O3 -ffast-math -fno-finite-math-only)
target_compile_options(${NDD_BINARY_NAME} PRIVATE -O3 -ffast-math -fno-finite-math-only)
target_compile_options(ndd_core PRIVATE -O3 -ffast-math -fno-finite-math-only -falign-functions=64)
target_compile_options(ndd_filter PRIVATE -O3 -ffast-math -fno-finite-math-only -falign-functions=64)
target_compile_options(${NDD_BINARY_NAME} PRIVATE -O3 -ffast-math -fno-finite-math-only -falign-functions=64)
endif()

# Apply Flags based on selection
Expand Down Expand Up @@ -355,6 +376,7 @@ target_compile_definitions(ndd_core PRIVATE
ASIO_HAS_STD_STRING_VIEW
MDB_MAXKEYSIZE=512
)
target_compile_definitions(ndd_filter PRIVATE MDB_MAXKEYSIZE=512)
target_compile_definitions(${NDD_BINARY_NAME} PRIVATE
ASIO_STANDALONE
ASIO_HAS_STD_CHRONO
Expand All @@ -364,6 +386,7 @@ target_compile_definitions(${NDD_BINARY_NAME} PRIVATE

# Link libraries
target_link_libraries(${NDD_BINARY_NAME} PRIVATE
ndd_filter
Threads::Threads
OpenSSL::SSL
OpenSSL::Crypto
Expand All @@ -382,6 +405,15 @@ option(ENABLE_TESTING "Enable building tests" OFF)
if(ENABLE_TESTING)
enable_testing()
add_subdirectory(tests)
if(TARGET ndd_filter_test)
target_link_libraries(ndd_filter_test ndd_filter)
endif()
if(TARGET ndd_vector_storage_test)
target_link_libraries(ndd_vector_storage_test ndd_filter)
endif()
if(TARGET ndd_numeric_index_stress_test)
target_link_libraries(ndd_numeric_index_stress_test ndd_filter)
endif()
endif()

message(STATUS "Processor: ${CMAKE_SYSTEM_PROCESSOR}")
Expand Down
Loading
Loading