xref: /redis-3.2.3/src/Makefile (revision c35b4e84)
1e2641e09Santirez# Redis Makefile
2e2641e09Santirez# Copyright (C) 2009 Salvatore Sanfilippo <antirez at gmail dot com>
3e2641e09Santirez# This file is released under the BSD license, see the COPYING file
4e2641e09Santirez
5e2641e09Santirezrelease_hdr := $(shell sh -c './mkreleasehdr.sh')
6e2641e09Santirezuname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
7e2641e09SantirezOPTIMIZATION?=-O2
84b8a6394SPieter NoordhuisDEPENDENCY_TARGETS=hiredis linenoise lua
9b83e9583SBen Noordhuis
10e2641e09Santirezifeq ($(uname_S),SunOS)
11e2641e09Santirez  CFLAGS?=-std=c99 -pedantic $(OPTIMIZATION) -Wall -W -D__EXTENSIONS__ -D_XPG6
12e2641e09Santirez  CCLINK?=-ldl -lnsl -lsocket -lm -lpthread
13ba559326SPieter Noordhuis  DEBUG?=-g -ggdb
14e2641e09Santirezelse
15e2641e09Santirez  CFLAGS?=-std=c99 -pedantic $(OPTIMIZATION) -Wall -W $(ARCH) $(PROF)
16e2641e09Santirez  CCLINK?=-lm -pthread
17ba559326SPieter Noordhuis  DEBUG?=-g -rdynamic -ggdb
18e2641e09Santirezendif
190a802bd7Santirez
205bb2c88eSPieter Noordhuis# Default allocator
215bb2c88eSPieter Noordhuisifeq ($(uname_S),Linux)
225bb2c88eSPieter Noordhuis  MALLOC?=jemalloc
235bb2c88eSPieter Noordhuiselse
245bb2c88eSPieter Noordhuis  MALLOC?=libc
255bb2c88eSPieter Noordhuisendif
265bb2c88eSPieter Noordhuis
275bb2c88eSPieter Noordhuis# Backwards compatibility for selecting an allocator
280a802bd7Santirezifeq ($(USE_TCMALLOC),yes)
295bb2c88eSPieter Noordhuis  MALLOC=tcmalloc
305bb2c88eSPieter Noordhuisendif
315bb2c88eSPieter Noordhuis
325bb2c88eSPieter Noordhuisifeq ($(USE_TCMALLOC_MINIMAL),yes)
335bb2c88eSPieter Noordhuis  MALLOC=tcmalloc_minimal
345bb2c88eSPieter Noordhuisendif
355bb2c88eSPieter Noordhuis
365bb2c88eSPieter Noordhuisifeq ($(USE_JEMALLOC),yes)
375bb2c88eSPieter Noordhuis  MALLOC=jemalloc
385bb2c88eSPieter Noordhuisendif
395bb2c88eSPieter Noordhuis
405bb2c88eSPieter Noordhuisifeq ($(MALLOC),tcmalloc)
4152825621SPieter Noordhuis  ALLOC_LINK=-ltcmalloc
4252825621SPieter Noordhuis  ALLOC_FLAGS=-DUSE_TCMALLOC
430a802bd7Santirezendif
4452825621SPieter Noordhuis
455bb2c88eSPieter Noordhuisifeq ($(MALLOC),tcmalloc_minimal)
4652825621SPieter Noordhuis  ALLOC_LINK=-ltcmalloc_minimal
4752825621SPieter Noordhuis  ALLOC_FLAGS=-DUSE_TCMALLOC
4852825621SPieter Noordhuisendif
4952825621SPieter Noordhuis
505bb2c88eSPieter Noordhuisifeq ($(MALLOC),jemalloc)
514b8a6394SPieter Noordhuis  ALLOC_LINK=../deps/jemalloc/lib/libjemalloc.a -ldl
529e62dc17Santirez  ALLOC_FLAGS=-DUSE_JEMALLOC -I../deps/jemalloc/include
534b8a6394SPieter Noordhuis  DEPENDENCY_TARGETS+= jemalloc
5452825621SPieter Noordhuisendif
5552825621SPieter Noordhuis
5652825621SPieter NoordhuisCCLINK+= $(ALLOC_LINK)
5752825621SPieter NoordhuisCFLAGS+= $(ALLOC_FLAGS)
589e62dc17SantirezCCOPT= $(CFLAGS) $(ARCH) $(PROF)
59e2641e09Santirez
60e1386503SPedro MeloPREFIX= /usr/local
610997b411SPedro MeloINSTALL_BIN= $(PREFIX)/bin
62120a36f2SantirezINSTALL= cp -pf
63acc01854Santirez
6435845afbSantirezCCCOLOR="\033[34m"
6535845afbSantirezLINKCOLOR="\033[34;1m"
6635845afbSantirezSRCCOLOR="\033[33m"
6735845afbSantirezBINCOLOR="\033[37;1m"
6835845afbSantirezMAKECOLOR="\033[32;1m"
6935845afbSantirezENDCOLOR="\033[0m"
7035845afbSantirez
7173e71867Santirezifndef V
72db6cea11SHampus WessmanQUIET_CC = @printf '    %b %b\n' $(CCCOLOR)CC$(ENDCOLOR) $(SRCCOLOR)$@$(ENDCOLOR);
73db6cea11SHampus WessmanQUIET_LINK = @printf '    %b %b\n' $(LINKCOLOR)LINK$(ENDCOLOR) $(BINCOLOR)$@$(ENDCOLOR);
7473e71867Santirezendif
7573e71867Santirez
769510d65dSantirezOBJ = 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 endianconv.o slowlog.o scripting.o bio.o rio.o rand.o memtest.o crc64.o
77e2641e09SantirezBENCHOBJ = ae.o anet.o redis-benchmark.o sds.o adlist.o zmalloc.o
7811fd0c42SantirezCLIOBJ = anet.o sds.o adlist.o redis-cli.o zmalloc.o release.o
79e2641e09SantirezCHECKDUMPOBJ = redis-check-dump.o lzf_c.o lzf_d.o
80e2641e09SantirezCHECKAOFOBJ = redis-check-aof.o
81e2641e09Santirez
82e2641e09SantirezPRGNAME = redis-server
83e2641e09SantirezBENCHPRGNAME = redis-benchmark
84e2641e09SantirezCLIPRGNAME = redis-cli
85e2641e09SantirezCHECKDUMPPRGNAME = redis-check-dump
86e2641e09SantirezCHECKAOFPRGNAME = redis-check-aof
87e2641e09Santirez
88240f8dbfSantirezall: redis-benchmark redis-cli redis-check-dump redis-check-aof redis-server
89c8061392SPieter Noordhuis	@echo ""
90c8061392SPieter Noordhuis	@echo "Hint: To run 'make test' is a good idea ;)"
91c8061392SPieter Noordhuis	@echo ""
92e2641e09Santirez
93e2641e09Santirez# Deps (use make dep to generate this)
94e2641e09Santirezadlist.o: adlist.c adlist.h zmalloc.h
95e2641e09Santirezae.o: ae.c ae.h zmalloc.h config.h ae_kqueue.c
96e2641e09Santirezae_epoll.o: ae_epoll.c
97e2641e09Santirezae_kqueue.o: ae_kqueue.c
98e2641e09Santirezae_select.o: ae_select.c
99e2641e09Santirezanet.o: anet.c fmacros.h anet.h
1008fedd04dSantirezaof.o: aof.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
10164b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h bio.h
102b147cb9eSantirezbio.o: bio.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
10364b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h bio.h
1043e2a0bf4Santirezcluster.o: cluster.c redis.h fmacros.h config.h ae.h sds.h dict.h \
10564b4c33cSantirez  adlist.h zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h \
10664b4c33cSantirez  rio.h
107daa70b17Santirezconfig.o: config.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
10864b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h
109daa70b17Santirezcrc16.o: crc16.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
11064b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h
111daa70b17Santirezdb.o: db.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
11264b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h
113daa70b17Santirezdebug.o: debug.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
11464b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h sha1.h
115daa70b17Santirezdict.o: dict.c fmacros.h dict.h zmalloc.h
1167a3e3720Santirezendianconv.o: endianconv.c
1177a3e3720Santirezintset.o: intset.c intset.h zmalloc.h endianconv.h
118e2641e09Santirezlzf_c.o: lzf_c.c lzfP.h
119e2641e09Santirezlzf_d.o: lzf_d.c lzfP.h
1208fedd04dSantirezmulti.o: multi.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
12164b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h
1228fedd04dSantireznetworking.o: networking.c redis.h fmacros.h config.h ae.h sds.h dict.h \
12364b4c33cSantirez  adlist.h zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h \
12464b4c33cSantirez  rio.h
1258fedd04dSantirezobject.o: object.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
12664b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h
127e2641e09Santirezpqsort.o: pqsort.c
1288fedd04dSantirezpubsub.o: pubsub.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
12964b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h
13064b4c33cSantirezrand.o: rand.c
1318fedd04dSantirezrdb.o: rdb.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
13264b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h lzf.h \
13364b4c33cSantirez  zipmap.h
13433388d43Santirezredis-benchmark.o: redis-benchmark.c fmacros.h ae.h \
13533388d43Santirez  ../deps/hiredis/hiredis.h sds.h adlist.h zmalloc.h
136e2641e09Santirezredis-check-aof.o: redis-check-aof.c fmacros.h config.h
137e2641e09Santirezredis-check-dump.o: redis-check-dump.c lzf.h
13833388d43Santirezredis-cli.o: redis-cli.c fmacros.h version.h ../deps/hiredis/hiredis.h \
13933388d43Santirez  sds.h zmalloc.h ../deps/linenoise/linenoise.h help.h
1408fedd04dSantirezredis.o: redis.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
14164b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h \
14264b4c33cSantirez  slowlog.h bio.h asciilogo.h
143e2641e09Santirezrelease.o: release.c release.h
1448fedd04dSantirezreplication.o: replication.c redis.h fmacros.h config.h ae.h sds.h dict.h \
14564b4c33cSantirez  adlist.h zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h \
14664b4c33cSantirez  rio.h
14764b4c33cSantirezrio.o: rio.c fmacros.h rio.h sds.h util.h
148b147cb9eSantirezscripting.o: scripting.c redis.h fmacros.h config.h ae.h sds.h dict.h \
14964b4c33cSantirez  adlist.h zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h \
15064b4c33cSantirez  rio.h sha1.h rand.h
151e2641e09Santirezsds.o: sds.c sds.h zmalloc.h
1523e2a0bf4Santirezsha1.o: sha1.c sha1.h config.h
153daa70b17Santirezslowlog.o: slowlog.c redis.h fmacros.h config.h ae.h sds.h dict.h \
15464b4c33cSantirez  adlist.h zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h \
15564b4c33cSantirez  rio.h slowlog.h
1568fedd04dSantirezsort.o: sort.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
15764b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h \
15864b4c33cSantirez  pqsort.h
15933388d43Santirezsyncio.o: syncio.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
16064b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h
1618fedd04dSantirezt_hash.o: t_hash.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
16264b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h
1638fedd04dSantirezt_list.o: t_list.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
16464b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h
1658fedd04dSantirezt_set.o: t_set.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
16664b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h
1678fedd04dSantirezt_string.o: t_string.c redis.h fmacros.h config.h ae.h sds.h dict.h \
16864b4c33cSantirez  adlist.h zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h \
16964b4c33cSantirez  rio.h
1708fedd04dSantirezt_zset.o: t_zset.c redis.h fmacros.h config.h ae.h sds.h dict.h adlist.h \
17164b4c33cSantirez  zmalloc.h anet.h ziplist.h intset.h version.h util.h rdb.h rio.h
1723e2a0bf4Santirezutil.o: util.c fmacros.h util.h
1737a3e3720Santirezziplist.o: ziplist.c zmalloc.h util.h ziplist.h endianconv.h
1747a3e3720Santirezzipmap.o: zipmap.c zmalloc.h endianconv.h
1753e2a0bf4Santirezzmalloc.o: zmalloc.c config.h zmalloc.h
176e2641e09Santirez
1774b8a6394SPieter Noordhuis# Clean local objects when ARCH is different
1784b8a6394SPieter Noordhuisifneq ($(shell sh -c '[ -f .make-arch ] && cat .make-arch'), $(ARCH))
1794b8a6394SPieter Noordhuis.make-arch: clean
1804b8a6394SPieter Noordhuiselse
1814b8a6394SPieter Noordhuis.make-arch:
1824b8a6394SPieter Noordhuisendif
183e2641e09Santirez
1844b8a6394SPieter Noordhuis.make-arch:
185ac834d23Santirez	-(cd ../deps && $(MAKE) $(DEPENDENCY_TARGETS) ARCH="$(ARCH)")
1864b8a6394SPieter Noordhuis	-(echo $(ARCH) > .make-arch)
187c8061392SPieter Noordhuis
1885bb2c88eSPieter Noordhuis# Clean local objects when allocator changes
1895bb2c88eSPieter Noordhuisifneq ($(shell sh -c '[ -f .make-malloc ] && cat .make-malloc'), $(MALLOC))
1905bb2c88eSPieter Noordhuis.make-malloc: clean
1915bb2c88eSPieter Noordhuiselse
1925bb2c88eSPieter Noordhuis.make-malloc:
1935bb2c88eSPieter Noordhuisendif
1945bb2c88eSPieter Noordhuis
1955bb2c88eSPieter Noordhuis.make-malloc:
1965bb2c88eSPieter Noordhuis	-(echo $(MALLOC) > .make-malloc)
1975bb2c88eSPieter Noordhuis
19842c6a5daSPieter Noordhuis# Union of make-prerequisites
19942c6a5daSPieter Noordhuis.make-prerequisites: .make-arch .make-malloc
20042c6a5daSPieter Noordhuis	@touch $@
2015bb2c88eSPieter Noordhuis
20242c6a5daSPieter Noordhuisredis-server: .make-prerequisites $(OBJ)
203321a0440SPieter Noordhuis	$(QUIET_LINK)$(CC) -o $(PRGNAME) $(CCOPT) $(DEBUG) $(OBJ) ../deps/lua/src/liblua.a $(CCLINK)
204e2641e09Santirez
20542c6a5daSPieter Noordhuisredis-benchmark: .make-prerequisites $(BENCHOBJ)
20661c0e893SPieter Noordhuis	$(QUIET_LINK)$(CC) -o $(BENCHPRGNAME) $(CCOPT) $(DEBUG) $(BENCHOBJ) ../deps/hiredis/libhiredis.a $(CCLINK)
207ec8f0667SPieter Noordhuis
20842c6a5daSPieter Noordhuisredis-benchmark.o: redis-benchmark.c .make-prerequisites
20973e71867Santirez	$(QUIET_CC)$(CC) -c $(CFLAGS) -I../deps/hiredis $(DEBUG) $(COMPILE_TIME) $<
210e2641e09Santirez
21142c6a5daSPieter Noordhuisredis-cli: .make-prerequisites $(CLIOBJ)
21261c0e893SPieter Noordhuis	$(QUIET_LINK)$(CC) -o $(CLIPRGNAME) $(CCOPT) $(DEBUG) $(CLIOBJ) ../deps/hiredis/libhiredis.a ../deps/linenoise/linenoise.o $(CCLINK)
2137fc4ce13SPieter Noordhuis
21442c6a5daSPieter Noordhuisredis-cli.o: redis-cli.c .make-prerequisites
21573e71867Santirez	$(QUIET_CC)$(CC) -c $(CFLAGS) -I../deps/hiredis -I../deps/linenoise $(DEBUG) $(COMPILE_TIME) $<
216e2641e09Santirez
21742c6a5daSPieter Noordhuisredis-check-dump: .make-prerequisites $(CHECKDUMPOBJ)
21861c0e893SPieter Noordhuis	$(QUIET_LINK)$(CC) -o $(CHECKDUMPPRGNAME) $(CCOPT) $(DEBUG) $(CHECKDUMPOBJ) $(CCLINK)
219e2641e09Santirez
22042c6a5daSPieter Noordhuisredis-check-aof: .make-prerequisites $(CHECKAOFOBJ)
22161c0e893SPieter Noordhuis	$(QUIET_LINK)$(CC) -o $(CHECKAOFPRGNAME) $(CCOPT) $(DEBUG) $(CHECKAOFOBJ) $(CCLINK)
222e2641e09Santirez
2239e62dc17Santirez# Because the jemalloc.h header is generated as a part of the jemalloc build
2244b8a6394SPieter Noordhuis# process, building it should complete before building any other object. Instead of
2254b8a6394SPieter Noordhuis# depending on a single artifact, simply build all dependencies first.
22642c6a5daSPieter Noordhuis%.o: %.c .make-prerequisites
2270d1650f8Santirez	$(QUIET_CC)$(CC) -c $(CFLAGS) $(DEBUG) $(COMPILE_TIME) -I../deps/lua/src $<
228e2641e09Santirez
229*c35b4e84SPremysl Hruby.PHONY: all clean distclean lcov
2304b8a6394SPieter Noordhuis
231e2641e09Santirezclean:
232*c35b4e84SPremysl Hruby	rm -rf $(PRGNAME) $(BENCHPRGNAME) $(CLIPRGNAME) $(CHECKDUMPPRGNAME) $(CHECKAOFPRGNAME) *.o *.gcda *.gcno *.gcov redis.info lcov-html
2334b8a6394SPieter Noordhuis
2344b8a6394SPieter Noordhuisdistclean: clean
2354b8a6394SPieter Noordhuis	-(cd ../deps && $(MAKE) distclean)
2365bb2c88eSPieter Noordhuis	-(rm -f .make-arch .make-malloc)
237e2641e09Santirez
238e2641e09Santirezdep:
23933388d43Santirez	$(CC) -MM *.c -I ../deps/hiredis -I ../deps/linenoise
240e2641e09Santirez
241e6fcb5b3Santireztest: redis-server redis-check-aof
242f790bd02Santirez	@(cd ..; ./runtest)
243e2641e09Santirez
244*c35b4e84SPremysl Hrubylcov:
245*c35b4e84SPremysl Hruby	$(MAKE) clean gcov
246*c35b4e84SPremysl Hruby	@(set -e; cd ..; ./runtest --clients 1)
247*c35b4e84SPremysl Hruby	@geninfo -o redis.info .
248*c35b4e84SPremysl Hruby	@genhtml --legend -o lcov-html redis.info
249*c35b4e84SPremysl Hruby
250e2641e09Santirezbench:
251e2641e09Santirez	./redis-benchmark
252e2641e09Santirez
253e2641e09Santirezlog:
25424110a4dSantirez	git log '--pretty=format:%ad %s (%cn)' --date=short > ../Changelog
255e2641e09Santirez
256e2641e09Santirez32bit:
257e2641e09Santirez	@echo ""
258e2641e09Santirez	@echo "WARNING: if it fails under Linux you probably need to install libc6-dev-i386"
259e2641e09Santirez	@echo ""
260e93d36a6Santirez	$(MAKE) ARCH="-m32" JEMALLOC_CFLAGS='CFLAGS="-std=gnu99 -Wall -pipe -g3 -fvisibility=hidden -O3 -funroll-loops -m32"'
261e2641e09Santirez
262e2641e09Santirezgprof:
263a4e48b41SPieter Noordhuis	$(MAKE) PROF="-pg"
264e2641e09Santirez
265e2641e09Santirezgcov:
266a4e48b41SPieter Noordhuis	$(MAKE) PROF="-fprofile-arcs -ftest-coverage"
267e2641e09Santirez
268e2641e09Santireznoopt:
269a4e48b41SPieter Noordhuis	$(MAKE) OPTIMIZATION=""
270e2641e09Santirez
271e2641e09Santirez32bitgprof:
272a4e48b41SPieter Noordhuis	$(MAKE) PROF="-pg" ARCH="-arch i386"
273acc01854Santirez
274319bb48cSantirezsrc/help.h:
275319bb48cSantirez	@../utils/generate-command-help.rb > help.h
276319bb48cSantirez
277acc01854Santirezinstall: all
2780bb5160cSantirez	mkdir -p $(INSTALL_BIN)
2790bb5160cSantirez	$(INSTALL) $(PRGNAME) $(INSTALL_BIN)
2800bb5160cSantirez	$(INSTALL) $(BENCHPRGNAME) $(INSTALL_BIN)
2810bb5160cSantirez	$(INSTALL) $(CLIPRGNAME) $(INSTALL_BIN)
2820bb5160cSantirez	$(INSTALL) $(CHECKDUMPPRGNAME) $(INSTALL_BIN)
2830bb5160cSantirez	$(INSTALL) $(CHECKAOFPRGNAME) $(INSTALL_BIN)
284