158 lines
5.7 KiB
Makefile
158 lines
5.7 KiB
Makefile
# 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.
|
|
|
|
.SUFFIXES: .cpp .o
|
|
|
|
|
|
MAKEFILE_INC=makefile.inc
|
|
|
|
-include $(MAKEFILE_INC)
|
|
|
|
LIBNAME=libfaiss
|
|
|
|
all: .env_ok $(LIBNAME).a tests/demo_ivfpq_indexing
|
|
|
|
py: _swigfaiss.so
|
|
|
|
|
|
|
|
#############################
|
|
# Various
|
|
|
|
|
|
LIBOBJ=hamming.o utils.o \
|
|
IndexFlat.o IndexIVF.o IndexLSH.o IndexPQ.o \
|
|
IndexIVFPQ.o \
|
|
Clustering.o Heap.o VectorTransform.o index_io.o \
|
|
PolysemousTraining.o MetaIndexes.o Index.o \
|
|
ProductQuantizer.o AutoTune.o AuxIndexStructures.o \
|
|
IndexScalarQuantizer.o FaissException.o
|
|
|
|
|
|
$(LIBNAME).a: $(LIBOBJ)
|
|
ar r $(LIBNAME).a $^
|
|
|
|
$(LIBNAME).$(SHAREDEXT): $(LIBOBJ)
|
|
$(CC) $(LDFLAGS) $(FAISSSHAREDFLAGS) -o $(LIBNAME).$(SHAREDEXT) $^ $(BLASLDFLAGS)
|
|
|
|
.cpp.o:
|
|
$(CC) $(CFLAGS) -c $< -o $@ $(FLAGS) $(EXTRAFLAGS)
|
|
|
|
utils.o: EXTRAFLAGS=$(BLASCFLAGS)
|
|
VectorTransform.o: EXTRAFLAGS=$(BLASCFLAGS)
|
|
ProductQuantizer.o: EXTRAFLAGS=$(BLASCFLAGS)
|
|
|
|
# for MKL, the flags when generating a dynamic lib are different from
|
|
# the ones when making an executable, but by default they are the same
|
|
|
|
BLASLDFLAGSSO ?= $(BLASLDFLAGS)
|
|
|
|
|
|
#############################
|
|
# pure C++ test in the test directory
|
|
|
|
tests/test_blas: tests/test_blas.cpp
|
|
$(CC) $(CFLAGS) $< -o $@ $(BLASLDFLAGS) $(BLASCFLAGS)
|
|
|
|
|
|
tests/demo_ivfpq_indexing: tests/demo_ivfpq_indexing.cpp $(LIBNAME).a
|
|
$(CC) -o $@ $(CFLAGS) $< $(LIBNAME).a $(LDFLAGS) $(BLASLDFLAGS)
|
|
|
|
tests/demo_sift1M: tests/demo_sift1M.cpp $(LIBNAME).a
|
|
$(CC) -o $@ $(CFLAGS) $< $(LIBNAME).a $(LDFLAGS) $(BLASLDFLAGS)
|
|
|
|
|
|
#############################
|
|
# SWIG interfaces
|
|
|
|
HFILES = IndexFlat.h Index.h IndexLSH.h IndexPQ.h IndexIVF.h \
|
|
IndexIVFPQ.h VectorTransform.h index_io.h utils.h \
|
|
PolysemousTraining.h Heap.h MetaIndexes.h AuxIndexStructures.h \
|
|
Clustering.h hamming.h AutoTune.h IndexScalarQuantizer.h FaissException.h
|
|
|
|
# also silently generates python/swigfaiss.py
|
|
python/swigfaiss_wrap.cxx: swigfaiss.swig $(HFILES)
|
|
$(SWIGEXEC) -python -c++ -Doverride= -o $@ $<
|
|
|
|
|
|
# extension is .so even on the mac
|
|
python/_swigfaiss.so: python/swigfaiss_wrap.cxx $(LIBNAME).a
|
|
$(CC) -I. $(CFLAGS) $(LDFLAGS) $(PYTHONCFLAGS) $(SHAREDFLAGS) \
|
|
-o $@ $^ $(BLASLDFLAGSSO)
|
|
|
|
_swigfaiss.so: python/_swigfaiss.so
|
|
cp python/_swigfaiss.so python/swigfaiss.py .
|
|
|
|
#############################
|
|
# Dependencies
|
|
|
|
# for i in *.cpp ; do g++ -std=c++11 -I.. -MM $i -msse4; done
|
|
|
|
AutoTune.o: AutoTune.cpp AutoTune.h Index.h FaissAssert.h \
|
|
FaissException.h utils.h Heap.h IndexFlat.h VectorTransform.h IndexLSH.h \
|
|
IndexPQ.h ProductQuantizer.h Clustering.h PolysemousTraining.h \
|
|
IndexIVF.h IndexIVFPQ.h MetaIndexes.h IndexScalarQuantizer.h
|
|
AuxIndexStructures.o: AuxIndexStructures.cpp AuxIndexStructures.h Index.h
|
|
Clustering.o: Clustering.cpp Clustering.h Index.h utils.h Heap.h \
|
|
FaissAssert.h FaissException.h IndexFlat.h
|
|
FaissException.o: FaissException.cpp FaissException.h
|
|
hamming.o: hamming.cpp hamming.h Heap.h FaissAssert.h FaissException.h
|
|
Heap.o: Heap.cpp Heap.h
|
|
Index.o: Index.cpp IndexFlat.h Index.h FaissAssert.h FaissException.h
|
|
IndexFlat.o: IndexFlat.cpp IndexFlat.h Index.h utils.h Heap.h \
|
|
FaissAssert.h FaissException.h AuxIndexStructures.h
|
|
index_io.o: index_io.cpp index_io.h FaissAssert.h FaissException.h \
|
|
IndexFlat.h Index.h VectorTransform.h IndexLSH.h IndexPQ.h \
|
|
ProductQuantizer.h Clustering.h Heap.h PolysemousTraining.h IndexIVF.h \
|
|
IndexIVFPQ.h MetaIndexes.h IndexScalarQuantizer.h
|
|
IndexIVF.o: IndexIVF.cpp IndexIVF.h Index.h Clustering.h Heap.h utils.h \
|
|
hamming.h FaissAssert.h FaissException.h IndexFlat.h \
|
|
AuxIndexStructures.h
|
|
IndexIVFPQ.o: IndexIVFPQ.cpp IndexIVFPQ.h IndexIVF.h Index.h Clustering.h \
|
|
Heap.h IndexPQ.h ProductQuantizer.h PolysemousTraining.h utils.h \
|
|
IndexFlat.h hamming.h FaissAssert.h FaissException.h \
|
|
AuxIndexStructures.h
|
|
IndexLSH.o: IndexLSH.cpp IndexLSH.h Index.h VectorTransform.h utils.h \
|
|
Heap.h hamming.h FaissAssert.h FaissException.h
|
|
IndexPQ.o: IndexPQ.cpp IndexPQ.h Index.h ProductQuantizer.h Clustering.h \
|
|
Heap.h PolysemousTraining.h FaissAssert.h FaissException.h hamming.h
|
|
IndexScalarQuantizer.o: IndexScalarQuantizer.cpp IndexScalarQuantizer.h \
|
|
IndexIVF.h Index.h Clustering.h Heap.h utils.h FaissAssert.h \
|
|
FaissException.h
|
|
MetaIndexes.o: MetaIndexes.cpp MetaIndexes.h Index.h FaissAssert.h \
|
|
FaissException.h Heap.h AuxIndexStructures.h
|
|
PolysemousTraining.o: PolysemousTraining.cpp PolysemousTraining.h \
|
|
ProductQuantizer.h Clustering.h Index.h Heap.h utils.h hamming.h \
|
|
FaissAssert.h FaissException.h
|
|
ProductQuantizer.o: ProductQuantizer.cpp ProductQuantizer.h Clustering.h \
|
|
Index.h Heap.h FaissAssert.h FaissException.h VectorTransform.h \
|
|
IndexFlat.h utils.h
|
|
utils.o: utils.cpp utils.h Heap.h AuxIndexStructures.h Index.h \
|
|
FaissAssert.h FaissException.h
|
|
VectorTransform.o: VectorTransform.cpp VectorTransform.h Index.h utils.h \
|
|
Heap.h FaissAssert.h FaissException.h IndexPQ.h ProductQuantizer.h \
|
|
Clustering.h PolysemousTraining.h
|
|
|
|
|
|
clean:
|
|
rm -f $(LIBNAME).a $(LIBNAME).$(SHAREDEXT)* *.o \
|
|
lua/swigfaiss.so lua/swigfaiss_wrap.cxx \
|
|
python/_swigfaiss.so python/swigfaiss_wrap.cxx \
|
|
python/swigfaiss.py _swigfaiss.so swigfaiss.py
|
|
|
|
.env_ok:
|
|
ifeq ($(wildcard $(MAKEFILE_INC)),)
|
|
$(error Cannot find $(MAKEFILE_INC). Did you forget to copy the relevant file from ./example_makefiles?)
|
|
endif
|
|
ifeq ($(shell command -v $(CC) 2>/dev/null),)
|
|
$(error Cannot find $(CC), please refer to $(CURDIR)/makefile.inc to set up your environment)
|
|
endif
|
|
|
|
.swig_ok: .env_ok
|
|
ifeq ($(shell command -v $(SWIGEXEC) 2>/dev/null),)
|
|
$(error Cannot find $(SWIGEXEC), please refer to $(CURDIR)/makefile.inc to set up your environment)
|
|
endif
|