764 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			764 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh
 | |
| index ad3f7f232e..587b4c2657 100644
 | |
| --- a/common/autoconf/generated-configure.sh
 | |
| +++ b/common/autoconf/generated-configure.sh
 | |
| @@ -649,6 +649,9 @@ LLVM_LIBS
 | |
|  LLVM_LDFLAGS
 | |
|  LLVM_CFLAGS
 | |
|  LLVM_CONFIG
 | |
| +LIBFFI_LIB_FILE
 | |
| +LIBFFI_LIB_DIR
 | |
| +ENABLE_LIBFFI_BUNDLING
 | |
|  LIBFFI_LIBS
 | |
|  LIBFFI_CFLAGS
 | |
|  STATIC_CXX_SETTING
 | |
| @@ -1117,6 +1120,10 @@ with_fontconfig_include
 | |
|  with_giflib
 | |
|  with_zlib
 | |
|  with_stdc__lib
 | |
| +with_libffi
 | |
| +with_libffi_include
 | |
| +with_libffi_lib
 | |
| +enable_libffi_bundling
 | |
|  with_msvcr_dll
 | |
|  with_msvcp_dll
 | |
|  with_vcruntime_1_dll
 | |
| @@ -1867,6 +1874,9 @@ Optional Features:
 | |
|                            disable bundling of the freetype library with the
 | |
|                            build result [enabled on Windows or when using
 | |
|                            --with-freetype, disabled otherwise]
 | |
| +  --enable-libffi-bundling
 | |
| +                          enable bundling of libffi.so to make the built JDK
 | |
| +                          runnable on more systems
 | |
|    --enable-sjavac         use sjavac to do fast incremental compiles
 | |
|                            [disabled]
 | |
|    --disable-precompiled-headers
 | |
| @@ -1996,6 +2006,11 @@ Optional Packages:
 | |
|                            force linking of the C++ runtime on Linux to either
 | |
|                            static or dynamic, default is static with dynamic as
 | |
|                            fallback
 | |
| +  --with-libffi           specify prefix directory for the libffi package
 | |
| +                          (expecting the libraries under PATH/lib and the
 | |
| +                          headers under PATH/include)
 | |
| +  --with-libffi-include   specify directory for the libffi include files
 | |
| +  --with-libffi-lib       specify directory for the libffi library
 | |
|    --with-msvcr-dll        path to microsoft C runtime dll (msvcr*.dll)
 | |
|                            (Windows only) [probed]
 | |
|    --with-msvcp-dll        path to microsoft C++ runtime dll (msvcp*.dll)
 | |
| @@ -2878,6 +2893,52 @@ $as_echo "$ac_res" >&6; }
 | |
|    eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 | |
|  
 | |
|  } # ac_fn_c_check_header_compile
 | |
| +
 | |
| +# ac_fn_c_try_link LINENO
 | |
| +# -----------------------
 | |
| +# Try to link conftest.$ac_ext, and return whether this succeeded.
 | |
| +ac_fn_c_try_link ()
 | |
| +{
 | |
| +  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
 | |
| +  rm -f conftest.$ac_objext conftest$ac_exeext
 | |
| +  if { { ac_try="$ac_link"
 | |
| +case "(($ac_try" in
 | |
| +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
 | |
| +  *) ac_try_echo=$ac_try;;
 | |
| +esac
 | |
| +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
 | |
| +$as_echo "$ac_try_echo"; } >&5
 | |
| +  (eval "$ac_link") 2>conftest.err
 | |
| +  ac_status=$?
 | |
| +  if test -s conftest.err; then
 | |
| +    grep -v '^ *+' conftest.err >conftest.er1
 | |
| +    cat conftest.er1 >&5
 | |
| +    mv -f conftest.er1 conftest.err
 | |
| +  fi
 | |
| +  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
 | |
| +  test $ac_status = 0; } && {
 | |
| +	 test -z "$ac_c_werror_flag" ||
 | |
| +	 test ! -s conftest.err
 | |
| +       } && test -s conftest$ac_exeext && {
 | |
| +	 test "$cross_compiling" = yes ||
 | |
| +	 test -x conftest$ac_exeext
 | |
| +       }; then :
 | |
| +  ac_retval=0
 | |
| +else
 | |
| +  $as_echo "$as_me: failed program was:" >&5
 | |
| +sed 's/^/| /' conftest.$ac_ext >&5
 | |
| +
 | |
| +	ac_retval=1
 | |
| +fi
 | |
| +  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
 | |
| +  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
 | |
| +  # interfere with the next link command; also delete a directory that is
 | |
| +  # left behind by Apple's compiler.  We do this before executing the actions.
 | |
| +  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
 | |
| +  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 | |
| +  as_fn_set_status $ac_retval
 | |
| +
 | |
| +} # ac_fn_c_try_link
 | |
|  cat >config.log <<_ACEOF
 | |
|  This file contains any messages produced by compilers while
 | |
|  running configure, to aid debugging if configure makes a mistake.
 | |
| @@ -4432,7 +4493,7 @@ VS_TOOLSET_SUPPORTED_2022=true
 | |
|  #CUSTOM_AUTOCONF_INCLUDE
 | |
|  
 | |
|  # Do not change or remove the following line, it is needed for consistency checks:
 | |
| -DATE_WHEN_GENERATED=1716396030
 | |
| +DATE_WHEN_GENERATED=1737049912
 | |
|  
 | |
|  ###############################################################################
 | |
|  #
 | |
| @@ -50215,8 +50276,70 @@ $as_echo "static" >&6; }
 | |
