Dynamically linked libjli for *BSD

Kurt Miller kurt at intricatesoftware.com
Tue May 19 18:18:01 UTC 2015


On Mon, 2015-05-18 at 15:16 -0400, Jung-uk Kim wrote:
> Ideally, I think we have to make this conditional by adding a
> variable, e.g., USE_STATIC_LIBJLI, and set it only on macosx by
> default.  Then we can set it from our port makefile depending on
> target FreeBSD version.

Using a single USE_STATIC_LIBJLI variable that controls static
linking for bsd + other OS's turned out to be not straightforward
since the findstring matching related to static linking libjli is
not uniform. In some places it is 'bsd macosx' and others it is
'bsd macosx aix' or 'bsd macosx windows aix'.

Instead of USE_STATIC_LIBJLI that applies to all os, I went with
a var called BSD_STATIC_LIBJLI that gets set to 'bsd' only when
--enable-static-libjli is configured and the OS is 'bsd'. Otherwise
BSD_STATIC_LIBJLI is left blank. This allows me to use it in the
non-uniform findstring matches. See the diffs below for details.

There are two parts to the diff, jdk8 and jdk8/jdk separated below.
I didn't include the regenerated generated-configure.sh part, but
would commit that as well.

Please take a look at the diffs and provide feedback if there's
a problem with it. I've tested builds without --enable-static-libjli
and with it (w/--disable-debug-symbols) on OpenBSD and its working
well for me.

==================== bsd-port/jdk8 =============================

diff -r fdc54d6b49b3 common/autoconf/jdk-options.m4
--- a/common/autoconf/jdk-options.m4	Sat May 16 12:14:49 2015 -0400
+++ b/common/autoconf/jdk-options.m4	Tue May 19 14:01:24 2015 -0400
@@ -407,6 +407,20 @@
 
   ###############################################################################
   #
+  # Enable or disable static linking of libjli on bsd only
+  #
+  AC_ARG_ENABLE(static-libjli, [AS_HELP_STRING([--enable-static-libjli],
+      [Enable staticly linking libjli on bsd @<:@disabled@:>@])],,
+      [enable_static_libjli=no])
+  if test "x$OPENJDK_TARGET_OS" = "xbsd" && test "x$enable_static_libjli" = "xyes"; then
+    BSD_STATIC_LIBJLI=bsd
+  else
+    BSD_STATIC_LIBJLI=
+  fi
+  AC_SUBST(BSD_STATIC_LIBJLI)
+
+  ###############################################################################
+  #
   # Enable or disable the elliptic curve crypto implementation
   #
   AC_DEFUN_ONCE([JDKOPT_DETECT_INTREE_EC],
diff -r fdc54d6b49b3 common/autoconf/spec.gmk.in
--- a/common/autoconf/spec.gmk.in	Sat May 16 12:14:49 2015 -0400
+++ b/common/autoconf/spec.gmk.in	Tue May 19 14:01:24 2015 -0400
@@ -284,6 +284,9 @@
 # Enable unlimited crypto policy
 UNLIMITED_CRYPTO=@UNLIMITED_CRYPTO@
 
+# Build static libjli on bsd
+BSD_STATIC_LIBJLI=@BSD_STATIC_LIBJLI@
+
 # Necessary additional compiler flags to compile X11
 X_CFLAGS:=@X_CFLAGS@
 X_LIBS:=@X_LIBS@

==================== bsd-port/jdk8/jdk =========================

diff -r 85ac7a53d91d make/CompileLaunchers.gmk
--- a/make/CompileLaunchers.gmk	Mon May 18 12:27:26 2015 -0400
+++ b/make/CompileLaunchers.gmk	Tue May 19 14:01:18 2015 -0400
@@ -49,7 +49,7 @@
   ORIGIN_ROOT := /..
 endif
 
-ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx), )
+ifneq ($(findstring $(OPENJDK_TARGET_OS), $(BSD_STATIC_LIBJLI) macosx), )
   ORIGIN_ARG := $(call SET_EXECUTABLE_ORIGIN)
 else
   ORIGIN_ARG := $(call SET_EXECUTABLE_ORIGIN,$(ORIGIN_ROOT)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/jli)
@@ -89,6 +89,17 @@
 
   $1_LDFLAGS := $3
   $1_LDFLAGS_SUFFIX :=
+  ifeq ($(OPENJDK_TARGET_OS), bsd)
+    ifeq ($(BSD_STATIC_LIBJLI), bsd)
+      $1_LDFLAGS += -Wl,--whole-archive $(JDK_OUTPUTDIR)/objs/libjli_static.a \
+          -Wl,--no-whole-archive
+      $1_LDFLAGS_SUFFIX += -pthread
+    else
+      $1_LDFLAGS += \
+          $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX))
+      $1_LDFLAGS_SUFFIX += -L$(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/jli -ljli -pthread
+    endif
+  endif
 
   ifeq ($(OPENJDK_TARGET_OS), macosx)
     $1_PLIST_FILE := Info-cmdline.plist
@@ -176,8 +187,6 @@
           $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)), \
       LDFLAGS_solaris := $$($1_LDFLAGS_solaris) \
           $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)), \
