aboutsummaryrefslogtreecommitdiff
path: root/common/autoconf/flags.m4
diff options
context:
space:
mode:
Diffstat (limited to 'common/autoconf/flags.m4')
-rw-r--r--common/autoconf/flags.m452
1 files changed, 36 insertions, 16 deletions
diff --git a/common/autoconf/flags.m4 b/common/autoconf/flags.m4
index 9c73e42..80544fa 100644
--- a/common/autoconf/flags.m4
+++ b/common/autoconf/flags.m4
@@ -393,17 +393,8 @@ AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK],
if test \( `echo ${$2CC_VER_STR} | $GREP -c 'LLVM'` -eq "0" \) -a ${$2CC_VER_NUM_MAJOR} -lt "9" ; then
$2CXXSTD_CXXFLAG="-std=gnu++98"
fi
-
- case $OPENJDK_TARGET_CPU_ARCH in
- x86 )
- LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS -fstack-protector"
- LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS -fstack-protector"
- ;;
- x86_64 )
- LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS -fstack-protector"
- LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS -fstack-protector"
- ;;
- esac
+ LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS -fstack-protector"
+ LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS -fstack-protector"
if test "x$OPENJDK_TARGET_OS" != xmacosx; then
LDFLAGS_JDK="$LDFLAGS_JDK -Wl,-z,relro"
LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS -Wl,-z,relro"
@@ -455,12 +446,13 @@ AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK],
# Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build.
#
+ FDLIBM_CFLAGS=""
# Setup compiler/platform specific flags to CFLAGS_JDK,
# CXXFLAGS_JDK and CCXXFLAGS_JDK (common to C and CXX?)
if test "x$TOOLCHAIN_TYPE" = xgcc; then
# these options are used for both C and C++ compiles
CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Wall -Wno-parentheses -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \
- -pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
+ -pipe -fstack-protector -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
case $OPENJDK_TARGET_CPU_ARCH in
arm )
# on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing
@@ -469,16 +461,43 @@ AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK],
ppc )
# on ppc we don't prevent gcc to omit frame pointer nor strict-aliasing
;;
- x86 )
- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer -fstack-protector"
- CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing -fstack-protector"
- ;;
* )
CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer"
CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing"
;;
esac
TOOLCHAIN_CHECK_COMPILER_VERSION(6, FLAGS_SETUP_GCC6_COMPILER_FLAGS)
+
+ # Check that the compiler supports -ffp-contract=off flag
+ # Set FDLIBM_CFLAGS to -ffp-contract=off if it does.
+ # For GCC < 4.6, on x86, x86_64 and ppc check for
+ # -mno-fused-madd and -fno-strict-aliasing. If they exist,
+ # use them as a substitute for -ffp-contract=off.
+ #
+ # These flags are required for GCC-based builds of
+ # fdlibm with optimization without losing precision.
+ # Notably, -ffp-contract=off needs to be added for GCC >= 4.6,
+ # -mno-fused-madd -fno-strict-aliasing for GCC < 4.6
+ COMPILER_FP_CONTRACT_OFF_FLAG="-ffp-contract=off"
+ FLAGS_CXX_COMPILER_CHECK_ARGUMENTS([[$]COMPILER_FP_CONTRACT_OFF_FLAG -Werror],
+ [], [COMPILER_FP_CONTRACT_OFF_FLAG=""])
+ if test "x$COMPILER_FP_CONTRACT_OFF_FLAG" = x; then
+ if test "$OPENJDK_TARGET_CPU_ARCH" = "x86" ||
+ test "$OPENJDK_TARGET_CPU_ARCH" = "x86_64" ||
+ test "$OPENJDK_TARGET_CPU_ARCH" = "ppc"; then
+ M_NO_FUSED_ADD_FLAG="-mno-fused-madd"
+ FLAGS_CXX_COMPILER_CHECK_ARGUMENTS([[$]M_NO_FUSED_ADD_FLAG -Werror],
+ [], [M_NO_FUSED_ADD_FLAG=""])
+ NO_STRICT_ALIASING_FLAG="-fno-strict-aliasing"
+ FLAGS_CXX_COMPILER_CHECK_ARGUMENTS([[$]NO_STRICT_ALIASING_FLAG -Werror],
+ [], [NO_STRICT_ALIASING_FLAG=""])
+ if test "x$M_NO_FUSED_ADD_FLAG" != "x" && test "x$NO_STRICT_ALIASING_FLAG" != "x"; then
+ FDLIBM_CFLAGS="$M_NO_FUSED_ADD_FLAG $NO_STRICT_ALIASING_FLAG"
+ fi
+ fi
+ else
+ FDLIBM_CFLAGS="$COMPILER_FP_CONTRACT_OFF_FLAG"
+ fi
elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS"
if test "x$OPENJDK_TARGET_CPU_ARCH" = xx86; then
@@ -510,6 +529,7 @@ AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK],
-D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB"
fi
fi
+ AC_SUBST(FDLIBM_CFLAGS)
###############################################################################