57 lines
2.7 KiB
CMake
57 lines
2.7 KiB
CMake
# @lint-ignore-every LICENSELINT
|
|
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
# All rights reserved.
|
|
#
|
|
# This source code is licensed under the BSD-style license found in the
|
|
# LICENSE file in the root directory of this source tree.
|
|
|
|
function(link_to_faiss_lib target)
|
|
if(NOT FAISS_OPT_LEVEL STREQUAL "avx2" AND NOT FAISS_OPT_LEVEL STREQUAL "avx512" AND NOT FAISS_OPT_LEVEL STREQUAL "sve")
|
|
target_link_libraries(${target} PRIVATE faiss)
|
|
endif()
|
|
|
|
if(FAISS_OPT_LEVEL STREQUAL "avx2")
|
|
if(NOT WIN32)
|
|
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-mavx2 -mfma>)
|
|
else()
|
|
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/arch:AVX2>)
|
|
endif()
|
|
target_link_libraries(${target} PRIVATE faiss_avx2)
|
|
endif()
|
|
|
|
if(FAISS_OPT_LEVEL STREQUAL "avx512")
|
|
if(NOT WIN32)
|
|
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-mavx2 -mfma -mavx512f -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw>)
|
|
else()
|
|
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/arch:AVX512>)
|
|
endif()
|
|
target_link_libraries(${target} PRIVATE faiss_avx512)
|
|
endif()
|
|
|
|
if(FAISS_OPT_LEVEL STREQUAL "sve")
|
|
if(NOT WIN32)
|
|
if("${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} " MATCHES "(^| )-march=native")
|
|
# Do nothing, expect SVE to be enabled by -march=native
|
|
elseif("${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} " MATCHES "(^| )(-march=armv[0-9]+(\\.[1-9]+)?-[^+ ](\\+[^+$ ]+)*)")
|
|
# Add +sve
|
|
target_compile_options(${target} PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:DEBUG>>:${CMAKE_MATCH_2}+sve>)
|
|
elseif(NOT "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} " MATCHES "(^| )-march=armv")
|
|
# No valid -march, so specify -march=armv8-a+sve as the default
|
|
target_compile_options(${target} PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:DEBUG>>:-march=armv8-a+sve>)
|
|
endif()
|
|
if("${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} " MATCHES "(^| )-march=native")
|
|
# Do nothing, expect SVE to be enabled by -march=native
|
|
elseif("${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} " MATCHES "(^| )(-march=armv[0-9]+(\\.[1-9]+)?-[^+ ](\\+[^+$ ]+)*)")
|
|
# Add +sve
|
|
target_compile_options(${target} PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:RELEASE>>:${CMAKE_MATCH_2}+sve>)
|
|
elseif(NOT "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} " MATCHES "(^| )-march=armv")
|
|
# No valid -march, so specify -march=armv8-a+sve as the default
|
|
target_compile_options(${target} PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:RELEASE>>:-march=armv8-a+sve>)
|
|
endif()
|
|
else()
|
|
# TODO: support Windows
|
|
endif()
|
|
target_link_libraries(${target} PRIVATE faiss_sve)
|
|
endif()
|
|
endfunction()
|