|    fi
 | |
|  
 | |
|  
 | |
| +
 | |
| +# Check whether --with-libffi was given.
 | |
| +if test "${with_libffi+set}" = set; then :
 | |
| +  withval=$with_libffi;
 | |
| +fi
 | |
| +
 | |
| +
 | |
| +# Check whether --with-libffi-include was given.
 | |
| +if test "${with_libffi_include+set}" = set; then :
 | |
| +  withval=$with_libffi_include;
 | |
| +fi
 | |
| +
 | |
| +
 | |
| +# Check whether --with-libffi-lib was given.
 | |
| +if test "${with_libffi_lib+set}" = set; then :
 | |
| +  withval=$with_libffi_lib;
 | |
| +fi
 | |
| +
 | |
| +  # Check whether --enable-libffi-bundling was given.
 | |
| +if test "${enable_libffi_bundling+set}" = set; then :
 | |
| +  enableval=$enable_libffi_bundling;
 | |
| +fi
 | |
| +
 | |
| +
 | |
| +  # Check if ffi is needed
 | |
|    if test "x$JVM_VARIANT_ZERO" = xtrue || test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then
 | |
| -    # Figure out LIBFFI_CFLAGS and LIBFFI_LIBS
 | |
| +    NEEDS_LIB_FFI=true
 | |
| +  else
 | |
| +    NEEDS_LIB_FFI=false
 | |
| +  fi
 | |
| +
 | |
| +  if test "x$NEEDS_LIB_FFI" = xfalse; then
 | |
| +    if test "x${with_libffi}" != x || test "x${with_libffi_include}" != x || test "x${with_libffi_lib}" != x; then
 | |
| +      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libffi not used, so --with-libffi is ignored" >&5
 | |
| +$as_echo "$as_me: WARNING: libffi not used, so --with-libffi is ignored" >&2;}
 | |
| +    fi
 | |
| +    LIBFFI_CFLAGS=
 | |
| +    LIBFFI_LIBS=
 | |
| +  else
 | |
| +    LIBFFI_FOUND=no
 | |
| +
 | |
| +    if test "x${with_libffi}" = xno || test "x${with_libffi_include}" = xno || test "x${with_libffi_lib}" = xno; then
 | |
| +      as_fn_error $? "It is not possible to disable the use of libffi. Remove the --without-libffi option." "$LINENO" 5
 | |
| +    fi
 | |
| +
 | |
| +    if test "x${with_libffi}" != x; then
 | |
| +      LIBFFI_LIB_PATH="${with_libffi}/lib"
 | |
| +      LIBFFI_LIBS="-L${with_libffi}/lib -lffi"
 | |
| +      LIBFFI_CFLAGS="-I${with_libffi}/include"
 | |
| +      LIBFFI_FOUND=yes
 | |
| +    fi
 | |
| +    if test "x${with_libffi_include}" != x; then
 | |
| +      LIBFFI_CFLAGS="-I${with_libffi_include}"
 | |
| +      LIBFFI_FOUND=yes
 | |
| +    fi
 | |
| +    if test "x${with_libffi_lib}" != x; then
 | |
| +      LIBFFI_LIB_PATH="${with_libffi_lib}"
 | |
| +      LIBFFI_LIBS="-L${with_libffi_lib} -lffi"
 | |
| +      LIBFFI_FOUND=yes
 | |
| +    fi
 | |
| +    # Do not try pkg-config if we have a sysroot set.
 | |
| +    if test "x$SYSROOT" = x; then
 | |
| +      if test "x$LIBFFI_FOUND" = xno; then
 | |
| +        # Figure out LIBFFI_CFLAGS and LIBFFI_LIBS
 | |
|  
 | |
|  pkg_failed=no
 | |
|  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBFFI" >&5
 | |
| @@ -50272,40 +50395,224 @@ fi
 | |
|  	# Put the nasty error message in config.log where it belongs
 | |
|  	echo "$LIBFFI_PKG_ERRORS" >&5
 | |
|  
 | |
| -	as_fn_error $? "Package requirements (libffi) were not met:
 | |
| -
 | |
| -$LIBFFI_PKG_ERRORS
 | |
| -
 | |
| -Consider adjusting the PKG_CONFIG_PATH environment variable if you
 | |
| -installed software in a non-standard prefix.
 | |
| -
 | |
| -Alternatively, you may set the environment variables LIBFFI_CFLAGS
 | |
| -and LIBFFI_LIBS to avoid the need to call pkg-config.
 | |
| -See the pkg-config man page for more details.
 | |
| -" "$LINENO" 5
 | |
| +	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 | |
| +$as_echo "no" >&6; }
 | |
| +                LIBFFI_FOUND=no
 | |
|  elif test $pkg_failed = untried; then
 | |
| -	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 | |
| -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 | |
| -as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
 | |
| -is in your PATH or set the PKG_CONFIG environment variable to the full
 | |
| -path to pkg-config.
 | |
| -
 | |
| -Alternatively, you may set the environment variables LIBFFI_CFLAGS
 | |
| -and LIBFFI_LIBS to avoid the need to call pkg-config.
 | |
| -See the pkg-config man page for more details.
 | |
| -
 | |
| -To get pkg-config, see <http://pkg-config.freedesktop.org/>.
 | |
