8136556: Add the ability to perform static builds of MacOSX x64 binaries
Reviewed-by: ihse, bdelsart, gadams, lfoltan, rriggs, hseigel, twisti
--- a/hotspot/make/Makefile Wed Jul 05 20:53:25 2017 +0200
+++ b/hotspot/make/Makefile Mon Oct 19 13:21:37 2015 -0400
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -403,6 +403,8 @@
$(install-dir)
$(EXPORT_SERVER_DIR)/%.dSYM: $(C2_BUILD_DIR)/%.dSYM
$(install-dir)
+$(EXPORT_SERVER_DIR)/%.symbols: $(C2_BUILD_DIR)/%.symbols
+ $(install-file)
endif
# Client (C1)
--- a/hotspot/make/bsd/makefiles/buildtree.make Wed Jul 05 20:53:25 2017 +0200
+++ b/hotspot/make/bsd/makefiles/buildtree.make Mon Oct 19 13:21:37 2015 -0400
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -224,6 +224,11 @@
echo "OPENJDK = $(OPENJDK)"; \
echo "$(LP64_SETTING/$(DATA_MODE))"; \
echo; \
+ echo "STATIC_BUILD = $(STATIC_BUILD)"; \
+ echo "COMPILER_WARNINGS_FATAL = $(COMPILER_WARNINGS_FATAL)"; \
+ echo "EXTRA_LDFLAGS = $(EXTRA_LDFLAGS)"; \
+ echo "LIBRARY_SUFFIX = $(LIBRARY_SUFFIX)"; \
+ echo; \
echo "# Used for platform dispatching"; \
echo "TARGET_DEFINES = -DTARGET_OS_FAMILY_\$$(Platform_os_family)"; \
echo "TARGET_DEFINES += -DTARGET_ARCH_\$$(Platform_arch)"; \
--- a/hotspot/make/bsd/makefiles/defs.make Wed Jul 05 20:53:25 2017 +0200
+++ b/hotspot/make/bsd/makefiles/defs.make Mon Oct 19 13:21:37 2015 -0400
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -186,13 +186,16 @@
# executed multiple times. We reduce the noise by at least checking that
# BUILD_FLAVOR has been set.
ifneq ($(BUILD_FLAVOR),)
- ifeq ($(BUILD_FLAVOR), product)
- FULL_DEBUG_SYMBOLS ?= 1
- ENABLE_FULL_DEBUG_SYMBOLS = $(FULL_DEBUG_SYMBOLS)
- else
- # debug variants always get Full Debug Symbols (if available)
- ENABLE_FULL_DEBUG_SYMBOLS = 1
- endif
+ # FULL_DEBUG_SYMBOLS not created for individual static libraries
+ ifeq ($(STATIC_BUILD),false)
+ ifeq ($(BUILD_FLAVOR), product)
+ FULL_DEBUG_SYMBOLS ?= 1
+ ENABLE_FULL_DEBUG_SYMBOLS = $(FULL_DEBUG_SYMBOLS)
+ else
+ # debug variants always get Full Debug Symbols (if available)
+ ENABLE_FULL_DEBUG_SYMBOLS = 1
+ endif
+ endif
$(eval $(call print_info, "ENABLE_FULL_DEBUG_SYMBOLS=$(ENABLE_FULL_DEBUG_SYMBOLS)"))
# since objcopy is optional, we set ZIP_DEBUGINFO_FILES later
@@ -256,16 +259,24 @@
JDK_INCLUDE_SUBDIR=bsd
# Library suffix
-ifeq ($(OS_VENDOR),Darwin)
- LIBRARY_SUFFIX=dylib
+ifneq ($(STATIC_BUILD),true)
+ ifeq ($(OS_VENDOR),Darwin)
+ LIBRARY_SUFFIX=dylib
+ else
+ LIBRARY_SUFFIX=so
+ endif
else
- LIBRARY_SUFFIX=so
+ LIBRARY_SUFFIX=a
endif
+
EXPORT_LIST += $(EXPORT_DOCS_DIR)/platform/jvmti/jvmti.html
+# jsig library not needed for static builds
+ifneq ($(STATIC_BUILD),true)
# client and server subdirectories have symbolic links to ../libjsig.so
-EXPORT_LIST += $(EXPORT_LIB_ARCH_DIR)/libjsig.$(LIBRARY_SUFFIX)
+ EXPORT_LIST += $(EXPORT_LIB_ARCH_DIR)/libjsig.$(LIBRARY_SUFFIX)
+endif
ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq ($(ZIP_DEBUGINFO_FILES),1)
@@ -286,6 +297,9 @@
ifeq ($(findstring true, $(JVM_VARIANT_SERVER) $(JVM_VARIANT_ZERO) $(JVM_VARIANT_ZEROSHARK)), true)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.$(LIBRARY_SUFFIX)
+ ifeq ($(STATIC_BUILD),true)
+ EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.symbols
+ endif
ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq ($(ZIP_DEBUGINFO_FILES),1)
@@ -303,6 +317,9 @@
ifeq ($(JVM_VARIANT_CLIENT),true)
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.$(LIBRARY_SUFFIX)
+ ifeq ($(STATIC_BUILD),true)
+ EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.symbols
+ endif
ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq ($(ZIP_DEBUGINFO_FILES),1)
@@ -320,6 +337,9 @@
ifeq ($(JVM_VARIANT_MINIMAL1),true)
EXPORT_LIST += $(EXPORT_MINIMAL_DIR)/Xusage.txt
EXPORT_LIST += $(EXPORT_MINIMAL_DIR)/libjvm.$(LIBRARY_SUFFIX)
+ ifeq ($(STATIC_BUILD),true)
+ EXPORT_LIST += $(EXPORT_MINIMAL_DIR)/libjvm.symbols
+ endif
endif
# Serviceability Binaries
@@ -388,7 +408,9 @@
endif
# Binaries to 'universalize' if built
- UNIVERSAL_LIPO_LIST += $(EXPORT_LIB_DIR)/libjsig.$(LIBRARY_SUFFIX)
+ ifneq ($(STATIC_BUILD),true)
+ UNIVERSAL_LIPO_LIST += $(EXPORT_LIB_DIR)/libjsig.$(LIBRARY_SUFFIX)
+ endif
UNIVERSAL_LIPO_LIST += $(EXPORT_LIB_DIR)/libsaproc.$(LIBRARY_SUFFIX)
UNIVERSAL_LIPO_LIST += $(EXPORT_LIB_DIR)/server/libjvm.$(LIBRARY_SUFFIX)
UNIVERSAL_LIPO_LIST += $(EXPORT_LIB_DIR)/client/libjvm.$(LIBRARY_SUFFIX)
@@ -396,6 +418,13 @@
# Files to simply copy in place
UNIVERSAL_COPY_LIST += $(EXPORT_LIB_DIR)/server/Xusage.txt
UNIVERSAL_COPY_LIST += $(EXPORT_LIB_DIR)/client/Xusage.txt
+
+ ifeq ($(STATIC_BUILD),true)
+ UNIVERSAL_COPY_LIST += $(EXPORT_LIB_DIR)/server/libjvm.symbols
+ UNIVERSAL_COPY_LIST += $(EXPORT_LIB_DIR)/client/libjvm.symbols
+ UNIVERSAL_COPY_LIST += $(EXPORT_LIB_DIR)/minimal/libjvm.symbols
+ endif
+
ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq ($(ZIP_DEBUGINFO_FILES),1)
UNIVERSAL_COPY_LIST += $(EXPORT_LIB_DIR)/server/libjvm.diz
--- a/hotspot/make/bsd/makefiles/dtrace.make Wed Jul 05 20:53:25 2017 +0200
+++ b/hotspot/make/bsd/makefiles/dtrace.make Mon Oct 19 13:21:37 2015 -0400
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -37,15 +37,15 @@
# Bsd does not build libjvm_db, does not compile on macosx
# disabled in build: rule in vm.make
JVM_DB = libjvm_db
-LIBJVM_DB = libjvm_db.dylib
+LIBJVM_DB = libjvm_db.$(LIBRARY_SUFFIX)
-LIBJVM_DB_DEBUGINFO = libjvm_db.dylib.dSYM
+LIBJVM_DB_DEBUGINFO = libjvm_db.$(LIBRARY_SUFFIX).dSYM
LIBJVM_DB_DIZ = libjvm_db.diz
JVM_DTRACE = jvm_dtrace
-LIBJVM_DTRACE = libjvm_dtrace.dylib
+LIBJVM_DTRACE = libjvm_dtrace.$(LIBRARY_SUFFIX)
-LIBJVM_DTRACE_DEBUGINFO = libjvm_dtrace.dylib.dSYM
+LIBJVM_DTRACE_DEBUGINFO = libjvm_dtrace.$(LIBRARY_SUFFIX).dSYM
LIBJVM_DTRACE_DIZ = libjvm_dtrace.diz
JVMOFFS = JvmOffsets
@@ -167,14 +167,14 @@
LFLAGS_GENOFFS += -L.
-lib$(GENOFFS).dylib: $(DTRACE_SRCDIR)/$(GENOFFS).cpp $(DTRACE_SRCDIR)/$(GENOFFS).h \
+lib$(GENOFFS).$(LIBRARY_SUFFIX): $(DTRACE_SRCDIR)/$(GENOFFS).cpp $(DTRACE_SRCDIR)/$(GENOFFS).h \
$(LIBJVM.o)
$(QUIETLY) $(CXX) $(CXXFLAGS) $(GENOFFS_CFLAGS) $(SHARED_FLAG) $(PICFLAG) \
$(LFLAGS_GENOFFS) -o $@ $(DTRACE_SRCDIR)/$(GENOFFS).cpp -ljvm
-$(GENOFFS): $(DTRACE_SRCDIR)/$(GENOFFS)Main.c lib$(GENOFFS).dylib
+$(GENOFFS): $(DTRACE_SRCDIR)/$(GENOFFS)Main.c lib$(GENOFFS).$(LIBRARY_SUFFIX)
$(QUIETLY) $(LINK.CXX) -o $@ $(DTRACE_SRCDIR)/$(GENOFFS)Main.c \
- ./lib$(GENOFFS).dylib
+ ./lib$(GENOFFS).$(LIBRARY_SUFFIX)
# $@.tmp is created first to avoid an empty $(JVMOFFS).h if an error occurs.
$(JVMOFFS).h: $(GENOFFS)
--- a/hotspot/make/bsd/makefiles/gcc.make Wed Jul 05 20:53:25 2017 +0200
+++ b/hotspot/make/bsd/makefiles/gcc.make Mon Oct 19 13:21:37 2015 -0400
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -185,7 +185,14 @@
CFLAGS += $(LIBFFI_CFLAGS)
CFLAGS += $(LLVM_CFLAGS)
endif
+
+ifeq ($(STATIC_BUILD),true)
+CXXFLAGS += -DSTATIC_BUILD
+CFLAGS += -DSTATIC_BUILD
+else
CFLAGS += $(VM_PICFLAG)
+endif
+
CFLAGS += -fno-rtti
CFLAGS += -fno-exceptions
ifeq ($(USE_CLANG),)
--- a/hotspot/make/bsd/makefiles/jsig.make Wed Jul 05 20:53:25 2017 +0200
+++ b/hotspot/make/bsd/makefiles/jsig.make Mon Oct 19 13:21:37 2015 -0400
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -28,9 +28,9 @@
JSIG = jsig
ifeq ($(OS_VENDOR), Darwin)
- LIBJSIG = lib$(JSIG).dylib
+ LIBJSIG = lib$(JSIG).$(LIBRARY_SUFFIX)
- LIBJSIG_DEBUGINFO = lib$(JSIG).dylib.dSYM
+ LIBJSIG_DEBUGINFO = lib$(JSIG).$(LIBRARY_SUFFIX).dSYM
LIBJSIG_DIZ = lib$(JSIG).diz
else
LIBJSIG = lib$(JSIG).so
@@ -61,8 +61,14 @@
$(LIBJSIG): $(JSIGSRCDIR)/jsig.c $(LIBJSIG_MAPFILE)
@echo $(LOG_INFO) Making signal interposition lib...
+ifeq ($(STATIC_BUILD),true)
+ $(QUIETLY) $(CC) -c $(SYMFLAG) $(EXTRA_CFLAGS) $(ARCHFLAG) $(PICFLAG) \
+ $(LFLAGS_JSIG) $(JSIG_DEBUG_CFLAGS) -o $(JSIG).o $<
+ $(QUIETLY) $(AR) $(ARFLAGS) $@ $(JSIG).o
+else
$(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG) \
$(LFLAGS_JSIG) $(JSIG_DEBUG_CFLAGS) -o $@ $<
+endif
ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq ($(OS_VENDOR), Darwin)
$(DSYMUTIL) $@
--- a/hotspot/make/bsd/makefiles/rules.make Wed Jul 05 20:53:25 2017 +0200
+++ b/hotspot/make/bsd/makefiles/rules.make Mon Oct 19 13:21:37 2015 -0400
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -39,7 +39,11 @@
COMPILE.CC = $(CC_COMPILE) -c
GENASM.CC = $(CC_COMPILE) -S
LINK.CC = $(CC) $(LFLAGS) $(AOUT_FLAGS) $(PROF_AOUT_FLAGS)
+ifeq ($(STATIC_BUILD),true)
+LINK_LIB.CC = $(AR) $(ARFLAGS)
+else
LINK_LIB.CC = $(CC) $(LFLAGS) $(SHARED_FLAG)
+endif
PREPROCESS.CC = $(CC_COMPILE) -E
COMPILE.CXX = $(CXX_COMPILE) -c
--- a/hotspot/make/bsd/makefiles/saproc.make Wed Jul 05 20:53:25 2017 +0200
+++ b/hotspot/make/bsd/makefiles/saproc.make Mon Oct 19 13:21:37 2015 -0400
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -28,9 +28,9 @@
SAPROC = saproc
ifeq ($(OS_VENDOR), Darwin)
- LIBSAPROC = lib$(SAPROC).dylib
+ LIBSAPROC = lib$(SAPROC).$(LIBRARY_SUFFIX)
- LIBSAPROC_DEBUGINFO = lib$(SAPROC).dylib.dSYM
+ LIBSAPROC_DEBUGINFO = lib$(SAPROC).$(LIBRARY_SUFFIX).dSYM
LIBSAPROC_DIZ = lib$(SAPROC).diz
else
LIBSAPROC = lib$(SAPROC).so
--- a/hotspot/make/bsd/makefiles/vm.make Wed Jul 05 20:53:25 2017 +0200
+++ b/hotspot/make/bsd/makefiles/vm.make Mon Oct 19 13:21:37 2015 -0400
@@ -142,10 +142,10 @@
JVM = jvm
ifeq ($(OS_VENDOR), Darwin)
- LIBJVM = lib$(JVM).dylib
+ LIBJVM = lib$(JVM).$(LIBRARY_SUFFIX)
CFLAGS += -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE
- LIBJVM_DEBUGINFO = lib$(JVM).dylib.dSYM
+ LIBJVM_DEBUGINFO = lib$(JVM).$(LIBRARY_SUFFIX).dSYM
LIBJVM_DIZ = lib$(JVM).diz
else
LIBJVM = lib$(JVM).so
@@ -261,6 +261,16 @@
{ print $$0 } \
}' > $@ < $(MAPFILE)
+ifeq ($(STATIC_BUILD),true)
+EXPORTED_SYMBOLS = libjvm.symbols
+
+libjvm.symbols : mapfile
+ $(CP) mapfile libjvm.symbols
+
+else
+EXPORTED_SYMBOLS =
+endif
+
mapfile_reorder : mapfile $(REORDERFILE)
rm -f $@
cat $^ > $@
@@ -288,9 +298,11 @@
LFLAGS_VM += $(SONAMEFLAG:SONAME=$(LIBJVM))
ifeq ($(OS_VENDOR), Darwin)
- LFLAGS_VM += -Xlinker -rpath -Xlinker @loader_path/.
- LFLAGS_VM += -Xlinker -rpath -Xlinker @loader_path/..
- LFLAGS_VM += -Xlinker -install_name -Xlinker @rpath/$(@F)
+ ifneq ($(STATIC_BUILD),true)
+ LFLAGS_VM += -Xlinker -rpath -Xlinker @loader_path/.
+ LFLAGS_VM += -Xlinker -rpath -Xlinker @loader_path/..
+ LFLAGS_VM += -Xlinker -install_name -Xlinker @rpath/$(@F)
+ endif
else
LFLAGS_VM += -Wl,-z,defs
endif
@@ -345,6 +357,10 @@
endif
$(LIBJVM): $(LIBJVM.o) $(LIBJVM_MAPFILE) $(LD_SCRIPT)
+ifeq ($(STATIC_BUILD),true)
+ echo Linking static vm...;
+ $(LINK_LIB.CC) $@ $(LIBJVM.o)
+else
$(QUIETLY) { \
echo $(LOG_INFO) Linking vm...; \
$(LINK_LIB.CXX/PRE_HOOK) \
@@ -354,6 +370,8 @@
rm -f $@.1; ln -s $@ $@.1; \
}
+endif
+
ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq ($(OS_VENDOR), Darwin)
$(DSYMUTIL) $@
@@ -410,10 +428,10 @@
ifeq ($(OS_VENDOR), Darwin)
# no libjvm_db for macosx
-build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(BUILDLIBSAPROC) dtraceCheck
+build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(BUILDLIBSAPROC) dtraceCheck $(EXPORTED_SYMBOLS)
echo "Doing vm.make build:"
else
-build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(BUILDLIBSAPROC)
+build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(BUILDLIBSAPROC) $(EXPORTED_SYMBOLS)
endif
install: install_jvm install_jsig install_saproc
--- a/hotspot/src/os/bsd/vm/os_bsd.cpp Wed Jul 05 20:53:25 2017 +0200
+++ b/hotspot/src/os/bsd/vm/os_bsd.cpp Mon Oct 19 13:21:37 2015 -0400
@@ -442,6 +442,10 @@
if (pslash != NULL) {
*pslash = '\0'; // Get rid of /{client|server|hotspot}.
}
+#ifdef STATIC_BUILD
+ strcat(buf, "/lib");
+#endif
+
Arguments::set_dll_dir(buf);
if (pslash != NULL) {
@@ -1390,6 +1394,9 @@
#ifdef __APPLE__
void * os::dll_load(const char *filename, char *ebuf, int ebuflen) {
+#ifdef STATIC_BUILD
+ return os::get_default_process_handle();
+#else
void * result= ::dlopen(filename, RTLD_LAZY);
if (result != NULL) {
// Successful loading
@@ -1401,9 +1408,13 @@
ebuf[ebuflen-1]='\0';
return NULL;
+#endif // STATIC_BUILD
}
#else
void * os::dll_load(const char *filename, char *ebuf, int ebuflen) {
+#ifdef STATIC_BUILD
+ return os::get_default_process_handle();
+#else
void * result= ::dlopen(filename, RTLD_LAZY);
if (result != NULL) {
// Successful loading
@@ -1576,6 +1587,7 @@
}
return NULL;
+#endif // STATIC_BUILD
}
#endif // !__APPLE__
--- a/hotspot/src/share/vm/compiler/disassembler.cpp Wed Jul 05 20:53:25 2017 +0200
+++ b/hotspot/src/share/vm/compiler/disassembler.cpp Mon Oct 19 13:21:37 2015 -0400
@@ -88,6 +88,12 @@
os::jvm_path(buf, sizeof(buf));
int jvm_offset = -1;
int lib_offset = -1;
+#ifdef STATIC_BUILD
+ char* p = strrchr(buf, '/');
+ *p = '\0';
+ strcat(p, "/lib/");
+ lib_offset = jvm_offset = strlen(buf);
+#else
{
// Match "jvm[^/]*" in jvm_path.
const char* base = buf;
@@ -96,6 +102,7 @@
p = strstr(p ? p : base, "jvm");
if (p != NULL) jvm_offset = p - base;
}
+#endif
// Find the disassembler shared library.
// Search for several paths derived from libjvm, in this order:
// 1. <home>/jre/lib/<arch>/<vm>/libhsdis-<arch>.so (for compatibility)