1# Default options 2USE_BSDIFF ?= y 3 4EXECUTABLES-y := bspatch 5LIBRARIES-y := libbspatch.so 6EXECUTABLES-$(USE_BSDIFF) += bsdiff 7LIBRARIES-$(USE_BSDIFF) += libbsdiff.so 8 9BINARIES := $(EXECUTABLES-y) $(LIBRARIES-y) 10 11INSTALL = install 12CPPFLAGS += -Iinclude 13CXXFLAGS += -std=c++11 -O3 -Wall -Werror -fPIC 14 15DESTDIR ?= 16PREFIX = /usr 17BINDIR = $(PREFIX)/bin 18DATADIR = $(PREFIX)/share 19MANDIR = $(DATADIR)/man 20MAN1DIR = $(MANDIR)/man1 21INCLUDEDIR ?= $(PREFIX)/include 22GENTOO_LIBDIR ?= lib 23LIBDIR ?= $(PREFIX)/$(GENTOO_LIBDIR) 24INSTALL_PROGRAM ?= $(INSTALL) -c -m 755 25INSTALL_MAN ?= $(INSTALL) -c -m 444 26 27.PHONY: all test clean install 28all: $(BINARIES) 29test: bsdiff_unittest 30clean: 31 rm -f *.o $(BINARIES) bsdiff_unittest 32 33### List of source files for each project. Keep in sync with the Android.mk. 34# "bsdiff" program. 35bsdiff_src_files := \ 36 bsdiff.cc 37 38# "bspatch" program. 39bspatch_src_files := \ 40 bspatch.cc \ 41 buffer_file.cc \ 42 extents.cc \ 43 extents_file.cc \ 44 file.cc \ 45 memory_file.cc \ 46 sink_file.cc 47 48# Unit test files. 49bsdiff_common_unittests := \ 50 bsdiff_unittest.cc \ 51 bspatch_unittest.cc \ 52 extents_file_unittest.cc \ 53 extents_unittest.cc \ 54 test_utils.cc \ 55 testrunner.cc 56 57 58BSDIFF_LIBS := -lbz2 -ldivsufsort -ldivsufsort64 59BSDIFF_OBJS := $(bsdiff_src_files:.cc=.o) 60 61BSPATCH_LIBS := -lbz2 62BSPATCH_OBJS := $(bspatch_src_files:.cc=.o) 63 64UNITTEST_LIBS = -lgmock -lgtest -lpthread 65UNITTEST_OBJS := $(bsdiff_common_unittests:.cc=.o) 66 67bsdiff: $(BSDIFF_OBJS) bsdiff_main.o 68bsdiff: LDLIBS += $(BSDIFF_LIBS) 69libbsdiff.so: $(BSDIFF_OBJS) 70libbsdiff.so: LDLIBS += $(BSDIFF_LIBS) 71 72bspatch: $(BSPATCH_OBJS) bspatch_main.o 73bspatch: LDLIBS += $(BSPATCH_LIBS) 74libbspatch.so: $(BSPATCH_OBJS) 75libbspatch.so: LDLIBS += $(BSPATCH_LIBS) 76 77bsdiff_unittest: LDLIBS += $(BSDIFF_LIBS) $(BSPATCH_LIBS) $(UNITTEST_LIBS) 78bsdiff_unittest: $(BSPATCH_OBJS) $(BSDIFF_OBJS) $(UNITTEST_OBJS) 79 80bsdiff_unittest bsdiff bspatch: 81 $(CXX) $(CXXFLAGS) -o $@ $^ $(LDLIBS) 82 83libbsdiff.so libbspatch.so: 84 $(CXX) $(CXXFLAGS) $(LDFLAGS) -Wl,-soname,$@ -shared -o $@ $^ $(LDLIBS) 85 86# Source file dependencies. 87bspatch.o: bspatch.cc include/bsdiff/bspatch.h \ 88 include/bsdiff/extents_file.h include/bsdiff/file_interface.h \ 89 buffer_file.h extents.h file.h memory_file.h sink_file.h 90bspatch_main.o: bspatch_main.cc include/bsdiff/bspatch.h \ 91 include/bsdiff/extents_file.h include/bsdiff/file_interface.h 92bspatch_unittest.o: bspatch_unittest.cc include/bsdiff/bspatch.h \ 93 include/bsdiff/extents_file.h include/bsdiff/file_interface.h \ 94 test_utils.h 95buffer_file.o: buffer_file.cc buffer_file.h \ 96 include/bsdiff/file_interface.h include/bsdiff/bspatch.h \ 97 include/bsdiff/extents_file.h 98extents.o: extents.cc extents.h include/bsdiff/extents_file.h \ 99 include/bsdiff/file_interface.h 100extents_file.o: extents_file.cc include/bsdiff/extents_file.h \ 101 include/bsdiff/file_interface.h 102extents_file_unittest.o: extents_file_unittest.cc \ 103 include/bsdiff/extents_file.h include/bsdiff/file_interface.h 104extents_unittest.o: extents_unittest.cc extents.h \ 105 include/bsdiff/extents_file.h include/bsdiff/file_interface.h 106file.o: file.cc file.h include/bsdiff/file_interface.h 107memory_file.o: memory_file.cc memory_file.h \ 108 include/bsdiff/file_interface.h 109sink_file.o: sink_file.cc sink_file.h include/bsdiff/file_interface.h 110testrunner.o: testrunner.cc test_utils.h 111test_utils.o: test_utils.cc test_utils.h 112 113install: 114 mkdir -p $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(MAN1DIR) \ 115 $(DESTDIR)/$(INCLUDEDIR)/bsdiff 116 $(INSTALL_PROGRAM) $(EXECUTABLES-y) $(DESTDIR)$(BINDIR) 117 $(INSTALL_PROGRAM) $(LIBRARIES-y) $(DESTDIR)$(LIBDIR) 118 $(INSTALL) -c -m 644 include/bsdiff/*.h $(DESTDIR)/$(INCLUDEDIR)/bsdiff 119ifndef WITHOUT_MAN 120 $(INSTALL_MAN) $(EXECUTABLES-y:=.1) $(DESTDIR)$(MAN1DIR) 121endif 122