Skip to content

Commit f077bf9

Browse files
Build libfaiss with AVX2 support when requested, rather than libfaiss (#37)
Build only avx2 or generic; adapt faiss_c to whichever was built Also force FAISS_OPT_LEVEL to "generic" when not building on x86_64. Co-authored-by: Chris Hillery <ceejatec@users.noreply.github.com>
1 parent 5ab1ce0 commit f077bf9

File tree

3 files changed

+27
-8
lines changed

3 files changed

+27
-8
lines changed

CMakeLists.txt

+5
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ option(FAISS_ENABLE_RAFT "Enable RAFT for GPU indexes." OFF)
5757
option(FAISS_ENABLE_PYTHON "Build Python extension." ON)
5858
option(FAISS_ENABLE_C_API "Build C API." OFF)
5959

60+
# Force FAISS_OPT_LEVEL to "generic" if not building on x86_64.
61+
if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
62+
set(FAISS_OPT_LEVEL "generic" CACHE STRING "No AVX since not building on x86_64" FORCE)
63+
endif()
64+
6065
if(FAISS_ENABLE_GPU)
6166
set(CMAKE_CUDA_HOST_COMPILER ${CMAKE_CXX_COMPILER})
6267
enable_language(CUDA)

c_api/CMakeLists.txt

+7-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,13 @@ set(FAISS_C_SRC
3535
utils/distances_c.cpp
3636
)
3737
add_library(faiss_c ${FAISS_C_SRC})
38-
target_link_libraries(faiss_c PRIVATE faiss)
38+
if(FAISS_OPT_LEVEL STREQUAL "generic")
39+
target_link_libraries(faiss_c PRIVATE faiss)
40+
elseif(FAISS_OPT_LEVEL STREQUAL "avx2")
41+
target_link_libraries(faiss_c PRIVATE faiss_avx2)
42+
elseif(FAISS_OPT_LEVEL STREQUAL "avx512")
43+
target_link_libraries(faiss_c PRIVATE faiss_avx512)
44+
endif()
3945
install(TARGETS faiss_c
4046
EXPORT faiss-targets
4147
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}

faiss/CMakeLists.txt

+15-7
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,9 @@ endif()
232232
set(FAISS_HEADERS ${FAISS_HEADERS} PARENT_SCOPE)
233233

234234
add_library(faiss ${FAISS_SRC})
235+
if(NOT FAISS_OPT_LEVEL STREQUAL "generic")
236+
set_target_properties(faiss PROPERTIES EXCLUDE_FROM_ALL TRUE)
237+
endif()
235238
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
236239
target_compile_options(
237240
faiss PRIVATE
@@ -329,23 +332,28 @@ else()
329332
target_link_libraries(faiss_avx512 PRIVATE ${LAPACK_LIBRARIES})
330333
endif()
331334

332-
install(TARGETS faiss
333-
EXPORT faiss-targets
334-
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
335-
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
336-
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
337-
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
338-
)
335+
336+
if(FAISS_OPT_LEVEL STREQUAL "generic")
337+
install(TARGETS faiss
338+
EXPORT faiss-targets
339+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
340+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
341+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
342+
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
343+
)
344+
endif()
339345
if(FAISS_OPT_LEVEL STREQUAL "avx2")
340346
install(TARGETS faiss_avx2
341347
EXPORT faiss-targets
348+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
342349
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
343350
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
344351
)
345352
endif()
346353
if(FAISS_OPT_LEVEL STREQUAL "avx512")
347354
install(TARGETS faiss_avx2 faiss_avx512
348355
EXPORT faiss-targets
356+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
349357
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
350358
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
351359
)

0 commit comments

Comments
 (0)