< prev index next >

make/autoconf/toolchain.m4

Print this page
8248238: Adding Windows support to OpenJDK on AArch64

Summary: Adding Windows support for AArch64

Contributed-by: Ludovic Henry <luhenry@microsoft.com>, Monica Beckwith <monica.beckwith@microsoft.com>
Reviewed-by:


 855     if test "x$with_build_devkit" = "xyes"; then
 856       AC_MSG_ERROR([--with-build-devkit must have a value])
 857     elif test -n "$with_build_devkit"; then
 858       if test ! -d "$with_build_devkit"; then
 859         AC_MSG_ERROR([--with-build-devkit points to non existing dir: $with_build_devkit])
 860       else
 861         UTIL_FIXUP_PATH([with_build_devkit])
 862         BUILD_DEVKIT_ROOT="$with_build_devkit"
 863         # Check for a meta data info file in the root of the devkit
 864         if test -f "$BUILD_DEVKIT_ROOT/devkit.info"; then
 865           # Process devkit.info so that existing devkit variables are not
 866           # modified by this
 867           $SED -e "s/^DEVKIT_/BUILD_DEVKIT_/g" \
 868               -e "s/\$DEVKIT_ROOT/\$BUILD_DEVKIT_ROOT/g" \
 869               -e "s/\$host/\$build/g" \
 870               $BUILD_DEVKIT_ROOT/devkit.info \
 871               > $CONFIGURESUPPORT_OUTPUTDIR/build-devkit.info
 872           . $CONFIGURESUPPORT_OUTPUTDIR/build-devkit.info
 873           # This potentially sets the following:
 874           # A descriptive name of the devkit
 875           BASIC_EVAL_DEVKIT_VARIABLE([BUILD_DEVKIT_NAME])
 876           # Corresponds to --with-extra-path
 877           BASIC_EVAL_DEVKIT_VARIABLE([BUILD_DEVKIT_EXTRA_PATH])
 878           # Corresponds to --with-toolchain-path
 879           BASIC_EVAL_DEVKIT_VARIABLE([BUILD_DEVKIT_TOOLCHAIN_PATH])
 880           # Corresponds to --with-sysroot
 881           BASIC_EVAL_DEVKIT_VARIABLE([BUILD_DEVKIT_SYSROOT])
 882           # Skip the Window specific parts




 883         fi
 884 
 885         AC_MSG_CHECKING([for build platform devkit])
 886         if test "x$BUILD_DEVKIT_NAME" != x; then
 887           AC_MSG_RESULT([$BUILD_DEVKIT_NAME in $BUILD_DEVKIT_ROOT])
 888         else
 889           AC_MSG_RESULT([$BUILD_DEVKIT_ROOT])
 890         fi
 891 
 892         BUILD_SYSROOT="$BUILD_DEVKIT_SYSROOT"
 893 
 894          # Fallback default of just /bin if DEVKIT_PATH is not defined
 895         if test "x$BUILD_DEVKIT_TOOLCHAIN_PATH" = x; then
 896           BUILD_DEVKIT_TOOLCHAIN_PATH="$BUILD_DEVKIT_ROOT/bin"
 897         fi
 898         PATH="$BUILD_DEVKIT_TOOLCHAIN_PATH:$BUILD_DEVKIT_EXTRA_PATH"









 899       fi
 900     fi
 901 
 902     # FIXME: we should list the discovered compilers as an exclude pattern!
 903     # If we do that, we can do this detection before POST_DETECTION, and still
 904     # find the build compilers in the tools dir, if needed.
 905     UTIL_REQUIRE_PROGS(BUILD_CC, [cl cc gcc])
 906     UTIL_FIXUP_EXECUTABLE(BUILD_CC)
 907     UTIL_REQUIRE_PROGS(BUILD_CXX, [cl CC g++])
 908     UTIL_FIXUP_EXECUTABLE(BUILD_CXX)
 909     UTIL_PATH_PROGS(BUILD_NM, nm gcc-nm)
 910     UTIL_FIXUP_EXECUTABLE(BUILD_NM)
 911     UTIL_PATH_PROGS(BUILD_AR, ar gcc-ar)
 912     UTIL_FIXUP_EXECUTABLE(BUILD_AR)
 913     UTIL_PATH_PROGS(BUILD_OBJCOPY, objcopy)
 914     UTIL_FIXUP_EXECUTABLE(BUILD_OBJCOPY)
 915     UTIL_PATH_PROGS(BUILD_STRIP, strip)
 916     UTIL_FIXUP_EXECUTABLE(BUILD_STRIP)
 917     # Assume the C compiler is the assembler
 918     BUILD_AS="$BUILD_CC -c"



























 919     # Just like for the target compiler, use the compiler as linker
 920     BUILD_LD="$BUILD_CC"
 921     BUILD_LDCXX="$BUILD_CXX"

 922 
 923     PATH="$OLDPATH"
 924 
 925     TOOLCHAIN_EXTRACT_COMPILER_VERSION(BUILD_CC, [BuildC])
 926     TOOLCHAIN_EXTRACT_COMPILER_VERSION(BUILD_CXX, [BuildC++])
 927     TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS([BUILD_], [OPENJDK_BUILD_], [build ])
 928     TOOLCHAIN_EXTRACT_LD_VERSION(BUILD_LD, [build linker])
 929     TOOLCHAIN_PREPARE_FOR_LD_VERSION_COMPARISONS([BUILD_], [OPENJDK_BUILD_])
 930   else
 931     # If we are not cross compiling, use the normal target compilers for
 932     # building the build platform executables.
 933     BUILD_CC="$CC"
 934     BUILD_CXX="$CXX"
 935     BUILD_LD="$LD"
 936     BUILD_LDCXX="$LDCXX"
 937     BUILD_NM="$NM"
 938     BUILD_AS="$AS"
 939     BUILD_OBJCOPY="$OBJCOPY"
 940     BUILD_STRIP="$STRIP"
 941     BUILD_AR="$AR"


 951   AC_SUBST(BUILD_NM)
 952   AC_SUBST(BUILD_AS)
 953   AC_SUBST(BUILD_AR)
 954 ])
 955 
 956 # Do some additional checks on the detected tools.
 957 AC_DEFUN_ONCE([TOOLCHAIN_MISC_CHECKS],
 958 [
 959   # Check for extra potential brokenness.
 960   if test  "x$TOOLCHAIN_TYPE" = xmicrosoft; then
 961     # On Windows, double-check that we got the right compiler.
 962     CC_VERSION_OUTPUT=`$CC 2>&1 | $GREP -v 'ERROR.*UtilTranslatePathList' | $HEAD -n 1 | $TR -d '\r'`
 963     COMPILER_CPU_TEST=`$ECHO $CC_VERSION_OUTPUT | $SED -n "s/^.* \(.*\)$/\1/p"`
 964     if test "x$OPENJDK_TARGET_CPU" = "xx86"; then
 965       if test "x$COMPILER_CPU_TEST" != "x80x86" -a "x$COMPILER_CPU_TEST" != "xx86"; then
 966         AC_MSG_ERROR([Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "80x86" or "x86".])
 967       fi
 968     elif test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
 969       if test "x$COMPILER_CPU_TEST" != "xx64"; then
 970         AC_MSG_ERROR([Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "x64".])




 971       fi
 972     fi
 973   fi
 974 
 975   if test "x$TOOLCHAIN_TYPE" = xgcc || test "x$TOOLCHAIN_TYPE" = xclang; then
 976     # Check if linker has -z noexecstack.
 977     HAS_NOEXECSTACK=`$CC -Wl,--help 2>/dev/null | $GREP 'z noexecstack'`
 978     # This is later checked when setting flags.
 979   fi
 980 
 981   # Setup hotspot lecagy names for toolchains
 982   HOTSPOT_TOOLCHAIN_TYPE=$TOOLCHAIN_TYPE
 983   if test "x$TOOLCHAIN_TYPE" = xclang; then
 984     HOTSPOT_TOOLCHAIN_TYPE=gcc
 985   elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
 986     HOTSPOT_TOOLCHAIN_TYPE=visCPP
 987   fi
 988   AC_SUBST(HOTSPOT_TOOLCHAIN_TYPE)
 989 ])
 990 




 855     if test "x$with_build_devkit" = "xyes"; then
 856       AC_MSG_ERROR([--with-build-devkit must have a value])
 857     elif test -n "$with_build_devkit"; then
 858       if test ! -d "$with_build_devkit"; then
 859         AC_MSG_ERROR([--with-build-devkit points to non existing dir: $with_build_devkit])
 860       else
 861         UTIL_FIXUP_PATH([with_build_devkit])
 862         BUILD_DEVKIT_ROOT="$with_build_devkit"
 863         # Check for a meta data info file in the root of the devkit
 864         if test -f "$BUILD_DEVKIT_ROOT/devkit.info"; then
 865           # Process devkit.info so that existing devkit variables are not
 866           # modified by this
 867           $SED -e "s/^DEVKIT_/BUILD_DEVKIT_/g" \
 868               -e "s/\$DEVKIT_ROOT/\$BUILD_DEVKIT_ROOT/g" \
 869               -e "s/\$host/\$build/g" \
 870               $BUILD_DEVKIT_ROOT/devkit.info \
 871               > $CONFIGURESUPPORT_OUTPUTDIR/build-devkit.info
 872           . $CONFIGURESUPPORT_OUTPUTDIR/build-devkit.info
 873           # This potentially sets the following:
 874           # A descriptive name of the devkit
 875           BASIC_EVAL_BUILD_DEVKIT_VARIABLE([BUILD_DEVKIT_NAME])
 876           # Corresponds to --with-extra-path
 877           BASIC_EVAL_BUILD_DEVKIT_VARIABLE([BUILD_DEVKIT_EXTRA_PATH])
 878           # Corresponds to --with-toolchain-path
 879           BASIC_EVAL_BUILD_DEVKIT_VARIABLE([BUILD_DEVKIT_TOOLCHAIN_PATH])
 880           # Corresponds to --with-sysroot
 881           BASIC_EVAL_BUILD_DEVKIT_VARIABLE([BUILD_DEVKIT_SYSROOT])
 882 
 883           if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
 884             BASIC_EVAL_BUILD_DEVKIT_VARIABLE([BUILD_DEVKIT_VS_INCLUDE])
 885             BASIC_EVAL_BUILD_DEVKIT_VARIABLE([BUILD_DEVKIT_VS_LIB])
 886           fi
 887         fi
 888 
 889         AC_MSG_CHECKING([for build platform devkit])
 890         if test "x$BUILD_DEVKIT_NAME" != x; then
 891           AC_MSG_RESULT([$BUILD_DEVKIT_NAME in $BUILD_DEVKIT_ROOT])
 892         else
 893           AC_MSG_RESULT([$BUILD_DEVKIT_ROOT])
 894         fi
 895 
 896         UTIL_PREPEND_TO_PATH([PATH],$BUILD_DEVKIT_EXTRA_PATH)
 897 
 898         # Fallback default of just /bin if DEVKIT_PATH is not defined
 899         if test "x$BUILD_DEVKIT_TOOLCHAIN_PATH" = x; then
 900           BUILD_DEVKIT_TOOLCHAIN_PATH="$BUILD_DEVKIT_ROOT/bin"
 901         fi
 902         UTIL_PREPEND_TO_PATH([PATH],$BUILD_DEVKIT_TOOLCHAIN_PATH)
 903 
 904         BUILD_SYSROOT="$BUILD_DEVKIT_SYSROOT"
 905 
 906         if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
 907           BUILD_VS_INCLUDE="$BUILD_DEVKIT_VS_INCLUDE"
 908           BUILD_VS_LIB="$BUILD_DEVKIT_VS_LIB"
 909 
 910           TOOLCHAIN_SETUP_VISUAL_STUDIO_SYSROOT_FLAGS([BUILD_])
 911         fi
 912       fi
 913     fi
 914 
 915     # FIXME: we should list the discovered compilers as an exclude pattern!
 916     # If we do that, we can do this detection before POST_DETECTION, and still
 917     # find the build compilers in the tools dir, if needed.
 918     UTIL_REQUIRE_PROGS(BUILD_CC, [cl cc gcc])
 919     UTIL_FIXUP_EXECUTABLE(BUILD_CC)
 920     UTIL_REQUIRE_PROGS(BUILD_CXX, [cl CC g++])
 921     UTIL_FIXUP_EXECUTABLE(BUILD_CXX)
 922     UTIL_PATH_PROGS(BUILD_NM, nm gcc-nm)
 923     UTIL_FIXUP_EXECUTABLE(BUILD_NM)
 924     UTIL_PATH_PROGS(BUILD_AR, ar gcc-ar)
 925     UTIL_FIXUP_EXECUTABLE(BUILD_AR)
 926     UTIL_PATH_PROGS(BUILD_OBJCOPY, objcopy)
 927     UTIL_FIXUP_EXECUTABLE(BUILD_OBJCOPY)
 928     UTIL_PATH_PROGS(BUILD_STRIP, strip)
 929     UTIL_FIXUP_EXECUTABLE(BUILD_STRIP)
 930     # Assume the C compiler is the assembler
 931     BUILD_AS="$BUILD_CC -c"
 932     if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
 933       # In the Microsoft toolchain we have a separate LD command "link".
 934       # Make sure we reject /usr/bin/link (as determined in CYGWIN_LINK), which is
 935       # a cygwin program for something completely different.
 936       AC_CHECK_PROG([BUILD_LD], [link$EXE_SUFFIX],[link$EXE_SUFFIX],,, [$CYGWIN_LINK])
 937       UTIL_FIXUP_EXECUTABLE(BUILD_LD)
 938       # Verify that we indeed succeeded with this trick.
 939       AC_MSG_CHECKING([if the found link.exe is actually the Visual Studio linker])
 940 
 941       # Reset PATH since it can contain a mix of WSL/linux paths and Windows paths from VS,
 942       # which, in combination with WSLENV, will make the WSL layer complain
 943       old_path="$PATH"
 944       PATH=
 945 
 946       "$BUILD_LD" --version > /dev/null
 947 
 948       if test $? -eq 0 ; then
 949         AC_MSG_RESULT([no])
 950         AC_MSG_ERROR([This is the Cygwin link tool. Please check your PATH and rerun configure.])
 951       else
 952         AC_MSG_RESULT([yes])
 953       fi
 954 
 955       PATH="$old_path"
 956 
 957       BUILD_LDCXX="$BUILD_LD"
 958     else
 959       # Just like for the target compiler, use the compiler as linker
 960       BUILD_LD="$BUILD_CC"
 961       BUILD_LDCXX="$BUILD_CXX"
 962     fi
 963 
 964     PATH="$OLDPATH"
 965 
 966     TOOLCHAIN_EXTRACT_COMPILER_VERSION(BUILD_CC, [BuildC])
 967     TOOLCHAIN_EXTRACT_COMPILER_VERSION(BUILD_CXX, [BuildC++])
 968     TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS([BUILD_], [OPENJDK_BUILD_], [build ])
 969     TOOLCHAIN_EXTRACT_LD_VERSION(BUILD_LD, [build linker])
 970     TOOLCHAIN_PREPARE_FOR_LD_VERSION_COMPARISONS([BUILD_], [OPENJDK_BUILD_])
 971   else
 972     # If we are not cross compiling, use the normal target compilers for
 973     # building the build platform executables.
 974     BUILD_CC="$CC"
 975     BUILD_CXX="$CXX"
 976     BUILD_LD="$LD"
 977     BUILD_LDCXX="$LDCXX"
 978     BUILD_NM="$NM"
 979     BUILD_AS="$AS"
 980     BUILD_OBJCOPY="$OBJCOPY"
 981     BUILD_STRIP="$STRIP"
 982     BUILD_AR="$AR"


 992   AC_SUBST(BUILD_NM)
 993   AC_SUBST(BUILD_AS)
 994   AC_SUBST(BUILD_AR)
 995 ])
 996 
 997 # Do some additional checks on the detected tools.
 998 AC_DEFUN_ONCE([TOOLCHAIN_MISC_CHECKS],
 999 [
1000   # Check for extra potential brokenness.
1001   if test  "x$TOOLCHAIN_TYPE" = xmicrosoft; then
1002     # On Windows, double-check that we got the right compiler.
1003     CC_VERSION_OUTPUT=`$CC 2>&1 | $GREP -v 'ERROR.*UtilTranslatePathList' | $HEAD -n 1 | $TR -d '\r'`
1004     COMPILER_CPU_TEST=`$ECHO $CC_VERSION_OUTPUT | $SED -n "s/^.* \(.*\)$/\1/p"`
1005     if test "x$OPENJDK_TARGET_CPU" = "xx86"; then
1006       if test "x$COMPILER_CPU_TEST" != "x80x86" -a "x$COMPILER_CPU_TEST" != "xx86"; then
1007         AC_MSG_ERROR([Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "80x86" or "x86".])
1008       fi
1009     elif test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
1010       if test "x$COMPILER_CPU_TEST" != "xx64"; then
1011         AC_MSG_ERROR([Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "x64".])
1012       fi
1013     elif test "x$OPENJDK_TARGET_CPU" = "xaarch64"; then
1014       if test "x$COMPILER_CPU_TEST" != "xARM64"; then
1015         AC_MSG_ERROR([Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "arm64".])
1016       fi
1017     fi
1018   fi
1019 
1020   if test "x$TOOLCHAIN_TYPE" = xgcc || test "x$TOOLCHAIN_TYPE" = xclang; then
1021     # Check if linker has -z noexecstack.
1022     HAS_NOEXECSTACK=`$CC -Wl,--help 2>/dev/null | $GREP 'z noexecstack'`
1023     # This is later checked when setting flags.
1024   fi
1025 
1026   # Setup hotspot lecagy names for toolchains
1027   HOTSPOT_TOOLCHAIN_TYPE=$TOOLCHAIN_TYPE
1028   if test "x$TOOLCHAIN_TYPE" = xclang; then
1029     HOTSPOT_TOOLCHAIN_TYPE=gcc
1030   elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
1031     HOTSPOT_TOOLCHAIN_TYPE=visCPP
1032   fi
1033   AC_SUBST(HOTSPOT_TOOLCHAIN_TYPE)
1034 ])
1035 


< prev index next >