common/autoconf/toolchain.m4

Print this page
rev 992 : 8032045: Enable compiler and linker safety switches for debug builds
Reviewed-by: duke


 657   else
 658     HOTSPOT_CXX="$CXX"
 659     HOTSPOT_LD="$LD"
 660   fi
 661   AC_SUBST(HOTSPOT_CXX)
 662   AC_SUBST(HOTSPOT_LD)
 663 
 664   if test  "x$TOOLCHAIN_TYPE" = xclang; then
 665     USE_CLANG=true
 666   fi
 667   AC_SUBST(USE_CLANG)
 668 
 669   # LDEXE is the linker to use, when creating executables. Not really used.
 670   # FIXME: These should just be removed!
 671   LDEXE="$LD"
 672   LDEXECXX="$LDCXX"
 673   AC_SUBST(LDEXE)
 674   AC_SUBST(LDEXECXX)
 675 ])
 676 


























































 677 # Do some additional checks on the detected tools.
 678 AC_DEFUN_ONCE([TOOLCHAIN_MISC_CHECKS],
 679 [
 680   # The package path is used only on macosx?
 681   # FIXME: clean this up, and/or move it elsewhere.
 682   PACKAGE_PATH=/opt/local
 683   AC_SUBST(PACKAGE_PATH)
 684 
 685   # Check for extra potential brokenness.
 686   if test  "x$TOOLCHAIN_TYPE" = xmicrosoft; then
 687     # On Windows, double-check that we got the right compiler.
 688     CC_VERSION_OUTPUT=`$CC 2>&1 | $HEAD -n 1 | $TR -d '\r'`
 689     COMPILER_CPU_TEST=`$ECHO $CC_VERSION_OUTPUT | $SED -n "s/^.* \(.*\)$/\1/p"`
 690     if test "x$OPENJDK_TARGET_CPU" = "xx86"; then
 691       if test "x$COMPILER_CPU_TEST" != "x80x86"; then
 692         AC_MSG_ERROR([Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "80x86".])
 693       fi
 694     elif test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
 695       if test "x$COMPILER_CPU_TEST" != "xx64"; then
 696         AC_MSG_ERROR([Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "x64".])
 697       fi
 698     fi
 699   fi
 700 
 701   if test "x$TOOLCHAIN_TYPE" = xgcc; then
 702     # If this is a --hash-style=gnu system, use --hash-style=both, why?
 703     HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'`
 704     # This is later checked when setting flags.















 705   fi
 706 
 707   # Check for broken SuSE 'ld' for which 'Only anonymous version tag is allowed 
 708   # in executable.'
 709   USING_BROKEN_SUSE_LD=no
 710   if test "x$OPENJDK_TARGET_OS" = xlinux && test "x$TOOLCHAIN_TYPE" = xgcc; then
 711     AC_MSG_CHECKING([for broken SuSE 'ld' which only understands anonymous version tags in executables])
 712     echo "SUNWprivate_1.1 { local: *; };" > version-script.map
 713     echo "int main() { }" > main.c
 714     if $CXX -Xlinker -version-script=version-script.map main.c 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD; then
 715       AC_MSG_RESULT(no)
 716       USING_BROKEN_SUSE_LD=no
 717     else
 718       AC_MSG_RESULT(yes)
 719       USING_BROKEN_SUSE_LD=yes
 720     fi
 721     rm -rf version-script.map main.c a.out
 722   fi
 723   AC_SUBST(USING_BROKEN_SUSE_LD)
 724 ])
 725 
 726 # Setup the JTReg Regression Test Harness.
 727 AC_DEFUN_ONCE([TOOLCHAIN_SETUP_JTREG],
 728 [
 729   AC_ARG_WITH(jtreg, [AS_HELP_STRING([--with-jtreg],
 730       [Regression Test Harness @<:@probed@:>@])],
 731       [],
 732       [with_jtreg=no])
 733 




 657   else
 658     HOTSPOT_CXX="$CXX"
 659     HOTSPOT_LD="$LD"
 660   fi
 661   AC_SUBST(HOTSPOT_CXX)
 662   AC_SUBST(HOTSPOT_LD)
 663 
 664   if test  "x$TOOLCHAIN_TYPE" = xclang; then
 665     USE_CLANG=true
 666   fi
 667   AC_SUBST(USE_CLANG)
 668 
 669   # LDEXE is the linker to use, when creating executables. Not really used.
 670   # FIXME: These should just be removed!
 671   LDEXE="$LD"
 672   LDEXECXX="$LDCXX"
 673   AC_SUBST(LDEXE)
 674   AC_SUBST(LDEXECXX)
 675 ])
 676 
 677 # TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE],
 678 #                                    [RUN-IF-FALSE])
 679 # ------------------------------------------------------------
 680 # Check that the c and c++ compilers support an argument
 681 AC_DEFUN([TOOLCHAIN_COMPILER_CHECK_ARGUMENTS],
 682 [
 683   AC_MSG_CHECKING([if compiler supports "$1"])
 684   supports=yes
 685 
 686   saved_cflags="$CFLAGS"
 687   CFLAGS="$CFLAGS $1"
 688   AC_LANG_PUSH([C])
 689   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [], 
 690       [supports=no])
 691   AC_LANG_POP([C])
 692   CFLAGS="$saved_cflags"
 693 
 694   saved_cxxflags="$CXXFLAGS"
 695   CXXFLAGS="$CXXFLAG $1"
 696   AC_LANG_PUSH([C++])
 697   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [], 
 698       [supports=no])
 699   AC_LANG_POP([C++])
 700   CXXFLAGS="$saved_cxxflags"
 701 
 702   AC_MSG_RESULT([$supports])
 703   if test "x$supports" = "xyes" ; then
 704     m4_ifval([$2], [$2], [:])
 705   else
 706     m4_ifval([$3], [$3], [:])
 707   fi
 708 ])
 709 
 710 # TOOLCHAIN_LINKER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE],
 711 #                                    [RUN-IF-FALSE])
 712 # ------------------------------------------------------------
 713 # Check that the linker support an argument
 714 AC_DEFUN([TOOLCHAIN_LINKER_CHECK_ARGUMENTS],
 715 [
 716   AC_MSG_CHECKING([if linker supports "$1"])
 717   supports=yes
 718 
 719   saved_ldflags="$LDFLAGS"
 720   LDFLAGS="$LDFLAGS -Wl,`$ECHO -n "$1" | tr ' ' ','`"
 721   AC_LANG_PUSH([C])
 722   AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])], 
 723       [], [supports=no])
 724   AC_LANG_POP([C])
 725   LDFLAGS="$saved_ldflags"
 726 
 727   AC_MSG_RESULT([$supports])
 728   if test "x$supports" = "xyes" ; then
 729     m4_ifval([$2], [$2], [:])
 730   else
 731     m4_ifval([$3], [$3], [:])
 732   fi
 733 ])
 734 
 735 # Do some additional checks on the detected tools.
 736 AC_DEFUN_ONCE([TOOLCHAIN_MISC_CHECKS],
 737 [
 738   # The package path is used only on macosx?
 739   # FIXME: clean this up, and/or move it elsewhere.
 740   PACKAGE_PATH=/opt/local
 741   AC_SUBST(PACKAGE_PATH)
 742 
 743   # Check for extra potential brokenness.
 744   if test  "x$TOOLCHAIN_TYPE" = xmicrosoft; then
 745     # On Windows, double-check that we got the right compiler.
 746     CC_VERSION_OUTPUT=`$CC 2>&1 | $HEAD -n 1 | $TR -d '\r'`
 747     COMPILER_CPU_TEST=`$ECHO $CC_VERSION_OUTPUT | $SED -n "s/^.* \(.*\)$/\1/p"`
 748     if test "x$OPENJDK_TARGET_CPU" = "xx86"; then
 749       if test "x$COMPILER_CPU_TEST" != "x80x86"; then
 750         AC_MSG_ERROR([Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "80x86".])
 751       fi
 752     elif test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
 753       if test "x$COMPILER_CPU_TEST" != "xx64"; then
 754         AC_MSG_ERROR([Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "x64".])
 755       fi
 756     fi
 757   fi
 758 
 759   if test "x$TOOLCHAIN_TYPE" = xgcc; then
 760     # If this is a --hash-style=gnu system, use --hash-style=both, why?
 761     HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'`
 762     # This is later checked when setting flags.
 763 
 764     # "-Og" suppported for GCC 4.8 and later
 765     TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([-Og],
 766       [HAS_CFLAG_OPTIMIZE_DEBUG=true],
 767       [HAS_CFLAG_OPTIMIZE_DEBUG=false])
 768     
 769     # "-z relro" supported in GNU binutils 2.17 and later
 770     TOOLCHAIN_LINKER_CHECK_ARGUMENTS([-z relro],
 771       [HAS_LINKER_RELRO=true],
 772       [HAS_LINKER_RELRO=false])
 773 
 774     # "-z now" supported in GNU binutils 2.11 and later
 775     TOOLCHAIN_LINKER_CHECK_ARGUMENTS([-z now],
 776       [HAS_LINKER_NOW=true],
 777       [HAS_LINKER_NOW=false])
 778   fi
 779 
 780   # Check for broken SuSE 'ld' for which 'Only anonymous version tag is allowed 
 781   # in executable.'
 782   USING_BROKEN_SUSE_LD=no
 783   if test "x$OPENJDK_TARGET_OS" = xlinux && test "x$TOOLCHAIN_TYPE" = xgcc; then
 784     AC_MSG_CHECKING([for broken SuSE 'ld' which only understands anonymous version tags in executables])
 785     $ECHO "SUNWprivate_1.1 { local: *; };" > version-script.map
 786     $ECHO "int main() { }" > main.c
 787     if $CXX -Xlinker -version-script=version-script.map main.c 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD; then
 788       AC_MSG_RESULT(no)
 789       USING_BROKEN_SUSE_LD=no
 790     else
 791       AC_MSG_RESULT(yes)
 792       USING_BROKEN_SUSE_LD=yes
 793     fi
 794     rm -rf version-script.map main.c a.out
 795   fi
 796   AC_SUBST(USING_BROKEN_SUSE_LD)
 797 ])
 798 
 799 # Setup the JTReg Regression Test Harness.
 800 AC_DEFUN_ONCE([TOOLCHAIN_SETUP_JTREG],
 801 [
 802   AC_ARG_WITH(jtreg, [AS_HELP_STRING([--with-jtreg],
 803       [Regression Test Harness @<:@probed@:>@])],
 804       [],
 805       [with_jtreg=no])
 806