Skip to content

Commit 038cdc9

Browse files
alexanderguzhvaCoien-rr
authored andcommitted
Place a useful cmake function 'link_to_faiss_lib' into a separate file (facebookresearch#3939)
Summary: Add `cmake/link_to_faiss_lib.cmake`, which exposes a useful and reusable CMake `link_to_faiss_lib()` function Pull Request resolved: facebookresearch#3939 Reviewed By: mnorris11 Differential Revision: D64250261 Pulled By: mengdilin fbshipit-source-id: bab5b7fab8effb33cb73024eb7eefd2319998e5b
1 parent cab7b08 commit 038cdc9

File tree

3 files changed

+58
-102
lines changed

3 files changed

+58
-102
lines changed

cmake/link_to_faiss_lib.cmake

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Copyright (c) Facebook, Inc. and its affiliates.
2+
# All rights reserved.
3+
#
4+
# This source code is licensed under the BSD-style license found in the
5+
# LICENSE file in the root directory of this source tree.
6+
7+
function(link_to_faiss_lib target)
8+
if(NOT FAISS_OPT_LEVEL STREQUAL "avx2" AND NOT FAISS_OPT_LEVEL STREQUAL "avx512" AND NOT FAISS_OPT_LEVEL STREQUAL "sve")
9+
target_link_libraries(${target} PRIVATE faiss)
10+
endif()
11+
12+
if(FAISS_OPT_LEVEL STREQUAL "avx2")
13+
if(NOT WIN32)
14+
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-mavx2 -mfma>)
15+
else()
16+
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/arch:AVX2>)
17+
endif()
18+
target_link_libraries(${target} PRIVATE faiss_avx2)
19+
endif()
20+
21+
if(FAISS_OPT_LEVEL STREQUAL "avx512")
22+
if(NOT WIN32)
23+
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-mavx2 -mfma -mavx512f -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw>)
24+
else()
25+
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/arch:AVX512>)
26+
endif()
27+
target_link_libraries(${target} PRIVATE faiss_avx512)
28+
endif()
29+
30+
if(FAISS_OPT_LEVEL STREQUAL "sve")
31+
if(NOT WIN32)
32+
if("${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} " MATCHES "(^| )-march=native")
33+
# Do nothing, expect SVE to be enabled by -march=native
34+
elseif("${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} " MATCHES "(^| )(-march=armv[0-9]+(\\.[1-9]+)?-[^+ ](\\+[^+$ ]+)*)")
35+
# Add +sve
36+
target_compile_options(${target} PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:DEBUG>>:${CMAKE_MATCH_2}+sve>)
37+
elseif(NOT "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} " MATCHES "(^| )-march=armv")
38+
# No valid -march, so specify -march=armv8-a+sve as the default
39+
target_compile_options(${target} PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:DEBUG>>:-march=armv8-a+sve>)
40+
endif()
41+
if("${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} " MATCHES "(^| )-march=native")
42+
# Do nothing, expect SVE to be enabled by -march=native
43+
elseif("${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} " MATCHES "(^| )(-march=armv[0-9]+(\\.[1-9]+)?-[^+ ](\\+[^+$ ]+)*)")
44+
# Add +sve
45+
target_compile_options(${target} PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:RELEASE>>:${CMAKE_MATCH_2}+sve>)
46+
elseif(NOT "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} " MATCHES "(^| )-march=armv")
47+
# No valid -march, so specify -march=armv8-a+sve as the default
48+
target_compile_options(${target} PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:RELEASE>>:-march=armv8-a+sve>)
49+
endif()
50+
else()
51+
# TODO: support Windows
52+
endif()
53+
target_link_libraries(${target} PRIVATE faiss_sve)
54+
endif()
55+
endfunction()

perf_tests/CMakeLists.txt

+1-49
Original file line numberDiff line numberDiff line change
@@ -27,55 +27,7 @@ add_library(faiss_perf_tests_utils
2727
target_include_directories(faiss_perf_tests_utils PRIVATE
2828
${PROJECT_SOURCE_DIR}/../..)
2929

30-
function(link_to_faiss_lib target)
31-
if(NOT FAISS_OPT_LEVEL STREQUAL "avx2" AND NOT FAISS_OPT_LEVEL STREQUAL "avx512" AND NOT FAISS_OPT_LEVEL STREQUAL "sve")
32-
target_link_libraries(${target} PRIVATE faiss)
33-
endif()
34-
35-
if(FAISS_OPT_LEVEL STREQUAL "avx2")
36-
if(NOT WIN32)
37-
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-mavx2 -mfma>)
38-
else()
39-
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/arch:AVX2>)
40-
endif()
41-
target_link_libraries(${target} PRIVATE faiss_avx2)
42-
endif()
43-
44-
if(FAISS_OPT_LEVEL STREQUAL "avx512")
45-
if(NOT WIN32)
46-
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-mavx2 -mfma -mavx512f -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw>)
47-
else()
48-
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/arch:AVX512>)
49-
endif()
50-
target_link_libraries(${target} PRIVATE faiss_avx512)
51-
endif()
52-
53-
if(FAISS_OPT_LEVEL STREQUAL "sve")
54-
if(NOT WIN32)
55-
if("${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} " MATCHES "(^| )-march=native")
56-
# Do nothing, expect SVE to be enabled by -march=native
57-
elseif("${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} " MATCHES "(^| )(-march=armv[0-9]+(\\.[1-9]+)?-[^+ ](\\+[^+$ ]+)*)")
58-
# Add +sve
59-
target_compile_options(${target} PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:DEBUG>>:${CMAKE_MATCH_2}+sve>)
60-
elseif(NOT "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} " MATCHES "(^| )-march=armv")
61-
# No valid -march, so specify -march=armv8-a+sve as the default
62-
target_compile_options(${target} PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:DEBUG>>:-march=armv8-a+sve>)
63-
endif()
64-
if("${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} " MATCHES "(^| )-march=native")
65-
# Do nothing, expect SVE to be enabled by -march=native
66-
elseif("${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} " MATCHES "(^| )(-march=armv[0-9]+(\\.[1-9]+)?-[^+ ](\\+[^+$ ]+)*)")
67-
# Add +sve
68-
target_compile_options(${target} PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:RELEASE>>:${CMAKE_MATCH_2}+sve>)
69-
elseif(NOT "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} " MATCHES "(^| )-march=armv")
70-
# No valid -march, so specify -march=armv8-a+sve as the default
71-
target_compile_options(${target} PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:RELEASE>>:-march=armv8-a+sve>)
72-
endif()
73-
else()
74-
# TODO: support Windows
75-
endif()
76-
target_link_libraries(${target} PRIVATE faiss_sve)
77-
endif()
78-
endfunction()
30+
include(../cmake/link_to_faiss_lib.cmake)
7931

