Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
9903d7f
filter
shaleengarg Mar 30, 2026
159e205
removing dead code
shaleengarg Apr 7, 2026
693badb
unified implementation of add_filters_from_json
shaleengarg Apr 15, 2026
7dd581f
grouping numeric insertions for transactionality and performance
shaleengarg Apr 16, 2026
89e9df0
addMany instead of a looped add
shaleengarg Apr 16, 2026
eda67ec
cleanup
shaleengarg Apr 16, 2026
0ff2f58
put batch todo comments
shaleengarg Apr 16, 2026
fa9aa99
commenting for better understanding
shaleengarg Apr 16, 2026
7047255
name changes
shaleengarg Apr 24, 2026
6643ccf
docs updated for understanding
shaleengarg Apr 24, 2026
0a6697b
timing function to time individual components of filterd search
shaleengarg Apr 30, 2026
d51372d
no need to copy data from mdbx
shaleengarg Apr 30, 2026
29a60a4
using return type OperationResult to propagate the logs
shaleengarg May 4, 2026
5d6ae77
comments updated
shaleengarg May 4, 2026
9601ac5
filter adding gt, gte, lt, lte
shaleengarg May 6, 2026
bba8e6a
reject filters with : in key or value
shaleengarg May 6, 2026
ecbee5d
do meta data fetch only for vectors that satisfy the filters
shaleengarg May 7, 2026
4db88aa
safe filter bitmap deserialization
shaleengarg May 12, 2026
861a0c5
filter parameters validation
shaleengarg May 12, 2026
f1cd4f5
bounding the filter mdbx size by reducing the number of updates withi…
shaleengarg May 13, 2026
5edc082
removing search timing for testing
shaleengarg May 13, 2026
4bab3b9
testing (Part 1 subset)
shaleengarg May 15, 2026
c2b1778
filter docs
shaleengarg May 13, 2026
e56debe
mac compile time flags to use xcrun to find the correct clang version
shaleengarg May 13, 2026
fb9e34c
docs: Part 2 follow-ups deferred from filter_safety
shaleengarg May 15, 2026
afab9c4
tests: skip Part-2 regression alarms with GTEST_SKIP
shaleengarg May 15, 2026
89e32ea
filter bucket format followup
shaleengarg May 15, 2026
d1a5522
filter: split headers into hpp + cpp
shaleengarg May 15, 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
86 changes: 49 additions & 37 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,10 +252,20 @@ endif()

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

# Filter sources are split out so filter headers expose declarations only.
# Tests and the main binary both pull these in via NDD_FILTER_SOURCES.
# Use absolute paths so the list is portable to subdirectories like tests/.
set(NDD_FILTER_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/src/filter/category_index.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/filter/filter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/filter/numeric_index.cpp
)

# Add new src/*.cpp files here when they should be compiled into ndd.
set(NDD_CORE_SOURCES
src/sparse/inverted_index.cpp
src/utils/system_sanity/system_sanity.cpp
${NDD_FILTER_SOURCES}
)

# Build non-main project sources separately so they can be compiled in parallel
Expand Down
Loading
Loading