# HG changeset patch # User amurillo # Date 1446837111 28800 # Node ID 380b55555d8052e10d0742799c485fac79be8dd0 # Parent f242d4332f563648426a1b0fa02d8741beba19ef# Parent 31ae937694f941635d760cf304c9c30d753a9125 Merge diff -r f242d4332f56 -r 380b55555d80 common/autoconf/configure.ac --- a/common/autoconf/configure.ac Wed Jul 05 20:59:28 2017 +0200 +++ b/common/autoconf/configure.ac Fri Nov 06 11:11:51 2015 -0800 @@ -155,6 +155,9 @@ # ############################################################################### +# See if we are doing a complete static build or not +JDKOPT_SETUP_STATIC_BUILD + # First determine the toolchain type (compiler family) TOOLCHAIN_DETERMINE_TOOLCHAIN_TYPE diff -r f242d4332f56 -r 380b55555d80 common/autoconf/flags.m4 --- a/common/autoconf/flags.m4 Wed Jul 05 20:59:28 2017 +0200 +++ b/common/autoconf/flags.m4 Fri Nov 06 11:11:51 2015 -0800 @@ -221,7 +221,11 @@ if test "x$OPENJDK_TARGET_OS" = xmacosx; then # Linking is different on MacOSX - SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" + if test "x$STATIC_BUILD" = xtrue; then + SHARED_LIBRARY_FLAGS ='-undefined dynamic_lookup' + else + SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" + fi SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN" SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/[$]1' @@ -696,7 +700,9 @@ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK \ -I${JDK_TOPDIR}/src/java.base/share/native/include \ -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS/native/include \ - -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_TYPE/native/include" + -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_TYPE/native/include \ + -I${JDK_TOPDIR}/src/java.base/share/native/libjava \ + -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_TYPE/native/libjava" # The shared libraries are compiled using the picflag. CFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" diff -r f242d4332f56 -r 380b55555d80 common/autoconf/generated-configure.sh --- a/common/autoconf/generated-configure.sh Wed Jul 05 20:59:28 2017 +0200 +++ b/common/autoconf/generated-configure.sh Fri Nov 06 11:11:51 2015 -0800 @@ -803,6 +803,7 @@ SHARED_LIBRARY_SUFFIX LIBRARY_PREFIX TOOLCHAIN_TYPE +STATIC_BUILD BUILD_HOTSPOT HOTSPOT_DIST BUILD_OUTPUT @@ -1074,6 +1075,7 @@ with_override_nashorn with_override_jdk with_import_hotspot +enable_static_build with_toolchain_type with_extra_cflags with_extra_cxxflags @@ -1852,6 +1854,7 @@ run the Queens test after Hotspot build [disabled] --enable-unlimited-crypto Enable unlimited crypto policy [disabled] + --enable-static-build enable static library build [disabled] --disable-warnings-as-errors do not consider native warnings to be an error [enabled] @@ -3989,6 +3992,15 @@ # +################################################################################ +# +# Static build support. When enabled will generate static +# libraries instead of shared libraries for all JDK libs. +# + + + + # # Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -29018,6 +29030,40 @@ # ############################################################################### +# See if we are doing a complete static build or not + + # Check whether --enable-static-build was given. +if test "${enable_static_build+set}" = set; then : + enableval=$enable_static_build; +fi + + STATIC_BUILD=false + if test "x$enable_static_build" = "xyes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if static build is enabled" >&5 +$as_echo_n "checking if static build is enabled... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + if test "x$OPENJDK_TARGET_OS" != "xmacosx"; then + as_fn_error $? "--enable-static-build is only supported for macosx builds" "$LINENO" 5 + fi + STATIC_BUILD_CFLAGS="-DSTATIC_BUILD=1" + LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $STATIC_BUILD_CFLAGS" + LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $STATIC_BUILD_CFLAGS" + CFLAGS_JDKLIB_EXTRA="$CFLAGS_JDKLIB_EXTRA $STATIC_BUILD_CFLAGS" + CXXFLAGS_JDKLIB_EXTRA="$CXXFLAGS_JDKLIB_EXTRA $STATIC_BUILD_CFLAGS" + STATIC_BUILD=true + elif test "x$enable_static_build" = "xno"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if static build is enabled" >&5 +$as_echo_n "checking if static build is enabled... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + elif test "x$enable_static_build" != "x"; then + as_fn_error $? "--enable-static-build can only be assigned \"yes\" or \"no\"" "$LINENO" 5 + fi + + + + # First determine the toolchain type (compiler family) @@ -29126,8 +29172,19 @@ OBJ_SUFFIX='.o' EXE_SUFFIX='' if test "x$OPENJDK_TARGET_OS" = xmacosx; then - SHARED_LIBRARY='lib$1.dylib' - SHARED_LIBRARY_SUFFIX='.dylib' + # For full static builds, we're overloading the SHARED_LIBRARY + # variables in order to limit the amount of changes required. + # It would be better to remove SHARED and just use LIBRARY and + # LIBRARY_SUFFIX for libraries that can be built either + # shared or static and use STATIC_* for libraries that are + # always built statically. + if test "x$STATIC_BUILD" = xtrue; then + SHARED_LIBRARY='lib$1.a' + SHARED_LIBRARY_SUFFIX='.a' + else + SHARED_LIBRARY='lib$1.dylib' + SHARED_LIBRARY_SUFFIX='.dylib' + fi fi fi @@ -44314,7 +44371,11 @@ if test "x$OPENJDK_TARGET_OS" = xmacosx; then # Linking is different on MacOSX - SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" + if test "x$STATIC_BUILD" = xtrue; then + SHARED_LIBRARY_FLAGS ='-undefined dynamic_lookup' + else + SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" + fi SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN" SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/$1' @@ -44818,7 +44879,9 @@ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK \ -I${JDK_TOPDIR}/src/java.base/share/native/include \ -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS/native/include \ - -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_TYPE/native/include" + -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_TYPE/native/include \ + -I${JDK_TOPDIR}/src/java.base/share/native/libjava \ + -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_TYPE/native/libjava" # The shared libraries are compiled using the picflag. CFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" diff -r f242d4332f56 -r 380b55555d80 common/autoconf/jdk-options.m4 --- a/common/autoconf/jdk-options.m4 Wed Jul 05 20:59:28 2017 +0200 +++ b/common/autoconf/jdk-options.m4 Fri Nov 06 11:11:51 2015 -0800 @@ -665,3 +665,37 @@ AC_SUBST(GCOV_ENABLED) ]) + +################################################################################ +# +# Static build support. When enabled will generate static +# libraries instead of shared libraries for all JDK libs. +# +AC_DEFUN_ONCE([JDKOPT_SETUP_STATIC_BUILD], +[ + AC_ARG_ENABLE([static-build], [AS_HELP_STRING([--enable-static-build], + [enable static library build @<:@disabled@:>@])]) + STATIC_BUILD=false + if test "x$enable_static_build" = "xyes"; then + AC_MSG_CHECKING([if static build is enabled]) + AC_MSG_RESULT([yes]) + if test "x$OPENJDK_TARGET_OS" != "xmacosx"; then + AC_MSG_ERROR([--enable-static-build is only supported for macosx builds]) + fi + STATIC_BUILD_CFLAGS="-DSTATIC_BUILD=1" + LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $STATIC_BUILD_CFLAGS" + LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $STATIC_BUILD_CFLAGS" + CFLAGS_JDKLIB_EXTRA="$CFLAGS_JDKLIB_EXTRA $STATIC_BUILD_CFLAGS" + CXXFLAGS_JDKLIB_EXTRA="$CXXFLAGS_JDKLIB_EXTRA $STATIC_BUILD_CFLAGS" + STATIC_BUILD=true + elif test "x$enable_static_build" = "xno"; then + AC_MSG_CHECKING([if static build is enabled]) + AC_MSG_RESULT([no]) + elif test "x$enable_static_build" != "x"; then + AC_MSG_ERROR([--enable-static-build can only be assigned "yes" or "no"]) + fi + + AC_SUBST(STATIC_BUILD) +]) + + diff -r f242d4332f56 -r 380b55555d80 common/autoconf/spec.gmk.in --- a/common/autoconf/spec.gmk.in Wed Jul 05 20:59:28 2017 +0200 +++ b/common/autoconf/spec.gmk.in Fri Nov 06 11:11:51 2015 -0800 @@ -417,6 +417,7 @@ STATIC_LIBRARY_SUFFIX:=@STATIC_LIBRARY_SUFFIX@ EXE_SUFFIX:=@EXE_SUFFIX@ OBJ_SUFFIX:=@OBJ_SUFFIX@ +STATIC_BUILD:=@STATIC_BUILD@ STRIPFLAGS:=@STRIPFLAGS@ diff -r f242d4332f56 -r 380b55555d80 common/autoconf/toolchain.m4 --- a/common/autoconf/toolchain.m4 Wed Jul 05 20:59:28 2017 +0200 +++ b/common/autoconf/toolchain.m4 Fri Nov 06 11:11:51 2015 -0800 @@ -72,8 +72,19 @@ OBJ_SUFFIX='.o' EXE_SUFFIX='' if test "x$OPENJDK_TARGET_OS" = xmacosx; then - SHARED_LIBRARY='lib[$]1.dylib' - SHARED_LIBRARY_SUFFIX='.dylib' + # For full static builds, we're overloading the SHARED_LIBRARY + # variables in order to limit the amount of changes required. + # It would be better to remove SHARED and just use LIBRARY and + # LIBRARY_SUFFIX for libraries that can be built either + # shared or static and use STATIC_* for libraries that are + # always built statically. + if test "x$STATIC_BUILD" = xtrue; then + SHARED_LIBRARY='lib[$]1.a' + SHARED_LIBRARY_SUFFIX='.a' + else + SHARED_LIBRARY='lib[$]1.dylib' + SHARED_LIBRARY_SUFFIX='.dylib' + fi fi fi diff -r f242d4332f56 -r 380b55555d80 make/BuildStatic.gmk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/make/BuildStatic.gmk Fri Nov 06 11:11:51 2015 -0800 @@ -0,0 +1,54 @@ +# +# Copyright (c) 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +default: all + +include $(SPEC) +include MakeBase.gmk + +################################################################################ +# +# Concatenate exported.symbols files for modules into a single global file. +# + +GLOBAL_SYMBOLS_FILE := $(SUPPORT_OUTPUTDIR)/build-static/exported.symbols + +EXPORTED_SYMBOLS_MODULES := java.base jdk.jdwp.agent + +MODULES_SYMBOLS_FILES := $(foreach module, $(EXPORTED_SYMBOLS_MODULES), \ + $(SUPPORT_OUTPUTDIR)/modules_libs/$(module)/$(module).symbols) + +$(GLOBAL_SYMBOLS_FILE): $(MODULES_SYMBOLS_FILES) + $(ECHO) $(LOG_INFO) "Generating global exported.symbols file" + $(MKDIR) -p $(@D) + $(CAT) $^ > $@ + +TARGETS += $(GLOBAL_SYMBOLS_FILE) + +################################################################################ + +all: $(TARGETS) + +.PHONY: default all diff -r f242d4332f56 -r 380b55555d80 make/Main.gmk --- a/make/Main.gmk Wed Jul 05 20:59:28 2017 +0200 +++ b/make/Main.gmk Fri Nov 06 11:11:51 2015 -0800 @@ -93,7 +93,10 @@ unpack-sec: +($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f UnpackSecurity.gmk) -ALL_TARGETS += import-hotspot unpack-sec +generate-exported-symbols: + +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f BuildStatic.gmk) + +ALL_TARGETS += import-hotspot unpack-sec generate-exported-symbols ################################################################################ # Gensrc targets, generating source before java compilation can be done @@ -298,16 +301,23 @@ test: $(call RunTests, $(TEST)) +test-hotspot-jtreg: + $(call RunTests, "hotspot_all") + test-hotspot-jtreg-native: $(call RunTests, "hotspot_native_sanity") +test-hotspot-internal: + $(call RunTests, "hotspot_internal") + test-jdk-jtreg-native: $(call RunTests, "jdk_native_sanity") test-make: ($(CD) $(SRC_ROOT)/test/make && $(MAKE) $(MAKE_ARGS) -f TestMake.gmk $(TEST_TARGET)) -ALL_TARGETS += test test-hotspot-jtreg-native test-jdk-jtreg-native test-make +ALL_TARGETS += test test-hotspot-jtreg test-hotspot-jtreg-native \ + test-hotspot-internal test-jdk-jtreg-native test-make ################################################################################ # Verification targets @@ -368,10 +378,16 @@ import-hotspot: hotspot + generate-exported-symbols: java.base-libs jdk.jdwp.agent-libs + $(LIBS_TARGETS): import-hotspot $(LAUNCHER_TARGETS): java.base-libs + ifeq ($(STATIC_BUILD), true) + $(LAUNCHER_TARGETS): generate-exported-symbols + endif + # The demos are currently linking to libjvm and libjava, just like all other # jdk libs, even though they don't need to. To avoid warnings, make sure they # aren't built until after libjava and libjvm are available to link to. @@ -462,6 +478,10 @@ test-image-jdk-jtreg-native: build-test-jdk-jtreg-native + test-hotspot-internal: exploded-image + + test-hotspot-jtreg: jimages test-image + endif ################################################################################ diff -r f242d4332f56 -r 380b55555d80 make/common/NativeCompilation.gmk --- a/make/common/NativeCompilation.gmk Wed Jul 05 20:59:28 2017 +0200 +++ b/make/common/NativeCompilation.gmk Fri Nov 06 11:11:51 2015 -0800 @@ -35,6 +35,31 @@ endif ################################################################################ +# Create exported symbols file for static libraries +################################################################################ + +# get the exported symbols from mapfiles and if there +# is no mapfile, get them from the archive +define GetSymbols + $(RM) $$(@D)/$$(basename $$(@F)).symbols; \ + if [ ! -z $$($1_MAPFILE) -a -e $$($1_MAPFILE) ]; then \ + $(ECHO) "Getting symbols from mapfile $$($1_MAPFILE)"; \ + $(AWK) '/global:/','/local:/' $$($1_MAPFILE) | \ + $(SED) -e 's/#.*//;s/global://;s/local://;s/\;//;s/^[ ]*/_/;/^_$$$$/d' | \ + $(EGREP) -v "JNI_OnLoad|JNI_OnUnload|Agent_OnLoad|Agent_OnUnload|Agent_OnAttach" > \ + $$(@D)/$$(basename $$(@F)).symbols || true; \ + $(NM) $$($1_TARGET) | $(GREP) " T " | \ + $(EGREP) "JNI_OnLoad|JNI_OnUnload|Agent_OnLoad|Agent_OnUnload|Agent_OnAttach" | \ + $(CUT) -d ' ' -f 3 >> $$(@D)/$$(basename $$(@F)).symbols || true;\ + else \ + $(ECHO) "Getting symbols from nm"; \ + $(NM) -m $$($1_TARGET) | $(GREP) "__TEXT" | \ + $(EGREP) -v "non-external|private extern|__TEXT,__eh_frame" | \ + $(SED) -e 's/.* //' > $$(@D)/$$(basename $$(@F)).symbols; \ + fi +endef + +################################################################################ # Define a native toolchain configuration that can be used by # SetupNativeCompilation calls # @@ -274,6 +299,15 @@ SetupNativeCompilation = $(NamedParamsMacroTemplate) define SetupNativeCompilationBody + # If we're doing a static build and producing a library + # force it to be a static library and remove the -l libraries + ifeq ($(STATIC_BUILD), true) + ifneq ($$($1_LIBRARY),) + $1_STATIC_LIBRARY := $$($1_LIBRARY) + $1_LIBRARY := + endif + endif + ifneq (,$$($1_BIN)) $$(error BIN has been replaced with OBJECT_DIR) endif @@ -495,6 +529,12 @@ $1_EXTRA_CXXFLAGS += $$(CXX_FLAG_REORDER) endif + # Pass the library name for static JNI library naming + ifneq ($$($1_STATIC_LIBRARY),) + $1_EXTRA_CFLAGS += -DLIBRARY_NAME=$$($1_STATIC_LIBRARY) + $1_EXTRA_CXXFLAGS += -DLIBRARY_NAME=$$($1_STATIC_LIBRARY) + endif + # Pick up disabled warnings, if possible on this platform. ifneq ($(DISABLE_WARNING_PREFIX),) $1_EXTRA_CFLAGS += $$(addprefix $(DISABLE_WARNING_PREFIX), $$($1_DISABLED_WARNINGS_$(TOOLCHAIN_TYPE))) @@ -725,7 +765,10 @@ $(ECHO) $(LOG_INFO) "Archiving $$($1_STATIC_LIBRARY)" $(call LogFailures, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link.log, $$($1_SAFE_NAME)_link, \ $$($1_AR) $$($1_ARFLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_EXPECTED_OBJS) \ - $$($1_RES) $$($1_LIBS) $$($1_EXTRA_LIBS)) + $$($1_RES)) + ifeq ($(STATIC_BUILD), true) + $(GetSymbols) + endif endif ifneq (,$$($1_PROGRAM)) diff -r f242d4332f56 -r 380b55555d80 test/lib/sun/hotspot/code/CodeBlob.java --- a/test/lib/sun/hotspot/code/CodeBlob.java Wed Jul 05 20:59:28 2017 +0200 +++ b/test/lib/sun/hotspot/code/CodeBlob.java Fri Nov 06 11:11:51 2015 -0800 @@ -47,22 +47,24 @@ return new CodeBlob(obj); } protected CodeBlob(Object[] obj) { - assert obj.length == 3; + assert obj.length == 4; name = (String) obj[0]; size = (Integer) obj[1]; code_blob_type = BlobType.values()[(Integer) obj[2]]; assert code_blob_type.id == (Integer) obj[2]; + address = (Long) obj[3]; } public final String name; public final int size; public final BlobType code_blob_type; - + public final long address; @Override public String toString() { return "CodeBlob{" + "name=" + name + ", size=" + size + ", code_blob_type=" + code_blob_type + + ", address=" + address + '}'; } } diff -r f242d4332f56 -r 380b55555d80 test/lib/sun/hotspot/code/NMethod.java --- a/test/lib/sun/hotspot/code/NMethod.java Wed Jul 05 20:59:28 2017 +0200 +++ b/test/lib/sun/hotspot/code/NMethod.java Fri Nov 06 11:11:51 2015 -0800 @@ -39,12 +39,12 @@ comp_level = (Integer) obj[1]; insts = (byte[]) obj[2]; compile_id = (Integer) obj[3]; - address = (Long) obj[4]; + entry_point = (Long) obj[4]; } public final byte[] insts; public final int comp_level; public final int compile_id; - public final long address; + public final long entry_point; @Override public String toString() { @@ -53,7 +53,7 @@ + ", insts=" + insts + ", comp_level=" + comp_level + ", compile_id=" + compile_id - + ", address=" + address + + ", entry_point=" + entry_point + '}'; } }