Bug 1471556 - Support mingw clang in configure scripts. r=glandium
MozReview-Commit-ID: GKLbHvYgXnL
--- a/js/src/old-configure.in
+++ b/js/src/old-configure.in
@@ -446,18 +446,22 @@ if test "$GNU_CC"; then
# symbols for shared objects in some cases.
if test -z "$MOZ_NO_WLZDEFS"; then
# Don't allow undefined symbols in libraries
DSO_LDOPTS="$DSO_LDOPTS -Wl,-z,defs"
fi
fi
WARNINGS_AS_ERRORS='-Werror'
DSO_CFLAGS=''
- DSO_PIC_CFLAGS='-fPIC'
- ASFLAGS="$ASFLAGS -fPIC"
+
+ if test "$OS_ARCH" != "WINNT"; then
+ DSO_PIC_CFLAGS='-fPIC'
+ ASFLAGS="$ASFLAGS -fPIC"
+ fi
+
AC_MSG_CHECKING([for --noexecstack option to as])
_SAVE_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -Wa,--noexecstack"
AC_TRY_COMPILE(,,AC_MSG_RESULT([yes])
[ASFLAGS="$ASFLAGS -Wa,--noexecstack"],
AC_MSG_RESULT([no]))
CFLAGS=$_SAVE_CFLAGS
AC_MSG_CHECKING([for -z noexecstack option to ld])
@@ -643,24 +647,30 @@ case "$target" in
CXX="$CXX -mwindows"
CPP="$CPP -mwindows"
CFLAGS="$CFLAGS -mms-bitfields"
CXXFLAGS="$CXXFLAGS -mms-bitfields"
DSO_LDOPTS='-shared'
MKSHLIB='$(CXX) $(DSO_LDOPTS) -o $@'
MKCSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
RC='$(WINDRES)'
- # Use static libgcc and libstdc++
- LDFLAGS="$LDFLAGS -static"
# Use temp file for windres (bug 213281)
RCFLAGS='-O coff --use-temp-file'
# mingw doesn't require kernel32, user32, and advapi32 explicitly
LIBS="$LIBS -lusp10 -lgdi32 -lwinmm -lwsock32"
MOZ_FIX_LINK_PATHS=
+ if test -z "$CLANG_CC"; then
+ # Use static libgcc and libstdc++
+ LDFLAGS="$LDFLAGS -static"
+ else
+ # Silence problematic clang warnings
+ CXXFLAGS="$CXXFLAGS -Wno-incompatible-ms-struct"
+ fi
+
MOZ_OPTIMIZE_FLAGS="-O2"
WIN32_CONSOLE_EXE_LDFLAGS=-mconsole
WIN32_GUI_EXE_LDFLAGS=-mwindows
else
TARGET_COMPILER_ABI=msvc
HOST_CC='$(CC)'
HOST_CXX='$(CXX)'
@@ -805,17 +815,17 @@ case "$target" in
MOZ_USER_DIR="Mozilla"
case "$host_os" in
cygwin*|msvc*|mks*)
AC_MSG_ERROR([Using a Cygwin build environment is unsupported. Configure cannot check for presence of necessary headers. Please upgrade to MozillaBuild; see https://developer.mozilla.org/en/Windows_Build_Prerequisites.])
;;
esac
- if test -n "$GNU_CC"; then
+ if test -n "$GNU_CC" -a -z "$CLANG_CC"; then
CFLAGS="$CFLAGS -fno-keep-inline-dllexport"
CXXFLAGS="$CXXFLAGS -fno-keep-inline-dllexport"
fi
case "$target" in
i*86-*)
if test -n "$GNU_CC"; then
CFLAGS="$CFLAGS -mstackrealign"
--- a/old-configure.in
+++ b/old-configure.in
@@ -531,18 +531,22 @@ if test "$GNU_CC"; then
SSE2_FLAGS="-msse2"
SSSE3_FLAGS="-mssse3"
# FIXME: Let us build with strict aliasing. bug 414641.
CFLAGS="$CFLAGS -fno-strict-aliasing"
MKSHLIB='$(CXX) $(COMPUTED_CXX_LDFLAGS) $(PGO_CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-h,$(DSO_SONAME) -o $@'
MKCSHLIB='$(CC) $(COMPUTED_C_LDFLAGS) $(PGO_CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-h,$(DSO_SONAME) -o $@'
WARNINGS_AS_ERRORS='-Werror'
DSO_CFLAGS=''
- DSO_PIC_CFLAGS='-fPIC'
- ASFLAGS="$ASFLAGS -fPIC"
+
+ if test "$OS_ARCH" != "WINNT" -o -z "$CLANG_CC"; then
+ DSO_PIC_CFLAGS='-fPIC'
+ ASFLAGS="$ASFLAGS -fPIC"
+ fi
+
AC_MSG_CHECKING([for --noexecstack option to as])
_SAVE_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -Wa,--noexecstack"
AC_TRY_COMPILE(,,AC_MSG_RESULT([yes])
[ASFLAGS="$ASFLAGS -Wa,--noexecstack"],
AC_MSG_RESULT([no]))
CFLAGS=$_SAVE_CFLAGS
AC_MSG_CHECKING([for -z noexecstack option to ld])
@@ -851,34 +855,40 @@ case "$target" in
CXX="$CXX -mwindows"
CPP="$CPP -mwindows"
CFLAGS="$CFLAGS -mms-bitfields"
CXXFLAGS="$CXXFLAGS -mms-bitfields"
DSO_LDOPTS='-shared'
MKSHLIB='$(CXX) $(DSO_LDOPTS) -o $@'
MKCSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
RC='$(WINDRES)'
- # Use static libgcc and libstdc++
- LDFLAGS="$LDFLAGS -static"
# Use temp file for windres (bug 213281)
RCFLAGS='-O coff --use-temp-file'
# mingw doesn't require kernel32, user32, and advapi32 explicitly
LIBS="$LIBS -luuid -lusp10 -lgdi32 -lwinmm -lwsock32 -luserenv -lsecur32"
MOZ_FIX_LINK_PATHS=
MOZ_OPTIMIZE_FLAGS="-O1"
WIN32_CONSOLE_EXE_LDFLAGS=-mconsole
WIN32_GUI_EXE_LDFLAGS=-mwindows
- # GCC/binutils can't link to a function if we try to include dllexport function
- # in the same library as dllimport caller. To work around it, we build NSPR
- # and NSS with -mnop-fun-dllimport flag. The drawback of this solution is that
- # function thunks need to be generated for cross-DLL calls.
- MOZ_FOLD_LIBS_FLAGS="-mnop-fun-dllimport"
+ if test -z "$CLANG_CC"; then
+ # Use static libgcc and libstdc++
+ LDFLAGS="$LDFLAGS -static"
+
+ # GCC/binutils can't link to a function if we try to include dllexport function
+ # in the same library as dllimport caller. To work around it, we build NSPR
+ # and NSS with -mnop-fun-dllimport flag. The drawback of this solution is that
+ # function thunks need to be generated for cross-DLL calls.
+ MOZ_FOLD_LIBS_FLAGS="-mnop-fun-dllimport"
+ else
+ # Silence problematic clang warnings
+ CXXFLAGS="$CXXFLAGS -Wno-incompatible-ms-struct"
+ fi
else
TARGET_COMPILER_ABI=msvc
if test "$AS_BIN"; then
AS="$(basename "$AS_BIN")"
fi
AR='lib'
AR_FLAGS='-NOLOGO -OUT:$@'
AR_EXTRACT=
@@ -1049,17 +1059,17 @@ case "$target" in
MOZ_USER_DIR="Mozilla"
case "$host_os" in
cygwin*|msvc*|mks*)
AC_MSG_ERROR([Using a Cygwin build environment is unsupported. Configure cannot check for presence of necessary headers. Please upgrade to MozillaBuild; see https://developer.mozilla.org/en/Windows_Build_Prerequisites.])
;;
esac
- if test -n "$GNU_CC"; then
+ if test -n "$GNU_CC" -a -z "$CLANG_CC"; then
CFLAGS="$CFLAGS -fno-keep-inline-dllexport"
CXXFLAGS="$CXXFLAGS -fno-keep-inline-dllexport"
fi
case "$target" in
i*86-*)
if test -n "$GNU_CC"; then
CFLAGS="$CFLAGS -mstackrealign"