diff --git a/doc/building.html b/doc/building.html
index 5df2e305676..07914b7c418 100644
--- a/doc/building.html
+++ b/doc/building.html
@@ -464,6 +464,10 @@ CC: Sun C++ 5.13 SunOS_i386 151846-10 2015/10/30
--with-jvm-features=<feature>[,<feature>...]
- Use the specified JVM features when building Hotspot. The list of features will be enabled on top of the default list. For the custom
JVM variant, this default list is empty. A complete list of available JVM features can be found using bash configure --help
.
--with-target-bits=<bits>
- Create a target binary suitable for running on a <bits>
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 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.
+
--with-devkit=<path>
- Use this devkit for compilers, tools and resources
diff --git a/doc/building.md b/doc/building.md
index 12889d00ee0..ef06dc7a83b 100644
--- a/doc/building.md
+++ b/doc/building.md
@@ -662,6 +662,14 @@ features, use `bash configure --help=short` instead.)
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=` - Use the specified path as a default
+ when searching for runtime libraries.
+
#### Configure Arguments for Native Compilation
* `--with-devkit=` - Use this devkit for compilers, tools and resources
diff --git a/make/autoconf/jdk-options.m4 b/make/autoconf/jdk-options.m4
index 4c017ff220f..3f0befdb84f 100644
--- a/make/autoconf/jdk-options.m4
+++ b/make/autoconf/jdk-options.m4
@@ -244,6 +244,28 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_OPTIONS],
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
index 45709d3f077..915041c510b 100644
--- a/make/autoconf/spec.gmk.in
+++ b/make/autoconf/spec.gmk.in
@@ -275,6 +275,9 @@ VALID_JVM_VARIANTS := @VALID_JVM_VARIANTS@
# 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
index 9e62c37091d..c344d4838bc 100644
--- a/make/hotspot/lib/JvmFlags.gmk
+++ b/make/hotspot/lib/JvmFlags.gmk
@@ -95,3 +95,7 @@ JVM_CFLAGS += \
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
index 003512e8da4..9475aea6615 100644
--- a/src/hotspot/os/aix/os_aix.cpp
+++ b/src/hotspot/os/aix/os_aix.cpp
@@ -541,7 +541,11 @@ query_multipage_support_end:
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
index 5a4e9f82ee7..89c14a1e753 100644
--- a/src/hotspot/os/bsd/os_bsd.cpp
+++ b/src/hotspot/os/bsd/os_bsd.cpp
@@ -316,7 +316,11 @@ void os::init_system_properties_values() {
// ...
// 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
index 4723e81e678..fd6c3580242 100644
--- a/src/hotspot/os/linux/os_linux.cpp
+++ b/src/hotspot/os/linux/os_linux.cpp
@@ -323,10 +323,14 @@ void os::init_system_properties_values() {
// 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.