#
# Copyright (c) 2020, 2025, 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 MakeFileStart.gmk

################################################################################
# This file builds the native component of the JTReg tests for testlibrary.
# It also covers the test-image part, where the built files are copied to the
# test image.
################################################################################

include CopyFiles.gmk
include TestFilesCompilation.gmk

################################################################################
# Targets for building the native tests themselves.
################################################################################

# This might have been added to by a custom extension.
BUILD_LIBTEST_JTREG_NATIVE_SRC += $(TOPDIR)/test/lib-test

BUILD_LIBTEST_JTREG_OUTPUT_DIR := $(OUTPUTDIR)/support/test/lib-test/jtreg/native

BUILD_LIBTEST_JTREG_IMAGE_DIR := $(TEST_IMAGE_DIR)/lib-test/jtreg

BUILD_LIBTEST_JTREG_EXECUTABLES_JDK_LIBS_exejvm-test-launcher := java.base:libjvm

# This evaluation is expensive and should only be done if this target was
# explicitly called.
ifneq ($(filter build-test-libtest-jtreg-native, $(MAKECMDGOALS)), )
  $(eval $(call SetupTestFilesCompilation, BUILD_LIBTEST_JTREG_LIBRARIES, \
      TYPE := LIBRARY, \
      SOURCE_DIRS := $(BUILD_LIBTEST_JTREG_NATIVE_SRC), \
      OUTPUT_DIR := $(BUILD_LIBTEST_JTREG_OUTPUT_DIR), \
      EXCLUDE := $(BUILD_LIBTEST_JTREG_EXCLUDE), \
  ))

  $(eval $(call SetupTestFilesCompilation, BUILD_LIBTEST_JTREG_EXECUTABLES, \
      TYPE := PROGRAM, \
      SOURCE_DIRS := $(BUILD_LIBTEST_JTREG_NATIVE_SRC), \
      OUTPUT_DIR := $(BUILD_LIBTEST_JTREG_OUTPUT_DIR), \
      EXCLUDE := $(BUILD_LIBTEST_JTREG_EXCLUDE), \
  ))
endif

build-test-libtest-jtreg-native: $(BUILD_LIBTEST_JTREG_LIBRARIES) $(BUILD_LIBTEST_JTREG_EXECUTABLES)

################################################################################
# Targets for building test-image.
################################################################################

# Copy to lib-test jtreg test image
$(eval $(call SetupCopyFiles, COPY_LIBTEST_JTREG_NATIVE, \
    SRC := $(BUILD_LIBTEST_JTREG_OUTPUT_DIR), \
    DEST := $(TEST_IMAGE_DIR)/lib-test/jtreg/native, \
    FILES := $(wildcard $(addprefix $(BUILD_LIBTEST_JTREG_OUTPUT_DIR), /bin/* /lib/*)), \
    FLATTEN := true, \
))

test-image-libtest-jtreg-native: $(COPY_LIBTEST_JTREG_NATIVE)

all: build-test-libtest-jtreg-native
test-image: test-image-libtest-jtreg-native

.PHONY: build-test-libtest-jtreg-native test-image-libtest-jtreg-native test-image

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

include MakeFileEnd.gmk
