view make/CompileJavaModules.gmk @ 50627:2934689eff44

Removing support for case null and additional switch types as suggested. SwitchBootstraps removed for now as well, as these are not strictly necessary.
author jlahoda
date Tue, 15 May 2018 10:50:25 +0200
parents 3a28f370bb31
children 849e15e87fd9
line wrap: on
line source
#
# Copyright (c) 2014, 2018, 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.
#

# This must be the first rule
default: all

include $(SPEC)
include MakeBase.gmk
include Modules.gmk
include JavaCompilation.gmk
include SetupJavaCompilers.gmk

# Hook to include the corresponding custom file, if present.
$(eval $(call IncludeCustomExtension, CompileJavaModules.gmk))

################################################################################
# Module specific build settings

################################################################################

java.base_ADD_JAVAC_FLAGS += -Xdoclint:all/protected,-reference '-Xdoclint/package:java.*,javax.*' -XDstringConcat=inline
java.base_COPY += .icu .dat .spp content-types.properties hijrah-config-islamic-umalqura.properties
java.base_CLEAN += intrinsic.properties

java.base_EXCLUDE_FILES += \
  $(TOPDIR)/src/java.base/share/classes/jdk/internal/module/ModuleLoaderMap.java

java.base_EXCLUDES += java/lang/doc-files

# Exclude BreakIterator classes that are just used in compile process to generate
# data files and shouldn't go in the product
java.base_EXCLUDE_FILES += sun/text/resources/BreakIteratorRules.java

ifneq ($(OPENJDK_TARGET_OS), solaris)
  java.base_EXCLUDE_FILES += \
      SolarisLoginModule.java \
      SolarisSystem.java \
      #
endif

ifeq ($(filter $(OPENJDK_TARGET_OS), solaris macosx aix), )
  #
  # only solaris, macosx and aix
  #
  java.base_EXCLUDE_FILES += sun/nio/fs/PollingWatchService.java
endif

ifeq ($(OPENJDK_TARGET_OS), windows)
  java.base_EXCLUDE_FILES += \
      sun/nio/ch/SimpleAsynchronousFileChannelImpl.java \
      #
endif

################################################################################

java.compiler_ADD_JAVAC_FLAGS += -Xdoclint:all/protected '-Xdoclint/package:java.*,javax.*'

################################################################################

java.datatransfer_ADD_JAVAC_FLAGS += -Xdoclint:all/protected,-reference '-Xdoclint/package:java.*,javax.*'
java.datatransfer_COPY += flavormap.properties

################################################################################

java.desktop_ADD_JAVAC_FLAGS += -Xdoclint:all/protected,-reference \
    '-Xdoclint/package:java.*,javax.*' -Xlint:exports \
    --doclint-format html4
java.desktop_COPY += .gif .png .wav .txt .xml .css .pf
java.desktop_CLEAN += iio-plugin.properties cursors.properties

java.desktop_EXCLUDES += \
    java/awt/doc-files \
    javax/swing/doc-files \
    javax/swing/text/doc-files \
    javax/swing/plaf/synth/doc-files \
    javax/swing/undo/doc-files \
    sun/awt/X11/doc-files \
    #

java.desktop_EXCLUDE_FILES += \
    javax/swing/plaf/nimbus/InternalFrameTitlePanePainter.java \
    javax/swing/plaf/nimbus/OptionPaneMessageAreaPainter.java \
    javax/swing/plaf/nimbus/ScrollBarPainter.java \
    javax/swing/plaf/nimbus/SliderPainter.java \
    javax/swing/plaf/nimbus/SpinnerPainter.java \
    javax/swing/plaf/nimbus/SplitPanePainter.java \
    javax/swing/plaf/nimbus/TabbedPanePainter.java \
    sun/awt/resources/security-icon-bw16.png \
    sun/awt/resources/security-icon-bw24.png \
    sun/awt/resources/security-icon-bw32.png \
    sun/awt/resources/security-icon-bw48.png \
    sun/awt/resources/security-icon-interim16.png \
    sun/awt/resources/security-icon-interim24.png \
    sun/awt/resources/security-icon-interim32.png \
    sun/awt/resources/security-icon-interim48.png \
    sun/awt/resources/security-icon-yellow16.png \
    sun/awt/resources/security-icon-yellow24.png \
    sun/awt/resources/security-icon-yellow32.png \
    sun/awt/resources/security-icon-yellow48.png \
    sun/awt/X11/java-icon16.png \
    sun/awt/X11/java-icon24.png \
    sun/awt/X11/java-icon32.png \
    sun/awt/X11/java-icon48.png \
    .template \
    #

