Hello,

Looks reasonable. In hotspot.m4, we usually add explicit error messages for configure parameters having the values "yes" or "no", which are the default values if the user just provides "--with-hotspot-libpath" or "--without-hotspot-libpath". Then we print something like "--with-hotspot-libpath requires a value".

/Erik

On 2018-11-25 07:51, Jakub Vaněk wrote:
Hi all,

this patch provides a way how to override where Hotspot searches for
libraries by default. This specifically affects JNI libraries

To achieve this, a new configure flag is added: --with-hotspot-libpath.
When this option is specified, the path is passed to the os_*.cpp
files, where it overrides the existing DEFAULT_LIBPATH string. I tried
to follow the way FreeType and other flags are specified.

The goal of this patch is to eliminate Linux distribution-specific
patches targetted at doing this. In particular, this patch was inspired
by Debian/Ubuntu solution. For example, this is the libpath that is
used on armel:
/usr/lib/arm-linux-gnueabi/jni:/lib/arm-linux-gnueabi:/usr/lib/arm-
linux-gnueabi:/usr/lib/jni:/lib:/usr/lib

For now, it is possible to override the path only on Linux, BSD and
AIX. Other platforms don't have the DEFAULT_LIBPATH #define.

I tried building OpenJDK locally with the flag and it worked.

Thanks,

Jakub

# HG changeset patch
# User Jakub Vaněk <[email protected]>
# Date 1543089715 -3600
#      Sat Nov 24 21:01:55 2018 +0100
# Node ID 2fbd203937c0a42439a48c9c5b505f239a8832af
# Parent  30a02b4e6c06e874ec8735dedb7e894844b1d627
Add a flag 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
@@ -463,6 +463,7 @@
  <li><code>--with-jvm-
variants=&lt;variant&gt;[,&lt;variant&gt;...]</code> - Build the
specified variant (or variants) of Hotspot. Valid variants are:
<code>server</code>, <code>client</code>, <code>minimal</code>,
<code>core</code>, <code>zero</code>, <code>custom</code>. Note that
not all variants are possible to combine in a single build.</li>
  <li><code>--with-jvm-
features=&lt;feature&gt;[,&lt;feature&gt;...]</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=&lt;bits&gt;</code> - Create a target
binary suitable for running on a <code>&lt;bits&gt;</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>
+<li><code>--with-hotspot-libpath=&lt;path&gt;</code> - Override the
default runtime library search path. Use this if you want to override
where HotSpot searches for JNI libraries by default.</li>
  </ul>
  <h4 id="configure-arguments-for-native-compilation">Configure
Arguments for Native Compilation</h4>
  <ul>
diff --git a/doc/building.md b/doc/building.md
--- a/doc/building.md
+++ b/doc/building.md
@@ -661,6 +661,9 @@
      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.)
+  * `--with-hotspot-libpath=<path>` - Override the default runtime
library
+    search path. Use this if you want to override where HotSpot
searches
+    for JNI libraries by default.
#### Configure Arguments for Native Compilation diff --git a/make/autoconf/configure.ac b/make/autoconf/configure.ac
--- a/make/autoconf/configure.ac
+++ b/make/autoconf/configure.ac
@@ -225,6 +225,9 @@
HOTSPOT_SETUP_JVM_FEATURES +# handle custom hotspot library path path
+HOTSPOT_CUSTOM_LIBPATH
+
  ######################################################################
#########
  #
  # We need to do some final tweaking, when everything else is done.
diff --git a/make/autoconf/hotspot.m4 b/make/autoconf/hotspot.m4
--- a/make/autoconf/hotspot.m4
+++ b/make/autoconf/hotspot.m4
@@ -615,3 +615,23 @@
AC_SUBST(BUILD_GTEST)
  ])
+
+######################################################################
#########
+# Set up custom hotspot library path
+#
+AC_DEFUN_ONCE([HOTSPOT_CUSTOM_LIBPATH],
+[
+  AC_ARG_WITH([hotspot-libpath], [AS_HELP_STRING([--with-hotspot-
libpath],
+      [Override the default runtime library search path.])])
+
+  AC_MSG_CHECKING([for custom hotspot library path])
+  if test "x${with_hotspot_libpath}" = "x"; then
+    AC_MSG_RESULT([no])
+    HOTSPOT_OVERRIDE_LIBPATH=""
+  else
+    AC_MSG_RESULT(${with_hotspot_libpath})
+    HOTSPOT_OVERRIDE_LIBPATH=${with_hotspot_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.



Reply via email to