2009-03-22 05:30:00 -04:00
# Redis Makefile
# Copyright (C) 2009 Salvatore Sanfilippo <antirez at gmail dot com>
# This file is released under the BSD license, see the COPYING file
2010-05-17 18:36:48 -04:00
release_hdr := $( shell sh -c './mkreleasehdr.sh' )
2009-10-26 11:25:07 -04:00
uname_S := $( shell sh -c 'uname -s 2>/dev/null || echo not' )
2010-01-12 09:57:00 -05:00
OPTIMIZATION ?= -O2
2011-06-20 05:52:15 -04:00
i f e q ( $( uname_S ) , L i n u x )
ifneq ( $( FORCE_LIBC_MALLOC) ,yes)
USE_JEMALLOC = yes
endif
e n d i f
2009-10-26 11:25:07 -04:00
i f e q ( $( uname_S ) , S u n O S )
2011-06-20 05:52:15 -04:00
CFLAGS?= -std= c99 -pedantic $( OPTIMIZATION) -Wall -W -D__EXTENSIONS__ -D_XPG6
CCLINK?= -ldl -lnsl -lsocket -lm -lpthread
DEBUG?= -g -ggdb
2009-10-26 11:25:07 -04:00
e l s e
2011-06-20 05:52:15 -04:00
CFLAGS?= -std= c99 -pedantic $( OPTIMIZATION) -Wall -W $( ARCH) $( PROF)
CCLINK?= -lm -pthread
DEBUG?= -g -rdynamic -ggdb
2009-10-26 11:25:07 -04:00
e n d i f
2010-10-21 18:06:44 -04:00
i f e q ( $( USE_TCMALLOC ) , y e s )
2011-06-20 05:52:15 -04:00
ALLOD_DEPS =
2011-04-19 17:54:43 -04:00
ALLOC_LINK = -ltcmalloc
ALLOC_FLAGS = -DUSE_TCMALLOC
2010-10-21 18:06:44 -04:00
e n d i f
2011-04-19 17:54:43 -04:00
i f e q ( $( USE_TCMALLOC_MINIMAL ) , y e s )
2011-06-20 05:52:15 -04:00
ALLOD_DEPS =
2011-04-19 17:54:43 -04:00
ALLOC_LINK = -ltcmalloc_minimal
ALLOC_FLAGS = -DUSE_TCMALLOC
e n d i f
i f e q ( $( USE_JEMALLOC ) , y e s )
2011-06-20 05:52:15 -04:00
ALLOC_DEP = ../deps/jemalloc/lib/libjemalloc.a
2011-06-01 11:56:50 -04:00
ALLOC_LINK = $( ALLOC_DEP) -ldl
2011-06-20 05:52:15 -04:00
ALLOC_FLAGS = -DUSE_JEMALLOC -I../deps/jemalloc/include
2011-04-19 17:54:43 -04:00
e n d i f
CCLINK += $( ALLOC_LINK)
CFLAGS += $( ALLOC_FLAGS)
2011-06-20 05:52:15 -04:00
CCOPT = $( CFLAGS) $( ARCH) $( PROF)
2009-03-22 05:30:00 -04:00
2010-09-13 11:09:11 -04:00
PREFIX = /usr/local
2010-09-13 11:50:57 -04:00
INSTALL_BIN = $( PREFIX) /bin
2010-07-06 13:07:16 -04:00
INSTALL = cp -p
2011-05-04 04:17:05 -04:00
CCCOLOR = "\033[34m"
LINKCOLOR = "\033[34;1m"
SRCCOLOR = "\033[33m"
BINCOLOR = "\033[37;1m"
MAKECOLOR = "\033[32;1m"
ENDCOLOR = "\033[0m"
2011-06-08 11:09:18 -04:00
i f n d e f V
2011-06-09 05:17:32 -04:00
QUIET_CC = @printf ' %b %b\n' $( CCCOLOR) CC$( ENDCOLOR) $( SRCCOLOR) $@ $( ENDCOLOR) ;
QUIET_LINK = @printf ' %b %b\n' $( LINKCOLOR) LINK$( ENDCOLOR) $( BINCOLOR) $@ $( ENDCOLOR) ;
2011-06-08 11:09:18 -04:00
e n d i f
2011-06-30 07:27:32 -04:00
OBJ = adlist.o ae.o anet.o dict.o redis.o sds.o zmalloc.o lzf_c.o lzf_d.o pqsort.o zipmap.o sha1.o ziplist.o release.o networking.o util.o object.o db.o replication.o rdb.o t_string.o t_list.o t_set.o t_zset.o t_hash.o config.o aof.o pubsub.o multi.o debug.o sort.o intset.o syncio.o cluster.o crc16.o endian.o slowlog.o
2010-01-19 13:02:02 -05:00
BENCHOBJ = ae.o anet.o redis-benchmark.o sds.o adlist.o zmalloc.o
2010-11-08 10:26:02 -05:00
CLIOBJ = anet.o sds.o adlist.o redis-cli.o zmalloc.o release.o
2010-03-13 09:55:42 -05:00
CHECKDUMPOBJ = redis-check-dump.o lzf_c.o lzf_d.o
2010-05-05 07:36:29 -04:00
CHECKAOFOBJ = redis-check-aof.o
2009-03-22 05:30:00 -04:00
PRGNAME = redis-server
BENCHPRGNAME = redis-benchmark
CLIPRGNAME = redis-cli
2010-03-13 09:55:42 -05:00
CHECKDUMPPRGNAME = redis-check-dump
2010-05-05 07:36:29 -04:00
CHECKAOFPRGNAME = redis-check-aof
2009-03-22 05:30:00 -04:00
2010-11-08 07:19:58 -05:00
all : redis -benchmark redis -cli redis -check -dump redis -check -aof redis -server
2010-12-15 06:40:23 -05:00
@echo ""
@echo "Hint: To run 'make test' is a good idea ;)"
@echo ""
2009-03-22 05:30:00 -04:00
# Deps (use make dep to generate this)
2009-06-06 02:24:23 -04:00
adlist.o : adlist .c adlist .h zmalloc .h
2010-01-19 13:02:02 -05:00
ae.o : ae .c ae .h zmalloc .h config .h ae_kqueue .c
ae_epoll.o : ae_epoll .c
ae_kqueue.o : ae_kqueue .c
2009-11-23 12:50:39 -05:00
ae_select.o : ae_select .c
2009-06-06 02:24:23 -04:00
anet.o : anet .c fmacros .h anet .h
2010-08-30 05:37:17 -04:00
aof.o : aof .c redis .h fmacros .h config .h ae .h sds .h dict .h adlist .h \
2011-06-30 07:27:32 -04:00
zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h slowlog.h
2011-06-20 05:58:54 -04:00
cluster.o : cluster .c redis .h fmacros .h config .h ae .h sds .h dict .h \
2011-06-30 07:27:32 -04:00
adlist.h zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h \
slowlog.h
2010-08-30 05:37:17 -04:00
config.o : config .c redis .h fmacros .h config .h ae .h sds .h dict .h adlist .h \
2011-06-30 07:27:32 -04:00
zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h slowlog.h
2011-06-20 05:58:54 -04:00
crc16.o : crc 16.c redis .h fmacros .h config .h ae .h sds .h dict .h adlist .h \
2011-06-30 07:27:32 -04:00
zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h slowlog.h
2010-08-30 05:37:17 -04:00
db.o : db .c redis .h fmacros .h config .h ae .h sds .h dict .h adlist .h \
2011-06-30 07:27:32 -04:00
zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h slowlog.h
2010-08-30 05:37:17 -04:00
debug.o : debug .c redis .h fmacros .h config .h ae .h sds .h dict .h adlist .h \
2011-06-30 07:27:32 -04:00
zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h slowlog.h \
2011-06-20 05:58:54 -04:00
sha1.h
2011-06-30 07:27:32 -04:00
dict.o : dict .c fmacros .h dict .h zmalloc .h
2011-06-20 05:58:54 -04:00
endian.o : endian .c
intset.o : intset .c intset .h zmalloc .h endian .h
2009-06-06 02:24:23 -04:00
lzf_c.o : lzf_c .c lzfP .h
lzf_d.o : lzf_d .c lzfP .h
2010-08-30 05:37:17 -04:00
multi.o : multi .c redis .h fmacros .h config .h ae .h sds .h dict .h adlist .h \
2011-06-30 07:27:32 -04:00
zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h slowlog.h
2010-08-30 05:37:17 -04:00
networking.o : networking .c redis .h fmacros .h config .h ae .h sds .h dict .h \
2011-06-30 07:27:32 -04:00
adlist.h zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h \
slowlog.h
2010-08-30 05:37:17 -04:00
object.o : object .c redis .h fmacros .h config .h ae .h sds .h dict .h adlist .h \
2011-06-30 07:27:32 -04:00
zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h slowlog.h
2009-06-06 02:24:23 -04:00
pqsort.o : pqsort .c
2010-08-30 05:37:17 -04:00
pubsub.o : pubsub .c redis .h fmacros .h config .h ae .h sds .h dict .h adlist .h \
2011-06-30 07:27:32 -04:00
zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h slowlog.h
2010-08-30 05:37:17 -04:00
rdb.o : rdb .c redis .h fmacros .h config .h ae .h sds .h dict .h adlist .h \
2011-06-30 07:27:32 -04:00
zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h slowlog.h \
lzf.h
2010-12-28 08:42:09 -05:00
redis-benchmark.o : redis -benchmark .c fmacros .h ae .h \
../deps/hiredis/hiredis.h sds.h adlist.h zmalloc.h
2010-05-13 08:30:36 -04:00
redis-check-aof.o : redis -check -aof .c fmacros .h config .h
2010-03-23 10:25:32 -04:00
redis-check-dump.o : redis -check -dump .c lzf .h
2010-12-28 08:42:09 -05:00
redis-cli.o : redis -cli .c fmacros .h version .h ../deps /hiredis /hiredis .h \
sds.h zmalloc.h ../deps/linenoise/linenoise.h help.h
2010-08-30 05:37:17 -04:00
redis.o : redis .c redis .h fmacros .h config .h ae .h sds .h dict .h adlist .h \
2011-06-30 07:27:32 -04:00
zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h slowlog.h \
2011-06-20 05:58:54 -04:00
asciilogo.h
2010-06-13 17:45:14 -04:00
release.o : release .c release .h
2010-08-30 05:37:17 -04:00
replication.o : replication .c redis .h fmacros .h config .h ae .h sds .h dict .h \
2011-06-30 07:27:32 -04:00
adlist.h zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h \
slowlog.h
2009-06-06 02:24:23 -04:00
sds.o : sds .c sds .h zmalloc .h
2011-06-20 05:58:54 -04:00
sha1.o : sha 1.c sha 1.h config .h
2011-06-30 07:27:32 -04:00
slowlog.o : slowlog .c redis .h fmacros .h config .h ae .h sds .h dict .h \
adlist.h zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h \
slowlog.h
2010-08-30 05:37:17 -04:00
sort.o : sort .c redis .h fmacros .h config .h ae .h sds .h dict .h adlist .h \
2011-06-30 07:27:32 -04:00
zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h slowlog.h \
pqsort.h
2010-12-28 08:42:09 -05:00
syncio.o : syncio .c redis .h fmacros .h config .h ae .h sds .h dict .h adlist .h \
2011-06-30 07:27:32 -04:00
zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h slowlog.h
2010-08-30 05:37:17 -04:00
t_hash.o : t_hash .c redis .h fmacros .h config .h ae .h sds .h dict .h adlist .h \
2011-06-30 07:27:32 -04:00
zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h slowlog.h
2010-08-30 05:37:17 -04:00
t_list.o : t_list .c redis .h fmacros .h config .h ae .h sds .h dict .h adlist .h \
2011-06-30 07:27:32 -04:00
zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h slowlog.h
2010-08-30 05:37:17 -04:00
t_set.o : t_set .c redis .h fmacros .h config .h ae .h sds .h dict .h adlist .h \
2011-06-30 07:27:32 -04:00
zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h slowlog.h
2010-08-30 05:37:17 -04:00
t_string.o : t_string .c redis .h fmacros .h config .h ae .h sds .h dict .h \
2011-06-30 07:27:32 -04:00
adlist.h zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h \
slowlog.h
2010-08-30 05:37:17 -04:00
t_zset.o : t_zset .c redis .h fmacros .h config .h ae .h sds .h dict .h adlist .h \
2011-06-30 07:27:32 -04:00
zmalloc.h anet.h zipmap.h ziplist.h intset.h version.h util.h slowlog.h
2011-06-20 05:58:54 -04:00
util.o : util .c fmacros .h util .h
ziplist.o : ziplist .c zmalloc .h util .h ziplist .h endian .h
zipmap.o : zipmap .c zmalloc .h endian .h
zmalloc.o : zmalloc .c config .h zmalloc .h
2009-03-22 05:30:00 -04:00
2011-06-20 05:52:15 -04:00
.PHONY : dependencies
2010-12-15 06:40:23 -05:00
dependencies :
2011-06-09 05:17:32 -04:00
@printf '%b %b\n' $( MAKECOLOR) MAKE$( ENDCOLOR) $( BINCOLOR) hiredis$( ENDCOLOR)
2011-05-04 04:17:05 -04:00
@cd ../deps/hiredis && $( MAKE) static ARCH = " $( ARCH) "
2011-06-09 05:17:32 -04:00
@printf '%b %b\n' $( MAKECOLOR) MAKE$( ENDCOLOR) $( BINCOLOR) linenoise$( ENDCOLOR)
2011-05-04 04:17:05 -04:00
@cd ../deps/linenoise && $( MAKE) ARCH = " $( ARCH) "
2010-12-15 06:40:23 -05:00
2011-06-20 05:52:15 -04:00
../deps/jemalloc/lib/libjemalloc.a :
2011-06-01 11:08:12 -04:00
cd ../deps/jemalloc && ./configure $( JEMALLOC_CFLAGS) --with-jemalloc-prefix= je_ --enable-cc-silence && $( MAKE) lib/libjemalloc.a
2011-06-20 05:52:15 -04:00
2010-05-17 18:36:48 -04:00
redis-server : $( OBJ )
2011-06-20 05:52:15 -04:00
$( QUIET_CC) $( CC) -o $( PRGNAME) $( CCOPT) $( DEBUG) $( OBJ) $( CCLINK) $( ALLOC_LINK)
2009-03-22 05:30:00 -04:00
2010-12-15 06:40:23 -05:00
redis-benchmark : dependencies $( BENCHOBJ )
2011-05-04 04:17:05 -04:00
@cd ../deps/hiredis && $( MAKE) static
2011-06-20 05:52:15 -04:00
$( QUIET_LINK) $( CC) -o $( BENCHPRGNAME) $( CCOPT) $( DEBUG) $( BENCHOBJ) ../deps/hiredis/libhiredis.a $( CCLINK) $( ALLOC_LINK)
2010-11-04 08:37:05 -04:00
redis-benchmark.o :
2011-06-08 11:09:18 -04:00
$( QUIET_CC) $( CC) -c $( CFLAGS) -I../deps/hiredis $( DEBUG) $( COMPILE_TIME) $<
2009-03-22 05:30:00 -04:00
2010-12-15 06:40:23 -05:00
redis-cli : dependencies $( CLIOBJ )
2011-06-20 05:52:15 -04:00
$( QUIET_LINK) $( CC) -o $( CLIPRGNAME) $( CCOPT) $( DEBUG) $( CLIOBJ) ../deps/hiredis/libhiredis.a ../deps/linenoise/linenoise.o $( CCLINK) $( ALLOC_LINK)
2010-11-03 11:09:38 -04:00
redis-cli.o :
2011-06-08 11:09:18 -04:00
$( QUIET_CC) $( CC) -c $( CFLAGS) -I../deps/hiredis -I../deps/linenoise $( DEBUG) $( COMPILE_TIME) $<
2009-03-22 05:30:00 -04:00
2010-03-13 09:55:42 -05:00
redis-check-dump : $( CHECKDUMPOBJ )
2011-06-20 05:52:15 -04:00
$( QUIET_LINK) $( CC) -o $( CHECKDUMPPRGNAME) $( CCOPT) $( DEBUG) $( CHECKDUMPOBJ) $( CCLINK) $( ALLOC_LINK)
2010-03-13 09:55:42 -05:00
2010-05-05 07:36:29 -04:00
redis-check-aof : $( CHECKAOFOBJ )
2011-06-20 05:52:15 -04:00
$( QUIET_LINK) $( CC) -o $( CHECKAOFPRGNAME) $( CCOPT) $( DEBUG) $( CHECKAOFOBJ) $( CCLINK) $( ALLOC_LINK)
2010-05-05 07:36:29 -04:00
2011-06-20 05:52:15 -04:00
# Because the jemalloc.h header is generated as a part of the jemalloc build
# process, building it should complete before building any other object.
%.o : %.c $( ALLOC_DEP )
2011-06-08 11:09:18 -04:00
$( QUIET_CC) $( CC) -c $( CFLAGS) $( DEBUG) $( COMPILE_TIME) $<
2009-03-22 05:30:00 -04:00
clean :
2010-05-05 07:36:29 -04:00
rm -rf $( PRGNAME) $( BENCHPRGNAME) $( CLIPRGNAME) $( CHECKDUMPPRGNAME) $( CHECKAOFPRGNAME) *.o *.gcda *.gcno *.gcov
2009-03-22 05:30:00 -04:00
dep :
2010-12-28 08:42:09 -05:00
$( CC) -MM *.c -I ../deps/hiredis -I ../deps/linenoise
2009-03-22 05:30:00 -04:00
2010-12-15 06:40:23 -05:00
test : redis -server
2011-07-11 07:46:09 -04:00
@( cd ..; ( which tclsh8.5 >/dev/null && tclsh8.5 tests/test_helper.tcl --tags " ${ TAGS } " ) || echo "You need to install Tcl (tclsh8.5) in order to run tests." )
2009-03-22 05:30:00 -04:00
bench :
./redis-benchmark
2009-03-30 06:13:43 -04:00
log :
2010-07-01 08:45:37 -04:00
git log '--pretty=format:%ad %s (%cn)' --date= short > ../Changelog
2009-10-23 15:24:01 -04:00
32bit :
2010-02-22 11:36:54 -05:00
@echo ""
@echo "WARNING: if it fails under Linux you probably need to install libc6-dev-i386"
@echo ""
2011-06-01 11:08:12 -04:00
$( MAKE) ARCH = "-m32" JEMALLOC_CFLAGS = 'CFLAGS="-std=gnu99 -Wall -pipe -g3 -fvisibility=hidden -O3 -funroll-loops -m32"'
2009-11-04 03:53:43 -05:00
gprof :
2010-11-21 10:44:17 -05:00
$( MAKE) PROF = "-pg"
2009-11-04 03:53:43 -05:00
2009-12-14 13:48:24 -05:00
gcov :
2010-11-21 10:44:17 -05:00
$( MAKE) PROF = "-fprofile-arcs -ftest-coverage"
2009-12-14 13:48:24 -05:00
2010-01-12 09:57:00 -05:00
noopt :
2010-11-21 10:44:17 -05:00
$( MAKE) OPTIMIZATION = ""
2010-01-12 09:57:00 -05:00
2009-11-04 03:53:43 -05:00
32bitgprof :
2010-11-21 10:44:17 -05:00
$( MAKE) PROF = "-pg" ARCH = "-arch i386"
2010-07-06 13:07:16 -04:00
install : all
2010-09-13 11:11:55 -04:00
mkdir -p $( INSTALL_BIN)
2010-07-06 13:07:16 -04:00
$( INSTALL) $( PRGNAME) $( INSTALL_BIN)
$( INSTALL) $( BENCHPRGNAME) $( INSTALL_BIN)
$( INSTALL) $( CLIPRGNAME) $( INSTALL_BIN)
$( INSTALL) $( CHECKDUMPPRGNAME) $( INSTALL_BIN)
$( INSTALL) $( CHECKAOFPRGNAME) $( INSTALL_BIN)