]> git.saurik.com Git - redis.git/commitdiff
Rebuild deps/ and src/ when ARCH changes
authorPieter Noordhuis <pcnoordhuis@gmail.com>
Tue, 15 Nov 2011 20:40:49 +0000 (12:40 -0800)
committerPieter Noordhuis <pcnoordhuis@gmail.com>
Tue, 15 Nov 2011 20:41:35 +0000 (12:41 -0800)
This change moves the build instructions for dependencies to a separate
Makefile in deps/. The ARCH environment variable is stored in a
.make-arch file in the same directory as the Makefile. The contents of
this file is read and compared to the current ARCH, and, on a mismatch
triggers rebuilding the entire source tree.

When file .make-arch exists and matches with ARCH from the environment,
the dependencies are assumed to already be built.

The new "clean" target only cleans the Redis source tree, not its
dependencies. To clear the dependencies as well, the "distclean" target
can be used.

.gitignore
deps/Makefile [new file with mode: 0644]
src/Makefile

index 262faef3f4da5bbeb38e7353820b9b9d43e47ce5..1f480bd4d1271dd7cd7174ba1dfc8573ed312770 100644 (file)
@@ -22,3 +22,4 @@ src/redis.conf
 deps/lua/src/lua
 deps/lua/src/luac
 deps/lua/src/liblua.a
+.make-*
diff --git a/deps/Makefile b/deps/Makefile
new file mode 100644 (file)
index 0000000..b881c81
--- /dev/null
@@ -0,0 +1,59 @@
+# Redis dependency Makefile
+
+UNAME_S:=$(shell sh -c 'uname -s 2> /dev/null || echo not')
+
+LUA_CFLAGS=-O2 -Wall $(ARCH)
+ifeq ($(UNAME_S),SunOS)
+  # Make isinf() available
+  LUA_CFLAGS+= -D__C99FEATURES__=1
+endif
+
+JEMALLOC_CFLAGS=
+ifeq ($(ARCH),-m32)
+  JEMALLOC_CFLAGS+=CFLAGS="-std=gnu99 -Wall -pipe -g3 -fvisibility=hidden -O3 -funroll-loops -m32"
+endif
+
+CCCOLOR="\033[34m"
+LINKCOLOR="\033[34;1m"
+SRCCOLOR="\033[33m"
+BINCOLOR="\033[37;1m"
+MAKECOLOR="\033[32;1m"
+ENDCOLOR="\033[0m"
+
+default:
+       @echo "Explicit target required"
+
+# Clean everything when ARCH is different
+ifneq ($(shell sh -c '[ -f .make-arch ] && cat .make-arch'), $(ARCH))
+.make-arch: distclean
+else
+.make-arch:
+endif
+
+.make-arch:
+       -(echo $(ARCH) > .make-arch)
+
+distclean:
+       -(cd hiredis && $(MAKE) clean) > /dev/null || true
+       -(cd linenoise && $(MAKE) clean) > /dev/null || true
+       -(cd lua && $(MAKE) clean) > /dev/null || true
+       -(cd jemalloc && [ -f Makefile ] && $(MAKE) distclean) > /dev/null || true
+       -(rm -f .make-arch)
+
+hiredis: .make-arch
+       @printf '%b %b\n' $(MAKECOLOR)MAKE$(ENDCOLOR) $(BINCOLOR)hiredis$(ENDCOLOR)
+       cd hiredis && $(MAKE) static ARCH="$(ARCH)"
+
+linenoise: .make-arch
+       @printf '%b %b\n' $(MAKECOLOR)MAKE$(ENDCOLOR) $(BINCOLOR)linenoise$(ENDCOLOR)
+       cd linenoise && $(MAKE) ARCH="$(ARCH)"
+
+lua: .make-arch
+       @printf '%b %b\n' $(MAKECOLOR)MAKE$(ENDCOLOR) $(BINCOLOR)lua$(ENDCOLOR)
+       cd lua && $(MAKE) CFLAGS="$(LUA_CFLAGS)" MYLDFLAGS="$(ARCH)" ansi
+
+jemalloc: .make-arch
+       @printf '%b %b\n' $(MAKECOLOR)MAKE$(ENDCOLOR) $(BINCOLOR)jemalloc$(ENDCOLOR)
+       cd jemalloc && ./configure $(JEMALLOC_CFLAGS) --with-jemalloc-prefix=je_ --enable-cc-silence && $(MAKE) lib/libjemalloc.a
+
+.PHONY: default conditional_clean hiredis linenoise lua jemalloc
index 76bc223b84685401be61620d95bc1d4208cc2cc5..f75e43ca995c50ab15a3166f2c3e268b1dc63d96 100644 (file)
@@ -5,8 +5,7 @@
 release_hdr := $(shell sh -c './mkreleasehdr.sh')
 uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
 OPTIMIZATION?=-O2
