xref: /leveldb-1.20/Makefile (revision bc1ee4d2)
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# Inherit some settings from environment variables, if available
6CXX ?= g++
7CC  ?= gcc
8INSTALL_PATH ?= $(CURDIR)
9
10#-----------------------------------------------
11# Uncomment exactly one of the lines labelled (A), (B), and (C) below
12# to switch between compilation modes.
13
14OPT ?= -O2 -DNDEBUG       # (A) Production use (optimized mode)
15# OPT ?= -g2              # (B) Debug mode, w/ full line-level debugging symbols
16# OPT ?= -O2 -g2 -DNDEBUG # (C) Profiling mode: opt, but w/debugging symbols
17#-----------------------------------------------
18
19# detect what platform we're building on
20$(shell sh ./build_detect_platform)
21# this file is generated by build_detect_platform to set build flags and sources
22include build_config.mk
23
24CFLAGS += -I. -I./include $(PLATFORM_CCFLAGS) $(OPT)
25CXXFLAGS += -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT)
26
27LDFLAGS += $(PLATFORM_LDFLAGS)
28
29LIBOBJECTS = $(SOURCES:.cc=.o)
30MEMENVOBJECTS = $(MEMENV_SOURCES:.cc=.o)
31
32TESTUTIL = ./util/testutil.o
33TESTHARNESS = ./util/testharness.o $(TESTUTIL)
34
35TESTS = \
36	arena_test \
37	c_test \
38	cache_test \
39	coding_test \
40	corruption_test \
41	crc32c_test \
42	db_test \
43	dbformat_test \
44	env_test \
45	filename_test \
46	log_test \
47	memenv_test \
48	skiplist_test \
49	table_test \
50	version_edit_test \
51	version_set_test \
52	write_batch_test
53
54PROGRAMS = db_bench $(TESTS)
55BENCHMARKS = db_bench_sqlite3 db_bench_tree_db
56
57LIBRARY = libleveldb.a
58MEMENVLIBRARY = libmemenv.a
59
60default: all
61
62# Should we build shared libraries?
63ifneq ($(PLATFORM_SHARED_EXT),)
64# Update db.h if you change these.
65SHARED_MAJOR = 1
66SHARED_MINOR = 3
67SHARED1 = libleveldb.$(PLATFORM_SHARED_EXT)
68SHARED2 = $(SHARED1).$(SHARED_MAJOR)
69SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR)
70SHARED = $(SHARED1) $(SHARED2) $(SHARED3)
71$(SHARED3):
72	$(CXX) $(LDFLAGS) $(PLATFORM_SHARED_LDFLAGS)$(INSTALL_PATH)/$(SHARED2) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(SOURCES) -o $(SHARED3)
73$(SHARED2): $(SHARED3)
74	ln -fs $(SHARED3) $(SHARED2)
75$(SHARED1): $(SHARED3)
76	ln -fs $(SHARED3) $(SHARED1)
77endif
78
79all: $(SHARED) $(LIBRARY)
80
81check: all $(PROGRAMS) $(TESTS)
82	for t in $(TESTS); do echo "***** Running $$t"; ./$$t || exit 1; done
83
84clean:
85	-rm -f $(PROGRAMS) $(BENCHMARKS) $(LIBRARY) $(SHARED) $(MEMENVLIBRARY) */*.o */*/*.o ios-x86/*/*.o ios-arm/*/*.o build_config.mk
86	-rm -rf ios-x86/* ios-arm/*
87
88$(LIBRARY): $(LIBOBJECTS)
89	rm -f $@
90	$(AR) -rs $@ $(LIBOBJECTS)
91
92db_bench: db/db_bench.o $(LIBOBJECTS) $(TESTUTIL)
93	$(CXX) db/db_bench.o $(LIBOBJECTS) $(TESTUTIL) -o $@  $(LDFLAGS)
94
95db_bench_sqlite3: doc/bench/db_bench_sqlite3.o $(LIBOBJECTS) $(TESTUTIL)
96	$(CXX) doc/bench/db_bench_sqlite3.o $(LIBOBJECTS) $(TESTUTIL) -o $@ $(LDFLAGS) -lsqlite3
97
98db_bench_tree_db: doc/bench/db_bench_tree_db.o $(LIBOBJECTS) $(TESTUTIL)
99	$(CXX) doc/bench/db_bench_tree_db.o $(LIBOBJECTS) $(TESTUTIL) -o $@ $(LDFLAGS) -lkyotocabinet
100
101arena_test: util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS)
102	$(CXX) util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
103
104c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS)
105	$(CXX) db/c_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
106
107cache_test: util/cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
108	$(CXX) util/cache_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
109
110coding_test: util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS)
111	$(CXX) util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
112
113corruption_test: db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS)
114	$(CXX) db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
115
116crc32c_test: util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS)
117	$(CXX) util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
118
119db_test: db/db_test.o $(LIBOBJECTS) $(TESTHARNESS)
120	$(CXX) db/db_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
121
122dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS)
123	$(CXX) db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
124
125env_test: util/env_test.o $(LIBOBJECTS) $(TESTHARNESS)
126	$(CXX) util/env_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
127
128filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS)
129	$(CXX) db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
130
131log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
132	$(CXX) db/log_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
133
134table_test: table/table_test.o $(LIBOBJECTS) $(TESTHARNESS)
135	$(CXX) table/table_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
136
137skiplist_test: db/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
138	$(CXX) db/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
139
140version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS)
141	$(CXX) db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
142
143version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS)
144	$(CXX) db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
145
146write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
147	$(CXX) db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
148
149$(MEMENVLIBRARY) : $(MEMENVOBJECTS)
150	rm -f $@
151	$(AR) -rs $@ $(MEMENVOBJECTS)
152
153memenv_test : helpers/memenv/memenv_test.o $(MEMENVLIBRARY) $(LIBRARY) $(TESTHARNESS)
154	$(CXX) helpers/memenv/memenv_test.o $(MEMENVLIBRARY) $(LIBRARY) $(TESTHARNESS) -o $@ $(LDFLAGS)
155
156ifeq ($(PLATFORM), IOS)
157# For iOS, create universal object files to be used on both the simulator and
158# a device.
159SIMULATORROOT=/Developer/Platforms/iPhoneSimulator.platform/Developer
160DEVICEROOT=/Developer/Platforms/iPhoneOS.platform/Developer
161IOSVERSION=$(shell defaults read /Developer/Platforms/iPhoneOS.platform/version CFBundleShortVersionString)
162
163.cc.o:
164	mkdir -p ios-x86/$(dir $@)
165	$(SIMULATORROOT)/usr/bin/$(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -c $< -o ios-x86/$@
166	mkdir -p ios-arm/$(dir $@)
167	$(DEVICEROOT)/usr/bin/$(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -c $< -o ios-arm/$@
168	lipo ios-x86/$@ ios-arm/$@ -create -output $@
169
170.c.o:
171	mkdir -p ios-x86/$(dir $@)
172	$(SIMULATORROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -c $< -o ios-x86/$@
173	mkdir -p ios-arm/$(dir $@)
174	$(DEVICEROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -c $< -o ios-arm/$@
175	lipo ios-x86/$@ ios-arm/$@ -create -output $@
176
177else
178.cc.o:
179	$(CXX) $(CXXFLAGS) -c $< -o $@
180
181.c.o:
182	$(CC) $(CFLAGS) -c $< -o $@
183endif
184