diff --git a/Makefile.moddir_rules b/Makefile.moddir_rules index 79a704d855..f79a8b64e7 100644 --- a/Makefile.moddir_rules +++ b/Makefile.moddir_rules @@ -64,7 +64,7 @@ modules.link: @for file in $(patsubst %,$(SUBDIR)/%,$(filter-out %.o,$^)); do echo "INPUT (../$${file})" >> $@; done clean:: - rm -f *.so *.o *.oo *.s *.i + rm -f *.so *.o *.oo *.s *.i *.ii rm -f .*.o.d .*.oo.d rm -f modules.link diff --git a/Makefile.rules b/Makefile.rules index 2d66c7a3ea..387420f321 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -3,7 +3,7 @@ # # Makefile rules # -# Copyright (C) 2006, Digium, Inc. +# Copyright (C) 2006-2008, Digium, Inc. # # Kevin P. Fleming # @@ -19,44 +19,95 @@ .PHONY: dist-clean -ifeq ($(NOISY_BUILD),) - ECHO_PREFIX=@ - CMD_PREFIX=@ -else - ECHO_PREFIX=@\# - CMD_PREFIX= -endif +# extra cflags to build dependencies. Recursively expanded. +MAKE_DEPS=-MD -MT $@ -MF .$(subst /,_,$@).d -MP -ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS)),) -# More GSM codec optimization -# Uncomment to enable MMXTM optimizations for x86 architecture CPU's -# which support MMX instructions. This should be newer pentiums, -# ppro's, etc, as well as the AMD K6 and K7. -#K6OPT=-DK6OPT +ifeq ($(NOISY_BUILD),) + ECHO_PREFIX=@ + CMD_PREFIX=@ +else + ECHO_PREFIX=@\# + CMD_PREFIX= +endif OPTIMIZE?=-O6 -ASTCFLAGS+=$(OPTIMIZE) + +ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS)),) + # More GSM codec optimization + # Uncomment to enable MMXTM optimizations for x86 architecture CPU's + # which support MMX instructions. This should be newer pentiums, + # ppro's, etc, as well as the AMD K6 and K7. + #K6OPT=-DK6OPT + + ASTCFLAGS+=$(OPTIMIZE) endif -%.o: %.c - $(ECHO_PREFIX) echo " [CC] $< -> $@" - $(CMD_PREFIX) $(CC) -o $@ -c $< $(PTHREAD_CFLAGS) $(ASTCFLAGS) -MD -MT $@ -MF .$(subst /,_,$@).d -MP +# shortcuts for common combinations of flags; these must be recursively expanded so that +# per-target settings will be applied +CC_CFLAGS=$(PTHREAD_CFLAGS) $(ASTCFLAGS) +CXX_CFLAGS=$(PTHREAD_CFLAGS) $(filter-out -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(AST_DECLARATION_AFTER_STATEMENT),$(ASTCFLAGS)) +CC_LDFLAGS_SO=$(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) +CXX_LDFLAGS_SO=$(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) +CC_LIBS=$(PTHREAD_LIBS) $(LIBS) +CXX_LIBS=$(PTHREAD_LIBS) $(LIBS) -%.o: %.i - $(ECHO_PREFIX) echo " [CCi] $< -> $@" - $(CMD_PREFIX) $(CC) -o $@ -c $< $(PTHREAD_CFLAGS) $(ASTCFLAGS) -MD -MT $@ -MF .$(subst /,_,$@).d -MP - -%.i: %.c - $(ECHO_PREFIX) echo " [CPP] $< -> $@" - $(CMD_PREFIX) $(CC) -o $@ -E $< $(PTHREAD_CFLAGS) $(ASTCFLAGS) -MD -MT $@ -MF .$(subst /,_,$@).d -MP +# determine whether to double-compile so that the optimizer can report code path problems +# this is only done when developer mode and DONT_OPTIMIZE are both enabled +# in that case, we run the preprocessor to produce a .i or .ii file from the source +# code, then compile once with optimizer enabled (and the output to /dev/null), +# and if that doesn't fail then compile again with optimizer disabled +ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS))$(AST_DEVMODE),DONT_OPTIMIZEyes) +COMPILE_DOUBLE=yes +endif %.o: %.s $(ECHO_PREFIX) echo " [AS] $< -> $@" - $(CMD_PREFIX) $(CC) -o $@ -c $< $(PTHREAD_CFLAGS) $(ASTCFLAGS) -MD -MT $@ -MF .$(subst /,_,$@).d -MP +ifeq ($(COMPILE_DOUBLE),yes) + $(CMD_PREFIX) $(CC) -o /dev/null -c $< $(CC_CFLAGS) $(OPTIMIZE) +endif + $(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS) + +%.o: %.i + $(ECHO_PREFIX) echo " [CCi] $< -> $@" +ifeq ($(COMPILE_DOUBLE),yes) + $(CMD_PREFIX) $(CC) -o /dev/null -c $< $(CC_CFLAGS) $(OPTIMIZE) +endif + $(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS) + +%.o: %.c + $(ECHO_PREFIX) echo " [CC] $< -> $@" +ifeq ($(COMPILE_DOUBLE),yes) + $(CMD_PREFIX) $(CC) -o $(@:%.o=%.i) -E $< $(CC_CFLAGS) $(MAKE_DEPS) + $(CMD_PREFIX) $(CC) -o /dev/null -c $(@:%.o=%.i) $(CC_CFLAGS) $(OPTIMIZE) + $(CMD_PREFIX) $(CC) -o $@ -c $(@:%.o=%.i) $(CC_CFLAGS) +else + $(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS) $(MAKE_DEPS) +endif + +%.i: %.c + $(ECHO_PREFIX) echo " [CPP] $< -> $@" + $(CMD_PREFIX) $(CC) -o $@ -E $< $(CC_CFLAGS) $(MAKE_DEPS) + +%.oo: %.ii + $(ECHO_PREFIX) echo " [CXXi] $< -> $@" +ifeq ($(COMPILE_DOUBLE),yes) + $(CMD_PREFIX) $(CXX) -o /dev/null -c $< $(CXX_CFLAGS) $(OPTIMIZE) +endif + $(CMD_PREFIX) $(CXX) -o $@ -c $< $(CXX_CFLAGS) %.oo: %.cc $(ECHO_PREFIX) echo " [CXX] $< -> $@" - $(CMD_PREFIX) $(CXX) -o $@ -c $< $(PTHREAD_CFLAGS) $(filter-out -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(AST_DECLARATION_AFTER_STATEMENT),$(ASTCFLAGS)) -MD -MT $@ -MF .$(subst /,_,$@).d -MP +ifeq ($(COMPILE_DOUBLE),yes) + $(CMD_PREFIX) $(CXX) -o $(@:%.oo=%.ii) -E $< $(CXX_CFLAGS) $(MAKE_DEPS) + $(CMD_PREFIX) $(CXX) -o /dev/null -c $(@:%.oo=%.ii) $(CXX_CFLAGS) $(MAKE_DEPS) $(OPTIMIZE) + $(CMD_PREFIX) $(CXX) -o $@ -c $(@:%.oo=%.ii) $(CXX_CFLAGS) $(MAKE_DEPS) +else + $(CMD_PREFIX) $(CXX) -o $@ -c $< $(CXX_CFLAGS) $(MAKE_DEPS) +endif + +%.ii: %.cc + $(ECHO_PREFIX) echo " [CPP] $< -> $@" + $(CMD_PREFIX) $(CXX) -o $@ -E $< $(CXX_CFLAGS) $(MAKE_DEPS) %.c: %.y $(ECHO_PREFIX) echo " [BISON] $< -> $@" @@ -68,14 +119,14 @@ endif %.so: %.o $(ECHO_PREFIX) echo " [LD] $^ -> $@" - $(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) $^ $(PTHREAD_LIBS) $(LIBS) + $(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(CC_LDFLAGS_SO) $^ $(CC_LIBS) %.so: %.oo $(ECHO_PREFIX) echo " [LDXX] $^ -> $@" - $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) $^ $(PTHREAD_LIBS) $(LIBS) + $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(CXX_LDFLAGS_SO) $^ $(CXX_LIBS) %: %.o $(ECHO_PREFIX) echo " [LD] $^ -> $@" - $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(PTHREAD_CFLAGS) $(ASTLDFLAGS) $^ $(PTHREAD_LIBS) $(LIBS) + $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(PTHREAD_CFLAGS) $(ASTLDFLAGS) $^ $(CXX_LIBS) dist-clean:: clean diff --git a/channels/misdn/Makefile b/channels/misdn/Makefile index 85478225b8..e277636e65 100644 --- a/channels/misdn/Makefile +++ b/channels/misdn/Makefile @@ -14,4 +14,4 @@ portinfo: portinfo.o $(CC) -o $@ $^ -lisdnnet -lmISDN -lpthread clean: - rm -rf *.a *.o *.so portinfo + rm -rf *.a *.o *.so portinfo *.i diff --git a/codecs/gsm/Makefile b/codecs/gsm/Makefile index b83f9a0698..8121b05a6c 100644 --- a/codecs/gsm/Makefile +++ b/codecs/gsm/Makefile @@ -477,7 +477,7 @@ clean: semi-clean $(TOAST) $(TCAT) $(UNTOAST) \ $(ROOT)/gsm-1.0.tar.Z rm -rf lib - rm -f .*.d + rm -f .*.d *.i */*.i # Two tools that helped me generate gsm_encode.c and gsm_decode.c, # but aren't generally needed to port this. diff --git a/main/db1-ast/Makefile b/main/db1-ast/Makefile index 4b9bb25d7f..c9d29b3696 100644 --- a/main/db1-ast/Makefile +++ b/main/db1-ast/Makefile @@ -46,7 +46,7 @@ $(PROG): db_dump185.o $(LIBDBSO) clean-depend: clean: - rm -f $(LIBDB) $(LIBDBSO) $(OBJS) $(SHOBJS) *.s *.i + rm -f $(LIBDB) $(LIBDBSO) $(OBJS) $(SHOBJS) */*.s */*.i ASTCFLAGS:=-Wall -D__DBINTERFACE_PRIVATE -I. -I.. -Iinclude -Ihash -Ibtree -Irecno $(ASTCFLAGS) diff --git a/main/stdtime/Makefile b/main/stdtime/Makefile index cbe3c48f70..d4b7f00938 100644 --- a/main/stdtime/Makefile +++ b/main/stdtime/Makefile @@ -14,7 +14,7 @@ clean-depend: rm -f .depend clean: clean-depend - rm -f libtime.a *.o test + rm -f libtime.a *.o test *.i depend: .depend diff --git a/pbx/Makefile b/pbx/Makefile index 161748b2da..d92ac590cd 100644 --- a/pbx/Makefile +++ b/pbx/Makefile @@ -32,7 +32,7 @@ all: _all include $(ASTTOPDIR)/Makefile.moddir_rules clean:: - rm -f ael/*.o + rm -f ael/*.o ael/*.i ael/ael_lex.o: ael/ael_lex.c ../include/asterisk/ael_structs.h ael/ael.tab.h ael/ael_lex.o: ASTCFLAGS+=-I. -Wno-unused diff --git a/res/Makefile b/res/Makefile index aad078f23d..b289cbfffa 100644 --- a/res/Makefile +++ b/res/Makefile @@ -36,4 +36,4 @@ snmp/agent.o: ASTCFLAGS+=$(MENUSELECT_OPTS_res_snmp:%=-D%) $(foreach dep,$(MENUS $(if $(filter res_snmp,$(EMBEDDED_MODS)),modules.link,res_snmp.so): snmp/agent.o clean:: - rm -f snmp/*.o + rm -f snmp/*.o snmp/*.i