-
-LUA_CFLAGS=-O2 -Wall
+DEPENDENCY_TARGETS=hiredis linenoise lua
 
 ifeq ($(uname_S),Linux)
   ifneq ($(FORCE_LIBC_MALLOC),yes)
@@ -15,8 +14,6 @@ ifeq ($(uname_S),Linux)
 endif
 
 ifeq ($(uname_S),SunOS)
-  # make isinf() available
-  LUA_CFLAGS+=-D__C99FEATURES__=1
   CFLAGS?=-std=c99 -pedantic $(OPTIMIZATION) -Wall -W -D__EXTENSIONS__ -D_XPG6
   CCLINK?=-ldl -lnsl -lsocket -lm -lpthread
   DEBUG?=-g -ggdb 
@@ -27,27 +24,23 @@ else
 endif
 
 ifeq ($(USE_TCMALLOC),yes)
-  ALLOD_DEPS=
   ALLOC_LINK=-ltcmalloc
   ALLOC_FLAGS=-DUSE_TCMALLOC
 endif
 
 ifeq ($(USE_TCMALLOC_MINIMAL),yes)
-  ALLOD_DEPS=
   ALLOC_LINK=-ltcmalloc_minimal
   ALLOC_FLAGS=-DUSE_TCMALLOC
 endif
 
 ifeq ($(USE_JEMALLOC),yes)
-  ALLOC_DEP=../deps/jemalloc/lib/libjemalloc.a
-  ALLOC_LINK=$(ALLOC_DEP) -ldl
+  ALLOC_LINK=../deps/jemalloc/lib/libjemalloc.a -ldl
   ALLOC_FLAGS=-DUSE_JEMALLOC -I../deps/jemalloc/include
+  DEPENDENCY_TARGETS+= jemalloc
 endif
 
 CCLINK+= $(ALLOC_LINK)
 CFLAGS+= $(ALLOC_FLAGS)
-LUA_CFLAGS+= $(ARCH)
-
 CCOPT= $(CFLAGS) $(ARCH) $(PROF)
 
 PREFIX= /usr/local
@@ -160,52 +153,52 @@ 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
 
-.PHONY: dependencies
-
-dependencies:
-       @printf '%b %b\n' $(MAKECOLOR)MAKE$(ENDCOLOR) $(BINCOLOR)hiredis$(ENDCOLOR)
-       @cd ../deps/hiredis && $(MAKE) static ARCH="$(ARCH)"
-       @printf '%b %b\n' $(MAKECOLOR)MAKE$(ENDCOLOR) $(BINCOLOR)linenoise$(ENDCOLOR)
-       @cd ../deps/linenoise && $(MAKE) ARCH="$(ARCH)"
-       @echo $(MAKECOLOR)MAKE$(ENDCOLOR) $(BINCOLOR)Lua ansi$(ENDCOLOR)
-       @cd ../deps/lua && $(MAKE) CFLAGS="$(LUA_CFLAGS)" MYLDFLAGS="$(ARCH)" ansi
+# Clean local objects when ARCH is different
+ifneq ($(shell sh -c '[ -f .make-arch ] && cat .make-arch'), $(ARCH))
+.make-arch: clean
+else
+.make-arch:
+endif
 
