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.
5 #-----------------------------------------------
6 # Uncomment exactly one of the lines labelled (A), (B), and (C) below
7 # to switch between compilation modes.
9 OPT ?
= -O2
-DNDEBUG
# (A) Production use (optimized mode)
10 # OPT ?= -g2 # (B) Debug mode, w/ full line-level debugging symbols
11 # OPT ?= -O2 -g2 -DNDEBUG # (C) Profiling mode: opt, but w/debugging symbols
12 #-----------------------------------------------
14 # detect what platform we're building on
15 $(shell CC
="$(CC)" CXX
="$(CXX)" TARGET_OS
="$(TARGET_OS)" \
16 .
/build_detect_platform build_config.mk .
/)
17 # this file is generated by the previous line to set build flags and sources
18 include build_config.mk
20 CFLAGS
+= -I.
-I.
/include $(PLATFORM_CCFLAGS
) $(OPT
)
21 CXXFLAGS
+= -I.
-I.
/include $(PLATFORM_CXXFLAGS
) $(OPT
)
23 LDFLAGS
+= $(PLATFORM_LDFLAGS
)
24 LIBS
+= $(PLATFORM_LIBS
)
26 LIBOBJECTS
= $(SOURCES
:.
cc=.o
)
27 MEMENVOBJECTS
= $(MEMENV_SOURCES
:.
cc=.o
)
29 TESTUTIL
= .
/util
/testutil.o
30 TESTHARNESS
= .
/util
/testharness.o
$(TESTUTIL
)
55 PROGRAMS
= db_bench leveldbutil
$(TESTS
)
56 BENCHMARKS
= db_bench_sqlite3 db_bench_tree_db
58 LIBRARY
= libleveldb.a
59 MEMENVLIBRARY
= libmemenv.a
63 # Should we build shared libraries?
64 ifneq ($(PLATFORM_SHARED_EXT
),)
66 ifneq ($(PLATFORM_SHARED_VERSIONED
),true
)
67 SHARED1
= libleveldb.
$(PLATFORM_SHARED_EXT
)
72 # Update db.h if you change these.
75 SHARED1
= libleveldb.
$(PLATFORM_SHARED_EXT
)
76 SHARED2
= $(SHARED1
).
$(SHARED_MAJOR
)
77 SHARED3
= $(SHARED1
).
$(SHARED_MAJOR
).
$(SHARED_MINOR
)
78 SHARED
= $(SHARED1
) $(SHARED2
) $(SHARED3
)
79 $(SHARED1
): $(SHARED3
)
80 ln
-fs
$(SHARED3
) $(SHARED1
)
81 $(SHARED2
): $(SHARED3
)
82 ln
-fs
$(SHARED3
) $(SHARED2
)
86 $(CXX
) $(LDFLAGS
) $(PLATFORM_SHARED_LDFLAGS
)$(SHARED2
) $(CXXFLAGS
) $(PLATFORM_SHARED_CFLAGS
) $(SOURCES
) -o
$(SHARED3
) $(LIBS
)
88 endif # PLATFORM_SHARED_EXT
90 all: $(SHARED
) $(LIBRARY
)
92 check: all $(PROGRAMS
) $(TESTS
)
93 for t in
$(TESTS
); do echo
"***** Running $$t"; .
/$$t || exit
1; done
96 -rm -f
$(PROGRAMS
) $(BENCHMARKS
) $(LIBRARY
) $(SHARED
) $(MEMENVLIBRARY
) */*.o
*/*/*.o ios-x86
/*/*.o ios-arm
/*/*.o build_config.mk
97 -rm -rf ios-x86
/* ios-arm
/*
99 $(LIBRARY
): $(LIBOBJECTS
)
101 $(AR
) -rs
$@
$(LIBOBJECTS
)
103 db_bench
: db
/db_bench.o
$(LIBOBJECTS
) $(TESTUTIL
)
104 $(CXX
) $(LDFLAGS
) db
/db_bench.o
$(LIBOBJECTS
) $(TESTUTIL
) -o
$@
$(LIBS
)
106 db_bench_sqlite3
: doc
/bench
/db_bench_sqlite3.o
$(LIBOBJECTS
) $(TESTUTIL
)
107 $(CXX
) $(LDFLAGS
) doc
/bench
/db_bench_sqlite3.o
$(LIBOBJECTS
) $(TESTUTIL
) -o
$@
-lsqlite3
$(LIBS
)
109 db_bench_tree_db
: doc
/bench
/db_bench_tree_db.o
$(LIBOBJECTS
) $(TESTUTIL
)
110 $(CXX
) $(LDFLAGS
) doc
/bench
/db_bench_tree_db.o
$(LIBOBJECTS
) $(TESTUTIL
) -o
$@
-lkyotocabinet
$(LIBS
)
112 leveldbutil
: db
/leveldb_main.o
$(LIBOBJECTS
)
113 $(CXX
) $(LDFLAGS
) db
/leveldb_main.o
$(LIBOBJECTS
) -o
$@
$(LIBS
)
115 arena_test
: util
/arena_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
116 $(CXX
) $(LDFLAGS
) util
/arena_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
118 autocompact_test
: db
/autocompact_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
119 $(CXX
) $(LDFLAGS
) db
/autocompact_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
121 bloom_test
: util
/bloom_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
122 $(CXX
) $(LDFLAGS
) util
/bloom_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
124 c_test
: db
/c_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
125 $(CXX
) $(LDFLAGS
) db
/c_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
127 cache_test
: util
/cache_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
128 $(CXX
) $(LDFLAGS
) util
/cache_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
130 coding_test
: util
/coding_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
131 $(CXX
) $(LDFLAGS
) util
/coding_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
133 corruption_test
: db
/corruption_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
134 $(CXX
) $(LDFLAGS
) db
/corruption_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
136 crc32c_test
: util
/crc32c_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
137 $(CXX
) $(LDFLAGS
) util
/crc32c_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
139 db_test
: db
/db_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
140 $(CXX
) $(LDFLAGS
) db
/db_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
142 dbformat_test
: db
/dbformat_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
143 $(CXX
) $(LDFLAGS
) db
/dbformat_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
145 env_test
: util
/env_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
146 $(CXX
) $(LDFLAGS
) util
/env_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
148 filename_test
: db
/filename_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
149 $(CXX
) $(LDFLAGS
) db
/filename_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
151 filter_block_test
: table
/filter_block_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
152 $(CXX
) $(LDFLAGS
) table
/filter_block_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
154 issue178_test
: issues
/issue178_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
155 $(CXX
) $(LDFLAGS
) issues
/issue178_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
157 log_test
: db
/log_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
158 $(CXX
) $(LDFLAGS
) db
/log_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
160 table_test
: table
/table_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
161 $(CXX
) $(LDFLAGS
) table
/table_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
163 skiplist_test
: db
/skiplist_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
164 $(CXX
) $(LDFLAGS
) db
/skiplist_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
166 version_edit_test
: db
/version_edit_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
167 $(CXX
) $(LDFLAGS
) db
/version_edit_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
169 version_set_test
: db
/version_set_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
170 $(CXX
) $(LDFLAGS
) db
/version_set_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
172 write_batch_test
: db
/write_batch_test.o
$(LIBOBJECTS
) $(TESTHARNESS
)
173 $(CXX
) $(LDFLAGS
) db
/write_batch_test.o
$(LIBOBJECTS
) $(TESTHARNESS
) -o
$@
$(LIBS
)
175 $(MEMENVLIBRARY
) : $(MEMENVOBJECTS
)
177 $(AR
) -rs
$@
$(MEMENVOBJECTS
)
179 memenv_test
: helpers
/memenv
/memenv_test.o
$(MEMENVLIBRARY
) $(LIBRARY
) $(TESTHARNESS
)
180 $(CXX
) $(LDFLAGS
) helpers
/memenv
/memenv_test.o
$(MEMENVLIBRARY
) $(LIBRARY
) $(TESTHARNESS
) -o
$@
$(LIBS
)
182 ifeq ($(PLATFORM
), IOS
)
183 # For iOS, create universal object files to be used on both the simulator and
185 PLATFORMSROOT
=/Applications
/Xcode.app
/Contents
/Developer
/Platforms
186 SIMULATORROOT
=$(PLATFORMSROOT
)/iPhoneSimulator.platform
/Developer
187 DEVICEROOT
=$(PLATFORMSROOT
)/iPhoneOS.platform
/Developer
188 IOSVERSION
=$(shell defaults read
$(PLATFORMSROOT
)/iPhoneOS.platform
/version CFBundleShortVersionString
)
191 mkdir
-p ios-x86
/$(dir $@
)
192 $(CXX
) $(CXXFLAGS
) -isysroot
$(SIMULATORROOT
)/SDKs
/iPhoneSimulator
$(IOSVERSION
).sdk
-arch i686
-c
$< -o ios-x86
/$@
193 mkdir
-p ios-arm
/$(dir $@
)
194 $(DEVICEROOT
)/usr
/bin
/$(CXX
) $(CXXFLAGS
) -isysroot
$(DEVICEROOT
)/SDKs
/iPhoneOS
$(IOSVERSION
).sdk
-arch armv6
-arch armv7
-c
$< -o ios-arm
/$@
195 lipo ios-x86
/$@ ios-arm
/$@
-create
-output
$@
198 mkdir
-p ios-x86
/$(dir $@
)
199 $(CC
) $(CFLAGS
) -isysroot
$(SIMULATORROOT
)/SDKs
/iPhoneSimulator
$(IOSVERSION
).sdk
-arch i686
-c
$< -o ios-x86
/$@
200 mkdir
-p ios-arm
/$(dir $@
)
201 $(DEVICEROOT
)/usr
/bin
/$(CC
) $(CFLAGS
) -isysroot
$(DEVICEROOT
)/SDKs
/iPhoneOS
$(IOSVERSION
).sdk
-arch armv6
-arch armv7
-c
$< -o ios-arm
/$@
202 lipo ios-x86
/$@ ios-arm
/$@
-create
-output
$@
206 $(CXX
) $(CXXFLAGS
) -c
$< -o
$@
209 $(CC
) $(CFLAGS
) -c
$< -o
$@