8166948: Exploded image too slow to be usable
Reviewed-by: alanb, mchung, ihse
This commit is contained in:
parent
f1f59c6623
commit
7995a7872b
42
jdk/make/CompileModuleTools.gmk
Normal file
42
jdk/make/CompileModuleTools.gmk
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) 2013, 2016, 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
include $(SPEC)
|
||||||
|
include MakeBase.gmk
|
||||||
|
include JavaCompilation.gmk
|
||||||
|
include SetupJavaCompilers.gmk
|
||||||
|
|
||||||
|
TOOLS_CLASSES_DIR := $(BUILDTOOLS_OUTPUTDIR)/tools_jigsaw_classes
|
||||||
|
|
||||||
|
$(eval $(call SetupJavaCompilation,BUILD_JIGSAW_TOOLS, \
|
||||||
|
SETUP := GENERATE_USINGJDKBYTECODE, \
|
||||||
|
SRC := $(JDK_TOPDIR)/make/src/classes, \
|
||||||
|
INCLUDES := build/tools/deps \
|
||||||
|
build/tools/jigsaw, \
|
||||||
|
BIN := $(TOOLS_CLASSES_DIR), \
|
||||||
|
ADD_JAVAC_FLAGS := \
|
||||||
|
--add-exports jdk.jdeps/com.sun.tools.classfile=ALL-UNNAMED \
|
||||||
|
--add-exports java.base/jdk.internal.module=ALL-UNNAMED \
|
||||||
|
))
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@ -26,18 +26,14 @@
|
|||||||
include $(SPEC)
|
include $(SPEC)
|
||||||
include MakeBase.gmk
|
include MakeBase.gmk
|
||||||
include JavaCompilation.gmk
|
include JavaCompilation.gmk
|
||||||
include SetupJavaCompilers.gmk
|
|
||||||
|
|
||||||
TOOLS_CLASSES_DIR := $(BUILDTOOLS_OUTPUTDIR)/tools_jigsaw_classes
|
TOOLS_CLASSES_DIR := $(BUILDTOOLS_OUTPUTDIR)/tools_jigsaw_classes
|
||||||
|
|
||||||
$(eval $(call SetupJavaCompilation,BUILD_JIGSAW_TOOLS, \
|
# To avoid reevaluating the compilation setup for the tools each time this file
|
||||||
SETUP := GENERATE_USINGJDKBYTECODE, \
|
# is included, the actual compilation is handled by CompileModuleTools.gmk. The
|
||||||
SRC := $(JDK_TOPDIR)/make/src/classes, \
|
# following trick is used to be able to declare a dependency on the built tools.
|
||||||
INCLUDES := build/tools/deps \
|
BUILD_TOOLS_JDK := $(call SetupJavaCompilationCompileTarget, \
|
||||||
build/tools/jigsaw, \
|
BUILD_JIGSAW_TOOLS, $(TOOLS_CLASSES_DIR))
|
||||||
BIN := $(TOOLS_CLASSES_DIR), \
|
|
||||||
ADD_JAVAC_FLAGS := --add-exports jdk.jdeps/com.sun.tools.classfile=ALL-UNNAMED ))
|
|
||||||
|
|
||||||
|
|
||||||
TOOL_GENGRAPHS := $(BUILD_JAVA) -esa -ea -cp $(TOOLS_CLASSES_DIR) \
|
TOOL_GENGRAPHS := $(BUILD_JAVA) -esa -ea -cp $(TOOLS_CLASSES_DIR) \
|
||||||
build.tools.jigsaw.GenGraphs
|
build.tools.jigsaw.GenGraphs
|
||||||
@ -45,3 +41,8 @@ TOOL_GENGRAPHS := $(BUILD_JAVA) -esa -ea -cp $(TOOLS_CLASSES_DIR) \
|
|||||||
TOOL_MODULESUMMARY := $(BUILD_JAVA) -esa -ea -cp $(TOOLS_CLASSES_DIR) \
|
TOOL_MODULESUMMARY := $(BUILD_JAVA) -esa -ea -cp $(TOOLS_CLASSES_DIR) \
|
||||||
--add-exports jdk.jdeps/com.sun.tools.classfile=ALL-UNNAMED \
|
--add-exports jdk.jdeps/com.sun.tools.classfile=ALL-UNNAMED \
|
||||||
build.tools.jigsaw.ModuleSummary
|
build.tools.jigsaw.ModuleSummary
|
||||||
|
|
||||||
|
TOOL_ADD_PACKAGES_ATTRIBUTE := $(BUILD_JAVA) $(JAVA_FLAGS_SMALL) \
|
||||||
|
-cp $(TOOLS_CLASSES_DIR) \
|
||||||
|
--add-exports java.base/jdk.internal.module=ALL-UNNAMED \
|
||||||
|
build.tools.jigsaw.AddPackagesAttribute
|
||||||
|
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package build.tools.jigsaw;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.lang.module.ModuleFinder;
|
||||||
|
import java.lang.module.ModuleReference;
|
||||||
|
import java.nio.file.DirectoryStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import jdk.internal.module.ModuleInfoExtender;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the Packages class file attribute to each module-info.class in an
|
||||||
|
* exploded build.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class AddPackagesAttribute {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
|
||||||
|
if (args.length != 1) {
|
||||||
|
System.err.println("Usage AddPackagesAttribute exploded-java-home");
|
||||||
|
System.exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
String home = args[0];
|
||||||
|
Path dir = Paths.get(home, "modules");
|
||||||
|
|
||||||
|
ModuleFinder finder = ModuleFinder.of(dir);
|
||||||
|
|
||||||
|
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
|
||||||
|
for (Path entry : stream) {
|
||||||
|
Path mi = entry.resolve("module-info.class");
|
||||||
|
if (Files.isRegularFile(mi)) {
|
||||||
|
String mn = entry.getFileName().toString();
|
||||||
|
Optional<ModuleReference> omref = finder.find(mn);
|
||||||
|
if (omref.isPresent()) {
|
||||||
|
Set<String> packages = omref.get().descriptor().conceals();
|
||||||
|
addPackagesAttribute(mi, packages);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void addPackagesAttribute(Path mi, Set<String> packages) throws IOException {
|
||||||
|
byte[] bytes;
|
||||||
|
try (InputStream in = Files.newInputStream(mi)) {
|
||||||
|
ModuleInfoExtender extender = ModuleInfoExtender.newExtender(in);
|
||||||
|
extender.conceals(packages);
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
extender.write(baos);
|
||||||
|
bytes = baos.toByteArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
Files.write(mi, bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user