2022-08-30 15:26:56 +00:00
|
|
|
option(ENABLE_ANNOY "Enable Annoy index support" ${ENABLE_LIBRARIES})
|
|
|
|
|
2022-09-05 12:41:46 +00:00
|
|
|
# Annoy index should be disabled with undefined sanitizer. Because of memory storage optimizations
|
|
|
|
# (https://github.com/ClickHouse/annoy/blob/9d8a603a4cd252448589e84c9846f94368d5a289/src/annoylib.h#L442-L463)
|
|
|
|
# UBSan fails and leads to crash. Simmilar issue is already opened in Annoy repo
|
|
|
|
# https://github.com/spotify/annoy/issues/456
|
|
|
|
# Problem with aligment can lead to errors like
|
|
|
|
# (https://stackoverflow.com/questions/46790550/c-undefined-behavior-strict-aliasing-rule-or-incorrect-alignment)
|
|
|
|
# or will lead to crash on arm https://developer.arm.com/documentation/ka003038/latest
|
2022-09-05 13:20:49 +00:00
|
|
|
# This issues should be resolved before annoy became non-experimental (--> setting "allow_experimental_annoy_index")
|
|
|
|
if ((NOT ENABLE_ANNOY) OR (SANITIZE STREQUAL "undefined") OR (ARCH_AARCH64))
|
2022-08-30 15:26:56 +00:00
|
|
|
message (STATUS "Not using annoy")
|
|
|
|
return()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
set(ANNOY_PROJECT_DIR "${ClickHouse_SOURCE_DIR}/contrib/annoy")
|
|
|
|
set(ANNOY_SOURCE_DIR "${ANNOY_PROJECT_DIR}/src")
|
|
|
|
|
|
|
|
add_library(_annoy INTERFACE)
|
|
|
|
target_include_directories(_annoy SYSTEM INTERFACE ${ANNOY_SOURCE_DIR})
|
|
|
|
|
|
|
|
add_library(ch_contrib::annoy ALIAS _annoy)
|
|
|
|
target_compile_definitions(_annoy INTERFACE ENABLE_ANNOY)
|
|
|
|
target_compile_definitions(_annoy INTERFACE ANNOYLIB_MULTITHREADED_BUILD)
|