xref: /leveldb-1.20/Makefile (revision ccf0fcd5)
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
5CC = g++
6
7#-----------------------------------------------
8# Uncomment exactly one of the lines labelled (A), (B), and (C) below
9# to switch between compilation modes.
10
11OPT = -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
17UNAME := $(shell uname)
18
19ifeq ($(UNAME), Darwin)
20# To build for iOS, set PLATFORM=IOS.
21ifndef PLATFORM
22PLATFORM=OSX
23endif # PLATFORM
24PLATFORM_CFLAGS = -DLEVELDB_PLATFORM_OSX
25PORT_MODULE = port_osx.o
26else # UNAME
27PLATFORM_CFLAGS = -DLEVELDB_PLATFORM_POSIX -std=c++0x
28PORT_MODULE = port_posix.o
29endif # UNAME
30
31# Set 'SNAPPY' to 1 if you have the Snappy compression library
32# installed and want to enable its use in LevelDB
33# (see http://code.google.com/p/snappy/)
34SNAPPY=0
35
36ifeq ($(SNAPPY), 0)
37SNAPPY_CFLAGS=
38SNAPPY_LDFLAGS=
39else
40SNAPPY_CFLAGS=-DSNAPPY
41SNAPPY_LDFLAGS=-lsnappy
42endif
43
44CFLAGS = -c -I. -I./include $(PLATFORM_CFLAGS) $(OPT) $(SNAPPY_CFLAGS)
45
46LDFLAGS=-lpthread $(SNAPPY_LDFLAGS)
47
48LIBOBJECTS = \
49	./db/builder.o \
50	./db/db_impl.o \
51	./db/db_iter.o \
52	./db/filename.o \
53	./db/dbformat.o \
54	./db/log_reader.o \
55	./db/log_writer.o \
56	./db/memtable.o \
57	./db/repair.o \
58	./db/table_cache.o \
59	./db/version_edit.o \
60	./db/version_set.o \
61	./db/write_batch.o \
62	./port/$(PORT_MODULE) \
63	./table/block.o \
64	./table/block_builder.o \
65	./table/format.o \
66	./table/iterator.o \
67	./table/merger.o \
68	./table/table.o \
69	./table/table_builder.o \
70	./table/two_level_iterator.o \
71	./util/arena.o \
72	./util/cache.o \
73	./util/coding.o \
74	./util/comparator.o \
75	./util/crc32c.o \
76	./util/env.o \
77	./util/env_posix.o \
78	./util/hash.o \
79	./util/histogram.o \
80	./util/logging.o \
81	./util/options.o \
82	./util/status.o
83
84TESTUTIL = ./util/testutil.o
85TESTHARNESS = ./util/testharness.o $(TESTUTIL)
86
87TESTS = \
88	arena_test \
89	cache_test \
90	coding_test \
91	corruption_test \
92	crc32c_test \
93	db_test \
94	dbformat_test \
95	env_test \
96	filename_test \
97	log_test \
98	skiplist_test \
99	table_test \
100	version_edit_test \
101	version_set_test \
102	write_batch_test
103
104PROGRAMS = db_bench $(TESTS)
105
106LIBRARY = libleveldb.a
107
108ifeq ($(PLATFORM), IOS)
109# Only XCode can build executable applications for iOS.
110all: $(LIBRARY)
111else
112all: $(PROGRAMS) $(LIBRARY)
113endif
114
115check: $(TESTS)
116	for t in $(TESTS); do echo "***** Running $$t"; ./$$t || exit 1; done
117
118clean:
119	-rm -f $(PROGRAMS) $(LIBRARY) */*.o ios-x86/*/*.o ios-arm/*/*.o
120	-rmdir -p ios-x86/* ios-arm/*
121
122$(LIBRARY): $(LIBOBJECTS)
123	rm -f $@
124	$(AR) -rs $@ $(LIBOBJECTS)
125
126db_bench: db/db_bench.o $(LIBOBJECTS) $(TESTUTIL)
127	$(CC) $(LDFLAGS) db/db_bench.o $(LIBOBJECTS) $(TESTUTIL) -o $@
128
129arena_test: util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS)
130	$(CC) $(LDFLAGS) util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
131
132cache_test: util/cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
133	$(CC) $(LDFLAGS) util/cache_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
134
135coding_test: util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS)
136	$(CC) $(LDFLAGS) util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
137
138corruption_test: db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS)
139	$(CC) $(LDFLAGS) db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
140
141crc32c_test: util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS)
142	$(CC) $(LDFLAGS) util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
143
144db_test: db/db_test.o $(LIBOBJECTS) $(TESTHARNESS)
145	$(CC) $(LDFLAGS) db/db_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
146
147dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS)
148	$(CC) $(LDFLAGS) db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
149
150env_test: util/env_test.o $(LIBOBJECTS) $(TESTHARNESS)
151	$(CC) $(LDFLAGS) util/env_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
152
153filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS)
154	$(CC) $(LDFLAGS) db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
155
156log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
157	$(CC) $(LDFLAGS) db/log_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
158
159table_test: table/table_test.o $(LIBOBJECTS) $(TESTHARNESS)
160	$(CC) $(LDFLAGS) table/table_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
161
162skiplist_test: db/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
163	$(CC) $(LDFLAGS) db/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
164
165version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS)
166	$(CC) $(LDFLAGS) db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
167
168version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS)
169	$(CC) $(LDFLAGS) db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
170
171write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
172	$(CC) $(LDFLAGS) db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@
173
174ifeq ($(PLATFORM), IOS)
175# For iOS, create universal object files to be used on both the simulator and
176# a device.
177SIMULATORROOT=/Developer/Platforms/iPhoneSimulator.platform/Developer
178DEVICEROOT=/Developer/Platforms/iPhoneOS.platform/Developer
179IOSVERSION=$(shell defaults read /Developer/Platforms/iPhoneOS.platform/version CFBundleShortVersionString)
180.cc.o:
181	mkdir -p ios-x86/$(dir $@)
182	$(SIMULATORROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 $< -o ios-x86/$@
183	mkdir -p ios-arm/$(dir $@)
184	$(DEVICEROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 $< -o ios-arm/$@
185	lipo ios-x86/$@ ios-arm/$@ -create -output $@
186else
187.cc.o:
188	$(CC) $(CFLAGS) $< -o $@
189endif
190
191# TODO(gabor): dependencies for .o files
192# TODO(gabor): Build library
193