#
# Copyright (c) 2011, 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 LibCommon.gmk

################################################################################
## Build libdt_socket
################################################################################

$(eval $(call SetupJdkLibrary, BUILD_LIBDT_SOCKET, \
    NAME := dt_socket, \
    OPTIMIZATION := LOW, \
    DISABLED_WARNINGS_clang_aix := missing-braces, \
    EXTRA_HEADER_DIRS := \
        include \
        libjdwp/export, \
    LIBS_linux := $(LIBPTHREAD), \
    LIBS_windows := iphlpapi.lib ws2_32.lib, \
))

# Include socket transport with JDWP agent to allow for remote debugging
TARGETS += $(BUILD_LIBDT_SOCKET)

################################################################################
## Build libjdwp
################################################################################

# JDWP_LOGGING causes log messages to be compiled into the library.
$(eval $(call SetupJdkLibrary, BUILD_LIBJDWP, \
    NAME := jdwp, \
    OPTIMIZATION := LOW, \
    CFLAGS := -DJDWP_LOGGING $(ICONV_CFLAGS), \
    DISABLED_WARNINGS_gcc_eventFilter.c := unused-variable, \
    DISABLED_WARNINGS_gcc_SDE.c := unused-function, \
    DISABLED_WARNINGS_gcc_threadControl.c := unused-but-set-variable \
        unused-variable, \
    DISABLED_WARNINGS_gcc_utf_util.c := unused-but-set-variable, \
    DISABLED_WARNINGS_clang_error_messages.c := format-nonliteral, \
    DISABLED_WARNINGS_clang_eventFilter.c := unused-variable, \
    DISABLED_WARNINGS_clang_EventRequestImpl.c := self-assign, \
    DISABLED_WARNINGS_clang_inStream.c := sometimes-uninitialized, \
    DISABLED_WARNINGS_clang_log_messages.c := format-nonliteral, \
    DISABLED_WARNINGS_clang_SDE.c := unused-function, \
    DISABLED_WARNINGS_clang_threadControl.c := unused-but-set-variable \
        unused-variable, \
    DISABLED_WARNINGS_clang_utf_util.c := unused-but-set-variable, \
    DISABLED_WARNINGS_microsoft_debugInit.c := 5287, \
    LDFLAGS := $(ICONV_LDFLAGS), \
    EXTRA_HEADER_DIRS := \
        include \
        libjdwp/export \
        java.base:libjava, \
    JDK_LIBS := java.base:libjvm, \
    LIBS := $(ICONV_LIBS), \
    LIBS_linux := $(LIBDL), \
))

TARGETS += $(BUILD_LIBJDWP)

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