747 748 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 749 if test "x$FLAGS_CPU" = xx86; then 750 $1_CFLAGS_CPU_JVM="-arch:IA32" 751 elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then 752 if test "x$DEBUG_LEVEL" != xrelease; then 753 # NOTE: This is probably redundant; -homeparams is default on 754 # non-release builds. 755 $1_CFLAGS_CPU_JVM="-homeparams" 756 fi 757 fi 758 fi 759 760 if test "x$TOOLCHAIN_TYPE" = xgcc; then 761 TOOLCHAIN_CHECK_COMPILER_VERSION(VERSION: 6, PREFIX: $2, IF_AT_LEAST: FLAGS_SETUP_GCC6_COMPILER_FLAGS($1)) 762 $1_TOOLCHAIN_CFLAGS="${$1_GCC6_CFLAGS}" 763 764 $1_WARNING_CFLAGS_JVM="-Wno-format-zero-length -Wtype-limits -Wuninitialized" 765 fi 766 767 # EXPORT to API 768 CFLAGS_JVM_COMMON="$ALWAYS_CFLAGS_JVM $ALWAYS_DEFINES_JVM $TOOLCHAIN_CFLAGS_JVM \ 769 $OS_CFLAGS $OS_CFLAGS_JVM $CFLAGS_OS_DEF_JVM $DEBUG_CFLAGS_JVM \ 770 $WARNING_CFLAGS $WARNING_CFLAGS_JVM $JVM_PICFLAG" 771 772 CFLAGS_JDK_COMMON="$ALWAYS_CFLAGS_JDK $ALWAYS_DEFINES_JDK $TOOLCHAIN_CFLAGS_JDK \ 773 $OS_CFLAGS $CFLAGS_OS_DEF_JDK $DEBUG_CFLAGS_JDK $DEBUG_OPTIONS_FLAGS_JDK \ 774 $WARNING_CFLAGS $WARNING_CFLAGS_JDK $DEBUG_SYMBOLS_CFLAGS_JDK" 775 776 # Use ${$2EXTRA_CFLAGS} to block EXTRA_CFLAGS to be added to build flags. 777 # (Currently we don't have any OPENJDK_BUILD_EXTRA_CFLAGS, but that might 778 # change in the future.) 779 780 CFLAGS_JDK_COMMON_CONLY="$TOOLCHAIN_CFLAGS_JDK_CONLY \ 781 $WARNING_CFLAGS_JDK_CONLY ${$2EXTRA_CFLAGS}" 782 CFLAGS_JDK_COMMON_CXXONLY="$ALWAYS_DEFINES_JDK_CXXONLY $TOOLCHAIN_CFLAGS_JDK_CXXONLY \ 783 $WARNING_CFLAGS_JDK_CXXONLY ${$2EXTRA_CXXFLAGS}" 784 785 $1_CFLAGS_JVM="${$1_DEFINES_CPU_JVM} ${$1_CFLAGS_CPU} ${$1_CFLAGS_CPU_JVM} ${$1_TOOLCHAIN_CFLAGS} ${$1_WARNING_CFLAGS_JVM}" 786 $1_CFLAGS_JDK="${$1_DEFINES_CPU_JDK} ${$1_CFLAGS_CPU} ${$1_CFLAGS_CPU_JDK} ${$1_TOOLCHAIN_CFLAGS}" 787 788 $2JVM_CFLAGS="$CFLAGS_JVM_COMMON ${$1_CFLAGS_JVM} ${$2EXTRA_CXXFLAGS}" 789 790 $2CFLAGS_JDKEXE="$CFLAGS_JDK_COMMON $CFLAGS_JDK_COMMON_CONLY ${$1_CFLAGS_JDK}" 791 $2CXXFLAGS_JDKEXE="$CFLAGS_JDK_COMMON $CFLAGS_JDK_COMMON_CXXONLY ${$1_CFLAGS_JDK}" 792 $2CFLAGS_JDKLIB="${$2CFLAGS_JDKEXE} $JDK_PICFLAG ${$1_CFLAGS_CPU_JDK_LIBONLY}" 793 $2CXXFLAGS_JDKLIB="${$2CXXFLAGS_JDKEXE} $JDK_PICFLAG ${$1_CFLAGS_CPU_JDK_LIBONLY}" 794 795 AC_SUBST($2JVM_CFLAGS) 796 AC_SUBST($2CFLAGS_JDKLIB) 797 AC_SUBST($2CFLAGS_JDKEXE) 798 AC_SUBST($2CXXFLAGS_JDKLIB) 799 AC_SUBST($2CXXFLAGS_JDKEXE) 800 ]) 801 802 # FLAGS_SETUP_GCC6_COMPILER_FLAGS([PREFIX]) 803 # Arguments: 804 # $1 - Prefix for each variable defined. 805 AC_DEFUN([FLAGS_SETUP_GCC6_COMPILER_FLAGS], 806 [ 807 # These flags are required for GCC 6 builds as undefined behaviour in OpenJDK code 808 # runs afoul of the more aggressive versions of these optimisations. 809 # Notably, value range propagation now assumes that the this pointer of C++ 810 # member functions is non-null. 811 NO_DELETE_NULL_POINTER_CHECKS_CFLAG="-fno-delete-null-pointer-checks" 812 dnl Argument check is disabled until FLAGS_COMPILER_CHECK_ARGUMENTS handles cross-compilation 813 dnl FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$NO_DELETE_NULL_POINTER_CHECKS_CFLAG -Werror], 814 dnl IF_FALSE: [NO_DELETE_NULL_POINTER_CHECKS_CFLAG=""]) 815 NO_LIFETIME_DSE_CFLAG="-fno-lifetime-dse" 816 dnl Argument check is disabled until FLAGS_COMPILER_CHECK_ARGUMENTS handles cross-compilation 817 dnl FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$NO_LIFETIME_DSE_CFLAG -Werror], 818 dnl IF_FALSE: [NO_LIFETIME_DSE_CFLAG=""]) 819 AC_MSG_NOTICE([GCC >= 6 detected; adding ${NO_DELETE_NULL_POINTER_CHECKS_CFLAG} and ${NO_LIFETIME_DSE_CFLAG}]) | 747 748 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 749 if test "x$FLAGS_CPU" = xx86; then 750 $1_CFLAGS_CPU_JVM="-arch:IA32" 751 elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then 752 if test "x$DEBUG_LEVEL" != xrelease; then 753 # NOTE: This is probably redundant; -homeparams is default on 754 # non-release builds. 755 $1_CFLAGS_CPU_JVM="-homeparams" 756 fi 757 fi 758 fi 759 760 if test "x$TOOLCHAIN_TYPE" = xgcc; then 761 TOOLCHAIN_CHECK_COMPILER_VERSION(VERSION: 6, PREFIX: $2, IF_AT_LEAST: FLAGS_SETUP_GCC6_COMPILER_FLAGS($1)) 762 $1_TOOLCHAIN_CFLAGS="${$1_GCC6_CFLAGS}" 763 764 $1_WARNING_CFLAGS_JVM="-Wno-format-zero-length -Wtype-limits -Wuninitialized" 765 fi 766 767 case $TOOLCHAIN_TYPE in 768 gcc) 769 $2NO_SPECULATIVE_CTI_CFLAGS="-mindirect-branch=thunk \ 770 -mfunction-return=thunk -mindirect-branch-register" 771 ;; 772 microsoft) 773 $2NO_SPECULATIVE_CTI_CFLAGS="-Qspectre" 774 ;; 775 *) 776 $2NO_SPECULATIVE_CTI_CFLAGS="" 777 ;; 778 esac 779 if test -n "${$2NO_SPECULATIVE_CTI_CFLAGS}"; then 780 FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [${$2NO_SPECULATIVE_CTI_CFLAGS}], 781 IF_FALSE: [ 782 AC_MSG_WARN([Speculative call mitigations not available with compiler version]) 783 $2NO_SPECULATIVE_CTI_CFLAGS="" 784 ] 785 ) 786 fi 787 AC_MSG_CHECKING([for speculative calls mitigation flags for $1]) 788 if test -n "${$2NO_SPECULATIVE_CTI_CFLAGS}"; then 789 AC_MSG_RESULT(${$2NO_SPECULATIVE_CTI_CFLAGS}) 790 else 791 AC_MSG_RESULT(no) 792 fi 793 794 # EXPORT to API 795 CFLAGS_JVM_COMMON="$ALWAYS_CFLAGS_JVM $ALWAYS_DEFINES_JVM $TOOLCHAIN_CFLAGS_JVM \ 796 $OS_CFLAGS $OS_CFLAGS_JVM $CFLAGS_OS_DEF_JVM $DEBUG_CFLAGS_JVM \ 797 $WARNING_CFLAGS $WARNING_CFLAGS_JVM $JVM_PICFLAG" 798 799 CFLAGS_JDK_COMMON="$ALWAYS_CFLAGS_JDK $ALWAYS_DEFINES_JDK $TOOLCHAIN_CFLAGS_JDK \ 800 $OS_CFLAGS $CFLAGS_OS_DEF_JDK $DEBUG_CFLAGS_JDK $DEBUG_OPTIONS_FLAGS_JDK \ 801 $WARNING_CFLAGS $WARNING_CFLAGS_JDK $DEBUG_SYMBOLS_CFLAGS_JDK" 802 803 # Use ${$2EXTRA_CFLAGS} to block EXTRA_CFLAGS to be added to build flags. 804 # (Currently we don't have any OPENJDK_BUILD_EXTRA_CFLAGS, but that might 805 # change in the future.) 806 807 CFLAGS_JDK_COMMON_CONLY="$TOOLCHAIN_CFLAGS_JDK_CONLY \ 808 $WARNING_CFLAGS_JDK_CONLY ${$2EXTRA_CFLAGS}" 809 CFLAGS_JDK_COMMON_CXXONLY="$ALWAYS_DEFINES_JDK_CXXONLY $TOOLCHAIN_CFLAGS_JDK_CXXONLY \ 810 $WARNING_CFLAGS_JDK_CXXONLY ${$2EXTRA_CXXFLAGS}" 811 812 # The jdk libraries always use the speculative calls mitigations, while it's 813 # optional for the JVM. 814 $1_CFLAGS_JVM="${$1_DEFINES_CPU_JVM} ${$1_CFLAGS_CPU} ${$1_CFLAGS_CPU_JVM} \ 815 ${$1_TOOLCHAIN_CFLAGS} ${$1_WARNING_CFLAGS_JVM}" 816 $1_CFLAGS_JDK="${$1_DEFINES_CPU_JDK} ${$1_CFLAGS_CPU} ${$1_CFLAGS_CPU_JDK} \ 817 ${$1_TOOLCHAIN_CFLAGS} ${$2NO_SPECULATIVE_CTI_CFLAGS}" 818 819 $2JVM_CFLAGS="$CFLAGS_JVM_COMMON ${$1_CFLAGS_JVM} ${$2EXTRA_CXXFLAGS}" 820 821 $2CFLAGS_JDKEXE="$CFLAGS_JDK_COMMON $CFLAGS_JDK_COMMON_CONLY ${$1_CFLAGS_JDK}" 822 $2CXXFLAGS_JDKEXE="$CFLAGS_JDK_COMMON $CFLAGS_JDK_COMMON_CXXONLY ${$1_CFLAGS_JDK}" 823 $2CFLAGS_JDKLIB="${$2CFLAGS_JDKEXE} $JDK_PICFLAG ${$1_CFLAGS_CPU_JDK_LIBONLY}" 824 $2CXXFLAGS_JDKLIB="${$2CXXFLAGS_JDKEXE} $JDK_PICFLAG ${$1_CFLAGS_CPU_JDK_LIBONLY}" 825 826 AC_SUBST($2JVM_CFLAGS) 827 AC_SUBST($2CFLAGS_JDKLIB) 828 AC_SUBST($2CFLAGS_JDKEXE) 829 AC_SUBST($2CXXFLAGS_JDKLIB) 830 AC_SUBST($2CXXFLAGS_JDKEXE) 831 AC_SUBST($2NO_SPECULATIVE_CTI_CFLAGS) 832 ]) 833 834 # FLAGS_SETUP_GCC6_COMPILER_FLAGS([PREFIX]) 835 # Arguments: 836 # $1 - Prefix for each variable defined. 837 AC_DEFUN([FLAGS_SETUP_GCC6_COMPILER_FLAGS], 838 [ 839 # These flags are required for GCC 6 builds as undefined behaviour in OpenJDK code 840 # runs afoul of the more aggressive versions of these optimisations. 841 # Notably, value range propagation now assumes that the this pointer of C++ 842 # member functions is non-null. 843 NO_DELETE_NULL_POINTER_CHECKS_CFLAG="-fno-delete-null-pointer-checks" 844 dnl Argument check is disabled until FLAGS_COMPILER_CHECK_ARGUMENTS handles cross-compilation 845 dnl FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$NO_DELETE_NULL_POINTER_CHECKS_CFLAG -Werror], 846 dnl IF_FALSE: [NO_DELETE_NULL_POINTER_CHECKS_CFLAG=""]) 847 NO_LIFETIME_DSE_CFLAG="-fno-lifetime-dse" 848 dnl Argument check is disabled until FLAGS_COMPILER_CHECK_ARGUMENTS handles cross-compilation 849 dnl FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$NO_LIFETIME_DSE_CFLAG -Werror], 850 dnl IF_FALSE: [NO_LIFETIME_DSE_CFLAG=""]) 851 AC_MSG_NOTICE([GCC >= 6 detected; adding ${NO_DELETE_NULL_POINTER_CHECKS_CFLAG} and ${NO_LIFETIME_DSE_CFLAG}]) |