a10a3aff6a
Changing any Menuselect option in the `Compiler Flags` section causes a full rebuild of the Asterisk source tree. Every enabled option causes a #define to be added to buildopts.h, thus breaking ccache caching for every source file that includes "asterisk.h". In most cases each option only applies to one or two files. Now we only define those options for the specific sources which use them, this causes much better cache matching when working with multiple builds. For example testing code with an without MALLOC_DEBUG will now use just over half the ccache size, only main/astmm.o will have two builds cached instead of every file. Reorder main/Makefile so _ASTCFLAGS set on specific object files are all together, sorted by filename. Stop adding -DMALLOC_DEBUG to CFLAGS of bundled pjproject, this define is no longer used by any header so only serves to break cache. The only code change is a slight adjustment to how main/astmm.c is initialized. Initialization functions always exist so main/asterisk.c can call them unconditionally. Additionally rename the astmm initialization functions so they are not exported. Change-Id: Ie2085237a964f6e1e6fff55ed046e2afff83c027
196 lines
6.3 KiB
Makefile
196 lines
6.3 KiB
Makefile
#
|
|
# Asterisk -- An open source telephony toolkit.
|
|
#
|
|
# Makefile rules
|
|
#
|
|
# Copyright (C) 2006-2010, Digium, Inc.
|
|
#
|
|
# Kevin P. Fleming <kpfleming@digium.com>
|
|
#
|
|
# This program is free software, distributed under the terms of
|
|
# the GNU General Public License
|
|
#
|
|
|
|
# Each command is preceded by a short comment on what to do.
|
|
# Prefixing one or the other with @\# or @ or nothing makes the desired
|
|
# behaviour. ECHO_PREFIX prefixes the comment, CMD_PREFIX prefixes the command.
|
|
|
|
-include $(ASTTOPDIR)/makeopts
|
|
|
|
# Helpful functions
|
|
# call with $(call function,...)
|
|
tolower = $(shell echo $(1) | tr '[:upper:]' '[:lower:]')
|
|
# Takes a list of MENUSELECT_CFLAG Id and returns CFLAGS to declare
|
|
# the ones which are enabled.
|
|
get_menuselect_cflags=$(patsubst %,-D%,$(filter $1,$(MENUSELECT_CFLAGS)))
|
|
|
|
.PHONY: dist-clean
|
|
|
|
# If 'make' decides to create intermediate files to satisfy a build requirement
|
|
# (like producing a .i from a .c), we want to keep them, so tell make to keep
|
|
# all intermediate files
|
|
.SECONDARY:
|
|
|
|
# extra cflags to build dependencies. Recursively expanded.
|
|
MAKE_DEPS=-MD -MT $@ -MF .$(subst /,_,$@).d -MP
|
|
|
|
ifeq ($(findstring ADDRESS_SANITIZER,$(MENUSELECT_CFLAGS)),ADDRESS_SANITIZER)
|
|
_ASTLDFLAGS+=-fsanitize=address
|
|
_ASTCFLAGS+=-fno-omit-frame-pointer -fsanitize=address
|
|
endif
|
|
|
|
ifeq ($(findstring THREAD_SANITIZER,$(MENUSELECT_CFLAGS)),THREAD_SANITIZER)
|
|
_ASTLDFLAGS+=-fsanitize=thread -pie -fPIE
|
|
_ASTCFLAGS+=-fno-omit-frame-pointer -pie -fPIE -fsanitize=thread
|
|
endif
|
|
|
|
ifeq ($(findstring LEAK_SANITIZER,$(MENUSELECT_CFLAGS)),LEAK_SANITIZER)
|
|
_ASTLDFLAGS+=-fsanitize=leak
|
|
_ASTCFLAGS+=-fno-omit-frame-pointer -fsanitize=leak
|
|
endif
|
|
|
|
ifeq ($(findstring UNDEFINED_SANITIZER,$(MENUSELECT_CFLAGS)),UNDEFINED_SANITIZER)
|
|
_ASTLDFLAGS+=-fsanitize=undefined
|
|
_ASTCFLAGS+=-fno-omit-frame-pointer -fsanitize=undefined
|
|
endif
|
|
|
|
ifeq ($(NOISY_BUILD),)
|
|
ECHO_PREFIX=@
|
|
CMD_PREFIX=@
|
|
else
|
|
ECHO_PREFIX=@\#
|
|
CMD_PREFIX=
|
|
endif
|
|
|
|
OPTIMIZE?=-O3
|
|
ifneq ($(findstring darwin,$(OSARCH)),)
|
|
ifeq ($(shell if test `/usr/bin/sw_vers -productVersion | cut -c4` -gt 5; then echo 6; else echo 0; fi),6)
|
|
# Snow Leopard/Lion has an issue with this optimization flag on large files (like chan_sip)
|
|
OPTIMIZE+=-fno-inline-functions
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS))$(AST_CODE_COVERAGE),no)
|
|
_ASTCFLAGS+=$(OPTIMIZE)
|
|
else
|
|
_ASTCFLAGS+=-O0
|
|
endif
|
|
|
|
ifeq ($(AST_CODE_COVERAGE),yes)
|
|
_ASTCFLAGS_COVERAGE=-ftest-coverage -fprofile-arcs
|
|
_ASTLDFLAGS+=-ftest-coverage -fprofile-arcs
|
|
else
|
|
_ASTCFLAGS_COVERAGE=
|
|
endif
|
|
|
|
ifeq ($(findstring $(CONFIG_CFLAGS),$(_ASTCFLAGS)),)
|
|
_ASTCFLAGS+=$(CONFIG_CFLAGS)
|
|
endif
|
|
|
|
# shortcuts for common combinations of flags; these must be recursively expanded so that
|
|
# per-target settings will be applied
|
|
CC_CFLAGS=$(PTHREAD_CFLAGS) $(_ASTCFLAGS) $(ASTCFLAGS)
|
|
CXX_CFLAGS=$(PTHREAD_CFLAGS) $(filter-out -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(AST_DECLARATION_AFTER_STATEMENT),$(_ASTCFLAGS) $(ASTCFLAGS))
|
|
|
|
# Clang -Werror warning suppressions
|
|
ifeq ($(C_COMPILER_FAMILY),clang)
|
|
CC_CFLAGS+=-Wno-unused-value -Wno-parentheses-equality
|
|
endif
|
|
|
|
ifeq ($(GNU_LD),1)
|
|
SO_SUPPRESS_SYMBOLS=-Wl,--version-script,$(subst .so,.exports,$@),--warn-common
|
|
ifneq ($(wildcard $(subst .so,.dynamics,$@)),)
|
|
SO_SUPPRESS_SYMBOLS+=-Wl,--dynamic-list,$(subst .so,.dynamics,$@)
|
|
endif
|
|
endif
|
|
|
|
CC_LDFLAGS_SO=$(PTHREAD_CFLAGS) $(_ASTLDFLAGS) $(SOLINK) $(SO_SUPPRESS_SYMBOLS) $(ASTLDFLAGS)
|
|
CXX_LDFLAGS_SO=$(PTHREAD_CFLAGS) $(_ASTLDFLAGS) $(SOLINK) $(SO_SUPPRESS_SYMBOLS) $(ASTLDFLAGS)
|
|
CC_LIBS=$(PTHREAD_LIBS) $(LIBS)
|
|
CXX_LIBS=$(PTHREAD_LIBS) $(LIBS)
|
|
|
|
# determine whether to double-compile so that the optimizer can report code path problems
|
|
# In this 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 COMPILE_DOUBLE,$(MENUSELECT_CFLAGS)),COMPILE_DOUBLE)
|
|
COMPILE_DOUBLE=yes
|
|
endif
|
|
|
|
ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS))$(AST_DEVMODE),)
|
|
_ASTCFLAGS+=$(AST_FORTIFY_SOURCE)
|
|
endif
|
|
|
|
ifeq ($(findstring BUILD_NATIVE,$(MENUSELECT_CFLAGS)),BUILD_NATIVE)
|
|
_ASTCFLAGS+=-march=native
|
|
endif
|
|
|
|
%.o: %.s
|
|
$(ECHO_PREFIX) echo " [AS] $< -> $@"
|
|
ifeq ($(COMPILE_DOUBLE),yes)
|
|
$(CMD_PREFIX) $(CC) -o /dev/null -c $< $(CC_CFLAGS) $(OPTIMIZE)
|
|
endif
|
|
$(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
|
|
|
%.o: %.i
|
|
$(ECHO_PREFIX) echo " [CCi] $< -> $@"
|
|
ifneq ($(AST_CLANG_BLOCKS),)
|
|
ifeq ($(COMPILE_DOUBLE),yes)
|
|
$(CMD_PREFIX) $(CC) -o /dev/null -c $< $(CC_CFLAGS) $(OPTIMIZE) -Wno-unused-command-line-argument
|
|
endif
|
|
$(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE) -Wno-unused-command-line-argument
|
|
else
|
|
ifeq ($(COMPILE_DOUBLE),yes)
|
|
$(CMD_PREFIX) $(CC) -o /dev/null -c $< $(CC_CFLAGS) $(OPTIMIZE)
|
|
endif
|
|
$(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
|
endif
|
|
|
|
ifneq ($(COMPILE_DOUBLE),yes)
|
|
%.o: %.c
|
|
$(ECHO_PREFIX) echo " [CC] $< -> $@"
|
|
$(CMD_PREFIX) $(CC) -o $@ -c $< $(MAKE_DEPS) $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
|
endif
|
|
|
|
%.i: %.c
|
|
$(ECHO_PREFIX) echo " [CPP] $< -> $@"
|
|
$(CMD_PREFIX) $(CC) -o $@ -E $< $(MAKE_DEPS) $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
|
|
|
%.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) $(_ASTCFLAGS_COVERAGE)
|
|
|
|
ifneq ($(COMPILE_DOUBLE),yes)
|
|
%.oo: %.cc
|
|
$(ECHO_PREFIX) echo " [CXX] $< -> $@"
|
|
$(CMD_PREFIX) $(CXX) -o $@ -c $< $(MAKE_DEPS) $(CXX_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
|
endif
|
|
|
|
%.ii: %.cc
|
|
$(ECHO_PREFIX) echo " [CPP] $< -> $@"
|
|
$(CMD_PREFIX) $(CXX) -o $@ -E $< $(MAKE_DEPS) $(CXX_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
|
|
|
%.so: %.o
|
|
ifeq ($(GNU_LD),1)
|
|
$(CMD_PREFIX) $(ASTTOPDIR)/build_tools/make_linker_version_script $* "$(LINKER_SYMBOL_PREFIX)" "$(ASTTOPDIR)"
|
|
endif
|
|
$(ECHO_PREFIX) echo " [LD] $^ -> $@"
|
|
$(CMD_PREFIX) $(CC) -o $@ $(CC_LDFLAGS_SO) $^ $(CC_LIBS)
|
|
|
|
%.so: %.oo
|
|
ifeq ($(GNU_LD),1)
|
|
$(CMD_PREFIX) $(ASTTOPDIR)/build_tools/make_linker_version_script $* "$(LINKER_SYMBOL_PREFIX)" "$(ASTTOPDIR)"
|
|
endif
|
|
$(ECHO_PREFIX) echo " [LDXX] $^ -> $@"
|
|
$(CMD_PREFIX) $(CXX) -o $@ $(CXX_LDFLAGS_SO) $^ $(CXX_LIBS)
|
|
|
|
%: %.o
|
|
$(ECHO_PREFIX) echo " [LD] $^ -> $@"
|
|
$(CMD_PREFIX) $(CXX) -o $@ $(PTHREAD_CFLAGS) $(_ASTLDFLAGS) $^ $(CXX_LIBS) $(ASTLDFLAGS)
|
|
|
|
dist-clean:: clean
|