@@ -37,38 +37,57 @@ if(USE_SVS)
3737 include (CheckSymbolExists )
3838 check_symbol_exists (__GLIBC__ "features.h" GLIBC_FOUND )
3939 if (GLIBC_FOUND)
40- include (CheckCXXSourceRuns )
41- check_cxx_source_runs ("#include <features.h>
42- int main(){ return __GLIBC__ == 2 && __GLIBC_MINOR__ >= 28 ?0:1; }"
43- GLIBC_2_28_FOUND )
44- check_cxx_source_runs ("#include <features.h>
45- int main(){ return __GLIBC__ == 2 && __GLIBC_MINOR__ >= 26 ?0:1; }"
46- GLIBC_2_26_FOUND )
40+ # Detect glibc version via __GLIBC__.
41+ file (WRITE "${CMAKE_BINARY_DIR } /detect_glibc.cpp"
42+ "#include <cstdio>\n #include <features.h>\n int main(){ printf(\" %d.%d\" , __GLIBC__, __GLIBC_MINOR__); return 0; }\n " )
43+ try_run (_glibc_run_result _glibc_compiled
44+ "${CMAKE_BINARY_DIR } " "${CMAKE_BINARY_DIR } /detect_glibc.cpp"
45+ RUN_OUTPUT_VARIABLE GLIBC_VERSION )
46+ if (NOT _glibc_compiled OR NOT _glibc_run_result EQUAL 0)
47+ set (GLIBC_VERSION "0" )
48+ endif ()
49+ message (STATUS "Detected GLIBC version: ${GLIBC_VERSION} " )
50+
51+ # Detect libstdc++ version via _GLIBCXX_RELEASE (GCC major version of the headers).
52+ file (WRITE "${CMAKE_BINARY_DIR } /detect_glibcxx.cpp"
53+ "#include <stdio.h>\n #include <string>\n int main(){ printf(\" %d\" , _GLIBCXX_RELEASE); return 0; }\n " )
54+ try_run (_glibcxx_run_result _glibcxx_compiled
55+ "${CMAKE_BINARY_DIR } " "${CMAKE_BINARY_DIR } /detect_glibcxx.cpp"
56+ RUN_OUTPUT_VARIABLE GLIBCXX_VERSION )
57+ if (NOT _glibcxx_compiled OR NOT _glibcxx_run_result EQUAL 0)
58+ set (GLIBCXX_VERSION 0)
59+ endif ()
60+ message (STATUS "Detected GLIBCXX_RELEASE (GCC major): ${GLIBCXX_VERSION} " )
4761 endif ()
4862
4963 cmake_dependent_option (SVS_SHARED_LIB "Use SVS pre-compiled shared library" ON "USE_SVS AND GLIBC_FOUND AND SVS_LVQ_SUPPORTED" OFF )
5064 if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
51- if (GLIBC_2_28_FOUND)
52- if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "20.0" )
53- set (SVS_URL "https://github.com/intel/ScalableVectorSearch/releases/download/v0.3.0/svs-shared-library-0.3.0-reduced-clang20.tar.gz" CACHE STRING "SVS URL" )
65+ if (GLIBC_VERSION VERSION_GREATER_EQUAL "2.31" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "21.0" )
66+ if (GLIBCXX_VERSION VERSION_GREATER_EQUAL "13" )
67+ set (SVS_URL "https://github.com/intel/ScalableVectorSearch/releases/download/nightly/svs-shared-library-nightly-reduced-clang21-gcc13-2026-03-31-1147.tar.gz" CACHE STRING "SVS URL" )
68+ elseif (GLIBCXX_VERSION VERSION_GREATER_EQUAL "12" )
69+ set (SVS_URL "https://github.com/intel/ScalableVectorSearch/releases/download/nightly/svs-shared-library-nightly-reduced-clang21-gcc12-2026-03-31-1147.tar.gz" CACHE STRING "SVS URL" )
70+ elseif (GLIBCXX_VERSION VERSION_GREATER_EQUAL "11" )
71+ set (SVS_URL "https://github.com/intel/ScalableVectorSearch/releases/download/nightly/svs-shared-library-nightly-reduced-clang21-gcc11-2026-03-31-1147.tar.gz" CACHE STRING "SVS URL" )
5472 else ()
55- set (SVS_URL "https://github.com/intel/ScalableVectorSearch/releases/download/v0.3.0/svs-shared-library-0.3.0-reduced-clang.tar.gz" CACHE STRING "SVS URL" )
73+ message (STATUS "libstdc++ >= GCC 11 is required for Clang SVS binaries - disabling SVS_SHARED_LIB" )
74+ set (SVS_SHARED_LIB OFF )
5675 endif ()
5776 else ()
58- message (STATUS "GLIBC>=2.28 is required for Clang build - disabling SVS_SHARED_LIB" )
77+ message (STATUS "GLIBC >= 2.31 and Clang >= 21.0 is required for Clang SVS binaries - disabling SVS_SHARED_LIB" )
5978 set (SVS_SHARED_LIB OFF )
6079 endif ()
6180 else ()
62- if (GLIBC_2_28_FOUND )
63- if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "14.0" )
81+ if (GLIBC_VERSION VERSION_GREATER_EQUAL "2.28" )
82+ if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "14.0" )
6483 set (SVS_URL "https://github.com/intel/ScalableVectorSearch/releases/download/v0.3.0/svs-shared-library-0.3.0-reduced-gcc14.tar.gz" CACHE STRING "SVS URL" )
6584 else ()
6685 set (SVS_URL "https://github.com/intel/ScalableVectorSearch/releases/download/v0.3.0/svs-shared-library-0.3.0-reduced.tar.gz" CACHE STRING "SVS URL" )
67- endif ()
68- elseif (GLIBC_2_26_FOUND )
86+ endif ()
87+ elseif (GLIBC_VERSION VERSION_GREATER_EQUAL "2.26" )
6988 set (SVS_URL "https://github.com/intel/ScalableVectorSearch/releases/download/v0.3.0/svs-shared-library-0.3.0-reduced-glibc2_26.tar.gz" CACHE STRING "SVS URL" )
7089 else ()
71- message (STATUS "GLIBC>= 2.26 is required for SVS shared library - disabling SVS_SHARED_LIB" )
90+ message (STATUS "GLIBC >= 2.26 is required for GCC SVS binaries - disabling SVS_SHARED_LIB" )
7291 set (SVS_SHARED_LIB OFF )
7392 endif ()
7493 endif ()
0 commit comments