-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
154 lines (134 loc) · 4.63 KB
/
Copy pathMakefile
File metadata and controls
154 lines (134 loc) · 4.63 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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# Default options
USE_BSDIFF ?= y
EXECUTABLES-y := bspatch
LIBRARIES-y := libbspatch.so
EXECUTABLES-$(USE_BSDIFF) += bsdiff
LIBRARIES-$(USE_BSDIFF) += libbsdiff.so
BINARIES := $(EXECUTABLES-y) $(LIBRARIES-y)
INSTALL = install
CPPFLAGS += -Iinclude -I..
CXXFLAGS += -std=c++14 -O3 -Wall -Werror -fPIC
# On macOS the brotli/divsufsort headers and libraries are installed under the
# Homebrew prefix, which isn't on the compiler's default search path.
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
BREW_PREFIX ?= $(shell brew --prefix)
CPPFLAGS += -I$(BREW_PREFIX)/include
LDFLAGS += -L$(BREW_PREFIX)/lib
# macOS's linker spells the shared-library name flag differently than GNU ld.
SONAME_FLAG = -Wl,-install_name,
else
SONAME_FLAG = -Wl,-soname,
endif
# The unit tests require GoogleTest/GoogleMock. Detect whether its headers are
# available so a plain `make` works (and produces no spurious errors) without
# GoogleTest installed; `make test` then prints a hint instead of failing.
HAVE_GTEST := $(shell printf '\#include <gtest/gtest.h>\n' | $(CXX) $(CPPFLAGS) $(CXXFLAGS) -fsyntax-only -xc++ - >/dev/null 2>&1 && echo y)
DESTDIR ?=
PREFIX = /usr
BINDIR = $(PREFIX)/bin
DATADIR = $(PREFIX)/share
MANDIR = $(DATADIR)/man
MAN1DIR = $(MANDIR)/man1
INCLUDEDIR ?= $(PREFIX)/include
GENTOO_LIBDIR ?= lib
LIBDIR ?= $(PREFIX)/$(GENTOO_LIBDIR)
INSTALL_PROGRAM ?= $(INSTALL) -c -m 755
INSTALL_MAN ?= $(INSTALL) -c -m 444
.PHONY: all test clean install
all: $(BINARIES)
ifeq ($(HAVE_GTEST),y)
test: bsdiff_unittest
else
test:
@echo "GoogleTest not found; install it (e.g. 'brew install googletest') to build the tests." >&2; exit 1
endif
clean:
rm -f *.o $(BINARIES) bsdiff_unittest .deps
### List of source files for each project. Keep in sync with the Android.mk.
# "bsdiff" program.
bsdiff_src_files := \
brotli_compressor.cc \
bsdiff.cc \
bz2_compressor.cc \
compressor_buffer.cc \
diff_encoder.cc \
endsley_patch_writer.cc \
logging.cc \
patch_writer.cc \
patch_writer_factory.cc \
split_patch_writer.cc \
suffix_array_index.cc
# "bspatch" program.
bspatch_src_files := \
brotli_decompressor.cc \
bspatch.cc \
bz2_decompressor.cc \
buffer_file.cc \
decompressor_interface.cc \
extents.cc \
extents_file.cc \
file.cc \
logging.cc \
memory_file.cc \
patch_reader.cc \
sink_file.cc \
utils.cc
# Unit test files.
bsdiff_common_unittests := \
brotli_compressor_unittest.cc \
brotli_decompressor_unittest.cc \
bsdiff_arguments.cc \
bsdiff_arguments_unittest.cc \
bsdiff_unittest.cc \
bspatch_unittest.cc \
bz2_decompressor_unittest.cc \
diff_encoder_unittest.cc \
endsley_patch_writer_unittest.cc \
extents_file_unittest.cc \
extents_unittest.cc \
patch_reader_unittest.cc \
patch_writer_unittest.cc \
split_patch_writer_unittest.cc \
suffix_array_index_unittest.cc \
test_utils.cc \
testrunner.cc
BSDIFF_LIBS := -lbz2 -lbrotlienc -ldivsufsort -ldivsufsort64
BSDIFF_OBJS := $(bsdiff_src_files:.cc=.o)
BSPATCH_LIBS := -lbz2 -lbrotlidec
BSPATCH_OBJS := $(bspatch_src_files:.cc=.o)
UNITTEST_LIBS = -lgmock -lgtest -lpthread
UNITTEST_OBJS := $(bsdiff_common_unittests:.cc=.o)
bsdiff: $(BSDIFF_OBJS) bsdiff_arguments.o bsdiff_main.o
bsdiff: LDLIBS += $(BSDIFF_LIBS)
libbsdiff.so: $(BSDIFF_OBJS)
libbsdiff.so: LDLIBS += $(BSDIFF_LIBS)
bspatch: $(BSPATCH_OBJS) bspatch_main.o
bspatch: LDLIBS += $(BSPATCH_LIBS)
libbspatch.so: $(BSPATCH_OBJS)
libbspatch.so: LDLIBS += $(BSPATCH_LIBS)
bsdiff_unittest: LDLIBS += $(BSDIFF_LIBS) $(BSPATCH_LIBS) $(UNITTEST_LIBS)
bsdiff_unittest: $(BSPATCH_OBJS) $(BSDIFF_OBJS) $(UNITTEST_OBJS)
bsdiff_unittest bsdiff bspatch:
$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS)
libbsdiff.so libbspatch.so:
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(SONAME_FLAG)$@ -shared -o $@ $^ $(LDLIBS)
# Source file dependencies. The unit-test sources are only scanned when
# GoogleTest is available, so a plain `make` doesn't error on missing headers.
deps_src_files := $(bsdiff_src_files) $(bspatch_src_files) \
bsdiff_arguments.cc bsdiff_main.cc bspatch_main.cc
ifeq ($(HAVE_GTEST),y)
deps_src_files += $(bsdiff_common_unittests)
endif
.deps: $(sort $(deps_src_files))
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -MM $^ >$@ || (rm -f $@; false)
-include .deps
install:
mkdir -p $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(MAN1DIR) \
$(DESTDIR)/$(INCLUDEDIR)/bsdiff
$(INSTALL_PROGRAM) $(EXECUTABLES-y) $(DESTDIR)$(BINDIR)
$(INSTALL_PROGRAM) $(LIBRARIES-y) $(DESTDIR)$(LIBDIR)
$(INSTALL) -c -m 644 include/bsdiff/*.h $(DESTDIR)/$(INCLUDEDIR)/bsdiff
ifndef WITHOUT_MAN
$(INSTALL_MAN) $(EXECUTABLES-y:=.1) $(DESTDIR)$(MAN1DIR)
endif