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 . -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 +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_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)