[Leveldb] 2.0_beta
[external/leveldb.git] / Makefile
1 # Copyright (c) 2011 The LevelDB Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. See the AUTHORS file for names of contributors.
4
5 CC = g++
6
7 #-----------------------------------------------
8 # Uncomment exactly one of the lines labelled (A), (B), and (C) below
9 # to switch between compilation modes.
10
11 OPT ?= -O2 -DNDEBUG       # (A) Production use (optimized mode)
12 # OPT ?= -g2              # (B) Debug mode, w/ full line-level debugging symbols
13 # OPT ?= -O2 -g2 -DNDEBUG # (C) Profiling mode: opt, but w/debugging symbols
14 #-----------------------------------------------
15
16 # detect what platform we're building on
17 $(shell sh ./build_detect_platform)
18 # this file is generated by build_detect_platform to set build flags
19 include build_config.mk
20
21 # If Snappy is installed, add compilation and linker flags
22 # (see http://code.google.com/p/snappy/)
23 ifeq ($(SNAPPY), 1)
24 SNAPPY_CFLAGS=-DSNAPPY
25 SNAPPY_LDFLAGS=-lsnappy
26 else
27 SNAPPY_CFLAGS=
28 SNAPPY_LDFLAGS=
29 endif
30
31 # If Google Perf Tools are installed, add compilation and linker flags
32 # (see http://code.google.com/p/google-perftools/)
33 ifeq ($(GOOGLE_PERFTOOLS), 1)
34 GOOGLE_PERFTOOLS_LDFLAGS=-ltcmalloc
35 else
36 GOOGLE_PERFTOOLS_LDFLAGS=
37 endif
38
39 libdir=/usr/lib
40 includedir=/usr/include
41 pkgconfigdir=$(libdir)/pkgconfig
42 leveldbincludedir=$(includedir)/leveldb
43 memenvincludedir=$(includedir)/helpers/memenv
44 LN_S = /bin/ln -s
45 MKDIR_P = /bin/mkdir -p
46 INSTALL = /usr/bin/install -c
47 INSTALL_DATA = ${INSTALL} -m 644
48 LIBTOOL = /usr/bin/libtool
49 srcdir = .
50 DESTDIR=$(CURDIR)/debian/tmp
51 am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
52
53 CFLAGS = -c -fPIC -I. -I./include $(PORT_CFLAGS) $(PLATFORM_CFLAGS) $(OPT) $(SNAPPY_CFLAGS)
54
55 LDFLAGS += $(PLATFORM_LDFLAGS) $(SNAPPY_LDFLAGS) $(GOOGLE_PERFTOOLS_LDFLAGS)
56
57 LIBOBJECTS = \
58         ./db/builder.o \
59         ./db/c.o \
60         ./db/db_impl.o \
61         ./db/db_iter.o \
62         ./db/filename.o \
63         ./db/dbformat.o \
64         ./db/log_reader.o \
65         ./db/log_writer.o \
66         ./db/memtable.o \
67         ./db/repair.o \
68         ./db/table_cache.o \
69         ./db/version_edit.o \
70         ./db/version_set.o \
71         ./db/write_batch.o \
72         ./port/port_posix.o \
73         ./table/block.o \
74         ./table/block_builder.o \
75         ./table/format.o \
76         ./table/iterator.o \
77         ./table/merger.o \
78         ./table/table.o \
79         ./table/table_builder.o \
80         ./table/two_level_iterator.o \
81         ./util/arena.o \
82         ./util/cache.o \
83         ./util/coding.o \
84         ./util/comparator.o \
85         ./util/crc32c.o \
86         ./util/env.o \
87         ./util/env_posix.o \
88         ./util/hash.o \
89         ./util/histogram.o \
90         ./util/logging.o \
91         ./util/options.o \
92         ./util/status.o
93
94 LEVELDBHEADERFILES = \
95         ./include/leveldb/slice.h \
96         ./include/leveldb/write_batch.h \
97         ./include/leveldb/comparator.h \
98         ./include/leveldb/table.h \
99         ./include/leveldb/c.h \
100         ./include/leveldb/cache.h \
101         ./include/leveldb/table_builder.h \
102         ./include/leveldb/status.h \
103         ./include/leveldb/env.h \
104         ./include/leveldb/db.h \
105         ./include/leveldb/options.h \
106         ./include/leveldb/iterator.h
107
108 MEMENVHEADERFILES = \
109         ./helpers/memenv/memenv.h
110
111 pkgconfig_DATA= \
112         leveldb.pc \
113         memenv.pc
114
115 TESTUTIL = ./util/testutil.o
116 TESTHARNESS = ./util/testharness.o $(TESTUTIL)
117
118 TESTS = \
119         arena_test \
120         c_test \
121         cache_test \
122         coding_test \
123         corruption_test \
124         crc32c_test \
125         db_test \
126         dbformat_test \
127         env_test \
128         filename_test \
129         log_test \
130         memenv_test \
131         skiplist_test \
132         table_test \
133         version_edit_test \
134         version_set_test \
135         write_batch_test
136
137 PROGRAMS = db_bench $(TESTS)
138 BENCHMARKS = db_bench_sqlite3 db_bench_tree_db
139
140 #LIBRARY = libleveldb.a
141 #MEMENVLIBRARY = libmemenv.a
142 #LIBRARIES = $(LIBRARY) $(MEMENVLIBRARY) libleveldb.so libleveldb.so.0 libleveldb.so.1.1.0 libmemenv.so libmemenv.so.0 libmemenv.so.1.1.0
143 LIBRARY = libleveldb
144 MEMENVLIBRARY = libmemenv
145 #LIBRARIES = $(LIBRARY) $(MEMENVLIBRARY) libleveldb.so.0 libleveldb.so.1.1.0 libmemenv.so.0 libmemenv.so.1.1.0
146 LIBRARIES = libleveldb.so.1.1.0 libmemenv.so.1.1.0
147
148 all: $(LIBRARY) $(MEMENVLIBRARY)
149         
150 install: all install-pkgconfigDATA install-libLEVELDB install-leveldbHeaderFiles install-memenvHeaderFiles
151
152 install-libLEVELDB: $(LIBRARIES)
153         test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
154         @list='$(LIBRARIES)'; test -n "$(libdir)" || list=; \
155         for p in $$list; do \
156           if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
157           echo "$$d$$p"; \
158         done | \
159         while read files; do \
160           echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(libdir)'"; \
161           $(INSTALL_DATA) $$files "$(DESTDIR)$(libdir)" || exit $$?; \
162         done
163         
164         cd "$(DESTDIR)$(libdir)" && $(LN_S) libleveldb.so.1.1.0 libleveldb.so
165         cd "$(DESTDIR)$(libdir)" && $(LN_S) libleveldb.so.1.1.0 libleveldb.so.0
166         cd "$(DESTDIR)$(libdir)" && $(LN_S) libmemenv.so.1.1.0 libmemenv.so
167         cd "$(DESTDIR)$(libdir)" && $(LN_S) libmemenv.so.1.1.0 libmemenv.so.0
168
169 uninstall-libLEVELDB:
170         test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
171         @list='$(LIBRARIES)'; test -n "$(libdir)" || list=; \
172         for p in $$list; do \
173         $(am__strip_dir) \
174         echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
175         $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
176         done 
177
178 install-pkgconfigDATA: $(pkgconfig_DATA)
179         test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
180         @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
181         for p in $$list; do \
182           if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
183           echo "$$d$$p"; \
184         done | \
185         while read files; do \
186           echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
187           $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
188         done
189
190 uninstall-pkgconfigDATA: 
191         test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
192         @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
193         files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
194         test -n "$$files" || exit 0; \
195         echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
196         cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
197
198 install-leveldbHeaderFiles: $(LEVELDBHEADERFILES)
199         test -z "$(leveldbincludedir)" || $(MKDIR_P) "$(DESTDIR)$(leveldbincludedir)"
200         @list='$(LEVELDBHEADERFILES)'; test -n "$(leveldbincludedir)" || list=; \
201         for p in $$list; do \
202           if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
203           echo "$$d$$p"; \
204         done | \
205         while read files; do \
206           echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(leveldbincludedir)'"; \
207           $(INSTALL_DATA) $$files "$(DESTDIR)$(leveldbincludedir)" || exit $$?; \
208         done
209
210 uninstall-leveldbHeaderFiles: 
211         test -z "$(leveldbincludedir)" || $(MKDIR_P) "$(DESTDIR)$(leveldbincludedir)"
212         @list='$(LEVELDBHEADERFILES)'; test -n "$(leveldbincludedir)" || list=; \
213         files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
214         test -n "$$files" || exit 0; \
215         echo " ( cd '$(DESTDIR)$(leveldbincludedir)' && rm -f" $$files ")"; \
216         cd "$(DESTDIR)$(leveldbincludedir)" && rm -f $$files
217
218 install-memenvHeaderFiles: $(MEMENVHEADERFILES)
219         test -z "$(memenvincludedir)" || $(MKDIR_P) "$(DESTDIR)$(memenvincludedir)"
220         @list='$(MEMENVHEADERFILES)'; test -n "$(memenvincludedir)" || list=; \
221         for p in $$list; do \
222           if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
223           echo "$$d$$p"; \
224         done | \
225         while read files; do \
226           echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(memenvincludedir)'"; \
227           $(INSTALL_DATA) $$files "$(DESTDIR)$(memenvincludedir)" || exit $$?; \
228         done
229
230 uninstall-memenvHeaderFiles: 
231         test -z "$(memenvincludedir)" || $(MKDIR_P) "$(DESTDIR)$(memenvincludedir)"
232         @list='$(MEMENVHEADERFILES)'; test -n "$(memenvincludedir)" || list=; \
233         files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
234         test -n "$$files" || exit 0; \
235         echo " ( cd '$(DESTDIR)$(memenvincludedir)' && rm -f" $$files ")"; \
236         cd "$(DESTDIR)$(memenvincludedir)" && rm -f $$files
237
238
239 check: $(PROGRAMS) $(TESTS)
240         for t in $(TESTS); do echo "***** Running $$t"; ./$$t || exit 1; done
241
242 clean: uninstall-pkgconfigDATA uninstall-libLEVELDB uninstall-leveldbHeaderFiles uninstall-memenvHeaderFiles
243         -rm -f $(PROGRAMS) $(BENCHMARKS) $(LIBRARY) $(MEMENVLIBRARY) $(LIBRARIES) */*.o */*/*.o ios-x86/*/*.o ios-arm/*/*.o
244         -rm -rf debian/tmp/*
245         -rm -rf ios-x86/* ios-arm/*
246         -rm build_config.mk
247         -rm -f build_stamp
248
249 distclean: clean
250
251 $(LIBRARY): $(LIBOBJECTS)
252         rm -f $@
253         #$(AR) -rs $@ $(LIBOBJECTS)
254         $(CC) -shared -Wl,-soname,libleveldb.so -o libleveldb.so.1.1.0 $(LIBOBJECTS)
255
256 db_bench: db/db_bench.o $(LIBOBJECTS) $(TESTUTIL)
257         $(CC) $(LDFLAGS) db/db_bench.o $(LIBOBJECTS) $(TESTUTIL) -o $@
258
259 db_bench_sqlite3: doc/bench/db_bench_sqlite3.o $(LIBOBJECTS) $(TESTUTIL)
260         $(CC) $(LDFLAGS) -lsqlite3 doc/bench/db_bench_sqlite3.o $(LIBOBJECTS) $(TESTUTIL) -o $@
261
262 db_bench_tree_db: doc/bench/db_bench_tree_db.o $(LIBOBJECTS) $(TESTUTIL)
263         $(CC) $(LDFLAGS) -lkyotocabinet doc/bench/db_bench_tree_db.o $(LIBOBJECTS) $(TESTUTIL) -o $@
264
265 arena_test: util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS)
266         $(CC) $(LDFLAGS) util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
267
268 c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS)
269         $(CC) $(LDFLAGS) db/c_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
270
271 cache_test: util/cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
272         $(CC) $(LDFLAGS) util/cache_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
273
274 coding_test: util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS)
275         $(CC) $(LDFLAGS) util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
276
277 corruption_test: db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS)
278         $(CC) $(LDFLAGS) db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
279
280 crc32c_test: util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS)
281         $(CC) $(LDFLAGS) util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
282
283 db_test: db/db_test.o $(LIBOBJECTS) $(TESTHARNESS)
284         $(CC) $(LDFLAGS) db/db_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
285
286 dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS)
287         $(CC) $(LDFLAGS) db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
288
289 env_test: util/env_test.o $(LIBOBJECTS) $(TESTHARNESS)
290         $(CC) $(LDFLAGS) util/env_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
291
292 filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS)
293         $(CC) $(LDFLAGS) db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
294
295 log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
296         $(CC) $(LDFLAGS) db/log_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
297
298 table_test: table/table_test.o $(LIBOBJECTS) $(TESTHARNESS)
299         $(CC) $(LDFLAGS) table/table_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
300
301 skiplist_test: db/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
302         $(CC) $(LDFLAGS) db/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
303
304 version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS)
305         $(CC) $(LDFLAGS) db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
306
307 version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS)
308         $(CC) $(LDFLAGS) db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
309
310 write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
311         $(CC) $(LDFLAGS) db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
312
313 $(MEMENVLIBRARY) : helpers/memenv/memenv.o
314         rm -f $@
315         #$(AR) -rs $@ helpers/memenv/memenv.o
316         $(CC) -shared -Wl,-soname,libmemenv.so -o libmemenv.so.1.1.0 helpers/memenv/memenv.o
317
318 memenv_test : helpers/memenv/memenv_test.o $(MEMENVLIBRARY) $(LIBRARY) $(TESTHARNESS)
319         $(CC) $(LDFLAGS) helpers/memenv/memenv_test.o $(MEMENVLIBRARY) $(LIBRARY) $(TESTHARNESS) -o $@
320
321 ifeq ($(PLATFORM), IOS)
322 # For iOS, create universal object files to be used on both the simulator and
323 # a device.
324 SIMULATORROOT=/Developer/Platforms/iPhoneSimulator.platform/Developer
325 DEVICEROOT=/Developer/Platforms/iPhoneOS.platform/Developer
326 IOSVERSION=$(shell defaults read /Developer/Platforms/iPhoneOS.platform/version CFBundleShortVersionString)
327
328 .cc.o:
329         mkdir -p ios-x86/$(dir $@)
330         $(SIMULATORROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 $< -o ios-x86/$@
331         mkdir -p ios-arm/$(dir $@)
332         $(DEVICEROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 $< -o ios-arm/$@
333         lipo ios-x86/$@ ios-arm/$@ -create -output $@
334
335 .c.o:
336         mkdir -p ios-x86/$(dir $@)
337         $(SIMULATORROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 $< -o ios-x86/$@
338         mkdir -p ios-arm/$(dir $@)
339         $(DEVICEROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 $< -o ios-arm/$@
340         lipo ios-x86/$@ ios-arm/$@ -create -output $@
341
342 else
343 .cc.o:
344         $(CC) $(CFLAGS) $< -o $@
345
346 .c.o:
347         $(CC) $(CFLAGS) $< -o $@
348 endif
349
350 .PHONY: install-pkgconfigDATA uninstall-pkgconfigDATA install-libLEVELDB uninstall-libLEVELDB install-leveldbHeaderFiles uninstall-leveldbHeaderFiles install-memenvHeaderFiles uninstall-memenvHeaderFiles