-../deps/jemalloc/lib/libjemalloc.a:
-       cd ../deps/jemalloc && ./configure $(JEMALLOC_CFLAGS) --with-jemalloc-prefix=je_ --enable-cc-silence && $(MAKE) lib/libjemalloc.a
+.make-arch:
+       -(cd ../deps && make $(DEPENDENCY_TARGETS) ARCH="$(ARCH)")
+       -(echo $(ARCH) > .make-arch)
 
-redis-server: dependencies $(OBJ)
+redis-server: .make-arch $(OBJ)
        $(QUIET_LINK)$(CC) -o $(PRGNAME) $(CCOPT) $(DEBUG) $(OBJ) ../deps/lua/src/liblua.a $(CCLINK)
 
-redis-benchmark: dependencies $(BENCHOBJ)
-       @cd ../deps/hiredis && $(MAKE) static
+redis-benchmark: .make-arch $(BENCHOBJ)
        $(QUIET_LINK)$(CC) -o $(BENCHPRGNAME) $(CCOPT) $(DEBUG) $(BENCHOBJ) ../deps/hiredis/libhiredis.a $(CCLINK)
 
-redis-benchmark.o:
+redis-benchmark.o: redis-benchmark.c .make-arch
        $(QUIET_CC)$(CC) -c $(CFLAGS) -I../deps/hiredis $(DEBUG) $(COMPILE_TIME) $<
 
-redis-cli: dependencies $(CLIOBJ)
+redis-cli: .make-arch $(CLIOBJ)
        $(QUIET_LINK)$(CC) -o $(CLIPRGNAME) $(CCOPT) $(DEBUG) $(CLIOBJ) ../deps/hiredis/libhiredis.a ../deps/linenoise/linenoise.o $(CCLINK)
 
-redis-cli.o:
+redis-cli.o: redis-cli.c .make-arch
        $(QUIET_CC)$(CC) -c $(CFLAGS) -I../deps/hiredis -I../deps/linenoise $(DEBUG) $(COMPILE_TIME) $<
 
-redis-check-dump: $(CHECKDUMPOBJ)
+redis-check-dump: .make-arch $(CHECKDUMPOBJ)
        $(QUIET_LINK)$(CC) -o $(CHECKDUMPPRGNAME) $(CCOPT) $(DEBUG) $(CHECKDUMPOBJ) $(CCLINK)
 
-redis-check-aof: $(CHECKAOFOBJ)
+redis-check-aof: .make-arch $(CHECKAOFOBJ)
        $(QUIET_LINK)$(CC) -o $(CHECKAOFPRGNAME) $(CCOPT) $(DEBUG) $(CHECKAOFOBJ) $(CCLINK)
 
 # 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)
+# process, building it should complete before building any other object. Instead of
+# depending on a single artifact, simply build all dependencies first.
+%.o: %.c .make-arch
        $(QUIET_CC)$(CC) -c $(CFLAGS) $(DEBUG) $(COMPILE_TIME) -I../deps/lua/src $<
 
+.PHONY: all clean distclean
+
 clean:
        rm -rf $(PRGNAME) $(BENCHPRGNAME) $(CLIPRGNAME) $(CHECKDUMPPRGNAME) $(CHECKAOFPRGNAME) *.o *.gcda *.gcno *.gcov
-       cd ../deps/hiredis && $(MAKE) $@
-       cd ../deps/linenoise && $(MAKE) $@
-       cd ../deps/lua && $(MAKE) $@
-       -(cd ../deps/jemalloc && $(MAKE) distclean)
+
+distclean: clean
+       -(cd ../deps && $(MAKE) distclean)
+       -(rm -f .make-arch)
 
 dep:
        $(CC) -MM *.c -I ../deps/hiredis -I ../deps/linenoise