-
Notifications
You must be signed in to change notification settings - Fork 4.5k
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
115 lines (99 loc) · 2.94 KB
/
Copy pathCMakeLists.txt
File metadata and controls
115 lines (99 loc) · 2.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# @lint-ignore-every LICENSELINT
# Copyright (c) Meta Platforms, Inc. and its 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.
# Metal GPU backend for Apple Silicon.
# Only included when FAISS_ENABLE_METAL=ON and platform is Apple.
set(FAISS_METAL_SRC
MetalResources.mm
MetalIndex.mm
MetalKernels.mm
MetalDistance.mm
MetalFlatKernels.mm
MetalIndexFlat.mm
MetalIndexIVFFlat.mm
MetalIndexIVFPQ.mm
impl/MetalIVFFlat.mm
impl/MetalIVFPQ.mm
StandardMetalResources.mm
MetalCloner.mm
MetalPythonBridge.mm
)
add_library(faiss_metal STATIC ${FAISS_METAL_SRC})
target_link_libraries(faiss_metal
PUBLIC
faiss
PRIVATE
"-framework Metal"
"-framework MetalKit"
"-framework MetalPerformanceShaders"
"-framework Foundation"
)
target_include_directories(faiss_metal
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/impl>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/utils>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
PRIVATE
${PROJECT_SOURCE_DIR}
)
target_compile_definitions(faiss_metal PRIVATE FAISS_METAL_ENABLED=1)
set_target_properties(faiss_metal PROPERTIES
OBJCXX_STANDARD 17
OBJCXX_STANDARD_REQUIRED ON
)
# Pre-compile Metal shaders: .metal -> .air -> .metallib
find_program(XCRUN xcrun REQUIRED)
set(METAL_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/MetalDistance.metal)
set(METAL_AIR ${CMAKE_CURRENT_BINARY_DIR}/MetalDistance.air)
set(METAL_LIB ${CMAKE_CURRENT_BINARY_DIR}/MetalDistance.metallib)
add_custom_command(
OUTPUT ${METAL_AIR}
COMMAND ${XCRUN} -sdk macosx metal -c ${METAL_SOURCE} -o ${METAL_AIR}
DEPENDS ${METAL_SOURCE}
COMMENT "Compiling MetalDistance.metal -> .air"
)
add_custom_command(
OUTPUT ${METAL_LIB}
COMMAND ${XCRUN} -sdk macosx metallib ${METAL_AIR} -o ${METAL_LIB}
DEPENDS ${METAL_AIR}
COMMENT "Linking MetalDistance.air -> .metallib"
)
add_custom_target(metal_shaders DEPENDS ${METAL_LIB})
add_dependencies(faiss_metal metal_shaders)
target_compile_definitions(faiss_metal PRIVATE
FAISS_METALLIB_BUILD_PATH="${METAL_LIB}"
)
# Install the static library, headers, and pre-compiled metallib so that
# consumers of an installed faiss package can use the Metal backend.
install(TARGETS faiss_metal
EXPORT faiss-targets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
set(FAISS_METAL_HEADERS
GpuIndexFlat.h
MetalCloner.h
MetalDistance.h
MetalFlatKernels.h
MetalIndex.h
MetalIndexFlat.h
MetalIndexIVFFlat.h
MetalKernels.h
MetalPythonBridge.h
MetalResources.h
StandardMetalResources.h
)
foreach(header ${FAISS_METAL_HEADERS})
install(FILES ${header}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/faiss/gpu_metal
)
endforeach()
install(FILES impl/MetalIVFFlat.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/faiss/gpu_metal/impl
)
install(FILES ${METAL_LIB}
DESTINATION ${CMAKE_INSTALL_LIBDIR}
)