BUILD/MEDIUM: rebuild everything when an include file is changed
Some users tend to get caught by incorrect builds when they try patches that modify some include file after they forget to run "make clean". While we can't blame users who are not developers, forcing developers to rely on a painful autodepend is not nice either and will cause them to test their changes less often. Here we propose a reasonable tradeoff. This patch introduces a new "INCLUDES" variable which enumerates all the ".h" files and sets them as a build dependency for all ".o" files. This list is then copied into a "DEP" variable which can safely be overridden if desired. This way by default all .c files are rebuilt if any include file changes. This is the safe method for all users. And developers can simply add "DEP=" to their quick build scripts to keep the old fast and efficient behaviour.
This commit is contained in:
parent
6fc340ff07
commit
b26835db3b
11
Makefile
11
Makefile
|
@ -49,6 +49,7 @@
|
||||||
# ARCH may be useful to force build of 32-bit binary on 64-bit systems
|
# ARCH may be useful to force build of 32-bit binary on 64-bit systems
|
||||||
# CFLAGS is automatically set for the specified CPU and may be overridden.
|
# CFLAGS is automatically set for the specified CPU and may be overridden.
|
||||||
# LDFLAGS is automatically set to -g and may be overridden.
|
# LDFLAGS is automatically set to -g and may be overridden.
|
||||||
|
# DEP may be cleared to ignore changes to include files during development
|
||||||
# SMALL_OPTS may be used to specify some options to shrink memory usage.
|
# SMALL_OPTS may be used to specify some options to shrink memory usage.
|
||||||
# DEBUG may be used to set some internal debugging options.
|
# DEBUG may be used to set some internal debugging options.
|
||||||
# ADDINC may be used to complete the include path in the form -Ipath.
|
# ADDINC may be used to complete the include path in the form -Ipath.
|
||||||
|
@ -767,6 +768,10 @@ WRAPPER_OBJS = src/haproxy-systemd-wrapper.o
|
||||||
# Not used right now
|
# Not used right now
|
||||||
LIB_EBTREE = $(EBTREE_DIR)/libebtree.a
|
LIB_EBTREE = $(EBTREE_DIR)/libebtree.a
|
||||||
|
|
||||||
|
# Used only for forced dependency checking. May be cleared during development.
|
||||||
|
INCLUDES = $(wildcard include/*/*.h ebtree/*.h)
|
||||||
|
DEP = $(INCLUDES)
|
||||||
|
|
||||||
haproxy: $(OBJS) $(OPTIONS_OBJS) $(EBTREE_OBJS)
|
haproxy: $(OBJS) $(OPTIONS_OBJS) $(EBTREE_OBJS)
|
||||||
$(LD) $(LDFLAGS) -o $@ $^ $(LDOPTS)
|
$(LD) $(LDFLAGS) -o $@ $^ $(LDOPTS)
|
||||||
|
|
||||||
|
@ -779,13 +784,13 @@ $(LIB_EBTREE): $(EBTREE_OBJS)
|
||||||
objsize: haproxy
|
objsize: haproxy
|
||||||
@objdump -t $^|grep ' g '|grep -F '.text'|awk '{print $$5 FS $$6}'|sort
|
@objdump -t $^|grep ' g '|grep -F '.text'|awk '{print $$5 FS $$6}'|sort
|
||||||
|
|
||||||
%.o: %.c
|
%.o: %.c $(DEP)
|
||||||
$(CC) $(COPTS) -c -o $@ $<
|
$(CC) $(COPTS) -c -o $@ $<
|
||||||
|
|
||||||
src/trace.o: src/trace.c
|
src/trace.o: src/trace.c $(DEP)
|
||||||
$(CC) $(TRACE_COPTS) -c -o $@ $<
|
$(CC) $(TRACE_COPTS) -c -o $@ $<
|
||||||
|
|
||||||
src/haproxy.o: src/haproxy.c
|
src/haproxy.o: src/haproxy.c $(DEP)
|
||||||
$(CC) $(COPTS) \
|
$(CC) $(COPTS) \
|
||||||
-DBUILD_TARGET='"$(strip $(TARGET))"' \
|
-DBUILD_TARGET='"$(strip $(TARGET))"' \
|
||||||
-DBUILD_ARCH='"$(strip $(ARCH))"' \
|
-DBUILD_ARCH='"$(strip $(ARCH))"' \
|
||||||
|
|
Loading…
Reference in New Issue