ifeq ($(OPENJDK_TARGET_OS), macosx)
  # exclude all X11 on Mac.
  java.desktop_EXCLUDES += \
      sun/awt/X11 \
      sun/java2d/x11 \
      sun/java2d/jules \
      sun/java2d/xr \
      com/sun/java/swing/plaf/gtk \
      #
  java.desktop_EXCLUDE_FILES += \
      $(wildcard $(TOPDIR)/src/java.desktop/unix/classes/sun/java2d/*.java) \
      $(wildcard $(TOPDIR)/src/java.desktop/unix/classes/sun/java2d/opengl/*.java) \
      $(wildcard $(TOPDIR)/src/java.desktop/unix/classes/sun/awt/*.java) \
      $(wildcard $(TOPDIR)/src/java.desktop/unix/classes/sun/font/*.java) \
      #
else
  # TBD: figure out how to eliminate this long list
  java.desktop_EXCLUDE_FILES += \
      sun/awt/X11/ScreenFormat.java \
      sun/awt/X11/XArc.java \
      sun/awt/X11/XChar2b.java \
      sun/awt/X11/XCharStruct.java \
      sun/awt/X11/XClassHint.java \
      sun/awt/X11/XComposeStatus.java \
      sun/awt/X11/XExtCodes.java \
      sun/awt/X11/XFontProp.java \
      sun/awt/X11/XFontSetExtents.java \
      sun/awt/X11/XFontStruct.java \
      sun/awt/X11/XGCValues.java \
      sun/awt/X11/XHostAddress.java \
      sun/awt/X11/XIMCallback.java \
      sun/awt/X11/XIMHotKeyTrigger.java \
      sun/awt/X11/XIMHotKeyTriggers.java \
      sun/awt/X11/XIMPreeditCaretCallbackStruct.java \
      sun/awt/X11/XIMPreeditDrawCallbackStruct.java \
      sun/awt/X11/XIMPreeditStateNotifyCallbackStruct.java \
      sun/awt/X11/XIMStatusDrawCallbackStruct.java \
      sun/awt/X11/XIMStringConversionCallbackStruct.java \
      sun/awt/X11/XIMStringConversionText.java \
      sun/awt/X11/XIMStyles.java \
      sun/awt/X11/XIMText.java \
      sun/awt/X11/XIMValuesList.java \
      sun/awt/X11/XImage.java \
      sun/awt/X11/XKeyboardControl.java \
      sun/awt/X11/XKeyboardState.java \
      sun/awt/X11/XOMCharSetList.java \
      sun/awt/X11/XOMFontInfo.java \
      sun/awt/X11/XOMOrientation.java \
      sun/awt/X11/XPoint.java \
      sun/awt/X11/XRectangle.java \
      sun/awt/X11/XSegment.java \
      sun/awt/X11/XStandardColormap.java \
      sun/awt/X11/XTextItem.java \
      sun/awt/X11/XTextItem16.java \
      sun/awt/X11/XTextProperty.java \
      sun/awt/X11/XTimeCoord.java \
      sun/awt/X11/XWindowChanges.java \
      sun/awt/X11/XdbeSwapInfo.java \
      sun/awt/X11/XmbTextItem.java \
      sun/awt/X11/XwcTextItem.java
endif

ifeq ($(OPENJDK_TARGET_OS), windows)
  java.desktop_EXCLUDES += com/sun/java/swing/plaf/gtk
endif

ifdef BUILD_HEADLESS_ONLY
  java.desktop_EXCLUDES += sun/applet
endif

# Used on windows and macosx
ifeq ($(filter $(OPENJDK_TARGET_OS), windows macosx), )
  java.desktop_EXCLUDE_FILES += sun/awt/AWTCharset.java
endif

# These files do not appear in the build result of the old build. This
# is because they are generated sources, but the AUTO_JAVA_FILES won't
# pick them up since they aren't generated when the source dirs are
# searched and they aren't referenced by any other classes so they won't
# be picked up by implicit compilation. On a rebuild, they are picked up
# and compiled. Exclude them here to produce the same rt.jar as the old
# build does when building just once.
java.desktop_EXCLUDE_FILES += \
    javax/swing/plaf/nimbus/InternalFrameTitlePanePainter.java \
    javax/swing/plaf/nimbus/OptionPaneMessageAreaPainter.java \
    javax/swing/plaf/nimbus/ScrollBarPainter.java \
    javax/swing/plaf/nimbus/SliderPainter.java \
    javax/swing/plaf/nimbus/SpinnerPainter.java \
    javax/swing/plaf/nimbus/SplitPanePainter.java \
    javax/swing/plaf/nimbus/TabbedPanePainter.java \
    #

################################################################################

java.scripting_ADD_JAVAC_FLAGS += -Xdoclint:all/protected '-Xdoclint/package:java.*,javax.*'
java.scripting_COPY += .js
java.scripting_CLEAN += .properties

################################################################################

java.instrument_ADD_JAVAC_FLAGS += -Xdoclint:all/protected '-Xdoclint/package:java.*,javax.*'

################################################################################

java.logging_ADD_JAVAC_FLAGS += -Xdoclint:all/protected,-reference '-Xdoclint/package:java.*,javax.*'

################################################################################

java.management_ADD_JAVAC_FLAGS += -Xdoclint:all/protected,-reference '-Xdoclint/package:java.*,javax.*'

################################################################################

java.management.rmi_ADD_JAVAC_FLAGS += -Xdoclint:all/protected '-Xdoclint/package:javax.*'

################################################################################

java.prefs_ADD_JAVAC_FLAGS += -Xdoclint:all/protected '-Xdoclint/package:java.*,javax.*'

################################################################################

java.transaction.xa_ADD_JAVAC_FLAGS += -Xdoclint:all/protected '-Xdoclint/package:javax.*'

################################################################################

java.sql_ADD_JAVAC_FLAGS += -Xdoclint:all/protected '-Xdoclint/package:java.*,javax.*'
java.sql_SETUP := GENERATE_JDKBYTECODE_NOWARNINGS

################################################################################

java.sql.rowset_ADD_JAVAC_FLAGS += -Xdoclint:all/protected '-Xdoclint/package:java.*,javax.*'
java.sql.rowset_CLEAN_FILES += $(wildcard \
    $(TOPDIR)/src/java.sql.rowset/share/classes/com/sun/rowset/*.properties \
    $(TOPDIR)/src/java.sql.rowset/share/classes/javax/sql/rowset/*.properties)

################################################################################

java.rmi_ADD_JAVAC_FLAGS += -Xdoclint:all/protected '-Xdoclint/package:java.*,javax.*'
java.rmi_CLEAN_FILES += $(wildcard \
    $(TOPDIR)/src/java.rmi/share/classes/sun/rmi/registry/resources/*.properties \
    $(TOPDIR)/src/java.rmi/share/classes/sun/rmi/server/resources/*.properties)

################################################################################

java.xml_ADD_JAVAC_FLAGS += -Xdoclint:all/protected \
    '-Xdoclint/package:$(call CommaList, javax.xml.catalog javax.xml.datatype \
    javax.xml.transform javax.xml.validation javax.xml.xpath)'
java.xml_CLEAN += .properties

################################################################################

java.naming_ADD_JAVAC_FLAGS += -Xdoclint:all/protected '-Xdoclint/package:java.*,javax.*' -Xlint:-exports
java.naming_CLEAN += jndiprovider.properties

################################################################################

java.security.jgss_ADD_JAVAC_FLAGS += -Xdoclint:all/protected '-Xdoclint/package:java.*,javax.*'

################################################################################

java.smartcardio_ADD_JAVAC_FLAGS += -Xdoclint:all/protected '-Xdoclint/package:java.*,javax.*'

################################################################################

java.xml.crypto_ADD_JAVAC_FLAGS += -Xdoclint:all/protected '-Xdoclint/package:java.*,javax.*'
java.xml.crypto_COPY += .dtd .xml
java.xml.crypto_CLEAN += .properties

################################################################################

jdk.charsets_COPY += .dat

################################################################################

################################################################################

jdk.compiler_ADD_JAVAC_FLAGS += -Xdoclint:all/protected \
    '-Xdoclint/package:-com.sun.tools.*,-jdk.internal.*,sun.tools.serialver.resources.*' \
    -XDstringConcat=inline
jdk.compiler_CLEAN_FILES += $(wildcard \
    $(patsubst %, $(TOPDIR)/src/jdk.compiler/share/classes/%/*.properties, \
        sun/tools/serialver/resources))

################################################################################

jdk.hotspot.agent_ADD_JAVAC_FLAGS += $(DISABLE_WARNINGS),-overrides
jdk.hotspot.agent_COPY += .gif .png sa.js .properties

################################################################################

jdk.editpad_COPY += .properties

################################################################################

jdk.jshell_COPY += .jsh .properties

################################################################################

jdk.internal.le_COPY += .properties

################################################################################

jdk.jcmd_COPY += _options

################################################################################

jdk.dynalink_CLEAN += .properties

################################################################################

jdk.javadoc_COPY += .xml .css .js .png

################################################################################

jdk.jartool_ADD_JAVAC_FLAGS += -XDstringConcat=inline

################################################################################

jdk.scripting.nashorn.shell_COPY += .js .properties

################################################################################

jdk.rmic_SETUP := GENERATE_JDKBYTECODE_NOWARNINGS
jdk.rmic_CLEAN += .properties

################################################################################

# No SCTP implementation on Mac OS X or AIX. These classes should be excluded.
SCTP_IMPL_CLASSES = \
    $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/AssociationChange.java \
    $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/AssociationImpl.java \
    $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/PeerAddrChange.java \
    $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/ResultContainer.java \
    $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SctpChannelImpl.java \
    $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java \
    $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SctpNet.java \
    $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SctpNotification.java \
    $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java \
    $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SendFailed.java \
    $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/Shutdown.java

ifeq ($(OPENJDK_TARGET_OS), macosx)
  jdk.sctp_EXCLUDE_FILES += $(SCTP_IMPL_CLASSES)
endif

ifeq ($(OPENJDK_TARGET_OS),aix)
  jdk.sctp_EXCLUDE_FILES += $(SCTP_IMPL_CLASSES)
endif

################################################################################

jdk.jconsole_COPY += .gif .png

jdk.jconsole_CLEAN_FILES += $(wildcard \
    $(TOPDIR)/src/jdk.jconsole/share/classes/sun/tools/jconsole/resources/*.properties)

################################################################################

jdk.jdeps_COPY += .txt

jdk.jdeps_CLEAN_FILES += $(wildcard \
    $(TOPDIR)/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/resources/*.properties \
    $(TOPDIR)/src/jdk.jdeps/share/classes/com/sun/tools/javap/resources/*.properties)

################################################################################

jdk.jdi_EXCLUDES += \
    com/sun/tools/example/debug/bdi \
    com/sun/tools/example/debug/event \
    com/sun/tools/example/debug/gui \
    com/sun/jdi/doc-files \
    #

jdk.jdi_EXCLUDE_FILES += jdi-overview.html

################################################################################

jdk.dev_CLEAN_FILES += $(wildcard \
    $(patsubst %, $(TOPDIR)/src/jdk.dev/share/classes/%/*.properties, \
        com/sun/tools/script/shell))

jdk.dev_COPY += .js oqlhelp.html .txt

################################################################################

jdk.internal.jvmstat_COPY += aliasmap

################################################################################

# -parameters provides method's parameters information in class file,
# JVMCI compilers make use of that information for various sanity checks.
# Don't use Indy strings concatenation to have good JVMCI startup performance.
# The exports are needed since JVMCI is dynamically exported (see
# jdk.vm.ci.services.internal.ReflectionAccessJDK::openJVMCITo).

jdk.internal.vm.ci_ADD_JAVAC_FLAGS += -parameters -Xlint:-exports -XDstringConcat=inline

################################################################################

jdk.internal.vm.compiler_ADD_JAVAC_FLAGS += -parameters -XDstringConcat=inline \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.aarch64=jdk.internal.vm.compiler \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.amd64=jdk.internal.vm.compiler \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.code=jdk.internal.vm.compiler \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.code.site=jdk.internal.vm.compiler \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.code.stack=jdk.internal.vm.compiler \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.common=jdk.internal.vm.compiler \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot=jdk.internal.vm.compiler \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot.aarch64=jdk.internal.vm.compiler \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot.amd64=jdk.internal.vm.compiler \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot.sparc=jdk.internal.vm.compiler \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.meta=jdk.internal.vm.compiler \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.runtime=jdk.internal.vm.compiler \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.sparc=jdk.internal.vm.compiler \
    #

jdk.internal.vm.compiler_EXCLUDES += \
    jdk.internal.vm.compiler.collections.test \
    org.graalvm.compiler.core.match.processor \
    org.graalvm.compiler.nodeinfo.processor \
    org.graalvm.compiler.options.processor \
    org.graalvm.compiler.serviceprovider.processor \
    org.graalvm.compiler.replacements.verifier \
    org.graalvm.compiler.api.directives.test \
    org.graalvm.compiler.api.test \
    org.graalvm.compiler.asm.aarch64.test \
    org.graalvm.compiler.asm.amd64.test \
    org.graalvm.compiler.asm.sparc.test \
    org.graalvm.compiler.asm.test \
    org.graalvm.compiler.core.amd64.test \
    org.graalvm.compiler.core.sparc.test \
    org.graalvm.compiler.core.test \
    org.graalvm.compiler.debug.test \
    org.graalvm.compiler.graph.test \
    org.graalvm.compiler.hotspot.amd64.test \
    org.graalvm.compiler.hotspot.lir.test \
    org.graalvm.compiler.hotspot.sparc.test \
    org.graalvm.compiler.hotspot.test \
    org.graalvm.compiler.jtt \
    org.graalvm.compiler.lir.jtt \
    org.graalvm.compiler.lir.test \
    org.graalvm.compiler.loop.test \
    org.graalvm.compiler.microbenchmarks \
    org.graalvm.compiler.nodes.test \
    org.graalvm.compiler.options.test \
    org.graalvm.compiler.phases.common.test \
    org.graalvm.compiler.replacements.test \
    org.graalvm.compiler.test \
    org.graalvm.compiler.virtual.bench \
    org.graalvm.micro.benchmarks \
    org.graalvm.util.test \
    #

################################################################################

# -parameters provides method's parameters information in class file,
# JVMCI compilers make use of that information for various sanity checks.
# Don't use Indy strings concatenation to have good JAOTC startup performance.
# The exports are needed since JVMCI is dynamically exported (see
# jdk.vm.ci.services.internal.ReflectionAccessJDK::openJVMCITo).

jdk.aot_ADD_JAVAC_FLAGS += -parameters -XDstringConcat=inline \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.aarch64=jdk.internal.vm.compiler,jdk.aot \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.amd64=jdk.internal.vm.compiler,jdk.aot \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.code=jdk.internal.vm.compiler,jdk.aot \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.code.site=jdk.internal.vm.compiler,jdk.aot \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.code.stack=jdk.internal.vm.compiler,jdk.aot \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.common=jdk.internal.vm.compiler,jdk.aot \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot=jdk.internal.vm.compiler,jdk.aot \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot.aarch64=jdk.internal.vm.compiler,jdk.aot \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot.amd64=jdk.internal.vm.compiler,jdk.aot \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot.sparc=jdk.internal.vm.compiler,jdk.aot \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.meta=jdk.internal.vm.compiler,jdk.aot \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.runtime=jdk.internal.vm.compiler,jdk.aot \
    --add-exports jdk.internal.vm.ci/jdk.vm.ci.sparc=jdk.internal.vm.compiler,jdk.aot \
    #

################################################################################

sun.charsets_COPY += .dat

################################################################################

jdk.localedata_COPY += _dict _th
# Exclude BreakIterator classes that are just used in compile process to generate
# data files and shouldn't go in the product
jdk.localedata_EXCLUDE_FILES += sun/text/resources/ext/BreakIteratorRules_th.java

################################################################################
# If this is an imported module that has prebuilt classes, only compile
# module-info.java.
ifneq ($(wildcard $(IMPORT_MODULES_CLASSES)/$(MODULE)), )
  $(MODULE)_INCLUDE_FILES := module-info.java
endif

################################################################################
# Setup the compilation for the module
#
MODULE_SRC_DIRS := $(call FindModuleSrcDirs, $(MODULE))

# The JDK_USER_DEFINED_FILTER is a poor man's incremental build: by specifying
# JDK_FILTER at the make command line, only a subset of the JDK java files will
# be recompiled. If multiple paths are separated by comma, convert that into a
# space separated list.
JDK_USER_DEFINED_FILTER := $(strip $(subst $(COMMA),$(SPACE), $(JDK_FILTER)))
ifeq ($(JDK_FILTER), )
  FAIL_NO_SRC := true
else
  # When using JDK_FILTER, most module java compilations will end up finding
  # no source files. Don't let that fail the build.
  FAIL_NO_SRC := false
endif

# Get the complete module source path.
MODULESOURCEPATH := $(call GetModuleSrcPath)

# Add imported modules to the modulepath
MODULEPATH := $(call PathList, $(IMPORT_MODULES_CLASSES))

ifeq ($(MODULE), jdk.internal.vm.ci)
  ## WORKAROUND jdk.internal.vm.ci source structure issue
  JVMCI_MODULESOURCEPATH := $(MODULESOURCEPATH) \
      $(subst /$(MODULE)/,/*/, $(filter-out %processor/src, \
          $(wildcard $(TOPDIR)/src/$(MODULE)/share/classes/*/src)))
  MODULESOURCEPATH := $(call PathList, $(JVMCI_MODULESOURCEPATH))
endif

ifeq ($(MODULE), jdk.internal.vm.compiler)
  ## WORKAROUND jdk.internal.vm.compiler source structure issue
  VM_COMPILER_MODULESOURCEPATH := $(MODULESOURCEPATH) \
      $(subst /$(MODULE)/,/*/, $(filter-out %processor/src %test/src %jtt/src %bench/src %microbenchmarks/src, \
          $(wildcard $(TOPDIR)/src/$(MODULE)/share/classes/*/src)))
  MODULESOURCEPATH := $(call PathList, $(VM_COMPILER_MODULESOURCEPATH))
endif

ifeq ($(MODULE), jdk.aot)
  ## WORKAROUND jdk.aot source structure issue
  AOT_MODULESOURCEPATH := $(MODULESOURCEPATH) \
      $(subst /$(MODULE)/,/*/, $(filter-out %processor/src, \
          $(wildcard $(TOPDIR)/src/$(MODULE)/share/classes/*/src)))
  MODULESOURCEPATH := $(call PathList, $(AOT_MODULESOURCEPATH))
endif

$(eval $(call SetupJavaCompilation, $(MODULE), \
    SETUP := $(if $($(MODULE)_SETUP), $($(MODULE)_SETUP), GENERATE_JDKBYTECODE), \
    MODULE := $(MODULE), \
    SRC := $(wildcard $(MODULE_SRC_DIRS)), \
    INCLUDES := $(JDK_USER_DEFINED_FILTER), \
    FAIL_NO_SRC := $(FAIL_NO_SRC), \
    BIN := $(if $($(MODULE)_BIN), $($(MODULE)_BIN), $(JDK_OUTPUTDIR)/modules), \
    HEADERS := $(SUPPORT_OUTPUTDIR)/headers, \
    CREATE_API_DIGEST := true, \
    ADD_JAVAC_FLAGS := \
        $($(MODULE)_ADD_JAVAC_FLAGS) \
        --module-source-path $(MODULESOURCEPATH) \
        --module-path $(MODULEPATH) \
        --system none, \
))

TARGETS += $($(MODULE)) $($(MODULE)_COPY_EXTRA)

# Declare dependencies between java compilations of different modules.
# Since the other modules are declared in different invocations of this file,
# use the macro to find the correct target file to depend on.
# Only the javac compilation actually depends on other modules so limit
# dependency declaration to that by using the *_COMPILE_TARGET variable.
$($(MODULE)_COMPILE_TARGET): $(foreach d, $(call FindDepsForModule, $(MODULE)), \
    $(call SetupJavaCompilationApiTarget, $d, \
        $(if $($d_BIN), $($d_BIN), $(JDK_OUTPUTDIR)/modules/$d)))

################################################################################
# Copy zh_HK properties files from zh_TW

$(JDK_OUTPUTDIR)/modules/%_zh_HK.properties: $(JDK_OUTPUTDIR)/modules/%_zh_TW.properties
	$(install-file)

CreateHkTargets = \
    $(patsubst $(TOPDIR)/src/%, $(JDK_OUTPUTDIR)/modules/%, \
      $(subst /share/classes,, \
        $(subst _zh_TW,_zh_HK, $(filter %_zh_TW.properties, $1))))

ifeq ($(MODULE), java.sql.rowset)
  TARGETS += $(call CreateHkTargets, $(java.sql.rowset_CLEAN_FILES))
endif

ifeq ($(MODULE), java.rmi)
  TARGETS += $(call CreateHkTargets, $(java.rmi_CLEAN_FILES))
endif

################################################################################
# If this is an imported module, copy the pre built classes and resources into
# the modules output dir

ifneq ($(wildcard $(IMPORT_MODULES_CLASSES)/$(MODULE)), )
  $(JDK_OUTPUTDIR)/modules/$(MODULE)/_imported.marker: \
      $(call CacheFind, $(IMPORT_MODULES_CLASSES)/$(MODULE))
	$(call MakeDir, $(@D))
        # Do not delete marker and build meta data files
	$(RM) -r $(filter-out $(@D)/_%, $(wildcard $(@D)/*))
	$(CP) -R $(IMPORT_MODULES_CLASSES)/$(MODULE)/* $(@D)/
	$(TOUCH) $@

  TARGETS += $(JDK_OUTPUTDIR)/modules/$(MODULE)/_imported.marker

  # Add this dependency to avoid a race between compiling module-info.java and
  # importing the classes.
  $($(MODULE)_COMPILE_TARGET): $(JDK_OUTPUTDIR)/modules/$(MODULE)/_imported.marker
endif

################################################################################

$(eval $(call IncludeCustomExtension, CompileJavaModules-post.gmk))

################################################################################

all: $(TARGETS)

.PHONY: all