-      LDFLAGS_bsd := -pthread \
-          $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)), \
       MAPFILE := $$($1_MAPFILE), \
       LDFLAGS_SUFFIX := $(LDFLAGS_JDKEXE_SUFFIX) $$($1_LDFLAGS_SUFFIX), \
       LDFLAGS_SUFFIX_posix := $4, \
@@ -185,7 +194,6 @@
           $(JDK_OUTPUTDIR)/objs/libjava/java.lib advapi32.lib $5, \
       LDFLAGS_SUFFIX_linux := -L$(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/jli -ljli $(LIBDL) -lc, \
       LDFLAGS_SUFFIX_solaris := -L$(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/jli -ljli -lthread $(LIBDL) -lc, \
-      LDFLAGS_SUFFIX_bsd := -L$(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/jli -ljli -pthread, \
       OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/$1_objs$(OUTPUT_SUBDIR), \
       OUTPUT_DIR := $$($1_OUTPUT_DIR_ARG)$(OUTPUT_SUBDIR), \
       PROGRAM := $1, \
@@ -201,7 +209,7 @@
 
   BUILD_LAUNCHERS += $$(BUILD_LAUNCHER_$1)
 
-  ifneq (,$(filter $(OPENJDK_TARGET_OS), macosx aix))
+  ifneq (,$(filter $(OPENJDK_TARGET_OS), $(BSD_STATIC_LIBJLI) macosx aix))
     $$(BUILD_LAUNCHER_$1): $(JDK_OUTPUTDIR)/objs/libjli_static.a
   endif
 
diff -r 85ac7a53d91d make/lib/CoreLibraries.gmk
--- a/make/lib/CoreLibraries.gmk	Mon May 18 12:27:26 2015 -0400
+++ b/make/lib/CoreLibraries.gmk	Tue May 19 14:01:18 2015 -0400
@@ -466,7 +466,7 @@
 
   BUILD_LIBRARIES += $(BUILD_LIBJLI_STATIC)
 
-else ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx), )
+else ifneq ($(findstring $(OPENJDK_TARGET_OS), $(BSD_STATIC_LIBJLI) macosx), )
   #
   # On BSD they do partial (incremental) linking of libjli_static.a
   # code it here...rather than add support to NativeCompilation
diff -r 85ac7a53d91d make/lib/ServiceabilityLibraries.gmk
--- a/make/lib/ServiceabilityLibraries.gmk	Mon May 18 12:27:26 2015 -0400
+++ b/make/lib/ServiceabilityLibraries.gmk	Tue May 19 14:01:18 2015 -0400
@@ -246,6 +246,15 @@
   LIBINSTRUMENT_CFLAGS += -Dstrcasecmp=stricmp
 endif
 
+ifeq ($(OPENJDK_TARGET_OS), bsd)
+  ifeq ($(BSD_STATIC_LIBJLI), bsd)
+    LIBINSTRUMENT_LDFLAGS += -Xlinker --whole-archive $(JDK_OUTPUTDIR)/objs/libjli_static.a \
+        -Xlinker --no-whole-archive 
+  else
+    LIBINSTRUMENT_LDFLAGS += $(call SET_SHARED_LIBRARY_ORIGIN,/jli)
+  endif
+endif
+
 $(eval $(call SetupNativeCompilation,BUILD_LIBINSTRUMENT, \
     LIBRARY := instrument, \
     OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
@@ -263,7 +272,6 @@
         $(LIBINSTRUMENT_LDFLAGS), \
     LDFLAGS_linux := $(call SET_SHARED_LIBRARY_ORIGIN,/jli), \
     LDFLAGS_solaris := $(call SET_SHARED_LIBRARY_ORIGIN,/jli), \
-    LDFLAGS_bsd := $(call SET_SHARED_LIBRARY_ORIGIN,/jli), \
     LDFLAGS_macosx := -Xlinker -all_load $(JDK_OUTPUTDIR)/objs/libjli_static.a \
         -framework Cocoa -framework Security -framework ApplicationServices, \
     LDFLAGS_SUFFIX := $(LIBINSTRUMENT_LDFLAGS_SUFFIX), \
@@ -280,7 +288,7 @@
     OBJECT_DIR := $(LIBINSTRUMENT_DIR), \
     DEBUG_SYMBOLS := true))
 
-ifneq (, $(findstring $(OPENJDK_TARGET_OS), macosx windows aix))
+ifneq (, $(findstring $(OPENJDK_TARGET_OS), $(BSD_STATIC_LIBJLI) macosx windows aix))
   $(BUILD_LIBINSTRUMENT): $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX)
 else
   $(BUILD_LIBINSTRUMENT): $(INSTALL_LIBRARIES_HERE)/jli/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX)




More information about the bsd-port-dev mailing list