#
# 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.
#

# This must be the first rule
default: all

include $(SPEC)
include MakeBase.gmk

include JavaCompilation.gmk
include SetupJavaCompilers.gmk

TARGETS :=

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

ifeq ($(INCLUDE_GRAAL), true)
  VM_CI_SRC_DIR := $(HOTSPOT_TOPDIR)/src/jdk.internal.vm.ci/share/classes

  SRC_DIR := $(HOTSPOT_TOPDIR)/src/jdk.internal.vm.compiler/share/classes

  ##############################################################################
  # Compile the annotation processors
  $(eval $(call SetupJavaCompilation, BUILD_VM_COMPILER_MATCH_PROCESSOR, \
      SETUP := GENERATE_OLDBYTECODE, \
      SRC := \
          $(SRC_DIR)/org.graalvm.compiler.common/src \
          $(SRC_DIR)/org.graalvm.compiler.core/src \
          $(SRC_DIR)/org.graalvm.compiler.core.common/src \
          $(SRC_DIR)/org.graalvm.compiler.core.match.processor/src \
          $(SRC_DIR)/org.graalvm.compiler.api.collections/src \
          $(SRC_DIR)/org.graalvm.compiler.api.replacements/src \
          $(SRC_DIR)/org.graalvm.compiler.asm/src \
          $(SRC_DIR)/org.graalvm.compiler.bytecode/src \
          $(SRC_DIR)/org.graalvm.compiler.code/src \
          $(SRC_DIR)/org.graalvm.compiler.debug/src \
          $(SRC_DIR)/org.graalvm.compiler.graph/src \
          $(SRC_DIR)/org.graalvm.compiler.lir/src \
          $(SRC_DIR)/org.graalvm.compiler.loop/src \
          $(SRC_DIR)/org.graalvm.compiler.loop.phases/src \
          $(SRC_DIR)/org.graalvm.compiler.nodeinfo/src \
          $(SRC_DIR)/org.graalvm.compiler.nodes/src \
          $(SRC_DIR)/org.graalvm.compiler.options/src \
          $(SRC_DIR)/org.graalvm.compiler.phases/src \
          $(SRC_DIR)/org.graalvm.compiler.phases.common/src \
          $(SRC_DIR)/org.graalvm.compiler.serviceprovider/src \
          $(SRC_DIR)/org.graalvm.compiler.virtual/src \
          $(VM_CI_SRC_DIR)/jdk.vm.ci.code/src \
          $(VM_CI_SRC_DIR)/jdk.vm.ci.common/src \
          $(VM_CI_SRC_DIR)/jdk.vm.ci.meta/src \
          $(VM_CI_SRC_DIR)/jdk.vm.ci.runtime/src \
          $(VM_CI_SRC_DIR)/jdk.vm.ci.services/src \
          , \
      EXCLUDE_FILES := $(EXCLUDE_FILES), \
      BIN := $(BUILDTOOLS_OUTPUTDIR)/jdk.vm.compiler.match.processor, \
      JAR := $(BUILDTOOLS_OUTPUTDIR)/jdk.vm.compiler.match.processor.jar, \
  ))

  TARGETS += $(BUILD_VM_COMPILER_MATCH_PROCESSOR)

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

  $(eval $(call SetupJavaCompilation, BUILD_VM_COMPILER_NODEINFO_PROCESSOR, \
      SETUP := GENERATE_OLDBYTECODE, \
      SRC := \
          $(SRC_DIR)/org.graalvm.compiler.nodeinfo/src \
          $(SRC_DIR)/org.graalvm.compiler.nodeinfo.processor/src \
          , \
      BIN := $(BUILDTOOLS_OUTPUTDIR)/jdk.vm.compiler.nodeinfo.processor, \
      JAR := $(BUILDTOOLS_OUTPUTDIR)/jdk.vm.compiler.nodeinfo.processor.jar, \
  ))

  TARGETS += $(BUILD_VM_COMPILER_NODEINFO_PROCESSOR)

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

  $(eval $(call SetupJavaCompilation, BUILD_VM_COMPILER_OPTIONS_PROCESSOR, \
      SETUP := GENERATE_OLDBYTECODE, \
      SRC := \
          $(SRC_DIR)/org.graalvm.compiler.options/src \
          $(SRC_DIR)/org.graalvm.compiler.options.processor/src \
          , \
      BIN := $(BUILDTOOLS_OUTPUTDIR)/jdk.vm.compiler.options.processor, \
      JAR := $(BUILDTOOLS_OUTPUTDIR)/jdk.vm.compiler.options.processor.jar, \
  ))

  TARGETS += $(BUILD_VM_COMPILER_OPTIONS_PROCESSOR)

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

  $(eval $(call SetupJavaCompilation, BUILD_VM_COMPILER_REPLACEMENTS_VERIFIER, \
      SETUP := GENERATE_OLDBYTECODE, \
      SRC := \
          $(SRC_DIR)/org.graalvm.compiler.common/src \
          $(SRC_DIR)/org.graalvm.compiler.replacements.verifier/src \
          $(SRC_DIR)/org.graalvm.compiler.api.collections/src \
          $(SRC_DIR)/org.graalvm.compiler.api.replacements/src \
          $(SRC_DIR)/org.graalvm.compiler.code/src \
          $(SRC_DIR)/org.graalvm.compiler.core.common/src \
          $(SRC_DIR)/org.graalvm.compiler.debug/src \
          $(SRC_DIR)/org.graalvm.compiler.graph/src \
          $(SRC_DIR)/org.graalvm.compiler.nodeinfo/src \
          $(SRC_DIR)/org.graalvm.compiler.options/src \
          $(SRC_DIR)/org.graalvm.compiler.serviceprovider/src \
          $(VM_CI_SRC_DIR)/jdk.vm.ci.code/src \
          $(VM_CI_SRC_DIR)/jdk.vm.ci.common/src \
          $(VM_CI_SRC_DIR)/jdk.vm.ci.meta/src \
          $(VM_CI_SRC_DIR)/jdk.vm.ci.runtime/src \
          $(VM_CI_SRC_DIR)/jdk.vm.ci.services/src \
          , \
      EXCLUDE_FILES := $(EXCLUDE_FILES), \
      BIN := $(BUILDTOOLS_OUTPUTDIR)/jdk.vm.compiler.replacements.verifier, \
      JAR := $(BUILDTOOLS_OUTPUTDIR)/jdk.vm.compiler.replacements.verifier.jar, \
  ))

  TARGETS += $(BUILD_VM_COMPILER_REPLACEMENTS_VERIFIER)

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

  $(eval $(call SetupJavaCompilation, BUILD_VM_COMPILER_SERVICEPROVIDER_PROCESSOR, \
      SETUP := GENERATE_OLDBYTECODE, \
      SRC := \
          $(SRC_DIR)/org.graalvm.compiler.serviceprovider/src \
          $(SRC_DIR)/org.graalvm.compiler.serviceprovider.processor/src \
          $(VM_CI_SRC_DIR)/jdk.vm.ci.services/src \
          , \
      EXCLUDE_FILES := $(EXCLUDE_FILES), \
      BIN := $(BUILDTOOLS_OUTPUTDIR)/jdk.vm.compiler.serviceprovider.processor, \
      JAR := $(BUILDTOOLS_OUTPUTDIR)/jdk.vm.compiler.serviceprovider.processor.jar, \
  ))

  TARGETS += $(BUILD_VM_COMPILER_SERVICEPROVIDER_PROCESSOR)

  ##############################################################################
endif

all: $(TARGETS)

.PHONY: all
