42 VALID_TOOLCHAINS_macosx="gcc clang" 43 VALID_TOOLCHAINS_aix="xlc" 44 VALID_TOOLCHAINS_windows="microsoft" 45 46 # Toolchain descriptions 47 TOOLCHAIN_DESCRIPTION_clang="clang/LLVM" 48 TOOLCHAIN_DESCRIPTION_gcc="GNU Compiler Collection" 49 TOOLCHAIN_DESCRIPTION_microsoft="Microsoft Visual Studio" 50 TOOLCHAIN_DESCRIPTION_solstudio="Oracle Solaris Studio" 51 TOOLCHAIN_DESCRIPTION_xlc="IBM XL C/C++" 52 53 # Minimum supported versions, empty means unspecified 54 TOOLCHAIN_MINIMUM_VERSION_clang="3.2" 55 TOOLCHAIN_MINIMUM_VERSION_gcc="4.3" 56 TOOLCHAIN_MINIMUM_VERSION_microsoft="" 57 TOOLCHAIN_MINIMUM_VERSION_solstudio="5.12" 58 TOOLCHAIN_MINIMUM_VERSION_xlc="" 59 60 # Prepare the system so that TOOLCHAIN_CHECK_COMPILER_VERSION can be called. 61 # Must have CC_VERSION_NUMBER and CXX_VERSION_NUMBER. 62 AC_DEFUN([TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS], 63 [ 64 if test "x$CC_VERSION_NUMBER" != "x$CXX_VERSION_NUMBER"; then 65 AC_MSG_WARN([C and C++ compiler has different version numbers, $CC_VERSION_NUMBER vs $CXX_VERSION_NUMBER.]) 66 AC_MSG_WARN([This typically indicates a broken setup, and is not supported]) 67 fi 68 69 # We only check CC_VERSION_NUMBER since we assume CXX_VERSION_NUMBER is equal. 70 if [ [[ "$CC_VERSION_NUMBER" =~ (.*\.){3} ]] ]; then 71 AC_MSG_WARN([C compiler version number has more than three parts (X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong.]) 72 fi 73 74 if [ [[ "$CC_VERSION_NUMBER" =~ [0-9]{6} ]] ]; then 75 AC_MSG_WARN([C compiler version number has a part larger than 99999: $CC_VERSION_NUMBER. Comparisons might be wrong.]) 76 fi 77 78 COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "$CC_VERSION_NUMBER"` 79 ]) 80 81 # Check if the configured compiler (C and C++) is of a specific version or 82 # newer. TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS must have been called before. 83 # 84 # Arguments: 85 # VERSION: The version string to check against the found version 86 # IF_AT_LEAST: block to run if the compiler is at least this version (>=) 87 # IF_OLDER_THAN: block to run if the compiler is older than this version (<) 88 BASIC_DEFUN_NAMED([TOOLCHAIN_CHECK_COMPILER_VERSION], 89 [*VERSION IF_AT_LEAST IF_OLDER_THAN], [$@], 90 [ 91 # Need to assign to a variable since m4 is blocked from modifying parts in []. 92 REFERENCE_VERSION=ARG_VERSION 93 94 if [ [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ]; then 95 AC_MSG_ERROR([Internal error: Cannot compare to ARG_VERSION, only three parts (X.Y.Z) is supported]) 96 fi 97 98 if [ [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ]; then 99 AC_MSG_ERROR([Internal error: Cannot compare to ARG_VERSION, only parts < 99999 is supported]) 100 fi 101 102 # Version comparison method inspired by http://stackoverflow.com/a/24067243 103 COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "$REFERENCE_VERSION"` 104 105 if test $COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then 106 : 107 ARG_IF_AT_LEAST 108 else 109 : 110 ARG_IF_OLDER_THAN 111 fi 112 ]) 113 114 # Setup a number of variables describing how native output files are 115 # named on this platform/toolchain. 116 AC_DEFUN([TOOLCHAIN_SETUP_FILENAME_PATTERNS], 117 [ 118 # Define filename patterns 119 if test "x$OPENJDK_TARGET_OS" = xwindows; then 120 LIBRARY_PREFIX= 121 SHARED_LIBRARY_SUFFIX='.dll' 122 STATIC_LIBRARY_SUFFIX='.lib' 123 SHARED_LIBRARY='[$]1.dll' 124 STATIC_LIBRARY='[$]1.lib' 125 OBJ_SUFFIX='.obj' 791 # find the build compilers in the tools dir, if needed. 792 BASIC_REQUIRE_PROGS(BUILD_CC, [cl cc gcc]) 793 BASIC_FIXUP_EXECUTABLE(BUILD_CC) 794 BASIC_REQUIRE_PROGS(BUILD_CXX, [cl CC g++]) 795 BASIC_FIXUP_EXECUTABLE(BUILD_CXX) 796 BASIC_PATH_PROGS(BUILD_NM, nm gcc-nm) 797 BASIC_FIXUP_EXECUTABLE(BUILD_NM) 798 BASIC_PATH_PROGS(BUILD_AR, ar gcc-ar) 799 BASIC_FIXUP_EXECUTABLE(BUILD_AR) 800 BASIC_PATH_PROGS(BUILD_OBJCOPY, objcopy) 801 BASIC_FIXUP_EXECUTABLE(BUILD_OBJCOPY) 802 BASIC_PATH_PROGS(BUILD_STRIP, strip) 803 BASIC_FIXUP_EXECUTABLE(BUILD_STRIP) 804 # Assume the C compiler is the assembler 805 BUILD_AS="$BUILD_CC -c" 806 # Just like for the target compiler, use the compiler as linker 807 BUILD_LD="$BUILD_CC" 808 BUILD_LDCXX="$BUILD_CXX" 809 810 PATH="$OLDPATH" 811 else 812 # If we are not cross compiling, use the normal target compilers for 813 # building the build platform executables. 814 BUILD_CC="$CC" 815 BUILD_CXX="$CXX" 816 BUILD_LD="$LD" 817 BUILD_LDCXX="$LDCXX" 818 BUILD_NM="$NM" 819 BUILD_AS="$AS" 820 BUILD_OBJCOPY="$OBJCOPY" 821 BUILD_STRIP="$STRIP" 822 BUILD_SYSROOT_CFLAGS="$SYSROOT_CFLAGS" 823 BUILD_SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS" 824 BUILD_AR="$AR" 825 fi 826 827 AC_SUBST(BUILD_CC) 828 AC_SUBST(BUILD_CXX) 829 AC_SUBST(BUILD_LD) 830 AC_SUBST(BUILD_LDCXX) | 42 VALID_TOOLCHAINS_macosx="gcc clang" 43 VALID_TOOLCHAINS_aix="xlc" 44 VALID_TOOLCHAINS_windows="microsoft" 45 46 # Toolchain descriptions 47 TOOLCHAIN_DESCRIPTION_clang="clang/LLVM" 48 TOOLCHAIN_DESCRIPTION_gcc="GNU Compiler Collection" 49 TOOLCHAIN_DESCRIPTION_microsoft="Microsoft Visual Studio" 50 TOOLCHAIN_DESCRIPTION_solstudio="Oracle Solaris Studio" 51 TOOLCHAIN_DESCRIPTION_xlc="IBM XL C/C++" 52 53 # Minimum supported versions, empty means unspecified 54 TOOLCHAIN_MINIMUM_VERSION_clang="3.2" 55 TOOLCHAIN_MINIMUM_VERSION_gcc="4.3" 56 TOOLCHAIN_MINIMUM_VERSION_microsoft="" 57 TOOLCHAIN_MINIMUM_VERSION_solstudio="5.12" 58 TOOLCHAIN_MINIMUM_VERSION_xlc="" 59 60 # Prepare the system so that TOOLCHAIN_CHECK_COMPILER_VERSION can be called. 61 # Must have CC_VERSION_NUMBER and CXX_VERSION_NUMBER. 62 # $1 - optional variable prefix for compiler and version variables (BUILD_) 63 # $2 - optional variable prefix for comparable variable (OPENJDK_BUILD_) 64 AC_DEFUN([TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS], 65 [ 66 if test "x[$]$1CC_VERSION_NUMBER" != "x[$]$1CXX_VERSION_NUMBER"; then 67 AC_MSG_WARN([C and C++ compiler have different version numbers, [$]$1CC_VERSION_NUMBER vs [$]$1CXX_VERSION_NUMBER.]) 68 AC_MSG_WARN([This typically indicates a broken setup, and is not supported]) 69 fi 70 71 # We only check CC_VERSION_NUMBER since we assume CXX_VERSION_NUMBER is equal. 72 if [ [[ "[$]$1CC_VERSION_NUMBER" =~ (.*\.){3} ]] ]; then 73 AC_MSG_WARN([C compiler version number has more than three parts (X.Y.Z): [$]$1CC_VERSION_NUMBER. Comparisons might be wrong.]) 74 fi 75 76 if [ [[ "[$]$1CC_VERSION_NUMBER" =~ [0-9]{6} ]] ]; then 77 AC_MSG_WARN([C compiler version number has a part larger than 99999: [$]$1CC_VERSION_NUMBER. Comparisons might be wrong.]) 78 fi 79 80 $2COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "[$]$1CC_VERSION_NUMBER"` 81 ]) 82 83 # Check if the configured compiler (C and C++) is of a specific version or 84 # newer. TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS must have been called before. 85 # 86 # Arguments: 87 # VERSION: The version string to check against the found version 88 # IF_AT_LEAST: block to run if the compiler is at least this version (>=) 89 # IF_OLDER_THAN: block to run if the compiler is older than this version (<) 90 # PREFIX: Optional variable prefix for compiler to compare version for (OPENJDK_BUILD_) 91 BASIC_DEFUN_NAMED([TOOLCHAIN_CHECK_COMPILER_VERSION], 92 [*VERSION PREFIX IF_AT_LEAST IF_OLDER_THAN], [$@], 93 [ 94 # Need to assign to a variable since m4 is blocked from modifying parts in []. 95 REFERENCE_VERSION=ARG_VERSION 96 97 if [ [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ]; then 98 AC_MSG_ERROR([Internal error: Cannot compare to ARG_VERSION, only three parts (X.Y.Z) is supported]) 99 fi 100 101 if [ [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ]; then 102 AC_MSG_ERROR([Internal error: Cannot compare to ARG_VERSION, only parts < 99999 is supported]) 103 fi 104 105 # Version comparison method inspired by http://stackoverflow.com/a/24067243 106 COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "$REFERENCE_VERSION"` 107 108 if test [$]ARG_PREFIX[COMPARABLE_ACTUAL_VERSION] -ge $COMPARABLE_REFERENCE_VERSION ; then 109 : 110 ARG_IF_AT_LEAST 111 else 112 : 113 ARG_IF_OLDER_THAN 114 fi 115 ]) 116 117 # Setup a number of variables describing how native output files are 118 # named on this platform/toolchain. 119 AC_DEFUN([TOOLCHAIN_SETUP_FILENAME_PATTERNS], 120 [ 121 # Define filename patterns 122 if test "x$OPENJDK_TARGET_OS" = xwindows; then 123 LIBRARY_PREFIX= 124 SHARED_LIBRARY_SUFFIX='.dll' 125 STATIC_LIBRARY_SUFFIX='.lib' 126 SHARED_LIBRARY='[$]1.dll' 127 STATIC_LIBRARY='[$]1.lib' 128 OBJ_SUFFIX='.obj' 794 # find the build compilers in the tools dir, if needed. 795 BASIC_REQUIRE_PROGS(BUILD_CC, [cl cc gcc]) 796 BASIC_FIXUP_EXECUTABLE(BUILD_CC) 797 BASIC_REQUIRE_PROGS(BUILD_CXX, [cl CC g++]) 798 BASIC_FIXUP_EXECUTABLE(BUILD_CXX) 799 BASIC_PATH_PROGS(BUILD_NM, nm gcc-nm) 800 BASIC_FIXUP_EXECUTABLE(BUILD_NM) 801 BASIC_PATH_PROGS(BUILD_AR, ar gcc-ar) 802 BASIC_FIXUP_EXECUTABLE(BUILD_AR) 803 BASIC_PATH_PROGS(BUILD_OBJCOPY, objcopy) 804 BASIC_FIXUP_EXECUTABLE(BUILD_OBJCOPY) 805 BASIC_PATH_PROGS(BUILD_STRIP, strip) 806 BASIC_FIXUP_EXECUTABLE(BUILD_STRIP) 807 # Assume the C compiler is the assembler 808 BUILD_AS="$BUILD_CC -c" 809 # Just like for the target compiler, use the compiler as linker 810 BUILD_LD="$BUILD_CC" 811 BUILD_LDCXX="$BUILD_CXX" 812 813 PATH="$OLDPATH" 814 815 TOOLCHAIN_EXTRACT_COMPILER_VERSION(BUILD_CC, [BuildC]) 816 TOOLCHAIN_EXTRACT_COMPILER_VERSION(BUILD_CXX, [BuildC++]) 817 TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS([BUILD_], [OPENJDK_BUILD_]) 818 else 819 # If we are not cross compiling, use the normal target compilers for 820 # building the build platform executables. 821 BUILD_CC="$CC" 822 BUILD_CXX="$CXX" 823 BUILD_LD="$LD" 824 BUILD_LDCXX="$LDCXX" 825 BUILD_NM="$NM" 826 BUILD_AS="$AS" 827 BUILD_OBJCOPY="$OBJCOPY" 828 BUILD_STRIP="$STRIP" 829 BUILD_SYSROOT_CFLAGS="$SYSROOT_CFLAGS" 830 BUILD_SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS" 831 BUILD_AR="$AR" 832 fi 833 834 AC_SUBST(BUILD_CC) 835 AC_SUBST(BUILD_CXX) 836 AC_SUBST(BUILD_LD) 837 AC_SUBST(BUILD_LDCXX) |