8032
link_to_faiss_lib(faiss_perf_tests_utils)
8133

tests/CMakeLists.txt

+2-53
Original file line numberDiff line numberDiff line change
@@ -39,63 +39,12 @@ set(FAISS_TEST_SRC
3939
test_knn_functions.cpp
4040
)
4141

42-
4342
add_executable(faiss_test ${FAISS_TEST_SRC})
4443

45-
if(NOT FAISS_OPT_LEVEL STREQUAL "avx2" AND NOT FAISS_OPT_LEVEL STREQUAL "avx512" AND NOT FAISS_OPT_LEVEL STREQUAL "sve")
46-
target_link_libraries(faiss_test PRIVATE faiss)
47-
endif()
48-
49-
if(FAISS_OPT_LEVEL STREQUAL "avx2")
50-
if(NOT WIN32)
51-
target_compile_options(faiss_test PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-mavx2 -mfma>)
52-
else()
53-
target_compile_options(faiss_test PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/arch:AVX2>)
54-
endif()
55-
target_link_libraries(faiss_test PRIVATE faiss_avx2)
56-
endif()
57-
58-
if(FAISS_OPT_LEVEL STREQUAL "avx512")
59-
if(NOT WIN32)
60-
target_compile_options(faiss_test PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-mavx2 -mfma -mavx512f -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw>)
61-
else()
62-
target_compile_options(faiss_test PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/arch:AVX512>)
63-
endif()
64-
target_link_libraries(faiss_test PRIVATE faiss_avx512)
65-
endif()
66-
67-
if(FAISS_OPT_LEVEL STREQUAL "sve")
68-
if(NOT WIN32)
69-
if("${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} " MATCHES "(^| )-march=native")
70-
# Do nothing, expect SVE to be enabled by -march=native
71-
elseif("${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} " MATCHES "(^| )(-march=armv[0-9]+(\\.[1-9]+)?-[^+ ](\\+[^+$ ]+)*)")
72-
# Add +sve
73-
target_compile_options(faiss_test PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:DEBUG>>:${CMAKE_MATCH_2}+sve>)
74-
elseif(NOT "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} " MATCHES "(^| )-march=armv")
75-
# No valid -march, so specify -march=armv8-a+sve as the default
76-
target_compile_options(faiss_test PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:DEBUG>>:-march=armv8-a+sve>)
77-
endif()
78-
if("${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} " MATCHES "(^| )-march=native")
79-
# Do nothing, expect SVE to be enabled by -march=native
80-
elseif("${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} " MATCHES "(^| )(-march=armv[0-9]+(\\.[1-9]+)?-[^+ ](\\+[^+$ ]+)*)")
81-
# Add +sve
82-
target_compile_options(faiss_test PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:RELEASE>>:${CMAKE_MATCH_2}+sve>)
83-
elseif(NOT "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} " MATCHES "(^| )-march=armv")
84-
# No valid -march, so specify -march=armv8-a+sve as the default
85-
target_compile_options(faiss_test PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:RELEASE>>:-march=armv8-a+sve>)
86-
endif()
87-
else()
88-
# TODO: support Windows
89-
endif()
90-
target_link_libraries(faiss_test PRIVATE faiss_sve)
91-
endif()
44+
include(../cmake/link_to_faiss_lib.cmake)
9245

93-
find_package(Python COMPONENTS Interpreter Development)
94-
# find_package(PythonLibs REQUIRED)
95-
target_link_libraries(faiss_test PUBLIC ${Python_LIBRARIES})
96-
# if (FAISS_ENABLE_PYTHON)
46+
link_to_faiss_lib(faiss_test)
9747
target_link_libraries(faiss_test PUBLIC faiss_example_external_module)
98-
# endif()
9948

10049
include(FetchContent)
10150
FetchContent_Declare(

0 commit comments

Comments
 (0)