diff options
-rw-r--r-- | config_host.mk.in | 5 | ||||
-rw-r--r-- | configure.in | 81 | ||||
-rw-r--r-- | solenv/gbuild/platform/WNT_INTEL_GCC.mk | 10 | ||||
-rw-r--r-- | solenv/gbuild/platform/com_GCC_defs.mk | 25 | ||||
-rw-r--r-- | solenv/gbuild/platform/unxgcc.mk | 10 |
5 files changed, 110 insertions, 21 deletions
diff --git a/config_host.mk.in b/config_host.mk.in index 64c62d8b4a35..0357ffb760f1 100644 --- a/config_host.mk.in +++ b/config_host.mk.in @@ -189,6 +189,11 @@ export GUI_FOR_BUILD=@GUI_FOR_BUILD@ export GXX_INCLUDE_PATH=@GXX_INCLUDE_PATH@ export HAVE_CXX0X=@HAVE_CXX0X@ export HAVE_GCC_AVX=@HAVE_GCC_AVX@ +export HAVE_GCC_GGDB2=@HAVE_GCC_GGDB2@ +export HAVE_GCC_FINLINE_LIMIT=@HAVE_GCC_FINLINE_LIMIT@ +export HAVE_GCC_FNO_INLINE=@HAVE_GCC_FNO_INLINE@ +export HAVE_GCC_FNO_DEFAULT_INLINE=@HAVE_GCC_FNO_DEFAULT_INLINE@ +export HAVE_GCC_FNO_ENFORCE_EH_SPECS=@HAVE_GCC_FNO_ENFORCE_EH_SPECS@ export HAVE_GCC_NO_LONG_DOUBLE=@HAVE_GCC_NO_LONG_DOUBLE@ export HAVE_GCC_VISIBILITY_BROKEN=@HAVE_GCC_VISIBILITY_BROKEN@ export HAVE_GCC_VISIBILITY_FEATURE=@HAVE_GCC_VISIBILITY_FEATURE@ diff --git a/configure.in b/configure.in index 7633128b8845..50e15a35b992 100644 --- a/configure.in +++ b/configure.in @@ -2540,6 +2540,10 @@ dnl =================================================================== dnl Is it actually Clang? dnl =================================================================== +COM_GCC_IS_CLANG= +HAVE_GCC_GGDB2= +HAVE_GCC_FINLINE_LIMIT= +HAVE_GCC_FNO_INLINE= if test "$GCC" = "yes"; then AC_MSG_CHECKING([whether GCC is actually Clang]) AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ @@ -2551,8 +2555,48 @@ if test "$GCC" = "yes"; then [AC_MSG_RESULT([yes]) COM_GCC_IS_CLANG=TRUE], [AC_MSG_RESULT([no])]) + + # check various GCC options that Clang does not support now but maybe + # will somewhen in the future, check them even for GCC, so that the flags + # are set + + AC_MSG_CHECKING([whether $CC supports -ggdb2]) + save_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -Werror -ggdb2" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[]) + CFLAGS=$save_CFLAGS + if test "$HAVE_GCC_GGDB2" = "TRUE"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + + AC_MSG_CHECKING([whether $CC supports -finline-limit=0]) + save_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -Werror -finline-limit=0" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FINLINE_LIMIT=TRUE ],[]) + CFLAGS=$save_CFLAGS + if test "$HAVE_GCC_FINLINE_LIMIT" = "TRUE"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + + AC_MSG_CHECKING([whether $CC supports -fno-inline]) + save_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -Werror -fno-inline" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_INLINE=TRUE ],[]) + CFLAGS=$save_CFLAGS + if test "$HAVE_GCC_FNO_INLINE" = "TRUE"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi fi AC_SUBST(COM_GCC_IS_CLANG) +AC_SUBST(HAVE_GCC_GGDB2) +AC_SUBST(HAVE_GCC_FINLINE_LIMIT) +AC_SUBST(HAVE_GCC_FNO_INLINE) HAVE_LD_BSYMBOLIC_FUNCTIONS= if test "$GCC" = "yes"; then @@ -4696,6 +4740,43 @@ fi AC_SUBST(HAVE_SFINAE_ANONYMOUS_BROKEN) dnl =================================================================== +dnl Clang++ tests +dnl =================================================================== + +HAVE_GCC_FNO_DEFAULT_INLINE= +HAVE_GCC_FNO_ENFORCE_EH_SPECS= +if test "$GCC" = "yes"; then + AC_MSG_CHECKING([whether $CXX supports -fno-default-inline]) + AC_LANG_PUSH([C++]) + save_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CFLAGS -Werror -fno-default-inline" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_DEFAULT_INLINE=TRUE ],[]) + CXXFLAGS=$save_CXXFLAGS + AC_LANG_POP([C++]) + if test "$HAVE_GCC_FNO_DEFAULT_INLINE" = "TRUE"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + + AC_MSG_CHECKING([whether $CXX supports -fno-enforce-eh-specs]) + AC_LANG_PUSH([C++]) + save_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[]) + CXXFLAGS=$save_CXXFLAGS + AC_LANG_POP([C++]) + if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi +fi +AC_SUBST(HAVE_GCC_FNO_DEFAULT_INLINE) +AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS) + + +dnl =================================================================== dnl allocator dnl =================================================================== AC_MSG_CHECKING([which memory allocator to use]) diff --git a/solenv/gbuild/platform/WNT_INTEL_GCC.mk b/solenv/gbuild/platform/WNT_INTEL_GCC.mk index 305abf213ace..741d45f5c01a 100644 --- a/solenv/gbuild/platform/WNT_INTEL_GCC.mk +++ b/solenv/gbuild/platform/WNT_INTEL_GCC.mk @@ -106,16 +106,6 @@ ifeq ($(MINGW_GCCLIB_EH),YES) gb_LinkTarget_LDFLAGS += -shared-libgcc endif -# clang does not know -ggdb2 -ifneq ($(COM_GCC_IS_CLANG),TRUE) -GGDB2=-ggdb2 -else -GGDB2=-g2 -endif - -gb_DEBUG_CFLAGS := $(GGDB2) -finline-limit=0 -fno-inline -gb_DEBUG_CXXFLAGS := -fno-default-inline - gb_STDLIBS := \ mingwthrd \ mingw32 \ diff --git a/solenv/gbuild/platform/com_GCC_defs.mk b/solenv/gbuild/platform/com_GCC_defs.mk index cf4dcab24776..d84ab649e49d 100644 --- a/solenv/gbuild/platform/com_GCC_defs.mk +++ b/solenv/gbuild/platform/com_GCC_defs.mk @@ -93,7 +93,7 @@ gb_LinkTarget_EXCEPTIONFLAGS := \ ifeq ($(gb_PRODUCT),$(true)) # Clang doesn't have this option -ifneq ($(COM_GCC_IS_CLANG),TRUE) +ifeq ($(HAVE_GCC_FNO_ENFORCE_EH_SPECS),TRUE) gb_LinkTarget_EXCEPTIONFLAGS += \ -fno-enforce-eh-specs endif @@ -112,6 +112,29 @@ gb_COMPILEROPTFLAGS := $(gb_COMPILERDEFAULTOPTFLAGS) endif gb_COMPILERNOOPTFLAGS := -O0 +# Clang does not know -ggdb2 or some other options +ifeq ($(HAVE_GCC_GGDB2),TRUE) +GGDB2=-ggdb2 +else +GGDB2=-g2 +endif + +ifeq ($(HAVE_GCC_FINLINE_LIMIT),TRUE) +FINLINE_LIMIT0=-finline-limit=0 +endif + +ifeq ($(HAVE_GCC_FNO_INLINE),TRUE) +FNO_INLINE=-fno-inline +endif + +ifeq ($(HAVE_GCC_FNO_DEFAULT_INLINE),TRUE) +FNO_DEFAULT_INLINE=-fno-default-inline +endif + +gb_DEBUG_CFLAGS := $(GGDB2) $(FINLINE_LIMIT0) $(FNO_INLINE) +gb_DEBUG_CXXFLAGS := $(FNO_DEFAULT_INLINE) + + gb_LinkTarget_INCLUDE := $(filter-out %/stl, $(subst -I. , ,$(SOLARINC))) gb_LinkTarget_INCLUDE_STL := $(filter %/stl, $(subst -I. , ,$(SOLARINC))) diff --git a/solenv/gbuild/platform/unxgcc.mk b/solenv/gbuild/platform/unxgcc.mk index 8674cded4d27..2681a33d6178 100644 --- a/solenv/gbuild/platform/unxgcc.mk +++ b/solenv/gbuild/platform/unxgcc.mk @@ -181,16 +181,6 @@ gb_COMPILEROPTFLAGS := $(gb_COMPILERDEFAULTOPTFLAGS) gb_LINKEROPTFLAGS := -Wl,-O1 endif -# clang does not know -ggdb2 -ifneq ($(COM_GCC_IS_CLANG),TRUE) -GGDB2=-ggdb2 -else -GGDB2=-g2 -endif - -gb_DEBUG_CFLAGS := $(GGDB2) -finline-limit=0 -fno-inline -gb_DEBUG_CXXFLAGS := -fno-default-inline - gb_COMPILERNOOPTFLAGS := -O0 # LinkTarget class |