@@ -288,7 +288,7 @@ target_compile_options(
288288)
289289
290290add_library (
291- cuvs SHARED
291+ cuvs_objs OBJECT
292292 src/cluster/kmeans_balanced_fit_float.cu
293293 src/cluster/kmeans_fit_mg_float.cu
294294 src/cluster/kmeans_fit_mg_double.cu
@@ -436,12 +436,67 @@ add_library(
436436 src/stats/trustworthiness_score.cu
437437)
438438
439+ set_target_properties (
440+ cuvs_objs
441+ PROPERTIES CXX_STANDARD 17
442+ CXX_STANDARD_REQUIRED ON
443+ CUDA_STANDARD 17
444+ CUDA_STANDARD_REQUIRED ON
445+ POSITION_INDEPENDENT_CODE ON
446+ )
447+ target_compile_options (
448+ cuvs_objs PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:${CUVS_CXX_FLAGS} >"
449+ "$<$<COMPILE_LANGUAGE:CUDA>:${CUVS_CUDA_FLAGS} >"
450+ )
451+ target_link_libraries (
452+ cuvs_objs PUBLIC raft::raft rmm::rmm ${CUVS_CTK_MATH_DEPENDENCIES}
453+ $<TARGET_NAME_IF_EXISTS:OpenMP::OpenMP_CXX>
454+ )
455+
456+ add_library (cuvs SHARED $<TARGET_OBJECTS:cuvs_objs>)
457+ add_library (cuvs_static STATIC $<TARGET_OBJECTS:cuvs_objs>)
458+
439459target_compile_options (
440460 cuvs INTERFACE $<$<COMPILE_LANG_AND_ID:CUDA,NVIDIA>:--expt-extended-lambda
441461 --expt-relaxed-constexpr>
442462)
443463
444464add_library (cuvs::cuvs ALIAS cuvs)
465+ add_library (cuvs::cuvs_static ALIAS cuvs_static)
466+
467+ set_target_properties (
468+ cuvs_static
469+ PROPERTIES BUILD_RPATH "\$ ORIGIN"
470+ INSTALL_RPATH "\$ ORIGIN"
471+ CXX_STANDARD 17
472+ CXX_STANDARD_REQUIRED ON
473+ POSITION_INDEPENDENT_CODE ON
474+ INTERFACE_POSITION_INDEPENDENT_CODE ON
475+ EXPORT_NAME cuvs_static
476+ )
477+
478+ target_compile_options (cuvs_static PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:${CUVS_CXX_FLAGS} >" )
479+
480+ target_include_directories (
481+ cuvs_objs
482+ PUBLIC "$<BUILD_INTERFACE:${DLPACK_INCLUDE_DIR} >"
483+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include>"
484+ INTERFACE "$<INSTALL_INTERFACE:include>"
485+ )
486+
487+ target_include_directories (
488+ cuvs_static
489+ PUBLIC "$<BUILD_INTERFACE:${DLPACK_INCLUDE_DIR} >"
490+ INTERFACE "$<INSTALL_INTERFACE:include>"
491+ )
492+
493+ # ensure CUDA symbols aren't relocated to the middle of the debug build binaries
494+ target_link_options (cuvs_static PRIVATE $<HOST_LINK:${CMAKE_CURRENT_BINARY_DIR} /fatbin.ld>)
495+
496+ target_include_directories (
497+ cuvs_static PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include>"
498+ "$<INSTALL_INTERFACE:include>"
499+ )
445500
446501target_include_directories (
447502 cuvs PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include>"
@@ -471,11 +526,17 @@ if(NOT BUILD_CPU_ONLY)
471526 PUBLIC rmm::rmm raft::raft ${CUVS_CTK_MATH_DEPENDENCIES}
472527 PRIVATE nvidia::cutlass::cutlass $<TARGET_NAME_IF_EXISTS:OpenMP::OpenMP_CXX> cuvs-cagra-search
473528 )
529+
530+ target_link_libraries (
531+ cuvs_static
532+ PUBLIC rmm::rmm raft::raft ${CUVS_CTK_MATH_DEPENDENCIES}
533+ PRIVATE nvidia::cutlass::cutlass $<TARGET_NAME_IF_EXISTS:OpenMP::OpenMP_CXX> cuvs-cagra-search
534+ )
474535endif ()
475536
476537if (BUILD_CAGRA_HNSWLIB)
477- target_link_libraries (cuvs PRIVATE hnswlib::hnswlib)
478- target_compile_definitions (cuvs PUBLIC CUVS_BUILD_CAGRA_HNSWLIB)
538+ target_link_libraries (cuvs_objs PRIVATE hnswlib::hnswlib)
539+ target_compile_definitions (cuvs_objs PUBLIC CUVS_BUILD_CAGRA_HNSWLIB)
479540endif ()
480541
481542# Endian detection
@@ -557,11 +618,16 @@ if(BUILD_C_LIBRARY)
557618 src/neighbors/ivf_flat_c.cpp
558619 src/neighbors/ivf_pq_c.cpp
559620 src/neighbors/cagra_c.cpp
560- src/neighbors/hnsw_c.cpp
621+ $<$< BOOL : ${BUILD_CAGRA_HNSWLIB} >: src/neighbors/hnsw_c.cpp>
561622 src/neighbors/refine/refine_c.cpp
562623 src/distance/pairwise_distance_c.cpp
563624 )
564625
626+ if (BUILD_CAGRA_HNSWLIB)
627+ target_link_libraries (cuvs_c PRIVATE hnswlib::hnswlib)
628+ target_compile_definitions (cuvs_c PUBLIC CUVS_BUILD_CAGRA_HNSWLIB)
629+ endif ()
630+
565631 add_library (cuvs::c_api ALIAS cuvs_c)
566632
567633 set_target_properties (
@@ -600,7 +666,7 @@ include(GNUInstallDirs)
600666include (CPack)
601667
602668install (
603- TARGETS cuvs
669+ TARGETS cuvs cuvs_static cuvs-cagra-search
604670 DESTINATION ${lib_dir}
605671 COMPONENT cuvs
606672 EXPORT cuvs-exports
0 commit comments