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
60 lines
1.6 KiB
Bash
Executable file
60 lines
1.6 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
GREP=${GREP:-grep}
|
|
MD5=${MD5:-md5sum}
|
|
|
|
cat << END
|
|
/*
|
|
* buildopts.h
|
|
* Automatically generated
|
|
*/
|
|
|
|
END
|
|
|
|
if ${GREP} "AST_DEVMODE" makeopts | ${GREP} -q "yes"
|
|
then
|
|
echo "#define AST_DEVMODE 1"
|
|
# AST_DEVMODE is no longer an API/ABI affecting option so it no longer
|
|
# gets added to BUILDOPTS.
|
|
fi
|
|
|
|
TMP=`${GREP} -e "^MENUSELECT_CFLAGS" menuselect.makeopts | sed 's/MENUSELECT_CFLAGS\=//g' | sed 's/-D//g'`
|
|
for x in ${TMP}; do
|
|
if test "${x}" = "AO2_DEBUG" \
|
|
-o "${x}" = "BETTER_BACKTRACES" \
|
|
-o "${x}" = "BUILD_NATIVE" \
|
|
-o "${x}" = "COMPILE_DOUBLE" \
|
|
-o "${x}" = "DEBUG_CHAOS" \
|
|
-o "${x}" = "DEBUG_SCHEDULER" \
|
|
-o "${x}" = "DETECT_DEADLOCKS" \
|
|
-o "${x}" = "DONT_OPTIMIZE" \
|
|
-o "${x}" = "DUMP_SCHEDULER" \
|
|
-o "${x}" = "LOTS_OF_SPANS" \
|
|
-o "${x}" = "MALLOC_DEBUG" \
|
|
-o "${x}" = "RADIO_RELAX" \
|
|
-o "${x}" = "REBUILD_PARSERS" \
|
|
-o "${x}" = "REF_DEBUG" \
|
|
-o "${x}" = "USE_HOARD_ALLOCATOR" ; then
|
|
# These options are only for specific sources and have no effect on public ABI.
|
|
# Keep them out of buildopts.h so ccache does not invalidate all sources.
|
|
continue
|
|
fi
|
|
|
|
echo "#define ${x} 1"
|
|
if test "${x}" = "LOW_MEMORY" ; then
|
|
# LOW_MEMORY isn't an ABI affecting option but it is used in many sources
|
|
# so it gets defined globally but is not included in AST_BUILTOPTS.
|
|
continue
|
|
fi
|
|
if test "x${BUILDOPTS}" != "x" ; then
|
|
BUILDOPTS="${BUILDOPTS}, ${x}"
|
|
else
|
|
BUILDOPTS="${x}"
|
|
fi
|
|
done
|
|
|
|
BUILDSUM=`echo ${BUILDOPTS} | ${MD5} | cut -c1-32`
|
|
|
|
echo "#define AST_BUILDOPT_SUM \"${BUILDSUM}\""
|
|
echo "#define AST_BUILDOPTS \"${BUILDOPTS}\""
|