# Copyright (c) 2015-present, Facebook, Inc. # All rights reserved. # # This source code is licensed under the BSD+Patents license found in the # LICENSE file in the root directory of this source tree. -include ../makefile.inc all: libgpufaiss.a libgpufaiss.$(SHAREDEXT) CPPOBJ = GpuResources.o \ IndexProxy.o \ StandardGpuResources.o \ GpuAutoTune.o \ GpuClonerOptions.o \ impl/RemapIndices.o \ utils/DeviceMemory.o \ utils/StackDeviceMemory.o \ utils/DeviceUtils.o \ utils/Timer.o \ utils/MemorySpace.o \ utils/WorkerThread.o INS = 1 32 64 128 256 F512 T512 F1024 T1024 CUOBJ = impl/BinaryDistance.o \ impl/BinaryFlatIndex.o \ impl/BroadcastSum.o \ impl/Distance.o \ impl/FlatIndex.o \ impl/InvertedListAppend.o \ impl/IVFBase.o \ impl/IVFFlat.o \ impl/IVFFlatScan.o \ impl/IVFPQ.o \ impl/IVFUtils.o \ impl/IVFUtilsSelect1.o \ impl/IVFUtilsSelect2.o \ impl/L2Norm.o \ impl/L2Select.o \ impl/PQCodeDistances.o \ impl/PQScanMultiPassNoPrecomputed.o \ impl/PQScanMultiPassPrecomputed.o \ impl/VectorResidual.o \ GpuDistance.o \ GpuIndex.o \ GpuIndexBinaryFlat.o \ GpuIndexFlat.o \ GpuIndexIVF.o \ GpuIndexIVFFlat.o \ GpuIndexIVFPQ.o \ utils/Float16.o \ utils/MatrixMult.o \ utils/BlockSelectFloat.o \ utils/BlockSelectHalf.o \ utils/WarpSelectFloat.o \ utils/WarpSelectHalf.o \ utils/nvidia/fp16_emu.o \ $(foreach v,$(INS), \ utils/blockselect/BlockSelectHalf$(v).o \ utils/blockselect/BlockSelectFloat$(v).o \ utils/warpselect/WarpSelectHalf$(v).o \ utils/warpselect/WarpSelectFloat$(v).o \ ) %.o: %.cpp $(CXX) $(CXXFLAGS) $(CPUFLAGS) -c $< -o $@ $(CUDACFLAGS) %.o: %.cu $(NVCC) $(NVCCFLAGS) -g -O3 -c $< -o $@ libgpufaiss.a: $(CPPOBJ) $(CUOBJ) ar r $@ $^ libgpufaiss.$(SHAREDEXT): $(CPPOBJ) $(CUOBJ) $(CXX) $(SHAREDFLAGS) $(LDFLAGS) $(NVCCLDFLAGS) \ -o libgpufaiss.$(SHAREDEXT) $^ $(LIBS) $(NVCCLIBS) clean: rm -rf *.o impl/*.o utils/*.o libgpufaiss.a \ libgpufaiss.$(SHAREDEXT) \ -include depend depend: for i in $(patsubst %.o,%.cpp,$(CPPOBJ)) \ $(patsubst %.o,%.cu,$(CUOBJ)); do \ $(CXXCPP) $(CPPFLAGS) -x c++ -MM $$i; \ done > depend install: libgpufaiss.a libgpufaiss.$(SHAREDEXT) installdirs cp libgpufaiss.a libgpufaiss.$(SHAREDEXT) $(DESTDIR)$(libdir) cp *.h $(DESTDIR)$(includedir)/faiss/gpu cp --parents **/**.h $(DESTDIR)$(includedir)/faiss/gpu installdirs: $(MKDIR_P) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir)/faiss/gpu .PHONY: all clean