< prev index next >

make/autoconf/toolchain.m4

Print this page
rev 60628 : 8248498: Add build system support for Windows AArch64
Reviewed-by:
Contributed-by: mbeckwit, luhenry, burban


 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     if test "x$OPENJDK_BUILD_OS" = xmacosx; then
 906       UTIL_REQUIRE_PROGS(BUILD_CC, [clang cl cc gcc])
 907       UTIL_REQUIRE_PROGS(BUILD_CXX, [clang++ cl CC g++])
 908     else
 909       UTIL_REQUIRE_PROGS(BUILD_CC, [cl cc gcc])
 910       UTIL_REQUIRE_PROGS(BUILD_CXX, [cl CC g++])
 911     fi
 912     UTIL_FIXUP_EXECUTABLE(BUILD_CC)
 913     UTIL_FIXUP_EXECUTABLE(BUILD_CXX)
 914     UTIL_PATH_PROGS(BUILD_NM, nm gcc-nm)
 915     UTIL_FIXUP_EXECUTABLE(BUILD_NM)
 916     UTIL_PATH_PROGS(BUILD_AR, ar gcc-ar)
 917     UTIL_FIXUP_EXECUTABLE(BUILD_AR)
 918     UTIL_PATH_PROGS(BUILD_OBJCOPY, objcopy)
 919     UTIL_FIXUP_EXECUTABLE(BUILD_OBJCOPY)
 920     UTIL_PATH_PROGS(BUILD_STRIP, strip)
 921     UTIL_FIXUP_EXECUTABLE(BUILD_STRIP)
 922     # Assume the C compiler is the assembler
 923     BUILD_AS="$BUILD_CC -c"



























 924     # Just like for the target compiler, use the compiler as linker
 925     BUILD_LD="$BUILD_CC"
 926     BUILD_LDCXX="$BUILD_CXX"

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


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




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




 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     if test "x$OPENJDK_BUILD_OS" = xmacosx; then
 919       UTIL_REQUIRE_PROGS(BUILD_CC, [clang cl cc gcc])
 920       UTIL_REQUIRE_PROGS(BUILD_CXX, [clang++ cl CC g++])
 921     else
 922       UTIL_REQUIRE_PROGS(BUILD_CC, [cl cc gcc])
 923       UTIL_REQUIRE_PROGS(BUILD_CXX, [cl CC g++])
 924     fi
 925     UTIL_FIXUP_EXECUTABLE(BUILD_CC)
 926     UTIL_FIXUP_EXECUTABLE(BUILD_CXX)
 927     UTIL_PATH_PROGS(BUILD_NM, nm gcc-nm)
 928     UTIL_FIXUP_EXECUTABLE(BUILD_NM)
 929     UTIL_PATH_PROGS(BUILD_AR, ar gcc-ar)
 930     UTIL_FIXUP_EXECUTABLE(BUILD_AR)
 931     UTIL_PATH_PROGS(BUILD_OBJCOPY, objcopy)
 932     UTIL_FIXUP_EXECUTABLE(BUILD_OBJCOPY)
 933     UTIL_PATH_PROGS(BUILD_STRIP, strip)
 934     UTIL_FIXUP_EXECUTABLE(BUILD_STRIP)
 935     # Assume the C compiler is the assembler
 936     BUILD_AS="$BUILD_CC -c"
 937     if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
 938       # In the Microsoft toolchain we have a separate LD command "link".
 939       # Make sure we reject /usr/bin/link (as determined in CYGWIN_LINK), which is
 940       # a cygwin program for something completely different.
 941       AC_CHECK_PROG([BUILD_LD], [link$EXE_SUFFIX],[link$EXE_SUFFIX],,, [$CYGWIN_LINK])
 942       UTIL_FIXUP_EXECUTABLE(BUILD_LD)
 943       # Verify that we indeed succeeded with this trick.
 944       AC_MSG_CHECKING([if the found link.exe is actually the Visual Studio linker])
 945 
 946       # Reset PATH since it can contain a mix of WSL/linux paths and Windows paths from VS,
 947       # which, in combination with WSLENV, will make the WSL layer complain
 948       old_path="$PATH"
 949       PATH=
 950 
 951       "$BUILD_LD" --version > /dev/null
 952 
 953       if test $? -eq 0 ; then
 954         AC_MSG_RESULT([no])
 955         AC_MSG_ERROR([This is the Cygwin link tool. Please check your PATH and rerun configure.])
 956       else
 957         AC_MSG_RESULT([yes])
 958       fi
 959 
 960       PATH="$old_path"
 961 
 962       BUILD_LDCXX="$BUILD_LD"
 963     else
 964       # Just like for the target compiler, use the compiler as linker
 965       BUILD_LD="$BUILD_CC"
 966       BUILD_LDCXX="$BUILD_CXX"
 967     fi
 968 
 969     PATH="$OLDPATH"
 970 
 971     TOOLCHAIN_EXTRACT_COMPILER_VERSION(BUILD_CC, [BuildC])
 972     TOOLCHAIN_EXTRACT_COMPILER_VERSION(BUILD_CXX, [BuildC++])
 973     TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS([BUILD_], [OPENJDK_BUILD_], [build ])
 974     TOOLCHAIN_EXTRACT_LD_VERSION(BUILD_LD, [build linker])
 975     TOOLCHAIN_PREPARE_FOR_LD_VERSION_COMPARISONS([BUILD_], [OPENJDK_BUILD_])
 976   else
 977     # If we are not cross compiling, use the normal target compilers for
 978     # building the build platform executables.
 979     BUILD_CC="$CC"
 980     BUILD_CXX="$CXX"
 981     BUILD_LD="$LD"
 982     BUILD_LDCXX="$LDCXX"
 983     BUILD_NM="$NM"
 984     BUILD_AS="$AS"
 985     BUILD_OBJCOPY="$OBJCOPY"
 986     BUILD_STRIP="$STRIP"
 987     BUILD_AR="$AR"


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


< prev index next >