OpenJDK / jigsaw / jake
changeset 2105:6c81b27fe725
Merge
author | mchung |
---|---|
date | Mon, 30 Nov 2015 14:57:21 -0800 |
parents | 5165085d2c54 c3a9e69cf142 |
children | f00cc7909d28 39a8e17957f6 |
files | common/autoconf/configure.ac common/autoconf/flags.m4 common/autoconf/generated-configure.sh common/autoconf/jdk-options.m4 common/autoconf/spec.gmk.in common/autoconf/toolchain.m4 make/CompileJavaModules.gmk make/InitSupport.gmk make/Main.gmk make/common/NativeCompilation.gmk |
diffstat | 15 files changed, 336 insertions(+), 56 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgtags Tue Nov 24 14:01:39 2015 +0100 +++ b/.hgtags Mon Nov 30 14:57:21 2015 -0800 @@ -335,3 +335,5 @@ cf1dc4c035fb84693d4ae5ad818785cb4d1465d1 jdk9-b90 122142a185381ce5cea959bf13b923d8cc333628 jdk9-b91 106c06398f7ab330eef9e335fbd3a5a8ead23b77 jdk9-b92 +331fda57dfd323c61804ba0472776790de572937 jdk9-b93 +349488425abcaf3ff62f580007860b4b56875d10 jdk9-b94
--- a/common/autoconf/configure.ac Tue Nov 24 14:01:39 2015 +0100 +++ b/common/autoconf/configure.ac Mon Nov 30 14:57:21 2015 -0800 @@ -158,6 +158,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
--- a/common/autoconf/flags.m4 Tue Nov 24 14:01:39 2015 +0100 +++ b/common/autoconf/flags.m4 Mon Nov 30 14:57:21 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' @@ -698,7 +702,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 $OPENJDK_TARGET_CCXXFLAGS_JDK \
--- a/common/autoconf/generated-configure.sh Tue Nov 24 14:01:39 2015 +0100 +++ b/common/autoconf/generated-configure.sh Mon Nov 30 14:57:21 2015 -0800 @@ -813,6 +813,7 @@ SHARED_LIBRARY_SUFFIX LIBRARY_PREFIX TOOLCHAIN_TYPE +STATIC_BUILD IMPORT_MODULES_MAKE IMPORT_MODULES_SRC IMPORT_MODULES_CONF @@ -1099,6 +1100,7 @@ with_override_jdk with_import_hotspot with_import_modules +enable_static_build with_toolchain_type with_extra_cflags with_extra_cxxflags @@ -1879,6 +1881,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] @@ -4038,6 +4041,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. @@ -4653,7 +4665,7 @@ #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1448354029 +DATE_WHEN_GENERATED=1448915737 ############################################################################### # @@ -29560,6 +29572,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) @@ -29668,8 +29714,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 @@ -46449,7 +46506,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' @@ -46955,7 +47016,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 $OPENJDK_TARGET_CCXXFLAGS_JDK \
--- a/common/autoconf/jdk-options.m4 Tue Nov 24 14:01:39 2015 +0100 +++ b/common/autoconf/jdk-options.m4 Mon Nov 30 14:57:21 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) +]) + +
--- a/common/autoconf/spec.gmk.in Tue Nov 24 14:01:39 2015 +0100 +++ b/common/autoconf/spec.gmk.in Mon Nov 30 14:57:21 2015 -0800 @@ -435,6 +435,7 @@ STATIC_LIBRARY_SUFFIX:=@STATIC_LIBRARY_SUFFIX@ EXE_SUFFIX:=@EXE_SUFFIX@ OBJ_SUFFIX:=@OBJ_SUFFIX@ +STATIC_BUILD:=@STATIC_BUILD@ STRIPFLAGS:=@STRIPFLAGS@
--- a/common/autoconf/toolchain.m4 Tue Nov 24 14:01:39 2015 +0100 +++ b/common/autoconf/toolchain.m4 Mon Nov 30 14:57:21 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/make/BuildStatic.gmk Mon Nov 30 14:57:21 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
--- a/make/CompileJavaModules.gmk Tue Nov 24 14:01:39 2015 +0100 +++ b/make/CompileJavaModules.gmk Mon Nov 30 14:57:21 2015 -0800 @@ -375,7 +375,7 @@ ################################################################################ -jdk.javadoc_COPY := .xml .css .js +jdk.javadoc_COPY := .xml .css .js .png ################################################################################ @@ -530,7 +530,6 @@ $(HOTSPOT_JVMCI_SRC)/jdk.vm.ci.amd64/src \ $(HOTSPOT_JVMCI_SRC)/jdk.vm.ci.code/src \ $(HOTSPOT_JVMCI_SRC)/jdk.vm.ci.common/src \ - $(HOTSPOT_JVMCI_SRC)/jdk.vm.ci.compiler/src \ $(HOTSPOT_JVMCI_SRC)/jdk.vm.ci.hotspot/src \ $(HOTSPOT_JVMCI_SRC)/jdk.vm.ci.hotspot.amd64/src \ $(HOTSPOT_JVMCI_SRC)/jdk.vm.ci.hotspot.sparc/src \
--- a/make/Init.gmk Tue Nov 24 14:01:39 2015 +0100 +++ b/make/Init.gmk Mon Nov 30 14:57:21 2015 -0800 @@ -305,49 +305,20 @@ endif on-failure: - ifneq ($(wildcard $(MAKESUPPORT_OUTPUTDIR)/failure-logs/*), ) - $(PRINTF) "=== Output from failing command(s) repeated here ===\n" - $(foreach logfile, $(sort $(wildcard $(MAKESUPPORT_OUTPUTDIR)/failure-logs/*)), \ - $(PRINTF) "* For target $(notdir $(basename $(logfile))):\n" $(NEWLINE) \ - $(CAT) $(logfile) | $(GREP) -v -e "^Note: including file:" $(NEWLINE) \ - ) - $(PRINTF) "=== End of repeated output ===\n" + $(call PrintFailureReports) + $(call PrintBuildLogFailures) + $(PRINTF) "Hint: If caused by a warning, try configure --disable-warnings-as-errors.\n\n" + ifneq ($(COMPARE_BUILD), ) + $(call CleanupCompareBuild) endif - if $(GREP) -q "recipe for target .* failed" $(BUILD_LOG) 2> /dev/null; then \ - $(PRINTF) "=== Make failure sequence repeated here ===\n" ; \ - $(GREP) "recipe for target .* failed" $(BUILD_LOG) ; \ - $(PRINTF) "=== End of repeated output ===\n" ; \ - $(PRINTF) "Hint: Try searching the build log for the name of the first failed target.\n" ; \ - else \ - $(PRINTF) "No indication of failed target found.\n" ; \ - $(PRINTF) "Hint: Try searching the build log for '] Error'.\n" ; \ - fi - $(PRINTF) "Hint: If caused by a warning, try configure --disable-warnings-as-errors.\n\n" # Support targets for COMPARE_BUILD, used for makefile development pre-compare-build: - $(ECHO) "Preparing for comparison rebuild" - # Apply patch, if any - ifneq ($(COMPARE_BUILD_PATCH), ) - $(PATCH) -p1 < $(COMPARE_BUILD_PATCH) - endif - # Move the first build away and re-create the output directory - ( cd $(TOPDIR) && \ - $(MV) $(OUTPUT_ROOT) $(OUTPUT_ROOT).OLD && \ - $(MKDIR) -p $(OUTPUT_ROOT) ) - # Re-run configure with the same arguments (and possibly some additional), - # must be done after patching. - ( cd $(OUTPUT_ROOT) && PATH="$(ORIGINAL_PATH)" \ - $(BASH) $(TOPDIR)/configure $(CONFIGURE_COMMAND_LINE) $(COMPARE_BUILD_CONF)) + $(call PrepareCompareBuild) post-compare-build: - # Compare first and second build. Ignore any error code from compare.sh. - $(ECHO) "Comparing between comparison rebuild (this/new) and baseline (other/old)" - ifneq ($(COMPARE_BUILD_COMP_DIR), ) - +(cd $(OUTPUT_ROOT) && ./compare.sh $(COMPARE_BUILD_COMP_OPTS) -2dirs $(OUTPUT_ROOT)/$(COMPARE_BUILD_COMP_DIR) $(OUTPUT_ROOT).OLD/$(COMPARE_BUILD_COMP_DIR) || true) - else - +(cd $(OUTPUT_ROOT) && ./compare.sh $(COMPARE_BUILD_COMP_OPTS) -o $(OUTPUT_ROOT).OLD || true) - endif + $(call CleanupCompareBuild) + $(call CompareBuildDoComparison) .PHONY: print-targets print-modules reconfigure main on-failure endif
--- a/make/InitSupport.gmk Tue Nov 24 14:01:39 2015 +0100 +++ b/make/InitSupport.gmk Mon Nov 30 14:57:21 2015 -0800 @@ -321,6 +321,8 @@ # If any value contains "+", it will be replaced by space. define ParseCompareBuild ifneq ($$(COMPARE_BUILD), ) + COMPARE_BUILD_OUTPUT_ROOT := $(TOPDIR)/build/compare-build/$(CONF_NAME) + ifneq ($$(findstring :, $$(COMPARE_BUILD)), ) $$(foreach part, $$(subst :, , $$(COMPARE_BUILD)), \ $$(if $$(filter PATCH=%, $$(part)), \ @@ -364,6 +366,73 @@ endif endef + # Prepare for a comparison rebuild + define PrepareCompareBuild + $(ECHO) "Preparing for comparison rebuild" + # Apply patch, if any + $(if $(COMPARE_BUILD_PATCH), $(PATCH) -p1 < $(COMPARE_BUILD_PATCH)) + # Move the first build away temporarily + $(RM) -r $(TOPDIR)/build/.compare-build-temp + $(MKDIR) -p $(TOPDIR)/build/.compare-build-temp + $(MV) $(OUTPUT_ROOT) $(TOPDIR)/build/.compare-build-temp + # Restore an old compare-build, or create a new compare-build directory. + if test -d $(COMPARE_BUILD_OUTPUT_ROOT); then \ + $(MV) $(COMPARE_BUILD_OUTPUT_ROOT) $(OUTPUT_ROOT); \ + else \ + $(MKDIR) -p $(OUTPUT_ROOT); \ + fi + # Re-run configure with the same arguments (and possibly some additional), + # must be done after patching. + ( cd $(OUTPUT_ROOT) && PATH="$(ORIGINAL_PATH)" \ + $(BASH) $(TOPDIR)/configure $(CONFIGURE_COMMAND_LINE) $(COMPARE_BUILD_CONF)) + endef + + # Cleanup after a compare build + define CleanupCompareBuild + # If running with a COMPARE_BUILD patch, reverse-apply it + $(if $(COMPARE_BUILD_PATCH), $(PATCH) -R -p1 < $(COMPARE_BUILD_PATCH)) + # Move this build away and restore the original build + $(MKDIR) -p $(TOPDIR)/build/compare-build + $(MV) $(OUTPUT_ROOT) $(COMPARE_BUILD_OUTPUT_ROOT) + $(MV) $(TOPDIR)/build/.compare-build-temp/$(CONF_NAME) $(OUTPUT_ROOT) + $(RM) -r $(TOPDIR)/build/.compare-build-temp + endef + + # Do the actual comparison of two builds + define CompareBuildDoComparison + # Compare first and second build. Ignore any error code from compare.sh. + $(ECHO) "Comparing between comparison rebuild (this/new) and baseline (other/old)" + $(if $(COMPARE_BUILD_COMP_DIR), \ + +(cd $(COMPARE_BUILD_OUTPUT_ROOT) && ./compare.sh $(COMPARE_BUILD_COMP_OPTS) \ + -2dirs $(COMPARE_BUILD_OUTPUT_ROOT)/$(COMPARE_BUILD_COMP_DIR) $(OUTPUT_ROOT)/$(COMPARE_BUILD_COMP_DIR) || true), \ + +(cd $(COMPARE_BUILD_OUTPUT_ROOT) && ./compare.sh $(COMPARE_BUILD_COMP_OPTS) \ + -o $(OUTPUT_ROOT) || true) \ + ) + endef + + define PrintFailureReports + $(if $(wildcard $(MAKESUPPORT_OUTPUTDIR)/failure-logs/*), \ + $(PRINTF) "=== Output from failing command(s) repeated here ===\n" $(NEWLINE) \ + $(foreach logfile, $(sort $(wildcard $(MAKESUPPORT_OUTPUTDIR)/failure-logs/*)), \ + $(PRINTF) "* For target $(notdir $(basename $(logfile))):\n" $(NEWLINE) \ + $(CAT) $(logfile) | $(GREP) -v -e "^Note: including file:" $(NEWLINE) \ + ) \ + $(PRINTF) "=== End of repeated output ===\n" \ + ) + endef + + define PrintBuildLogFailures + if $(GREP) -q "recipe for target .* failed" $(BUILD_LOG) 2> /dev/null; then \ + $(PRINTF) "=== Make failure sequence repeated here ===\n" ; \ + $(GREP) "recipe for target .* failed" $(BUILD_LOG) ; \ + $(PRINTF) "=== End of repeated output ===\n" ; \ + $(PRINTF) "Hint: Try searching the build log for the name of the first failed target.\n" ; \ + else \ + $(PRINTF) "No indication of failed target found.\n" ; \ + $(PRINTF) "Hint: Try searching the build log for '] Error'.\n" ; \ + fi + endef + define RotateLogFiles $(RM) $(BUILD_LOG).old 2> /dev/null $(MV) $(BUILD_LOG) $(BUILD_LOG).old 2> /dev/null || true
--- a/make/Main.gmk Tue Nov 24 14:01:39 2015 +0100 +++ b/make/Main.gmk Mon Nov 30 14:57:21 2015 -0800 @@ -92,7 +92,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 @@ -392,16 +395,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 ################################################################################ # Install targets @@ -454,10 +464,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. @@ -577,6 +593,12 @@ test-image-jdk-jtreg-native: build-test-jdk-jtreg-native + test-hotspot-internal: exploded-image + + test-hotspot-jtreg: jimages test-image + + install: product-images + generate-summary: jmods endif
--- a/make/common/NativeCompilation.gmk Tue Nov 24 14:01:39 2015 +0100 +++ b/make/common/NativeCompilation.gmk Mon Nov 30 14:57:21 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 # @@ -276,6 +301,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 @@ -497,6 +531,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))) @@ -727,7 +767,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))
--- a/test/lib/sun/hotspot/code/CodeBlob.java Tue Nov 24 14:01:39 2015 +0100 +++ b/test/lib/sun/hotspot/code/CodeBlob.java Mon Nov 30 14:57:21 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 + '}'; } }
--- a/test/lib/sun/hotspot/code/NMethod.java Tue Nov 24 14:01:39 2015 +0100 +++ b/test/lib/sun/hotspot/code/NMethod.java Mon Nov 30 14:57:21 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 + '}'; } }