usearch
Version: 
Smaller & Faster Single-File Vector Search Engine from Unum
35 lines (28 loc) • 1.2 kB
Plain Text
# Define the source files conditionally
set(USEARCH_LIB_SOURCES lib.cpp)
if (USEARCH_USE_SIMSIMD)
    list(APPEND USEARCH_LIB_SOURCES ../simsimd/c/lib.c)
endif ()
if (USEARCH_BUILD_TEST_C)
    add_executable(test_c test.c ${USEARCH_LIB_SOURCES})
    setup_target(test_c)
    include(CTest)
    enable_testing()
    add_test(NAME test_c COMMAND test_c)
endif ()
# This article discusses a better way to allow building either static or shared libraries:
# https://alexreinking.com/blog/building-a-dual-shared-and-static-library-with-cmake.html
if (USEARCH_BUILD_LIB_C)
    add_library(usearch_c SHARED ${USEARCH_LIB_SOURCES})
    add_library(usearch_static_c STATIC ${USEARCH_LIB_SOURCES})
    # Set the compile options for the static library
    if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
        target_compile_options(usearch_static_c PRIVATE -static-libstdc++)
        target_link_options(usearch_static_c PRIVATE -static-libstdc++)
    elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
        target_compile_options(usearch_static_c PRIVATE -static)
        target_link_options(usearch_static_c PRIVATE -static)
    endif ()
    setup_target(usearch_c)
    setup_target(usearch_static_c)
endif ()