xref: /leveldb-1.20/Makefile (revision a2fb086d)
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#-----------------------------------------------
6# Uncomment exactly one of the lines labelled (A), (B), and (C) below
7# to switch between compilation modes.
8
9# (A) Production use (optimized mode)
10OPT ?= -O2 -DNDEBUG
11# (B) Debug mode, w/ full line-level debugging symbols
12# OPT ?= -g2
13# (C) Profiling mode: opt, but w/debugging symbols
14# OPT ?= -O2 -g2 -DNDEBUG
15#-----------------------------------------------
16
17# detect what platform we're building on
18$(shell CC="$(CC)" CXX="$(CXX)" TARGET_OS="$(TARGET_OS)" \
19    ./build_detect_platform build_config.mk ./)
20# this file is generated by the previous line to set build flags and sources
21include build_config.mk
22
23TESTS = \
24	db/autocompact_test \
25	db/c_test \
26	db/corruption_test \
27	db/db_test \
28	db/dbformat_test \
29	db/fault_injection_test \
30	db/filename_test \
31	db/log_test \
32	db/recovery_test \
33	db/skiplist_test \
34	db/version_edit_test \
35	db/version_set_test \
36	db/write_batch_test \
37	helpers/memenv/memenv_test \
38	issues/issue178_test \
39	issues/issue200_test \
40	table/filter_block_test \
41	table/table_test \
42	util/arena_test \
43	util/bloom_test \
44	util/cache_test \
45	util/coding_test \
46	util/crc32c_test \
47	util/env_test \
48	util/hash_test
49
50UTILS = \
51	db/db_bench \
52	db/leveldbutil
53
54# Put the object files in a subdirectory, but the application at the top of the object dir.
55PROGNAMES := $(notdir $(TESTS) $(UTILS))
56
57# On Linux may need libkyotocabinet-dev for dependency.
58BENCHMARKS = \
59	doc/bench/db_bench_sqlite3 \
60	doc/bench/db_bench_tree_db
61
62CFLAGS += -I. -I./include $(PLATFORM_CCFLAGS) $(OPT)
63CXXFLAGS += -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT)
64
65LDFLAGS += $(PLATFORM_LDFLAGS)
66LIBS += $(PLATFORM_LIBS)
67
68SIMULATOR_OUTDIR=out-ios-x86
69DEVICE_OUTDIR=out-ios-arm
70
71ifeq ($(PLATFORM), IOS)
72# Note: iOS should probably be using libtool, not ar.
73AR=xcrun ar
74SIMULATORSDK=$(shell xcrun -sdk iphonesimulator --show-sdk-path)
75DEVICESDK=$(shell xcrun -sdk iphoneos --show-sdk-path)
76DEVICE_CFLAGS = -isysroot "$(DEVICESDK)" -arch armv6 -arch armv7 -arch armv7s -arch arm64
77SIMULATOR_CFLAGS = -isysroot "$(SIMULATORSDK)" -arch i686 -arch x86_64
78STATIC_OUTDIR=out-ios-universal
79else
80STATIC_OUTDIR=out-static
81SHARED_OUTDIR=out-shared
82STATIC_PROGRAMS := $(addprefix $(STATIC_OUTDIR)/, $(PROGNAMES))
83SHARED_PROGRAMS := $(addprefix $(SHARED_OUTDIR)/, db_bench)
84endif
85
86STATIC_LIBOBJECTS := $(addprefix $(STATIC_OUTDIR)/, $(SOURCES:.cc=.o))
87STATIC_MEMENVOBJECTS := $(addprefix $(STATIC_OUTDIR)/, $(MEMENV_SOURCES:.cc=.o))
88
89DEVICE_LIBOBJECTS := $(addprefix $(DEVICE_OUTDIR)/, $(SOURCES:.cc=.o))
90DEVICE_MEMENVOBJECTS := $(addprefix $(DEVICE_OUTDIR)/, $(MEMENV_SOURCES:.cc=.o))
91
92SIMULATOR_LIBOBJECTS := $(addprefix $(SIMULATOR_OUTDIR)/, $(SOURCES:.cc=.o))
93SIMULATOR_MEMENVOBJECTS := $(addprefix $(SIMULATOR_OUTDIR)/, $(MEMENV_SOURCES:.cc=.o))
94
95SHARED_LIBOBJECTS := $(addprefix $(SHARED_OUTDIR)/, $(SOURCES:.cc=.o))
96SHARED_MEMENVOBJECTS := $(addprefix $(SHARED_OUTDIR)/, $(MEMENV_SOURCES:.cc=.o))
97
98TESTUTIL := $(STATIC_OUTDIR)/util/testutil.o
99TESTHARNESS := $(STATIC_OUTDIR)/util/testharness.o $(TESTUTIL)
100
101STATIC_TESTOBJS := $(addprefix $(STATIC_OUTDIR)/, $(addsuffix .o, $(TESTS)))
102STATIC_UTILOBJS := $(addprefix $(STATIC_OUTDIR)/, $(addsuffix .o, $(UTILS)))
103STATIC_ALLOBJS := $(STATIC_LIBOBJECTS) $(STATIC_MEMENVOBJECTS) $(STATIC_TESTOBJS) $(STATIC_UTILOBJS) $(TESTHARNESS)
104DEVICE_ALLOBJS := $(DEVICE_LIBOBJECTS) $(DEVICE_MEMENVOBJECTS)
105SIMULATOR_ALLOBJS := $(SIMULATOR_LIBOBJECTS) $(SIMULATOR_MEMENVOBJECTS)
106
107default: all
108
109# Should we build shared libraries?
110ifneq ($(PLATFORM_SHARED_EXT),)
111
112# Many leveldb test apps use non-exported API's. Only build a subset for testing.
113SHARED_ALLOBJS := $(SHARED_LIBOBJECTS) $(SHARED_MEMENVOBJECTS) $(TESTHARNESS)
114
115ifneq ($(PLATFORM_SHARED_VERSIONED),true)
116SHARED_LIB1 = libleveldb.$(PLATFORM_SHARED_EXT)
117SHARED_LIB2 = $(SHARED_LIB1)
118SHARED_LIB3 = $(SHARED_LIB1)
119SHARED_LIBS = $(SHARED_LIB1)
120SHARED_MEMENVLIB = $(SHARED_OUTDIR)/libmemenv.a
121else
122# Update db.h if you change these.
123SHARED_VERSION_MAJOR = 1
124SHARED_VERSION_MINOR = 19
125SHARED_LIB1 = libleveldb.$(PLATFORM_SHARED_EXT)
126SHARED_LIB2 = $(SHARED_LIB1).$(SHARED_VERSION_MAJOR)
127SHARED_LIB3 = $(SHARED_LIB1).$(SHARED_VERSION_MAJOR).$(SHARED_VERSION_MINOR)
128SHARED_LIBS = $(SHARED_OUTDIR)/$(SHARED_LIB1) $(SHARED_OUTDIR)/$(SHARED_LIB2) $(SHARED_OUTDIR)/$(SHARED_LIB3)
129$(SHARED_OUTDIR)/$(SHARED_LIB1): $(SHARED_OUTDIR)/$(SHARED_LIB3)
130	ln -fs $(SHARED_LIB3) $(SHARED_OUTDIR)/$(SHARED_LIB1)
131$(SHARED_OUTDIR)/$(SHARED_LIB2): $(SHARED_OUTDIR)/$(SHARED_LIB3)
132	ln -fs $(SHARED_LIB3) $(SHARED_OUTDIR)/$(SHARED_LIB2)
133SHARED_MEMENVLIB = $(SHARED_OUTDIR)/libmemenv.a
134endif
135
136$(SHARED_OUTDIR)/$(SHARED_LIB3): $(SHARED_LIBOBJECTS)
137	$(CXX) $(LDFLAGS) $(PLATFORM_SHARED_LDFLAGS)$(SHARED_LIB2) $(SHARED_LIBOBJECTS) -o $(SHARED_OUTDIR)/$(SHARED_LIB3) $(LIBS)
138
139endif  # PLATFORM_SHARED_EXT
140
141all: $(SHARED_LIBS) $(SHARED_PROGRAMS) $(STATIC_OUTDIR)/libleveldb.a $(STATIC_OUTDIR)/libmemenv.a $(STATIC_PROGRAMS)
142
143check: $(STATIC_PROGRAMS)
144	for t in $(notdir $(TESTS)); do echo "***** Running $$t"; $(STATIC_OUTDIR)/$$t || exit 1; done
145
146clean:
147	-rm -rf out-static out-shared out-ios-x86 out-ios-arm out-ios-universal
148	-rm -f build_config.mk
149	-rm -rf ios-x86 ios-arm
150
151$(STATIC_OUTDIR):
152	mkdir $@
153
154$(STATIC_OUTDIR)/db: | $(STATIC_OUTDIR)
155	mkdir $@
156
157$(STATIC_OUTDIR)/helpers/memenv: | $(STATIC_OUTDIR)
158	mkdir -p $@
159
160$(STATIC_OUTDIR)/port: | $(STATIC_OUTDIR)
161	mkdir $@
162
163$(STATIC_OUTDIR)/table: | $(STATIC_OUTDIR)
164	mkdir $@
165
166$(STATIC_OUTDIR)/util: | $(STATIC_OUTDIR)
167	mkdir $@
168
169.PHONY: STATIC_OBJDIRS
170STATIC_OBJDIRS: \
171	$(STATIC_OUTDIR)/db \
172	$(STATIC_OUTDIR)/port \
173	$(STATIC_OUTDIR)/table \
174	$(STATIC_OUTDIR)/util \
175	$(STATIC_OUTDIR)/helpers/memenv
176
177$(SHARED_OUTDIR):
178	mkdir $@
179
180$(SHARED_OUTDIR)/db: | $(SHARED_OUTDIR)
181	mkdir $@
182
183$(SHARED_OUTDIR)/helpers/memenv: | $(SHARED_OUTDIR)
184	mkdir -p $@
185
186$(SHARED_OUTDIR)/port: | $(SHARED_OUTDIR)
187	mkdir $@
188
189$(SHARED_OUTDIR)/table: | $(SHARED_OUTDIR)
190	mkdir $@
191
192$(SHARED_OUTDIR)/util: | $(SHARED_OUTDIR)
193	mkdir $@
194
195.PHONY: SHARED_OBJDIRS
196SHARED_OBJDIRS: \
197	$(SHARED_OUTDIR)/db \
198	$(SHARED_OUTDIR)/port \
199	$(SHARED_OUTDIR)/table \
200	$(SHARED_OUTDIR)/util \
201	$(SHARED_OUTDIR)/helpers/memenv
202
203$(DEVICE_OUTDIR):
204	mkdir $@
205
206$(DEVICE_OUTDIR)/db: | $(DEVICE_OUTDIR)
207	mkdir $@
208
209$(DEVICE_OUTDIR)/helpers/memenv: | $(DEVICE_OUTDIR)
210	mkdir -p $@
211
212$(DEVICE_OUTDIR)/port: | $(DEVICE_OUTDIR)
213	mkdir $@
214
215$(DEVICE_OUTDIR)/table: | $(DEVICE_OUTDIR)
216	mkdir $@
217
218$(DEVICE_OUTDIR)/util: | $(DEVICE_OUTDIR)
219	mkdir $@
220
221.PHONY: DEVICE_OBJDIRS
222DEVICE_OBJDIRS: \
223	$(DEVICE_OUTDIR)/db \
224	$(DEVICE_OUTDIR)/port \
225	$(DEVICE_OUTDIR)/table \
226	$(DEVICE_OUTDIR)/util \
227	$(DEVICE_OUTDIR)/helpers/memenv
228
229$(SIMULATOR_OUTDIR):
230	mkdir $@
231
232$(SIMULATOR_OUTDIR)/db: | $(SIMULATOR_OUTDIR)
233	mkdir $@
234
235$(SIMULATOR_OUTDIR)/helpers/memenv: | $(SIMULATOR_OUTDIR)
236	mkdir -p $@
237
238$(SIMULATOR_OUTDIR)/port: | $(SIMULATOR_OUTDIR)
239	mkdir $@
240
241$(SIMULATOR_OUTDIR)/table: | $(SIMULATOR_OUTDIR)
242	mkdir $@
243
244$(SIMULATOR_OUTDIR)/util: | $(SIMULATOR_OUTDIR)
245	mkdir $@
246
247.PHONY: SIMULATOR_OBJDIRS
248SIMULATOR_OBJDIRS: \
249	$(SIMULATOR_OUTDIR)/db \
250	$(SIMULATOR_OUTDIR)/port \
251	$(SIMULATOR_OUTDIR)/table \
252	$(SIMULATOR_OUTDIR)/util \
253	$(SIMULATOR_OUTDIR)/helpers/memenv
254
255$(STATIC_ALLOBJS): | STATIC_OBJDIRS
256$(DEVICE_ALLOBJS): | DEVICE_OBJDIRS
257$(SIMULATOR_ALLOBJS): | SIMULATOR_OBJDIRS
258$(SHARED_ALLOBJS): | SHARED_OBJDIRS
259
260ifeq ($(PLATFORM), IOS)
261$(DEVICE_OUTDIR)/libleveldb.a: $(DEVICE_LIBOBJECTS)
262	rm -f $@
263	$(AR) -rs $@ $(DEVICE_LIBOBJECTS)
264
265$(SIMULATOR_OUTDIR)/libleveldb.a: $(SIMULATOR_LIBOBJECTS)
266	rm -f $@
267	$(AR) -rs $@ $(SIMULATOR_LIBOBJECTS)
268
269$(DEVICE_OUTDIR)/libmemenv.a: $(DEVICE_MEMENVOBJECTS)
270	rm -f $@
271	$(AR) -rs $@ $(DEVICE_MEMENVOBJECTS)
272
273$(SIMULATOR_OUTDIR)/libmemenv.a: $(SIMULATOR_MEMENVOBJECTS)
274	rm -f $@
275	$(AR) -rs $@ $(SIMULATOR_MEMENVOBJECTS)
276
277# For iOS, create universal object libraries to be used on both the simulator and
278# a device.
279$(STATIC_OUTDIR)/libleveldb.a: $(STATIC_OUTDIR) $(DEVICE_OUTDIR)/libleveldb.a $(SIMULATOR_OUTDIR)/libleveldb.a
280	lipo -create $(DEVICE_OUTDIR)/libleveldb.a $(SIMULATOR_OUTDIR)/libleveldb.a -output $@
281
282$(STATIC_OUTDIR)/libmemenv.a: $(STATIC_OUTDIR) $(DEVICE_OUTDIR)/libmemenv.a $(SIMULATOR_OUTDIR)/libmemenv.a
283	lipo -create $(DEVICE_OUTDIR)/libmemenv.a $(SIMULATOR_OUTDIR)/libmemenv.a -output $@
284else
285$(STATIC_OUTDIR)/libleveldb.a:$(STATIC_LIBOBJECTS)
286	rm -f $@
287	$(AR) -rs $@ $(STATIC_LIBOBJECTS)
288
289$(STATIC_OUTDIR)/libmemenv.a:$(STATIC_MEMENVOBJECTS)
290	rm -f $@
291	$(AR) -rs $@ $(STATIC_MEMENVOBJECTS)
292endif
293
294$(SHARED_MEMENVLIB):$(SHARED_MEMENVOBJECTS)
295	rm -f $@
296	$(AR) -rs $@ $(SHARED_MEMENVOBJECTS)
297
298$(STATIC_OUTDIR)/db_bench:db/db_bench.cc $(STATIC_LIBOBJECTS) $(TESTUTIL)
299	$(CXX) $(LDFLAGS) $(CXXFLAGS) db/db_bench.cc $(STATIC_LIBOBJECTS) $(TESTUTIL) -o $@ $(LIBS)
300
301$(STATIC_OUTDIR)/db_bench_sqlite3:doc/bench/db_bench_sqlite3.cc $(STATIC_LIBOBJECTS) $(TESTUTIL)
302	$(CXX) $(LDFLAGS) $(CXXFLAGS) doc/bench/db_bench_sqlite3.cc $(STATIC_LIBOBJECTS) $(TESTUTIL) -o $@ -lsqlite3 $(LIBS)
303
304$(STATIC_OUTDIR)/db_bench_tree_db:doc/bench/db_bench_tree_db.cc $(STATIC_LIBOBJECTS) $(TESTUTIL)
305	$(CXX) $(LDFLAGS) $(CXXFLAGS) doc/bench/db_bench_tree_db.cc $(STATIC_LIBOBJECTS) $(TESTUTIL) -o $@ -lkyotocabinet $(LIBS)
306
307$(STATIC_OUTDIR)/leveldbutil:db/leveldbutil.cc $(STATIC_LIBOBJECTS)
308	$(CXX) $(LDFLAGS) $(CXXFLAGS) db/leveldbutil.cc $(STATIC_LIBOBJECTS) -o $@ $(LIBS)
309
310$(STATIC_OUTDIR)/arena_test:util/arena_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
311	$(CXX) $(LDFLAGS) $(CXXFLAGS) util/arena_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
312
313$(STATIC_OUTDIR)/autocompact_test:db/autocompact_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
314	$(CXX) $(LDFLAGS) $(CXXFLAGS) db/autocompact_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
315
316$(STATIC_OUTDIR)/bloom_test:util/bloom_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
317	$(CXX) $(LDFLAGS) $(CXXFLAGS) util/bloom_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
318
319$(STATIC_OUTDIR)/c_test:$(STATIC_OUTDIR)/db/c_test.o $(STATIC_LIBOBJECTS) $(TESTHARNESS)
320	$(CXX) $(LDFLAGS) $(STATIC_OUTDIR)/db/c_test.o $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
321
322$(STATIC_OUTDIR)/cache_test:util/cache_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
323	$(CXX) $(LDFLAGS) $(CXXFLAGS) util/cache_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
324
325$(STATIC_OUTDIR)/coding_test:util/coding_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
326	$(CXX) $(LDFLAGS) $(CXXFLAGS) util/coding_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
327
328$(STATIC_OUTDIR)/corruption_test:db/corruption_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
329	$(CXX) $(LDFLAGS) $(CXXFLAGS) db/corruption_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
330
331$(STATIC_OUTDIR)/crc32c_test:util/crc32c_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
332	$(CXX) $(LDFLAGS) $(CXXFLAGS) util/crc32c_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
333
334$(STATIC_OUTDIR)/db_test:db/db_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
335	$(CXX) $(LDFLAGS) $(CXXFLAGS) db/db_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
336
337$(STATIC_OUTDIR)/dbformat_test:db/dbformat_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
338	$(CXX) $(LDFLAGS) $(CXXFLAGS) db/dbformat_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
339
340$(STATIC_OUTDIR)/env_test:util/env_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
341	$(CXX) $(LDFLAGS) $(CXXFLAGS) util/env_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
342
343$(STATIC_OUTDIR)/fault_injection_test:db/fault_injection_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
344	$(CXX) $(LDFLAGS) $(CXXFLAGS) db/fault_injection_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
345
346$(STATIC_OUTDIR)/filename_test:db/filename_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
347	$(CXX) $(LDFLAGS) $(CXXFLAGS) db/filename_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
348
349$(STATIC_OUTDIR)/filter_block_test:table/filter_block_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
350	$(CXX) $(LDFLAGS) $(CXXFLAGS) table/filter_block_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
351
352$(STATIC_OUTDIR)/hash_test:util/hash_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
353	$(CXX) $(LDFLAGS) $(CXXFLAGS) util/hash_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
354
355$(STATIC_OUTDIR)/issue178_test:issues/issue178_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
356	$(CXX) $(LDFLAGS) $(CXXFLAGS) issues/issue178_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
357
358$(STATIC_OUTDIR)/issue200_test:issues/issue200_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
359	$(CXX) $(LDFLAGS) $(CXXFLAGS) issues/issue200_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
360
361$(STATIC_OUTDIR)/log_test:db/log_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
362	$(CXX) $(LDFLAGS) $(CXXFLAGS) db/log_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
363
364$(STATIC_OUTDIR)/recovery_test:db/recovery_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
365	$(CXX) $(LDFLAGS) $(CXXFLAGS) db/recovery_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
366
367$(STATIC_OUTDIR)/table_test:table/table_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
368	$(CXX) $(LDFLAGS) $(CXXFLAGS) table/table_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
369
370$(STATIC_OUTDIR)/skiplist_test:db/skiplist_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
371	$(CXX) $(LDFLAGS) $(CXXFLAGS) db/skiplist_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
372
373$(STATIC_OUTDIR)/version_edit_test:db/version_edit_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
374	$(CXX) $(LDFLAGS) $(CXXFLAGS) db/version_edit_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
375
376$(STATIC_OUTDIR)/version_set_test:db/version_set_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
377	$(CXX) $(LDFLAGS) $(CXXFLAGS) db/version_set_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
378
379$(STATIC_OUTDIR)/write_batch_test:db/write_batch_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS)
380	$(CXX) $(LDFLAGS) $(CXXFLAGS) db/write_batch_test.cc $(STATIC_LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
381
382$(STATIC_OUTDIR)/memenv_test:$(STATIC_OUTDIR)/helpers/memenv/memenv_test.o $(STATIC_OUTDIR)/libmemenv.a $(STATIC_OUTDIR)/libleveldb.a $(TESTHARNESS)
383	$(XCRUN) $(CXX) $(LDFLAGS) $(STATIC_OUTDIR)/helpers/memenv/memenv_test.o $(STATIC_OUTDIR)/libmemenv.a $(STATIC_OUTDIR)/libleveldb.a $(TESTHARNESS) -o $@ $(LIBS)
384
385$(SHARED_OUTDIR)/db_bench:$(SHARED_OUTDIR)/db/db_bench.o $(SHARED_LIBS) $(TESTUTIL)
386	$(XCRUN) $(CXX) $(LDFLAGS) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(SHARED_OUTDIR)/db/db_bench.o $(TESTUTIL) $(SHARED_OUTDIR)/$(SHARED_LIB3) -o $@ $(LIBS)
387
388.PHONY: run-shared
389run-shared: $(SHARED_OUTDIR)/db_bench
390	LD_LIBRARY_PATH=$(SHARED_OUTDIR) $(SHARED_OUTDIR)/db_bench
391
392$(SIMULATOR_OUTDIR)/%.o: %.cc
393	xcrun -sdk iphonesimulator $(CXX) $(CXXFLAGS) $(SIMULATOR_CFLAGS) -c $< -o $@
394
395$(DEVICE_OUTDIR)/%.o: %.cc
396	xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) $(DEVICE_CFLAGS) -c $< -o $@
397
398$(SIMULATOR_OUTDIR)/%.o: %.c
399	xcrun -sdk iphonesimulator $(CC) $(CFLAGS) $(SIMULATOR_CFLAGS) -c $< -o $@
400
401$(DEVICE_OUTDIR)/%.o: %.c
402	xcrun -sdk iphoneos $(CC) $(CFLAGS) $(DEVICE_CFLAGS) -c $< -o $@
403
404$(STATIC_OUTDIR)/%.o: %.cc
405	$(CXX) $(CXXFLAGS) -c $< -o $@
406
407$(STATIC_OUTDIR)/%.o: %.c
408	$(CC) $(CFLAGS) -c $< -o $@
409
410$(SHARED_OUTDIR)/%.o: %.cc
411	$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) -c $< -o $@
412
413$(SHARED_OUTDIR)/%.o: %.c
414	$(CC) $(CFLAGS) $(PLATFORM_SHARED_CFLAGS) -c $< -o $@
415