[PATCH v3] 8214332: Add a flag for overriding default JNI library search path

David Holmes david.holmes at oracle.com
Wed Nov 28 22:07:05 UTC 2018


On 29/11/2018 7:02 am, Jakub Vaněk wrote:
> On 2018-11-29 at 06:54 +1000, David Holmes wrote:
>> Hi Jakub,
>>
>> Are you ready to have this pushed? I can sponsor it if so.
>>
>> David
>>
> 
> Hi David,
> 
> thanks for your reply, I wasn't responding yesterday and today. I added
> one more change to handle the situation when the --with flag is used
> without its argument.

Okay. Hotspot part is still reviewed by me. We will need to wait for 
Erik to re-check the build part. He can then either sponsor, or else I will.

Cheers,
David

> I'd want to settle on this version of the patch, because it maintains
> compatibility with current status of things and is the easiest to
> implement.
> 
> Thanks,
> 
> Jakub
> 
> # HG changeset patch
> # User Jakub Vaněk <linuxtardis at gmail.com>
> # Date 1543266969 -3600
> #      Mon Nov 26 22:16:09 2018 +0100
> # Node ID 0e938f324f9601d7d86f8acbb6a3f7c65cfc852e
> # Parent  e017d2f176d0119cdc70c9f2ee98e78c0c13f0c7
> Add an option for overriding default JNI library search path
> 
> diff --git a/doc/building.html b/doc/building.html
> --- a/doc/building.html
> +++ b/doc/building.html
> @@ -464,6 +464,10 @@
>   <li><code>--with-jvm-
> features=<feature>[,<feature>...]</code> - Use the
> specified JVM features when building Hotspot. The list of features will
> be enabled on top of the default list. For the <code>custom</code> JVM
> variant, this default list is empty. A complete list of available JVM
> features can be found using <code>bash configure --help</code>.</li>
>   <li><code>--with-target-bits=<bits></code> - Create a target
> binary suitable for running on a <code><bits></code> platform.
> Use this to create 32-bit output on a 64-bit build platform, instead of
> doing a full cross-compile. (This is known as a <em>reduced</em>
> build.)</li>
>   </ul>
> +<p>On Linux, BSD and AIX, it is possible to override where Java by
> default searches for runtime/JNI libraries. This can be useful in
> situations where there is a special shared directory for system JNI
> libraries. This setting can in turn be overriden at runtime by setting
> the <code>java.library.path</code> property.</p>
> +<ul>
> +<li><code>--with-jni-libpath=<path></code> - Use the specified
> path as a default when searching for runtime libraries.</li>
> +</ul>
>   <h4 id="configure-arguments-for-native-compilation">Configure
> Arguments for Native Compilation</h4>
>   <ul>
>   <li><code>--with-devkit=<path></code> - Use this devkit for
> compilers, tools and resources</li>
> diff --git a/doc/building.md b/doc/building.md
> --- a/doc/building.md
> +++ b/doc/building.md
> @@ -662,6 +662,14 @@
>       platform, instead of doing a full cross-compile. (This is known as
> a
>       *reduced* build.)
>   
> +On Linux, BSD and AIX, it is possible to override where Java by
> default
> +searches for runtime/JNI libraries. This can be useful in situations
> where
> +there is a special shared directory for system JNI libraries. This
> setting
> +can in turn be overriden at runtime by setting the `java.library.path`
> property.
> +
> +  * `--with-jni-libpath=<path>` - Use the specified path as a default
> +  when searching for runtime libraries.
> +
>   #### Configure Arguments for Native Compilation
>   
>     * `--with-devkit=<path>` - Use this devkit for compilers, tools and
> resources
> diff --git a/make/autoconf/jdk-options.m4 b/make/autoconf/jdk-
> options.m4
> --- a/make/autoconf/jdk-options.m4
> +++ b/make/autoconf/jdk-options.m4
> @@ -244,6 +244,28 @@
>       COPYRIGHT_YEAR=`$DATE +'%Y'`
>     fi
>     AC_SUBST(COPYRIGHT_YEAR)
> +
> +  # Override default library path
> +  AC_ARG_WITH([jni-libpath], [AS_HELP_STRING([--with-jni-libpath],
> +      [override default JNI library search path])])
> +  AC_MSG_CHECKING([for jni library path])
> +  if test "x${with_jni_libpath}" = "x" || test "x${with_jni_libpath}"
> = "xno"; then
> +    AC_MSG_RESULT([default])
> +  elif test "x${with_jni_libpath}" = "xyes"; then
> +    AC_MSG_RESULT([invalid])
> +    AC_MSG_ERROR([The --with-jni-libpath option requires an
> argument.])
> +  else
> +    HOTSPOT_OVERRIDE_LIBPATH=${with_jni_libpath}
> +    if test "x$OPENJDK_TARGET_OS" != "xlinux" &&
> +         test "x$OPENJDK_TARGET_OS" != "xbsd" &&
> +         test "x$OPENJDK_TARGET_OS" != "xaix"; then
> +      AC_MSG_RESULT([fail])
> +      AC_MSG_ERROR([Overriding JNI library path is supported only on
> Linux, BSD and AIX.])
> +    fi
> +    AC_MSG_RESULT(${HOTSPOT_OVERRIDE_LIBPATH})
> +  fi
> +  AC_SUBST(HOTSPOT_OVERRIDE_LIBPATH)
> +
>   ])
>   
>   ######################################################################
> #########
> diff --git a/make/autoconf/spec.gmk.in b/make/autoconf/spec.gmk.in
> --- a/make/autoconf/spec.gmk.in
> +++ b/make/autoconf/spec.gmk.in
> @@ -274,6 +274,9 @@
>   # Control wether Hotspot builds gtest tests
>   BUILD_GTEST := @BUILD_GTEST@
>   
> +# Allow overriding the default hotspot library path
> +HOTSPOT_OVERRIDE_LIBPATH := @HOTSPOT_OVERRIDE_LIBPATH@
> +
>   # Control use of precompiled header in hotspot libjvm build
>   USE_PRECOMPILED_HEADER := @USE_PRECOMPILED_HEADER@
>   
> diff --git a/make/hotspot/lib/JvmFlags.gmk
> b/make/hotspot/lib/JvmFlags.gmk
> --- a/make/hotspot/lib/JvmFlags.gmk
> +++ b/make/hotspot/lib/JvmFlags.gmk
> @@ -95,3 +95,7 @@
>   ifeq ($(USE_PRECOMPILED_HEADER), false)
>     JVM_CFLAGS += -DDONT_USE_PRECOMPILED_HEADER
>   endif
> +
> +ifneq ($(HOTSPOT_OVERRIDE_LIBPATH), )
> +  JVM_CFLAGS += -DOVERRIDE_LIBPATH='"$(HOTSPOT_OVERRIDE_LIBPATH)"'
> +endif
> diff --git a/src/hotspot/os/aix/os_aix.cpp
> b/src/hotspot/os/aix/os_aix.cpp
> --- a/src/hotspot/os/aix/os_aix.cpp
> +++ b/src/hotspot/os/aix/os_aix.cpp
> @@ -541,7 +541,11 @@
>   
>   void os::init_system_properties_values() {
>   
> -#define DEFAULT_LIBPATH "/lib:/usr/lib"
> +#ifndef OVERRIDE_LIBPATH
> +  #define DEFAULT_LIBPATH "/lib:/usr/lib"
> +#else
> +  #define DEFAULT_LIBPATH OVERRIDE_LIBPATH
> +#endif
>   #define EXTENSIONS_DIR  "/lib/ext"
>   
>     // Buffer that fits several sprintfs.
> diff --git a/src/hotspot/os/bsd/os_bsd.cpp
> b/src/hotspot/os/bsd/os_bsd.cpp
> --- a/src/hotspot/os/bsd/os_bsd.cpp
> +++ b/src/hotspot/os/bsd/os_bsd.cpp
> @@ -316,7 +316,11 @@
>     //        ...
>     //        7: The default directories, normally /lib and /usr/lib.
>   #ifndef DEFAULT_LIBPATH
> -  #define DEFAULT_LIBPATH "/lib:/usr/lib"
> +  #ifndef OVERRIDE_LIBPATH
> +    #define DEFAULT_LIBPATH "/lib:/usr/lib"
> +  #else
> +    #define DEFAULT_LIBPATH OVERRIDE_LIBPATH
> +  #endif
>   #endif
>   
>   // Base path of extensions installed on the system.
> diff --git a/src/hotspot/os/linux/os_linux.cpp
> b/src/hotspot/os/linux/os_linux.cpp
> --- a/src/hotspot/os/linux/os_linux.cpp
> +++ b/src/hotspot/os/linux/os_linux.cpp
> @@ -323,10 +323,14 @@
>     //        1: ...
>     //        ...
>     //        7: The default directories, normally /lib and /usr/lib.
> -#if defined(AMD64) || (defined(_LP64) && defined(SPARC)) ||
> defined(PPC64) || defined(S390)
> -  #define DEFAULT_LIBPATH "/usr/lib64:/lib64:/lib:/usr/lib"
> +#ifndef OVERRIDE_LIBPATH
> +  #if defined(AMD64) || (defined(_LP64) && defined(SPARC)) ||
> defined(PPC64) || defined(S390)
> +    #define DEFAULT_LIBPATH "/usr/lib64:/lib64:/lib:/usr/lib"
> +  #else
> +    #define DEFAULT_LIBPATH "/lib:/usr/lib"
> +  #endif
>   #else
> -  #define DEFAULT_LIBPATH "/lib:/usr/lib"
> +  #define DEFAULT_LIBPATH OVERRIDE_LIBPATH
>   #endif
>   
>   // Base path of extensions installed on the system.
> 


More information about the build-dev mailing list