common/autoconf/platform.m4

Print this page

        

*** 21,296 **** # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # ! AC_DEFUN([CHECK_FIND_DELETE], ! [ ! # Test if find supports -delete ! AC_MSG_CHECKING([if find supports -delete]) ! FIND_DELETE="-delete" ! ! DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) ! ! echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete ! ! TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` ! if test -f $DELETEDIR/TestIfFindSupportsDelete; then ! # No, it does not. ! rm $DELETEDIR/TestIfFindSupportsDelete ! FIND_DELETE="-exec rm \{\} \+" ! AC_MSG_RESULT([no]) ! else ! AC_MSG_RESULT([yes]) ! fi ! rmdir $DELETEDIR ! ]) ! ! AC_DEFUN([CHECK_NONEMPTY], ! [ ! # Test that variable $1 is not empty. ! if test "" = "[$]$1"; then AC_MSG_ERROR(Could not find translit($1,A-Z,a-z) !); fi ! ]) ! ! AC_DEFUN([ADD_JVM_ARG_IF_OK], ! [ ! # Test if $1 is a valid argument to $3 (often is $JAVA passed as $3) ! # If so, then append $1 to $2 ! FOUND_WARN=`$3 $1 -version 2>&1 | grep -i warn` ! FOUND_VERSION=`$3 $1 -version 2>&1 | grep " version \""` ! if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then ! $2="[$]$2 $1" ! fi ! ]) ! ! AC_DEFUN([WHICHCMD], ! [ ! # Translate "gcc -E" into "`which gcc` -E" ie ! # extract the full path to the binary and at the ! # same time maintain any arguments passed to it. ! # The command MUST exist in the path, or else! ! tmp="[$]$1" ! car="${tmp%% *}" ! tmp="[$]$1 EOL" ! cdr="${tmp#* }" ! # On windows we want paths without spaces. ! if test "x$BUILD_OS" = "xwindows"; then ! WHICHCMD_SPACESAFE(car) ! else ! # "which" is not portable, but is used here ! # because we know that the command exists! ! car=`which $car` ! fi ! if test "x$cdr" != xEOL; then ! $1="$car ${cdr% *}" ! else ! $1="$car" ! fi ! ]) ! ! AC_DEFUN([SPACESAFE], ! [ ! # Fail with message $2 if var $1 contains a path with no spaces in it. ! # Unless on Windows, where we can rewrite the path. ! HAS_SPACE=`echo "[$]$1" | grep " "` ! if test "x$HAS_SPACE" != x; then ! if test "x$BUILD_OS" = "xwindows"; then ! $1=`$CYGPATH -s -m -a "[$]$1"` ! $1=`$CYGPATH -u "[$]$1"` ! else ! AC_MSG_ERROR([You cannot have spaces in $2! "[$]$1"]) ! fi ! fi ! ]) ! ! AC_DEFUN([WHICHCMD_SPACESAFE], ! [ ! # Translate long cygdrive or C:\sdfsf path ! # into a short mixed mode path that has no ! # spaces in it. ! tmp="[$]$1" ! if test "x$BUILD_OS" = "xwindows"; then ! tmp=`$CYGPATH -u "[$]$1"` ! tmp=`which "$tmp"` ! # If file exists with .exe appended, that's the real filename ! # and cygpath needs that to convert to short style path. ! if test -f "${tmp}.exe"; then ! tmp="${tmp}.exe" ! elif test -f "${tmp}.cmd"; then ! tmp="${tmp}.cmd" ! fi ! # Convert to C:/ mixed style path without spaces. ! tmp=`$CYGPATH -s -m "$tmp"` ! fi ! $1="$tmp" ! ]) ! ! AC_DEFUN([REMOVE_SYMBOLIC_LINKS], ! [ ! if test "x$BUILD_OS" != xwindows; then ! # Follow a chain of symbolic links. Use readlink ! # where it exists, else fall back to horribly ! # complicated shell code. ! AC_PATH_PROG(READLINK, readlink) ! if test "x$READLINK_TESTED" != yes; then ! # On MacOSX there is a readlink tool with a different ! # purpose than the GNU readlink tool. Check the found readlink. ! ISGNU=`$READLINK --help 2>&1 | grep GNU` ! if test "x$ISGNU" = x; then ! # A readlink that we do not know how to use. ! # Are there other non-GNU readlinks out there? ! READLINK_TESTED=yes ! READLINK= ! fi ! fi ! ! if test "x$READLINK" != x; then ! $1=`$READLINK -f [$]$1` ! else ! STARTDIR=$PWD ! COUNTER=0 ! DIR=`dirname [$]$1` ! FIL=`basename [$]$1` ! while test $COUNTER -lt 20; do ! ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` ! if test "x$ISLINK" == x; then ! # This is not a symbolic link! We are done! ! break ! fi ! # The link might be relative! We have to use cd to travel safely. ! cd $DIR ! cd `dirname $ISLINK` ! DIR=`pwd` ! FIL=`basename $ISLINK` ! let COUNTER=COUNTER+1 ! done ! cd $STARTDIR ! $1=$DIR/$FIL ! fi ! fi ! ]) ! ! AC_DEFUN([TESTFOR_PROG_CCACHE], ! [ ! AC_ARG_ENABLE([ccache], ! [AS_HELP_STRING([--disable-ccache], ! [use ccache to speed up recompilations @<:@enabled@:>@])], ! [ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes]) ! if test "x$ENABLE_CCACHE" = xyes; then ! AC_PATH_PROG(CCACHE, ccache) ! else ! AC_MSG_CHECKING([for ccache]) ! AC_MSG_RESULT([explicitly disabled]) ! CCACHE= ! fi ! AC_SUBST(CCACHE) ! ! AC_ARG_WITH([ccache-dir], ! [AS_HELP_STRING([--with-ccache-dir], ! [where to store ccache files @<:@~/.ccache@:>@])]) ! ! if test "x$with_ccache_dir" != x; then ! # When using a non home ccache directory, assume the use is to share ccache files ! # with other users. Thus change the umask. ! SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" ! fi ! CCACHE_FOUND="" ! if test "x$CCACHE" != x; then ! SETUP_CCACHE_USAGE ! fi ! ]) ! ! AC_DEFUN([SETUP_CCACHE_USAGE], ! [ ! if test "x$CCACHE" != x; then ! CCACHE_FOUND="true" ! # Only use ccache if it is 3.1.4 or later, which supports ! # precompiled headers. ! AC_MSG_CHECKING([if ccache supports precompiled headers]) ! HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.@<:@456789@:>@) 2> /dev/null` ! if test "x$HAS_GOOD_CCACHE" = x; then ! AC_MSG_RESULT([no, disabling ccache]) ! CCACHE= ! else ! AC_MSG_RESULT([yes]) ! AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers]) ! PUSHED_FLAGS="$CXXFLAGS" ! CXXFLAGS="-fpch-preprocess $CXXFLAGS" ! AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [CC_KNOWS_CCACHE_TRICK=yes], [CC_KNOWS_CCACHE_TRICK=no]) ! CXXFLAGS="$PUSHED_FLAGS" ! if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then ! AC_MSG_RESULT([yes]) ! else ! AC_MSG_RESULT([no, disabling ccaching of precompiled headers]) ! CCACHE= ! fi ! fi ! fi ! ! if test "x$CCACHE" != x; then ! CCACHE_SLOPPINESS=time_macros ! CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE" ! CCACHE_FLAGS=-fpch-preprocess ! ! if test "x$SET_CCACHE_DIR" != x; then ! mkdir -p $CCACHE_DIR > /dev/null 2>&1 ! chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1 ! fi ! fi ! ]) ! ! AC_DEFUN([EXTRACT_HOST_AND_BUILD_AND_LEGACY_VARS], [ # Expects $host_os $host_cpu $build_os and $build_cpu ! # and $with_data_model to have been setup! # # Translate the standard triplet(quadruplet) definition ! # of the host/build system into ! # HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows ! # HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince ! # HOST_OS_API=posix,winapi # ! # HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 ! # HOST_CPU_ARCH=x86,sparc,pcc,arm ! # HOST_CPU_BITS=32,64 ! # HOST_CPU_ENDIAN=big,little # # The same values are setup for BUILD_... # # And the legacy variables, for controlling the old makefiles. ! # LEGACY_HOST_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64... ! # LEGACY_HOST_CPU2=i386,amd64,sparc,sparcv9,arm,arm64... ! # LEGACY_HOST_CPU3=sparcv9,amd64 (but only on solaris) ! # LEGACY_HOST_OS_API=solaris,windows # # We also copy the autoconf trip/quadruplet ! # verbatim to HOST and BUILD ! AC_SUBST(HOST, ${host}) ! AC_SUBST(BUILD, ${build}) ! EXTRACT_VARS_FROM_OS_TO(HOST,$host_os) ! EXTRACT_VARS_FROM_CPU_TO(HOST,$host_cpu) ! EXTRACT_VARS_FROM_OS_TO(BUILD,$build_os) ! EXTRACT_VARS_FROM_CPU_TO(BUILD,$build_cpu) ! if test "x$HOST_OS" != xsolaris; then ! LEGACY_HOST_CPU3="" ! LEGACY_BUILD_CPU3="" fi ! # On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_HOST_CPU1) ... ! if test "x$HOST_OS" = xmacosx && test "x$HOST_CPU" = xx64; then ! LEGACY_HOST_CPU1="x86_64" fi ! SET_RELEASE_FILE_OS_VALUES() ]) ! AC_DEFUN([EXTRACT_VARS_FROM_OS_TO], [ ! EXTRACT_VARS_FROM_OS($2) $1_OS="$VAR_OS" $1_OS_FAMILY="$VAR_OS_FAMILY" $1_OS_API="$VAR_OS_API" AC_SUBST($1_OS) --- 21,83 ---- # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # ! AC_DEFUN([PLATFORM_EXTRACT_TARGET_AND_BUILD_AND_LEGACY_VARS], [ # Expects $host_os $host_cpu $build_os and $build_cpu ! # and $with_target_bits to have been setup! # # Translate the standard triplet(quadruplet) definition ! # of the target/build system into ! # OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows ! # OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince ! # OPENJDK_TARGET_OS_API=posix,winapi # ! # OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 ! # OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm ! # OPENJDK_TARGET_CPU_BITS=32,64 ! # OPENJDK_TARGET_CPU_ENDIAN=big,little # # The same values are setup for BUILD_... # # And the legacy variables, for controlling the old makefiles. ! # LEGACY_OPENJDK_TARGET_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64... ! # LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,sparc,sparcv9,arm,arm64... ! # LEGACY_OPENJDK_TARGET_CPU3=sparcv9,amd64 (but only on solaris) ! # LEGACY_OPENJDK_TARGET_OS_API=solaris,windows # # We also copy the autoconf trip/quadruplet ! # verbatim to OPENJDK_TARGET_SYSTEM (from the autoconf "host") and OPENJDK_BUILD_SYSTEM ! OPENJDK_TARGET_SYSTEM="$host" ! OPENJDK_BUILD_SYSTEM="$build" ! AC_SUBST(OPENJDK_TARGET_SYSTEM) ! AC_SUBST(OPENJDK_BUILD_SYSTEM) ! PLATFORM_EXTRACT_VARS_FROM_OS_TO(OPENJDK_TARGET,$host_os) ! PLATFORM_EXTRACT_VARS_FROM_CPU_TO(OPENJDK_TARGET,$host_cpu) ! PLATFORM_EXTRACT_VARS_FROM_OS_TO(OPENJDK_BUILD,$build_os) ! PLATFORM_EXTRACT_VARS_FROM_CPU_TO(OPENJDK_BUILD,$build_cpu) ! if test "x$OPENJDK_TARGET_OS" != xsolaris; then ! LEGACY_OPENJDK_TARGET_CPU3="" ! LEGACY_OPENJDK_BUILD_CPU3="" fi ! # On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_OPENJDK_TARGET_CPU1) ... ! if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$OPENJDK_TARGET_CPU" = xx64; then ! LEGACY_OPENJDK_TARGET_CPU1="x86_64" fi ! PLATFORM_SET_RELEASE_FILE_OS_VALUES ]) ! AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS_TO], [ ! PLATFORM_EXTRACT_VARS_FROM_OS($2) $1_OS="$VAR_OS" $1_OS_FAMILY="$VAR_OS_FAMILY" $1_OS_API="$VAR_OS_API" AC_SUBST($1_OS)
*** 304,316 **** LEGACY_$1_OS_API="windows" fi AC_SUBST(LEGACY_$1_OS_API) ]) ! AC_DEFUN([EXTRACT_VARS_FROM_CPU_TO], [ ! EXTRACT_VARS_FROM_CPU($2) $1_CPU="$VAR_CPU" $1_CPU_ARCH="$VAR_CPU_ARCH" $1_CPU_BITS="$VAR_CPU_BITS" $1_CPU_ENDIAN="$VAR_CPU_ENDIAN" --- 91,103 ---- LEGACY_$1_OS_API="windows" fi AC_SUBST(LEGACY_$1_OS_API) ]) ! AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU_TO], [ ! PLATFORM_EXTRACT_VARS_FROM_CPU($2) $1_CPU="$VAR_CPU" $1_CPU_ARCH="$VAR_CPU_ARCH" $1_CPU_BITS="$VAR_CPU_BITS" $1_CPU_ENDIAN="$VAR_CPU_ENDIAN"
*** 337,352 **** LEGACY_$1_CPU3="" if test "x$$1_CPU" = xx64; then LEGACY_$1_CPU3=amd64 fi if test "x$$1_CPU" = xsparcv9; then ! LEGACY_$1_CPU3=sparvc9 fi AC_SUBST(LEGACY_$1_CPU3) ]) ! AC_DEFUN([EXTRACT_VARS_FROM_CPU], [ # First argument is the cpu name from the trip/quad case "$1" in x86_64) VAR_CPU=x64 --- 124,139 ---- LEGACY_$1_CPU3="" if test "x$$1_CPU" = xx64; then LEGACY_$1_CPU3=amd64 fi if test "x$$1_CPU" = xsparcv9; then ! LEGACY_$1_CPU3=sparcv9 fi AC_SUBST(LEGACY_$1_CPU3) ]) ! AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU], [ # First argument is the cpu name from the trip/quad case "$1" in x86_64) VAR_CPU=x64
*** 370,381 **** VAR_LEGACY_CPU=alpha ;; arm*) VAR_CPU=arm VAR_CPU_ARCH=arm ! VAR_CPU_BITS=3264 ! VAR_CPU_ENDIAN=big VAR_LEGACY_CPU=arm ;; mips) VAR_CPU=mips VAR_CPU_ARCH=mips --- 157,168 ---- VAR_LEGACY_CPU=alpha ;; arm*) VAR_CPU=arm VAR_CPU_ARCH=arm ! VAR_CPU_BITS=32 ! VAR_CPU_ENDIAN=little VAR_LEGACY_CPU=arm ;; mips) VAR_CPU=mips VAR_CPU_ARCH=mips
*** 399,409 **** ;; powerpc64) VAR_CPU=ppc64 VAR_CPU_ARCH=ppc VAR_CPU_BITS=64 ! VAR_CPU_ENDIAN=32 VAR_LEGACY_CPU=ppc64 ;; sparc) VAR_CPU=sparc VAR_CPU_ARCH=sparc --- 186,196 ---- ;; powerpc64) VAR_CPU=ppc64 VAR_CPU_ARCH=ppc VAR_CPU_BITS=64 ! VAR_CPU_ENDIAN=big VAR_LEGACY_CPU=ppc64 ;; sparc) VAR_CPU=sparc VAR_CPU_ARCH=sparc
*** 414,424 **** sparc64) VAR_CPU=sparcv9 VAR_CPU_ARCH=sparc VAR_CPU_BITS=64 VAR_CPU_ENDIAN=big ! VAR_LEGACY_CPU=sparc_sparcv9 ;; s390) VAR_CPU=s390 VAR_CPU_ARCH=s390 VAR_CPU_BITS=32 --- 201,211 ---- sparc64) VAR_CPU=sparcv9 VAR_CPU_ARCH=sparc VAR_CPU_BITS=64 VAR_CPU_ENDIAN=big ! VAR_LEGACY_CPU=sparcv9 ;; s390) VAR_CPU=s390 VAR_CPU_ARCH=s390 VAR_CPU_BITS=32
*** 450,474 **** ;; esac fi fi if test "x$VAR_CPU_ARCH" = "xx86"; then ! if test "x$with_data_model" = "x64"; then VAR_CPU=x64 VAR_CPU_BITS=64 VAR_LEGACY_CPU=amd64 fi ! if test "x$with_data_model" = "x32"; then VAR_CPU=ia32 VAR_CPU_BITS=32 VAR_LEGACY_CPU=i586 fi fi ]) ! AC_DEFUN([EXTRACT_VARS_FROM_OS], [ case "$1" in *linux*) VAR_OS=linux VAR_OS_API=posix --- 237,277 ---- ;; esac fi fi + # on solaris x86...default seems to be 32-bit + if test "x$VAR_OS" = "xsolaris" && \ + test "x$with_target_bits" = "x" && \ + test "x$VAR_CPU_ARCH" = "xx86" + then + with_target_bits=32 + fi + if test "x$VAR_CPU_ARCH" = "xx86"; then ! if test "x$with_target_bits" = "x64"; then VAR_CPU=x64 VAR_CPU_BITS=64 VAR_LEGACY_CPU=amd64 fi ! if test "x$with_target_bits" = "x32"; then VAR_CPU=ia32 VAR_CPU_BITS=32 VAR_LEGACY_CPU=i586 fi fi + + if test "x$VAR_CPU_ARCH" = "xsparc"; then + if test "x$with_target_bits" = "x64"; then + VAR_CPU=sparcv9 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=sparcv9 + fi + fi ]) ! AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS], [ case "$1" in *linux*) VAR_OS=linux VAR_OS_API=posix
*** 493,547 **** VAR_OS=windows VAR_OS_API=winapi VAR_OS_FAMILY=windows ;; *) ! AC_MSG_ERROR([unsupported host operating system $1]) ;; esac ]) ! AC_DEFUN([CHECK_COMPILER_VERSION], ! [ ! # Test the compilers that their versions are new enough. ! # AC_MSG_CHECKING([version of GCC]) ! gcc_ver=`${CC} -dumpversion` ! gcc_major_ver=`echo ${gcc_ver}|cut -d'.' -f1` ! gcc_minor_ver=`echo ${gcc_ver}|cut -d'.' -f2` ! # AM_CONDITIONAL(GCC_OLD, test ! ${gcc_major_ver} -ge 4 -a ${gcc_minor_ver} -ge 3) ! # AC_MSG_RESULT([${gcc_ver} (major version ${gcc_major_ver}, minor version ${gcc_minor_ver})]) ! ]) ! ! # Fixes paths on windows hosts to be mixed mode short. ! AC_DEFUN([WIN_FIX_PATH], [ ! if test "x$BUILD_OS" = "xwindows"; then ! AC_PATH_PROG(CYGPATH, cygpath) ! tmp="[$]$1" ! # Convert to C:/ mixed style path without spaces. ! tmp=`$CYGPATH -s -m "$tmp"` ! $1="$tmp" ! fi ! ]) ! ! AC_DEFUN([SET_RELEASE_FILE_OS_VALUES], ! [ ! if test "x$HOST_OS" = "xsolaris"; then REQUIRED_OS_NAME=SunOS REQUIRED_OS_VERSION=5.10 fi ! if test "x$HOST_OS" = "xlinux"; then REQUIRED_OS_NAME=Linux REQUIRED_OS_VERSION=2.6 fi ! if test "x$HOST_OS" = "xwindows"; then REQUIRED_OS_NAME=Windows REQUIRED_OS_VERSION=5.1 fi ! if test "x$HOST_OS" = "xmacosx"; then REQUIRED_OS_NAME=Darwin REQUIRED_OS_VERSION=11.2 fi AC_SUBST(REQUIRED_OS_NAME) AC_SUBST(REQUIRED_OS_VERSION) ]) --- 296,498 ---- VAR_OS=windows VAR_OS_API=winapi VAR_OS_FAMILY=windows ;; *) ! AC_MSG_ERROR([unsupported operating system $1]) ;; esac ]) ! AC_DEFUN([PLATFORM_SET_RELEASE_FILE_OS_VALUES], [ ! if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then REQUIRED_OS_NAME=SunOS REQUIRED_OS_VERSION=5.10 fi ! if test "x$OPENJDK_TARGET_OS" = "xlinux"; then REQUIRED_OS_NAME=Linux REQUIRED_OS_VERSION=2.6 fi ! if test "x$OPENJDK_TARGET_OS" = "xwindows"; then REQUIRED_OS_NAME=Windows REQUIRED_OS_VERSION=5.1 fi ! if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then REQUIRED_OS_NAME=Darwin REQUIRED_OS_VERSION=11.2 fi AC_SUBST(REQUIRED_OS_NAME) AC_SUBST(REQUIRED_OS_VERSION) ]) + + #%%% Build and target systems %%% + AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET], + [ + # Figure out the build and target systems. # Note that in autoconf terminology, "build" is obvious, but "target" + # is confusing; it assumes you are cross-compiling a cross-compiler (!) and "target" is thus the target of the + # product you're building. The target of this build is called "host". Since this is confusing to most people, we + # have not adopted that system, but use "target" as the platform we are building for. In some places though we need + # to use the configure naming style. + AC_CANONICAL_BUILD + AC_CANONICAL_HOST + AC_CANONICAL_TARGET + + AC_ARG_WITH(target-bits, [AS_HELP_STRING([--with-target-bits], + [build 32-bit or 64-bit binaries (for platforms that support it), e.g. --with-target-bits=32 @<:@guessed@:>@])]) + + if test "x$with_target_bits" != x && \ + test "x$with_target_bits" != x32 && \ + test "x$with_target_bits" != x64 ; then + AC_MSG_ERROR([--with-target-bits can only be 32 or 64, you specified $with_target_bits!]) + fi + # Translate the standard cpu-vendor-kernel-os quadruplets into + # the new TARGET_.... and BUILD_... and the legacy names used by + # the openjdk build. + # It uses $host_os $host_cpu $build_os $build_cpu and $with_target_bits + PLATFORM_EXTRACT_TARGET_AND_BUILD_AND_LEGACY_VARS + + # The LEGACY_OPENJDK_TARGET_CPU3 is the setting for ISA_DIR. + if test "x$LEGACY_OPENJDK_TARGET_CPU3" != x; then + LEGACY_OPENJDK_TARGET_CPU3="/${LEGACY_OPENJDK_TARGET_CPU3}" + fi + + # Now the following vars are defined. + # OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows + # OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince + # OPENJDK_TARGET_OS_API=posix,winapi + # + # OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 + # OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm + # OPENJDK_TARGET_CPU_BITS=32,64 + # OPENJDK_TARGET_CPU_ENDIAN=big,little + # + # There is also a: + # LEGACY_OPENJDK_TARGET_CPU1=i586,amd64,.... # used to set the old var ARCH + # LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,.... # used to set the old var LIBARCH + # LEGACY_OPENJDK_TARGET_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris + # There was also a BUILDARCH that had i486,amd64,... but we do not use that + # in the new build. + # LEGACY_OPENJDK_TARGET_OS_API=solaris,windows # used to select source roots + ]) + + AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION], + [ + ############################################################################### + + # Note that this is the build platform OS version! + + OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" + OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" + OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" + OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" + AC_SUBST(OS_VERSION_MAJOR) + AC_SUBST(OS_VERSION_MINOR) + AC_SUBST(OS_VERSION_MICRO) + ]) + + AC_DEFUN_ONCE([PLATFORM_TEST_OPENJDK_TARGET_BITS], + [ + ############################################################################### + # + # Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code. + # (The JVM can use 32 or 64 bit Java pointers but that decision + # is made at runtime.) + # + AC_LANG_PUSH(C++) + OLD_CXXFLAGS="$CXXFLAGS" + if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then + CXXFLAGS="-m${with_target_bits} $CXXFLAGS" + fi + AC_CHECK_SIZEOF([int *], [1111]) + CXXFLAGS="$OLD_CXXFLAGS" + AC_LANG_POP(C++) + + # keep track of c/cxx flags that we added outselves... + # to prevent emitting warning... + ADDED_CFLAGS= + ADDED_CXXFLAGS= + ADDED_LDFLAGS= + + if test "x$ac_cv_sizeof_int_p" = x0; then + # The test failed, lets pick the assumed value. + ARCH_DATA_MODEL=$OPENJDK_TARGET_CPU_BITS + else + ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p` + + if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then + ADDED_CFLAGS=" -m${with_target_bits}" + ADDED_CXXFLAGS=" -m${with_target_bits}" + ADDED_LDFLAGS=" -m${with_target_bits}" + + CFLAGS="${CFLAGS}${ADDED_CFLAGS}" + CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}" + LDFLAGS="${LDFLAGS}${ADDED_LDFLAGS}" + + CFLAGS_JDK="${CFLAGS_JDK}${ADDED_CFLAGS}" + CXXFLAGS_JDK="${CXXFLAGS_JDK}${ADDED_CXXFLAGS}" + LDFLAGS_JDK="${LDFLAGS_JDK}${ADDED_LDFLAGS}" + fi + fi + + if test "x$ARCH_DATA_MODEL" = x64; then + A_LP64="LP64:=" + ADD_LP64="-D_LP64=1" + fi + AC_MSG_CHECKING([for target address size]) + AC_MSG_RESULT([$ARCH_DATA_MODEL bits]) + AC_SUBST(LP64,$A_LP64) + AC_SUBST(ARCH_DATA_MODEL) + + if test "x$ARCH_DATA_MODEL" != "x$OPENJDK_TARGET_CPU_BITS"; then + AC_MSG_ERROR([The tested number of bits in the target ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)]) + fi + + # + # NOTE: check for -mstackrealign needs to be below potential addition of -m32 + # + if test "x$OPENJDK_TARGET_CPU_BITS" = x32 && test "x$OPENJDK_TARGET_OS" = xmacosx; then + # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. + # While waiting for a better solution, the current workaround is to use -mstackrealign. + CFLAGS="$CFLAGS -mstackrealign" + AC_MSG_CHECKING([if 32-bit compiler supports -mstackrealign]) + AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])], + [ + AC_MSG_RESULT([yes]) + ], + [ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path.]) + ]) + fi + ]) + + AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_ENDIANNESS], + [ + ############################################################################### + # + # Is the target little of big endian? + # + AC_C_BIGENDIAN([ENDIAN="big"],[ENDIAN="little"],[ENDIAN="unknown"],[ENDIAN="universal_endianness"]) + + if test "x$ENDIAN" = xuniversal_endianness; then + AC_MSG_ERROR([Building with both big and little endianness is not supported]) + fi + if test "x$ENDIAN" = xunknown; then + ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN" + fi + if test "x$ENDIAN" != "x$OPENJDK_TARGET_CPU_ENDIAN"; then + AC_MSG_WARN([The tested endian in the target ($ENDIAN) differs from the endian expected to be found in the target ($OPENJDK_TARGET_CPU_ENDIAN)]) + ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN" + fi + AC_SUBST(ENDIAN) + ]) + + AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_ISADIR], + [ + ############################################################################### + # + # Could someone enlighten this configure script with a comment about libCrun? + # + # + ])