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# 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 19include build_config.mk 20 21# If Snappy is installed, add compilation and linker flags 22# (see http://code.google.com/p/snappy/) 23ifeq ($(SNAPPY), 1) 24SNAPPY_CFLAGS=-DSNAPPY 25SNAPPY_LDFLAGS=-lsnappy 26else 27SNAPPY_CFLAGS= 28SNAPPY_LDFLAGS= 29endif 30 31# If Google Perf Tools are installed, add compilation and linker flags 32# (see http://code.google.com/p/google-perftools/) 33ifeq ($(GOOGLE_PERFTOOLS), 1) 34GOOGLE_PERFTOOLS_LDFLAGS=-ltcmalloc 35else 36GOOGLE_PERFTOOLS_LDFLAGS= 37endif 38 39CFLAGS = -c -I. -I./include $(PORT_CFLAGS) $(PLATFORM_CFLAGS) $(OPT) $(SNAPPY_CFLAGS) 40 41LDFLAGS=$(PLATFORM_LDFLAGS) $(SNAPPY_LDFLAGS) $(GOOGLE_PERFTOOLS_LDFLAGS) 42 43LIBOBJECTS = \ 44 ./db/builder.o \ 45 ./db/c.o \ 46 ./db/db_impl.o \ 47 ./db/db_iter.o \ 48 ./db/filename.o \ 49 ./db/dbformat.o \ 50 ./db/log_reader.o \ 51 ./db/log_writer.o \ 52 ./db/memtable.o \ 53 ./db/repair.o \ 54 ./db/table_cache.o \ 55 ./db/version_edit.o \ 56 ./db/version_set.o \ 57 ./db/write_batch.o \ 58 ./port/port_posix.o \ 59 ./table/block.o \ 60 ./table/block_builder.o \ 61 ./table/format.o \ 62 ./table/iterator.o \ 63 ./table/merger.o \ 64 ./table/table.o \ 65 ./table/table_builder.o \ 66 ./table/two_level_iterator.o \ 67 ./util/arena.o \ 68 ./util/cache.o \ 69 ./util/coding.o \ 70 ./util/comparator.o \ 71 ./util/crc32c.o \ 72 ./util/env.o \ 73 ./util/env_posix.o \ 74 ./util/hash.o \ 75 ./util/histogram.o \ 76 ./util/logging.o \ 77 ./util/options.o \ 78 ./util/status.o 79 80TESTUTIL = ./util/testutil.o 81TESTHARNESS = ./util/testharness.o $(TESTUTIL) 82 83TESTS = \ 84 arena_test \ 85 c_test \ 86 cache_test \ 87 coding_test \ 88 corruption_test \ 89 crc32c_test \ 90 db_test \ 91 dbformat_test \ 92 env_test \ 93 filename_test \ 94 log_test \ 95 memenv_test \ 96 skiplist_test \ 97 table_test \ 98 version_edit_test \ 99 version_set_test \ 100 write_batch_test 101 102PROGRAMS = db_bench $(TESTS) 103BENCHMARKS = db_bench_sqlite3 db_bench_tree_db 104 105LIBRARY = libleveldb.a 106MEMENVLIBRARY = libmemenv.a 107 108all: $(LIBRARY) 109 110check: $(PROGRAMS) $(TESTS) 111 for t in $(TESTS); do echo "***** Running $$t"; ./$$t || exit 1; done 112 113clean: 114 -rm -f $(PROGRAMS) $(BENCHMARKS) $(LIBRARY) $(MEMENVLIBRARY) */*.o */*/*.o ios-x86/*/*.o ios-arm/*/*.o 115 -rm -rf ios-x86/* ios-arm/* 116 -rm build_config.mk 117 118$(LIBRARY): $(LIBOBJECTS) 119 rm -f $@ 120 $(AR) -rs $@ $(LIBOBJECTS) 121 122db_bench: db/db_bench.o $(LIBOBJECTS) $(TESTUTIL) 123 $(CC) $(LDFLAGS) db/db_bench.o $(LIBOBJECTS) $(TESTUTIL) -o $@ 124 125db_bench_sqlite3: doc/bench/db_bench_sqlite3.o $(LIBOBJECTS) $(TESTUTIL) 126 $(CC) $(LDFLAGS) -lsqlite3 doc/bench/db_bench_sqlite3.o $(LIBOBJECTS) $(TESTUTIL) -o $@ 127 128db_bench_tree_db: doc/bench/db_bench_tree_db.o $(LIBOBJECTS) $(TESTUTIL) 129 $(CC) $(LDFLAGS) -lkyotocabinet doc/bench/db_bench_tree_db.o $(LIBOBJECTS) $(TESTUTIL) -o $@ 130 131arena_test: util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS) 132 $(CC) $(LDFLAGS) util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ 133 134c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS) 135 $(CC) $(LDFLAGS) db/c_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ 136 137cache_test: util/cache_test.o $(LIBOBJECTS) $(TESTHARNESS) 138 $(CC) $(LDFLAGS) util/cache_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ 139 140coding_test: util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS) 141 $(CC) $(LDFLAGS) util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ 142 143corruption_test: db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS) 144 $(CC) $(LDFLAGS) db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ 145 146crc32c_test: util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS) 147 $(CC) $(LDFLAGS) util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ 148 149db_test: db/db_test.o $(LIBOBJECTS) $(TESTHARNESS) 150 $(CC) $(LDFLAGS) db/db_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ 151 152dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS) 153 $(CC) $(LDFLAGS) db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ 154 155env_test: util/env_test.o $(LIBOBJECTS) $(TESTHARNESS) 156 $(CC) $(LDFLAGS) util/env_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ 157 158filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS) 159 $(CC) $(LDFLAGS) db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ 160 161log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS) 162 $(CC) $(LDFLAGS) db/log_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ 163 164table_test: table/table_test.o $(LIBOBJECTS) $(TESTHARNESS) 165 $(CC) $(LDFLAGS) table/table_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ 166 167skiplist_test: db/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS) 168 $(CC) $(LDFLAGS) db/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ 169 170version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS) 171 $(CC) $(LDFLAGS) db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ 172 173version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS) 174 $(CC) $(LDFLAGS) db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ 175 176write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS) 177 $(CC) $(LDFLAGS) db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ 178 179$(MEMENVLIBRARY) : helpers/memenv/memenv.o 180 rm -f $@ 181 $(AR) -rs $@ helpers/memenv/memenv.o 182 183memenv_test : helpers/memenv/memenv_test.o $(MEMENVLIBRARY) $(LIBRARY) $(TESTHARNESS) 184 $(CC) $(LDFLAGS) helpers/memenv/memenv_test.o $(MEMENVLIBRARY) $(LIBRARY) $(TESTHARNESS) -o $@ 185 186ifeq ($(PLATFORM), IOS) 187# For iOS, create universal object files to be used on both the simulator and 188# a device. 189SIMULATORROOT=/Developer/Platforms/iPhoneSimulator.platform/Developer 190DEVICEROOT=/Developer/Platforms/iPhoneOS.platform/Developer 191IOSVERSION=$(shell defaults read /Developer/Platforms/iPhoneOS.platform/version CFBundleShortVersionString) 192 193.cc.o: 194 mkdir -p ios-x86/$(dir $@) 195 $(SIMULATORROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 $< -o ios-x86/$@ 196 mkdir -p ios-arm/$(dir $@) 197 $(DEVICEROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 $< -o ios-arm/$@ 198 lipo ios-x86/$@ ios-arm/$@ -create -output $@ 199 200.c.o: 201 mkdir -p ios-x86/$(dir $@) 202 $(SIMULATORROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 $< -o ios-x86/$@ 203 mkdir -p ios-arm/$(dir $@) 204 $(DEVICEROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 $< -o ios-arm/$@ 205 lipo ios-x86/$@ ios-arm/$@ -create -output $@ 206 207else 208.cc.o: 209 $(CC) $(CFLAGS) $< -o $@ 210 211.c.o: 212 $(CC) $(CFLAGS) $< -o $@ 213endif 214