Skip to content

Commit 0b1b856

Browse files
alexanderguzhvaaalekhpatel07
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 6fc8a47 commit 0b1b856

File tree

3 files changed

+58
-95
lines changed

3 files changed

+58
-95
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-46
Original file line numberDiff line numberDiff line change
@@ -40,53 +40,9 @@ set(FAISS_TEST_SRC
4040

4141
add_executable(faiss_test ${FAISS_TEST_SRC})
4242

43-
if(NOT FAISS_OPT_LEVEL STREQUAL "avx2" AND NOT FAISS_OPT_LEVEL STREQUAL "avx512" AND NOT FAISS_OPT_LEVEL STREQUAL "sve")
44-
target_link_libraries(faiss_test PRIVATE faiss)
45-
endif()
46-
47-
if(FAISS_OPT_LEVEL STREQUAL "avx2")
48-
if(NOT WIN32)
49-
target_compile_options(faiss_test PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-mavx2 -mfma>)
50-
else()
51-
target_compile_options(faiss_test PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/arch:AVX2>)
52-
endif()
53-
target_link_libraries(faiss_test PRIVATE faiss_avx2)
54-
endif()
43+
include(../cmake/link_to_faiss_lib.cmake)
5544

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

9147
target_link_libraries(faiss_test PUBLIC faiss_example_external_module)
9248

0 commit comments

Comments
 (0)