| -See \`config.log' for more details" "$LINENO" 5; }
 | |
| +	LIBFFI_FOUND=no
 | |
|  else
 | |
|  	LIBFFI_CFLAGS=$pkg_cv_LIBFFI_CFLAGS
 | |
|  	LIBFFI_LIBS=$pkg_cv_LIBFFI_LIBS
 | |
|          { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 | |
|  $as_echo "yes" >&6; }
 | |
| -	:
 | |
| +	LIBFFI_FOUND=yes
 | |
| +fi
 | |
| +      fi
 | |
| +    fi
 | |
| +    if test "x$LIBFFI_FOUND" = xno; then
 | |
| +      for ac_header in ffi.h
 | |
| +do :
 | |
| +  ac_fn_cxx_check_header_mongrel "$LINENO" "ffi.h" "ac_cv_header_ffi_h" "$ac_includes_default"
 | |
| +if test "x$ac_cv_header_ffi_h" = xyes; then :
 | |
| +  cat >>confdefs.h <<_ACEOF
 | |
| +#define HAVE_FFI_H 1
 | |
| +_ACEOF
 | |
| +
 | |
| +            LIBFFI_FOUND=yes
 | |
| +            LIBFFI_CFLAGS=
 | |
| +            LIBFFI_LIBS=-lffi
 | |
| +
 | |
| +else
 | |
| +  LIBFFI_FOUND=no
 | |
| +
 | |
| +fi
 | |
| +
 | |
| +done
 | |
| +
 | |
| +    fi
 | |
| +    if test "x$LIBFFI_FOUND" = xno; then
 | |
| +
 | |
| +  # Print a helpful message on how to acquire the necessary build dependency.
 | |
| +  # ffi is the help tag: freetype, cups, pulse, alsa etc
 | |
| +  MISSING_DEPENDENCY=ffi
 | |
| +
 | |
| +  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
 | |
| +    cygwin_help $MISSING_DEPENDENCY
 | |
| +  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
 | |
| +    msys_help $MISSING_DEPENDENCY
 | |
| +  else
 | |
| +    PKGHANDLER_COMMAND=
 | |
| +
 | |
| +    case $PKGHANDLER in
 | |
| +      apt-get)
 | |
| +        apt_help     $MISSING_DEPENDENCY ;;
 | |
| +      yum)
 | |
| +        yum_help     $MISSING_DEPENDENCY ;;
 | |
| +      port)
 | |
| +        port_help    $MISSING_DEPENDENCY ;;
 | |
| +      pkgutil)
 | |
| +        pkgutil_help $MISSING_DEPENDENCY ;;
 | |
| +      pkgadd)
 | |
| +        pkgadd_help  $MISSING_DEPENDENCY ;;
 | |
| +    esac
 | |
| +
 | |
| +    if test "x$PKGHANDLER_COMMAND" != x; then
 | |
| +      HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'."
 | |
| +    fi
 | |
| +  fi
 | |
| +
 | |
| +      as_fn_error $? "Could not find libffi! $HELP_MSG" "$LINENO" 5
 | |
| +    fi
 | |
| +
 | |
| +    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libffi works" >&5
 | |
| +$as_echo_n "checking if libffi works... " >&6; }
 | |
| +    ac_ext=c
 | |
| +ac_cpp='$CPP $CPPFLAGS'
 | |
| +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 | |
| +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 | |
| +ac_compiler_gnu=$ac_cv_c_compiler_gnu
 | |
| +
 | |
| +    OLD_CFLAGS="$CFLAGS"
 | |
| +    CFLAGS="$CFLAGS $LIBFFI_CFLAGS"
 | |
| +    OLD_LIBS="$LIBS"
 | |
| +    LIBS="$LIBS $LIBFFI_LIBS"
 | |
| +    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 | |
| +/* end confdefs.h.  */
 | |
| +#include <ffi.h>
 | |
| +int
 | |
| +main (void)
 | |
| +{
 | |
| +
 | |
| +          ffi_call(NULL, NULL, NULL, NULL);
 | |
| +          return 0;
 | |
| +
 | |
| +  ;
 | |
| +  return 0;
 | |
| +}
 | |
| +_ACEOF
 | |
| +if ac_fn_c_try_link "$LINENO"; then :
 | |
| +  LIBFFI_WORKS=yes
 | |
| +else
 | |
| +  LIBFFI_WORKS=no
 | |
| +
 | |
|  fi
 | |
| +rm -f core conftest.err conftest.$ac_objext \
 | |
| +    conftest$ac_exeext conftest.$ac_ext
 | |
| +    CFLAGS="$OLD_CFLAGS"
 | |
| +    LIBS="$OLD_LIBS"
 | |
| +    ac_ext=cpp
 | |
| +ac_cpp='$CXXCPP $CPPFLAGS'
 | |
| +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 | |
| +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 | |
| +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 | |
| +
 | |
| +    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBFFI_WORKS" >&5
 | |
| +$as_echo "$LIBFFI_WORKS" >&6; }
 | |
|  
 | |
| +    if test "x$LIBFFI_WORKS" = xno; then
 | |
| +
 | |
| +  # Print a helpful message on how to acquire the necessary build dependency.
 | |
| +  # ffi is the help tag: freetype, cups, pulse, alsa etc
 | |
| +  MISSING_DEPENDENCY=ffi
 | |
| +
 | |
| +  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
 | |
| +    cygwin_help $MISSING_DEPENDENCY
 | |
| +  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
 | |
| +    msys_help $MISSING_DEPENDENCY
 | |
| +  else
 | |
| +    PKGHANDLER_COMMAND=
 | |
| +
 | |
| +    case $PKGHANDLER in
 | |
| +      apt-get)
 | |
| +        apt_help     $MISSING_DEPENDENCY ;;
 | |
| +      yum)
 | |
| +        yum_help     $MISSING_DEPENDENCY ;;
 | |
| +      port)
 | |
| +        port_help    $MISSING_DEPENDENCY ;;
 | |
| +      pkgutil)
 | |
| +        pkgutil_help $MISSING_DEPENDENCY ;;
 | |
| +      pkgadd)
 | |
| +        pkgadd_help  $MISSING_DEPENDENCY ;;
 | |
| +    esac
 | |
| +
 | |
| +    if test "x$PKGHANDLER_COMMAND" != x; then
 | |
| +      HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'."
 | |
| +    fi
 | |
|    fi
 | |
|  
 | |
| +      as_fn_error $? "Found libffi but could not link and compile with it. $HELP_MSG" "$LINENO" 5
 | |
| +    fi
 | |
| +
 | |
| +    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libffi should be bundled" >&5
 | |
| +$as_echo_n "checking if libffi should be bundled... " >&6; }
 | |
| +    if test "x$enable_libffi_bundling" = "x"; then
 | |
| +      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 | |
| +$as_echo "no" >&6; }
 | |
| +      ENABLE_LIBFFI_BUNDLING=false
 | |
| +    elif  test "x$enable_libffi_bundling" = "xno"; then
 | |
| +      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, forced" >&5
 | |
| +$as_echo "no, forced" >&6; }
 | |
| +      ENABLE_LIBFFI_BUNDLING=false
 | |
| +    elif  test "x$enable_libffi_bundling" = "xyes"; then
 | |
| +      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, forced" >&5
 | |
| +$as_echo "yes, forced" >&6; }
 | |
| +      ENABLE_LIBFFI_BUNDLING=true
 | |
| +    else
 | |
| +      as_fn_error $? "Invalid value for --enable-libffi-bundling" "$LINENO" 5
 | |
| +    fi
 | |
| +
 | |
| +    # Find the libffi.so.X to bundle
 | |
| +    if test "x${ENABLE_LIBFFI_BUNDLING}" = "xtrue"; then
 | |
| +      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libffi lib file location" >&5
 | |
| +$as_echo_n "checking for libffi lib file location... " >&6; }
 | |
| +      if test "x${LIBFFI_LIB_PATH}" != x; then
 | |
| +        if test -e ${LIBFFI_LIB_PATH}/libffi.so.?; then
 | |
| +          LIBFFI_LIB_FILE="${LIBFFI_LIB_PATH}/libffi.so.?"
 | |
| +        else
 | |
| +          as_fn_error $? "Could not locate libffi.so.? for bundling in ${LIBFFI_LIB_PATH}" "$LINENO" 5
 | |
| +        fi
 | |
| +      else
 | |
| +        # If we don't have an explicit path, look in a few obvious places
 | |
| +        if test "x${OPENJDK_TARGET_CPU}" = "xx86"; then
 | |
| +          if test -e ${SYSROOT}/usr/lib/libffi.so.? ; then
 | |
| +            LIBFFI_LIB_FILE="${SYSROOT}/usr/lib/libffi.so.?"
 | |
| +          elif test -e ${SYSROOT}/usr/lib/i386-linux-gnu/libffi.so.? ; then
 | |
| +            LIBFFI_LIB_FILE="${SYSROOT}/usr/lib/i386-linux-gnu/libffi.so.?"
 | |
| +          else
 | |
| +            as_fn_error $? "Could not locate libffi.so.? for bundling" "$LINENO" 5
 | |
| +          fi
 | |
| +        elif test "x${OPENJDK_TARGET_CPU}" = "xx86_64"; then
 | |
| +          if test -e ${SYSROOT}/usr/lib64/libffi.so.? ; then
 | |
| +            LIBFFI_LIB_FILE="${SYSROOT}/usr/lib64/libffi.so.?"
 | |
| +          elif test -e ${SYSROOT}/usr/lib/x86_64-linux-gnu/libffi.so.? ; then
 | |
| +            LIBFFI_LIB_FILE="${SYSROOT}/usr/lib/x86_64-linux-gnu/libffi.so.?"
 | |
| +          else
 | |
| +            as_fn_error $? "Could not locate libffi.so.? for bundling" "$LINENO" 5
 | |
| +          fi
 | |
| +        else
 | |
| +          # Fallback on the default /usr/lib dir
 | |
| +          if test -e ${SYSROOT}/usr/lib/libffi.so.? ; then
 | |
| +            LIBFFI_LIB_FILE="${SYSROOT}/usr/lib/libffi.so.?"
 | |
| +          else
 | |
| +            as_fn_error $? "Could not locate libffi.so.? for bundling" "$LINENO" 5
 | |
| +          fi
 | |
| +        fi
 | |
| +      fi
 | |
| +      # Make sure the wildcard is evaluated
 | |
| +      LIBFFI_LIB_FILE="$(ls ${LIBFFI_LIB_FILE})"
 | |
| +      LIBFFI_LIB_DIR="$(dirname ${LIBFFI_LIB_FILE})"
 | |
| +      LIBFFI_LIB_FILE="$(basename ${LIBFFI_LIB_FILE})"
 | |
| +      { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${LIBFFI_LIB_FILE} in ${LIBFFI_LIB_DIR}" >&5
 | |
| +$as_echo "${LIBFFI_LIB_FILE} in ${LIBFFI_LIB_DIR}" >&6; }
 | |
| +    fi
 | |
| +  fi
 | |
| +
 | |
| +
 | |
| +
 | |
| +
 | |
| +
 | |
| +
 | |
| +
 | |
|    if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then
 | |
|      # Extract the first word of "llvm-config", so it can be a program name with args.
 | |
|  set dummy llvm-config; ac_word=$2
 | |
| diff --git a/common/autoconf/libraries.m4 b/common/autoconf/libraries.m4
 | |
| index 6efae578ea..4ed8b4fdd6 100644
 | |
| --- a/common/autoconf/libraries.m4
 | |
| +++ b/common/autoconf/libraries.m4
 | |
| @@ -988,12 +988,161 @@ AC_DEFUN_ONCE([LIB_SETUP_STATIC_LINK_LIBSTDCPP],
 | |
|    fi
 | |
|    AC_SUBST(STATIC_CXX_SETTING)
 | |
|  
 | |
| +  AC_ARG_WITH(libffi, [AS_HELP_STRING([--with-libffi],
 | |
| +      [specify prefix directory for the libffi package
 | |
| +      (expecting the libraries under PATH/lib and the headers under PATH/include)])])
 | |
| +  AC_ARG_WITH(libffi-include, [AS_HELP_STRING([--with-libffi-include],
 | |
| +      [specify directory for the libffi include files])])
 | |
| +  AC_ARG_WITH(libffi-lib, [AS_HELP_STRING([--with-libffi-lib],
 | |
| +      [specify directory for the libffi library])])
 | |
| +  AC_ARG_ENABLE(libffi-bundling, [AS_HELP_STRING([--enable-libffi-bundling],
 | |
| +      [enable bundling of libffi.so to make the built JDK runnable on more systems])])
 | |
| +
 | |
| +  # Check if ffi is needed
 | |
|    if test "x$JVM_VARIANT_ZERO" = xtrue || test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then
 | |
| -    # Figure out LIBFFI_CFLAGS and LIBFFI_LIBS
 | |
| -    PKG_CHECK_MODULES([LIBFFI], [libffi])
 | |
| +    NEEDS_LIB_FFI=true
 | |
| +  else
 | |
| +    NEEDS_LIB_FFI=false
 | |
| +  fi
 | |
| +
 | |
| +  if test "x$NEEDS_LIB_FFI" = xfalse; then
 | |
| +    if test "x${with_libffi}" != x || test "x${with_libffi_include}" != x || test "x${with_libffi_lib}" != x; then
 | |
| +      AC_MSG_WARN([libffi not used, so --with-libffi is ignored])
 | |
| +    fi
 | |
| +    LIBFFI_CFLAGS=
 | |
| +    LIBFFI_LIBS=
 | |
| +  else
 | |
| +    LIBFFI_FOUND=no
 | |
|  
 | |
| +    if test "x${with_libffi}" = xno || test "x${with_libffi_include}" = xno || test "x${with_libffi_lib}" = xno; then
 | |
| +      AC_MSG_ERROR([It is not possible to disable the use of libffi. Remove the --without-libffi option.])
 | |
| +    fi
 | |
| +
 | |
| +    if test "x${with_libffi}" != x; then
 | |
| +      LIBFFI_LIB_PATH="${with_libffi}/lib"
 | |
| +      LIBFFI_LIBS="-L${with_libffi}/lib -lffi"
 | |
| +      LIBFFI_CFLAGS="-I${with_libffi}/include"
 | |
| +      LIBFFI_FOUND=yes
 | |
| +    fi
 | |
| +    if test "x${with_libffi_include}" != x; then
 | |
| +      LIBFFI_CFLAGS="-I${with_libffi_include}"
 | |
| +      LIBFFI_FOUND=yes
 | |
| +    fi
 | |
| +    if test "x${with_libffi_lib}" != x; then
 | |
| +      LIBFFI_LIB_PATH="${with_libffi_lib}"
 | |
| +      LIBFFI_LIBS="-L${with_libffi_lib} -lffi"
 | |
| +      LIBFFI_FOUND=yes
 | |
| +    fi
 | |
| +    # Do not try pkg-config if we have a sysroot set.
 | |
| +    if test "x$SYSROOT" = x; then
 | |
| +      if test "x$LIBFFI_FOUND" = xno; then
 | |
| +        # Figure out LIBFFI_CFLAGS and LIBFFI_LIBS
 | |
| +        PKG_CHECK_MODULES([LIBFFI], [libffi], [LIBFFI_FOUND=yes], [LIBFFI_FOUND=no])
 | |
| +      fi
 | |
| +    fi
 | |
| +    if test "x$LIBFFI_FOUND" = xno; then
 | |
| +      AC_CHECK_HEADERS([ffi.h],
 | |
| +          [
 | |
| +            LIBFFI_FOUND=yes
 | |
| +            LIBFFI_CFLAGS=
 | |
| +            LIBFFI_LIBS=-lffi
 | |
| +          ],
 | |
| +          [LIBFFI_FOUND=no]
 | |
| +      )
 | |
| +    fi
 | |
| +    if test "x$LIBFFI_FOUND" = xno; then
 | |
| +      HELP_MSG_MISSING_DEPENDENCY([ffi])
 | |
| +      AC_MSG_ERROR([Could not find libffi! $HELP_MSG])
 | |
| +    fi
 | |
| +
 | |
| +    AC_MSG_CHECKING([if libffi works])
 | |
| +    AC_LANG_PUSH(C)
 | |
| +    OLD_CFLAGS="$CFLAGS"
 | |
| +    CFLAGS="$CFLAGS $LIBFFI_CFLAGS"
 | |
| +    OLD_LIBS="$LIBS"
 | |
| +    LIBS="$LIBS $LIBFFI_LIBS"
 | |
| +    AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <ffi.h>],
 | |
| +        [
 | |
| +          ffi_call(NULL, NULL, NULL, NULL);
 | |
| +          return 0;
 | |
| +        ])],
 | |
| +        [LIBFFI_WORKS=yes],
 | |
| +        [LIBFFI_WORKS=no]
 | |
| +    )
 | |
| +    CFLAGS="$OLD_CFLAGS"
 | |
| +    LIBS="$OLD_LIBS"
 | |
| +    AC_LANG_POP(C)
 | |
| +    AC_MSG_RESULT([$LIBFFI_WORKS])
 | |
| +
 | |
| +    if test "x$LIBFFI_WORKS" = xno; then
 | |
| +      HELP_MSG_MISSING_DEPENDENCY([ffi])
 | |
| +      AC_MSG_ERROR([Found libffi but could not link and compile with it. $HELP_MSG])
 | |
| +    fi
 | |
| +
 | |
| +    AC_MSG_CHECKING([if libffi should be bundled])
 | |
| +    if test "x$enable_libffi_bundling" = "x"; then
 | |
| +      AC_MSG_RESULT([no])
 | |
| +      ENABLE_LIBFFI_BUNDLING=false
 | |
| +    elif  test "x$enable_libffi_bundling" = "xno"; then
 | |
| +      AC_MSG_RESULT([no, forced])
 | |
| +      ENABLE_LIBFFI_BUNDLING=false
 | |
| +    elif  test "x$enable_libffi_bundling" = "xyes"; then
 | |
| +      AC_MSG_RESULT([yes, forced])
 | |
| +      ENABLE_LIBFFI_BUNDLING=true
 | |
| +    else
 | |
| +      AC_MSG_ERROR([Invalid value for --enable-libffi-bundling])
 | |
| +    fi
 | |
| +
 | |
| +    # Find the libffi.so.X to bundle
 | |
| +    if test "x${ENABLE_LIBFFI_BUNDLING}" = "xtrue"; then
 | |
| +      AC_MSG_CHECKING([for libffi lib file location])
 | |
| +      if test "x${LIBFFI_LIB_PATH}" != x; then
 | |
| +        if test -e ${LIBFFI_LIB_PATH}/libffi.so.?; then
 | |
| +          LIBFFI_LIB_FILE="${LIBFFI_LIB_PATH}/libffi.so.?"
 | |
| +        else
 | |
| +          AC_MSG_ERROR([Could not locate libffi.so.? for bundling in ${LIBFFI_LIB_PATH}])
 | |
| +        fi
 | |
| +      else
 | |
| +        # If we don't have an explicit path, look in a few obvious places
 | |
| +        if test "x${OPENJDK_TARGET_CPU}" = "xx86"; then
 | |
| +          if test -e ${SYSROOT}/usr/lib/libffi.so.? ; then
 | |
| +            LIBFFI_LIB_FILE="${SYSROOT}/usr/lib/libffi.so.?"
 | |
| +          elif test -e ${SYSROOT}/usr/lib/i386-linux-gnu/libffi.so.? ; then
 | |
| +            LIBFFI_LIB_FILE="${SYSROOT}/usr/lib/i386-linux-gnu/libffi.so.?"
 | |
| +          else
 | |
| +            AC_MSG_ERROR([Could not locate libffi.so.? for bundling])
 | |
| +          fi
 | |
| +        elif test "x${OPENJDK_TARGET_CPU}" = "xx86_64"; then
 | |
| +          if test -e ${SYSROOT}/usr/lib64/libffi.so.? ; then
 | |
| +            LIBFFI_LIB_FILE="${SYSROOT}/usr/lib64/libffi.so.?"
 | |
| +          elif test -e ${SYSROOT}/usr/lib/x86_64-linux-gnu/libffi.so.? ; then
 | |
| +            LIBFFI_LIB_FILE="${SYSROOT}/usr/lib/x86_64-linux-gnu/libffi.so.?"
 | |
| +          else
 | |
| +            AC_MSG_ERROR([Could not locate libffi.so.? for bundling])
 | |
| +          fi
 | |
| +        else
 | |
| +          # Fallback on the default /usr/lib dir
 | |
| +          if test -e ${SYSROOT}/usr/lib/libffi.so.? ; then
 | |
| +            LIBFFI_LIB_FILE="${SYSROOT}/usr/lib/libffi.so.?"
 | |
| +          else
 | |
| +            AC_MSG_ERROR([Could not locate libffi.so.? for bundling])
 | |
| +          fi
 | |
| +        fi
 | |
| +      fi
 | |
| +      # Make sure the wildcard is evaluated
 | |
| +      LIBFFI_LIB_FILE="$(ls ${LIBFFI_LIB_FILE})"
 | |
| +      LIBFFI_LIB_DIR="$(dirname ${LIBFFI_LIB_FILE})"
 | |
| +      LIBFFI_LIB_FILE="$(basename ${LIBFFI_LIB_FILE})"
 | |
| +      AC_MSG_RESULT([${LIBFFI_LIB_FILE} in ${LIBFFI_LIB_DIR}])
 | |
| +    fi
 | |
|    fi
 | |
|  
 | |
| +  AC_SUBST(LIBFFI_CFLAGS)
 | |
| +  AC_SUBST(LIBFFI_LIBS)
 | |
| +  AC_SUBST(ENABLE_LIBFFI_BUNDLING)
 | |
| +  AC_SUBST(LIBFFI_LIB_DIR)
 | |
| +  AC_SUBST(LIBFFI_LIB_FILE)
 | |
| +
 | |
|    if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then
 | |
|      AC_CHECK_PROG([LLVM_CONFIG], [llvm-config], [llvm-config])
 | |
|  
 | |
| diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in
 | |
| index 9573bb2cbd..8da3ac32a0 100644
 | |
| --- a/common/autoconf/spec.gmk.in
 | |
| +++ b/common/autoconf/spec.gmk.in
 | |
| @@ -311,6 +311,11 @@ FONTCONFIG_CFLAGS:=@FONTCONFIG_CFLAGS@
 | |
|  CUPS_CFLAGS:=@CUPS_CFLAGS@
 | |
|  ALSA_LIBS:=@ALSA_LIBS@
 | |
|  ALSA_CFLAGS:=@ALSA_CFLAGS@
 | |
| +LIBFFI_LIBS:=@LIBFFI_LIBS@
 | |
| +LIBFFI_CFLAGS:=@LIBFFI_CFLAGS@
 | |
| +ENABLE_LIBFFI_BUNDLING:=@ENABLE_LIBFFI_BUNDLING@
 | |
| +LIBFFI_LIB_DIR:=@LIBFFI_LIB_DIR@
 | |
| +LIBFFI_LIB_FILE:=@LIBFFI_LIB_FILE@
 | |
|  
 | |
|  PACKAGE_PATH=@PACKAGE_PATH@
 | |
|  
 | |
| diff --git a/hotspot/make/Makefile b/hotspot/make/Makefile
 | |
| index ad195763be..b9114cb99a 100644
 | |
| --- a/hotspot/make/Makefile
 | |
| +++ b/hotspot/make/Makefile
 | |
| @@ -476,6 +476,8 @@ $(EXPORT_INCLUDE_DIR)/%:			$(ZERO_BUILD_DIR)/../generated/jvmtifiles/%
 | |
|  # Unix
 | |
|  $(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(ZERO_BUILD_DIR)/%.$(LIBRARY_SUFFIX)
 | |
|  	$(install-file)
 | |
| +$(EXPORT_JRE_LIB_ARCH_DIR)/$(LIBFFI_LIB_FILE):  $(LIBFFI_LIB_DIR)/$(LIBFFI_LIB_FILE)
 | |
| +	$(install-file)
 | |
|  $(EXPORT_JRE_LIB_ARCH_DIR)/%.debuginfo:		$(ZERO_BUILD_DIR)/%.debuginfo
 | |
|  	$(install-file)
 | |
|  $(EXPORT_JRE_LIB_ARCH_DIR)/%.diz:		$(ZERO_BUILD_DIR)/%.diz
 | |
| diff --git a/hotspot/make/aix/makefiles/defs.make b/hotspot/make/aix/makefiles/defs.make
 | |
| index b12c9c8df2..db10f6a68f 100644
 | |
| --- a/hotspot/make/aix/makefiles/defs.make
 | |
| +++ b/hotspot/make/aix/makefiles/defs.make
 | |
| @@ -220,4 +220,7 @@ ADD_SA_BINARIES/zero  =
 | |
|  
 | |
|  EXPORT_LIST += $(ADD_SA_BINARIES/$(HS_ARCH))
 | |
|  
 | |
| +ifeq ($(ENABLE_LIBFFI_BUNDLING), true)
 | |
| +  EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/$(LIBFFI_LIB_FILE)
 | |
| +endif
 | |
|  
 | |
| diff --git a/hotspot/make/bsd/makefiles/defs.make b/hotspot/make/bsd/makefiles/defs.make
 | |
| index 7cd21cc175..23436f12d8 100644
 | |
| --- a/hotspot/make/bsd/makefiles/defs.make
 | |
| +++ b/hotspot/make/bsd/makefiles/defs.make
 | |
| @@ -364,6 +364,10 @@ ADD_SA_BINARIES/zero  =
 | |
|  
 | |
|  EXPORT_LIST += $(ADD_SA_BINARIES/$(HS_ARCH))
 | |
|  
 | |
| +ifeq ($(ENABLE_LIBFFI_BUNDLING), true)
 | |
| +  EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/$(LIBFFI_LIB_FILE)
 | |
| +endif
 | |
| +
 | |
|  # Universal build settings
 | |
|  ifeq ($(OS_VENDOR), Darwin)
 | |
|    # Build universal binaries by default on Mac OS X
 | |
| diff --git a/hotspot/make/linux/makefiles/defs.make b/hotspot/make/linux/makefiles/defs.make
 | |
| index ec414639d2..0baa4f068d 100644
 | |
| --- a/hotspot/make/linux/makefiles/defs.make
 | |
| +++ b/hotspot/make/linux/makefiles/defs.make
 | |
| @@ -333,4 +333,6 @@ ADD_SA_BINARIES/zero  =
 | |
|  
 | |
|  EXPORT_LIST += $(ADD_SA_BINARIES/$(HS_ARCH))
 | |
|  
 | |
| -
 | |
| +ifeq ($(ENABLE_LIBFFI_BUNDLING), true)
 | |
| +  EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/$(LIBFFI_LIB_FILE)
 | |
| +endif
 | |
| diff --git a/hotspot/make/solaris/makefiles/defs.make b/hotspot/make/solaris/makefiles/defs.make
 | |
| index c88351c82b..cb838e854d 100644
 | |
| --- a/hotspot/make/solaris/makefiles/defs.make
 | |
| +++ b/hotspot/make/solaris/makefiles/defs.make
 | |
| @@ -304,3 +304,7 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
 | |
|    endif
 | |
|  endif
 | |
|  EXPORT_LIST += $(EXPORT_LIB_DIR)/sa-jdi.jar
 | |
| +
 | |
| +ifeq ($(ENABLE_LIBFFI_BUNDLING), true)
 | |
| +  EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/$(LIBFFI_LIB_FILE)
 | |
| +endif
 | |
| diff --git a/hotspot/make/windows/makefiles/defs.make b/hotspot/make/windows/makefiles/defs.make
 | |
| index 6b36f0e2bc..6f42c7ad37 100644
 | |
| --- a/hotspot/make/windows/makefiles/defs.make
 | |
| +++ b/hotspot/make/windows/makefiles/defs.make
 | |
| @@ -300,6 +300,10 @@ ifeq ($(BUILD_WIN_SA), 1)
 | |
|    MAKE_ARGS += BUILD_WIN_SA=1
 | |
|  endif
 | |
|  
 | |
| +ifeq ($(ENABLE_LIBFFI_BUNDLING), true)
 | |
| +  EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/$(LIBFFI_LIB_FILE)
 | |
| +endif
 | |
| +
 | |
|  # Propagate compiler and tools paths from configure to nmake.
 | |
|  # Need to make sure they contain \\ and not /.
 | |
|  ifneq ($(SPEC),)
 | |
| diff --git a/jdk/make/Images.gmk b/jdk/make/Images.gmk
 | |
| index 2e378c9134..0edefd7b5c 100644
 | |
| --- a/jdk/make/Images.gmk
 | |
| +++ b/jdk/make/Images.gmk
 | |
| @@ -249,7 +249,8 @@ endif
 | |
|  
 | |
|  ifneq ($(findstring $(OPENJDK_TARGET_OS), linux solaris),) # If Linux or Solaris
 | |
|      JDK_LIB_FILES += $(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX) \
 | |
| -		     $(LIBRARY_PREFIX)jawt$(SHARED_LIBRARY_SUFFIX)
 | |
| +		     $(LIBRARY_PREFIX)jawt$(SHARED_LIBRARY_SUFFIX) \
 | |
| +		     $(LIBFFI_LIB_FILE)
 | |
|  endif
 | |
|  
 | |
|  # Find all files to copy from $(JDK_OUTPUTDIR)/lib
 | |
| diff --git a/jdk/make/Import.gmk b/jdk/make/Import.gmk
 | |
| index b115fa7f86..29fa2662a6 100644
 | |
| --- a/jdk/make/Import.gmk
 | |
| +++ b/jdk/make/Import.gmk
 | |
| @@ -114,7 +114,7 @@ endef
 | |
|  #
 | |
|  # Import hotspot
 | |
|  #
 | |
| -HOTSPOT_IMPORT_FILES := $(addprefix $(LIBRARY_PREFIX), jvm.* saproc.* jsig.* sawindbg.* jvm_db.* jvm_dtrace.*) \
 | |
| +HOTSPOT_IMPORT_FILES := $(addprefix $(LIBRARY_PREFIX), jvm.* saproc.* jsig.* sawindbg.* jvm_db.* jvm_dtrace.* ffi.*) \
 | |
|      Xusage.txt sa-jdi.jar
 | |
|  
 | |
|  ifeq ($(OPENJDK_TARGET_OS), macosx)
 | |
| diff --git a/make/devkit/Tools.gmk b/make/devkit/Tools.gmk
 | |
| index c2460105b7..cf2ef251ac 100644
 | |
| --- a/make/devkit/Tools.gmk
 | |
| +++ b/make/devkit/Tools.gmk
 | |
| @@ -82,8 +82,8 @@ RPM_LIST := \
 | |
|      libXi libXi-devel \
 | |
|      libXdmcp libXdmcp-devel \
 | |
|      libXau libXau-devel \
 | |
| -    libgcc
 | |
| -
 | |
| +    libgcc \
 | |
| +    libffi libffi-devel
 | |
|  
 | |
|  ifeq ($(ARCH),x86_64)
 | |
|    RPM_DIR ?= $(RPM_DIR_x86_64)
 | |
| @@ -203,6 +203,18 @@ $(libs) : $(rpms)
 | |
|  	@mkdir -p $(SYSROOT)/usr/lib
 | |
|  	@touch $@
 | |
|  
 | |
| +##########################################################################################
 | |
| +# Create links for ffi header files so that they become visible by default when using the
 | |
| +# devkit.
 | |
| +
 | |
| +$(SYSROOT)/usr/include/ffi.h: $(rpms)
 | |
| +	cd $(@D) && rm $(@F) && ln -s ../lib/libffi-*/include/$(@F) .
 | |
| +
 | |
| +$(SYSROOT)/usr/include/ffitarget.h: $(rpms)
 | |
| +	cd $(@D) && rm $(@F) && ln -s ../lib/libffi-*/include/$(@F) .
 | |
| +
 | |
| +SYSROOT_LINKS += $(SYSROOT)/usr/include/ffi.h $(SYSROOT)/usr/include/ffitarget.h
 | |
| +
 | |
|  ##########################################################################################
 | |
|  
 | |
|  # Define marker files for each source package to be compiled
 | |
| @@ -479,7 +491,7 @@ rpms : $(rpms)
 | |
|  libs : $(libs)
 | |
|  sysroot : rpms libs
 | |
|  gcc : sysroot $(gcc) $(gccpatch)
 | |
| -all : binutils gcc bfdlib $(PREFIX)/devkit.info
 | |
| +all : binutils gcc bfdlib $(PREFIX)/devkit.info $(SYSROOT_LINKS)
 | |
|  
 | |
|  # this is only built for host. so separate.
 | |
|  ccache : $(ccache)
 |