< prev index next >

common/autoconf/toolchain.m4

Print this page




  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)


< prev index next >