bug 1384557 - move _DEPEND_CFLAGS+CL_INCLUDES_PREFIX to toolchain.configure, ignore {CC,CXX}_WRAPPER when using sccache r=glandium
Currently mozconfig.cache overrides a few build options for sccache. This
patch moves them into toolchain.configure so that the build system will
set them properly when sccache is in use. Additionally, {CC,CXX}_WRAPPER
are set in config.mk, so just avoid setting them when sccache is in use.
MozReview-Commit-ID: FYlVKRI8OiN
--- a/build/moz.configure/toolchain.configure
+++ b/build/moz.configure/toolchain.configure
@@ -98,18 +98,18 @@ add_old_configure_assignment('MACOSX_DEP
# ==============================================================
# Normally, we'd use js_option and automatically have those variables
# propagated to js/src, but things are complicated by possible additional
# wrappers in CC/CXX, and by other subconfigures that do not handle those
# options and do need CC/CXX altered.
option('--with-compiler-wrapper', env='COMPILER_WRAPPER', nargs=1,
help='Enable compiling with wrappers such as distcc and ccache')
-option('--with-ccache', env='CCACHE', nargs='?',
- help='Enable compiling with ccache')
+js_option('--with-ccache', env='CCACHE', nargs='?',
+ help='Enable compiling with ccache')
@depends_if('--with-ccache')
def ccache(value):
if len(value):
return value
# If --with-ccache was given without an explicit value, we default to
# 'ccache'.
return 'ccache'
@@ -1034,16 +1034,27 @@ def wrap_system_includes(target, visibil
set_define('HAVE_VISIBILITY_HIDDEN_ATTRIBUTE',
depends(visibility_flags)(lambda v: bool(v) or None))
set_define('HAVE_VISIBILITY_ATTRIBUTE',
depends(visibility_flags)(lambda v: bool(v) or None))
set_config('WRAP_SYSTEM_INCLUDES', wrap_system_includes)
set_config('VISIBILITY_FLAGS', visibility_flags)
+@depends(c_compiler, using_sccache)
+def depend_cflags(info, using_sccache):
+ if info.type not in ('clang-cl', 'msvc'):
+ return '-MD -MP -MF $(MDDEPDIR)/$(@F).pp'
+ elif using_sccache:
+ # sccache supports a special flag to create depfiles
+ # by parsing MSVC's -showIncludes output.
+ return '-deps$(MDDEPDIR)/$(@F).pp'
+
+set_config('_DEPEND_CFLAGS', depend_cflags)
+
@depends(c_compiler)
@imports('multiprocessing')
@imports(_from='__builtin__', _import='min')
def pgo_flags(compiler):
if compiler.type in ('gcc', 'clang'):
return namespace(
gen_cflags=['-fprofile-generate'],
gen_ldflags=['-fprofile-generate'],
--- a/build/moz.configure/windows.configure
+++ b/build/moz.configure/windows.configure
@@ -427,8 +427,29 @@ def alter_path(sdk_bin_path):
path = os.pathsep.join(sdk_bin_path)
os.environ['PATH'] = path
return path
set_config('PATH', alter_path)
check_prog('MAKECAB', ('makecab.exe',))
+@depends(c_compiler, using_sccache)
+def need_showincludes_prefix(info, using_sccache):
+ # sccache does its own -showIncludes prefix checking.
+ if info.type in ('clang-cl', 'msvc') and not using_sccache:
+ return True
+
+@depends(c_compiler, when=need_showincludes_prefix)
+@imports(_from='re', _import='compile', _as='re_compile')
+def msvc_showincludes_prefix(c_compiler):
+ pattern = re_compile(br'^([^:]*:.*[ :] )(.*\\stdio.h)$')
+ output = try_invoke_compiler([c_compiler.compiler], 'C', '#include <stdio.h>\n',
+ ['-nologo', '-c', '-Fonul', '-showIncludes'])
+ for line in output.splitlines():
+ if line.endswith(b'\\stdio.h'):
+ m = pattern.match(line)
+ if m:
+ return m.group(1)
+ # We should have found the prefix and returned earlier
+ die('Cannot find cl -showIncludes prefix.')
+
+set_config('CL_INCLUDES_PREFIX', msvc_showincludes_prefix)
--- a/build/mozconfig.cache
+++ b/build/mozconfig.cache
@@ -119,22 +119,16 @@ else
esac
export CCACHE="$topsrcdir/sccache2/sccache${suffix}"
export SCCACHE_VERBOSE_STATS=1
mk_add_options MOZ_PREFLIGHT_ALL+=build/sccache.mk
mk_add_options MOZ_POSTFLIGHT_ALL+=build/sccache.mk
mk_add_options "UPLOAD_EXTRA_FILES+=sccache.log.gz"
case "$platform" in
win*)
- # sccache supports a special flag to create depfiles.
- #TODO: bug 1318370 - move this all into toolchain.configure
- export _DEPEND_CFLAGS='-deps$(MDDEPDIR)/$(@F).pp'
- # Windows builds have a default wrapper that needs to be overridden
- mk_add_options "export CC_WRAPPER="
- mk_add_options "export CXX_WRAPPER="
# For now, sccache doesn't support separate PDBs so force debug info to be
# in object files.
mk_add_options "export COMPILE_PDB_FLAG="
mk_add_options "export HOST_PDB_FLAG="
mk_add_options "export MOZ_DEBUG_FLAGS=-Z7"
;;
esac
fi
--- a/config/config.mk
+++ b/config/config.mk
@@ -115,18 +115,20 @@ else
win_srcdir := $(srcdir)
BUILD_TOOLS = $(MOZILLA_DIR)/build/unix
endif
CONFIG_TOOLS = $(MOZ_BUILD_ROOT)/config
AUTOCONF_TOOLS = $(MOZILLA_DIR)/build/autoconf
ifdef _MSC_VER
+ifndef MOZ_USING_SCCACHE
CC_WRAPPER ?= $(call py_action,cl)
CXX_WRAPPER ?= $(call py_action,cl)
+endif
endif # _MSC_VER
CC := $(CC_WRAPPER) $(CC)
CXX := $(CXX_WRAPPER) $(CXX)
MKDIR ?= mkdir
SLEEP ?= sleep
TOUCH ?= touch
--- a/js/src/old-configure.in
+++ b/js/src/old-configure.in
@@ -1820,56 +1820,16 @@ fi
fi # ! SKIP_COMPILER_CHECKS
AC_DEFINE(CPP_THROW_NEW, [throw()])
AC_LANG_C
MOZ_EXPAND_LIBS
dnl ========================================================
-dnl =
-dnl = Build depencency options
-dnl =
-dnl ========================================================
-MOZ_ARG_HEADER(Build dependencies)
-
-if test "$GNU_CC" -a "$GNU_CXX"; then
- _DEPEND_CFLAGS='-MD -MP -MF $(MDDEPDIR)/$(@F).pp'
-else
- dnl Don't override this for MSVC
- if test -z "$_WIN32_MSVC"; then
- _USE_CPP_INCLUDE_FLAG=
- _DEFINES_CFLAGS='$(ACDEFINES) -D_JS_CONFDEFS_H_ -DMOZILLA_CLIENT'
- _DEFINES_CXXFLAGS='$(ACDEFINES) -D_JS_CONFDEFS_H_ -DMOZILLA_CLIENT'
- else
- echo '#include <stdio.h>' > dummy-hello.c
- changequote(,)
- dnl This output is localized, split at the first double space or colon and space.
- _CL_PREFIX_REGEX="^\([^:]*:.*[ :] \)\(.*\\\stdio.h\)$"
- CL_INCLUDES_PREFIX=`${CC} -showIncludes -c -Fonul dummy-hello.c 2>&1 | sed -ne 's/'"$_CL_PREFIX_REGEX"'/\1/p'`
- _CL_STDIO_PATH=`${CC} -showIncludes -c -Fonul dummy-hello.c 2>&1 | sed -ne 's/'"$_CL_PREFIX_REGEX"'/\2/p'`
- changequote([,])
- if ! test -e "$_CL_STDIO_PATH"; then
- AC_MSG_ERROR([Unable to parse cl -showIncludes prefix. This compiler's locale has an unsupported formatting.])
- fi
- if test -z "$CL_INCLUDES_PREFIX"; then
- AC_MSG_ERROR([Cannot find cl -showIncludes prefix.])
- fi
- AC_SUBST(CL_INCLUDES_PREFIX)
- rm -f dummy-hello.c
-
- dnl Make sure that the build system can handle non-ASCII characters
- dnl in environment variables to prevent it from breaking silently on
- dnl non-English systems.
- NONASCII=$'\241\241'
- AC_SUBST(NONASCII)
- fi
-fi
-
-dnl ========================================================
dnl = Link js shell to system readline
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(readline,
[ --enable-readline Link js shell to system readline library],
JS_WANT_READLINE=1,
JS_WANT_READLINE= )
JS_BUNDLED_EDITLINE=
@@ -1994,17 +1954,16 @@ COMPILE_CXXFLAGS=`echo \
$COMPILE_CXXFLAGS`
HOST_CFLAGS=`echo \
$HOST_CFLAGS`
HOST_CXXFLAGS=`echo \
$HOST_CXXFLAGS`
-AC_SUBST(_DEPEND_CFLAGS)
AC_SUBST(MOZ_SYSTEM_NSPR)
OS_CFLAGS="$CFLAGS"
OS_CXXFLAGS="$CXXFLAGS"
OS_CPPFLAGS="$CPPFLAGS"
OS_COMPILE_CFLAGS="$COMPILE_CFLAGS"
OS_COMPILE_CXXFLAGS="$COMPILE_CXXFLAGS"
OS_LDFLAGS="$LDFLAGS"
--- a/old-configure.in
+++ b/old-configure.in
@@ -4181,56 +4181,16 @@ AC_DEFINE(CPP_THROW_NEW, [throw()])
AC_LANG_C
if test "$COMPILE_ENVIRONMENT"; then
MOZ_EXPAND_LIBS
fi # COMPILE_ENVIRONMENT
dnl ========================================================
dnl =
-dnl = Build depencency options
-dnl =
-dnl ========================================================
-MOZ_ARG_HEADER(Build dependencies)
-
-if test "$GNU_CC" -a "$GNU_CXX"; then
- _DEPEND_CFLAGS='-MD -MP -MF $(MDDEPDIR)/$(@F).pp'
-else
- dnl Don't override this for MSVC
- if test -z "$_WIN32_MSVC"; then
- _USE_CPP_INCLUDE_FLAG=
- _DEFINES_CFLAGS='$(ACDEFINES) -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT'
- _DEFINES_CXXFLAGS='$(ACDEFINES) -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT'
- else
- echo '#include <stdio.h>' > dummy-hello.c
- changequote(,)
- dnl This output is localized, split at the first double space or colon and space.
- _CL_PREFIX_REGEX="^\([^:]*:.*[ :] \)\(.*\\\stdio.h\)$"
- CL_INCLUDES_PREFIX=`${CC} -showIncludes -c -Fonul dummy-hello.c 2>&1 | sed -ne 's/'"$_CL_PREFIX_REGEX"'/\1/p'`
- _CL_STDIO_PATH=`${CC} -showIncludes -c -Fonul dummy-hello.c 2>&1 | sed -ne 's/'"$_CL_PREFIX_REGEX"'/\2/p'`
- changequote([,])
- if ! test -e "$_CL_STDIO_PATH"; then
- AC_MSG_ERROR([Unable to parse cl -showIncludes prefix. This compiler's locale has an unsupported formatting.])
- fi
- if test -z "$CL_INCLUDES_PREFIX"; then
- AC_MSG_ERROR([Cannot find cl -showIncludes prefix.])
- fi
- AC_SUBST(CL_INCLUDES_PREFIX)
- rm -f dummy-hello.c
-
- dnl Make sure that the build system can handle non-ASCII characters
- dnl in environment variables to prevent it from breaking silently on
- dnl non-English systems.
- NONASCII=$'\241\241'
- AC_SUBST(NONASCII)
- fi
-fi
-
-dnl ========================================================
-dnl =
dnl = Static Build Options
dnl =
dnl ========================================================
MOZ_ARG_HEADER(Static build options)
if test -z "$MOZ_SYSTEM_ZLIB"; then
if test -n "$JS_SHARED_LIBRARY" -o -n "$MOZ_LINKER"; then
ZLIB_IN_MOZGLUE=1
@@ -4826,17 +4786,16 @@ COMPILE_CXXFLAGS=`echo \
$COMPILE_CXXFLAGS`
HOST_CFLAGS=`echo \
$HOST_CFLAGS`
HOST_CXXFLAGS=`echo \
$HOST_CXXFLAGS`
-AC_SUBST(_DEPEND_CFLAGS)
AC_SUBST(MOZ_SYSTEM_JPEG)
AC_SUBST(MOZ_SYSTEM_PNG)
AC_SUBST(MOZ_SYSTEM_BZ2)
AC_SUBST_LIST(MOZ_JPEG_CFLAGS)
AC_SUBST_LIST(MOZ_JPEG_LIBS)
AC_SUBST_LIST(MOZ_BZ2_CFLAGS)
AC_SUBST_LIST(MOZ_BZ2_LIBS)