#
# Copyright (c) 2012, 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.
#

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

default: all

include $(SPEC)
include MakeBase.gmk
include NativeCompilation.gmk
include ToolsJdk.gmk

################################################################################
# This file is responsible for extracting the x11 native struct offsets to
# the xawt Java library. The tool needs to be run on the os/arch that
# will host the final jvm, thus the tool cannot be used when cross compiling.
#
# Two versions of the generated offset file, sizes-32.txt and sizes-64.txt are
# committed into the source code repository. These are the ones used in
# GensrcX11Wrappers.gmk to generate the Java code during the build.
################################################################################

ifeq ($(COMPILE_TYPE), cross)
  $(error It is not possible to update the x11wrappers when cross-compiling)
endif

X11WRAPPERS_OUTPUT := $(SUPPORT_OUTPUTDIR)/x11wrappers

GENSRC_X11WRAPPERS_DATADIR := $(TOPDIR)/make/data/x11wrappergen

BITS := $(OPENJDK_TARGET_CPU_BITS)

# Generate the C code for the program that will output the offset file.
$(X11WRAPPERS_OUTPUT)/src/data_generator.c: $(GENSRC_X11WRAPPERS_DATADIR)/xlibtypes.txt $(BUILD_TOOLS_JDK)
	$(call LogInfo, Generating X11 wrapper data generator source code)
	$(call MakeDir, $(@D))
	$(call ExecuteWithLog, $@, \
	    $(TOOL_WRAPPERGENERATOR) gen_c_source $@ $(GENSRC_X11WRAPPERS_DATADIR)/xlibtypes.txt $(BITS))

DATA_GENERATOR_INCLUDES := \
    -I$(TOPDIR)/src/hotspot/share/include \
    -I$(TOPDIR)/src/hotspot/os/$(HOTSPOT_TARGET_OS_TYPE)/include \
    -I$(SUPPORT_OUTPUTDIR)/modules_include/java.base \
    -I$(SUPPORT_OUTPUTDIR)/modules_include/java.base/$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR) \
    -I$(TOPDIR)/src/java.base/share/native/libjava \
    -I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libjava \
    -I$(TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt \
    -I$(TOPDIR)/src/java.desktop/share/native/common/awt/debug \
    -I$(TOPDIR)/src/java.desktop/share/native/libawt/awt/image/cvutils \
    #

# Compile the generated C code into an executable.
$(eval $(call SetupNativeCompilation, BUILD_DATA_GENERATOR, \
    PROGRAM := data_generator, \
    OUTPUT_DIR := $(X11WRAPPERS_OUTPUT)/bin, \
    EXTRA_FILES := $(X11WRAPPERS_OUTPUT)/src/data_generator.c, \
    CFLAGS := $(X_CFLAGS) $(DATA_GENERATOR_INCLUDES) $(CFLAGS_JDKEXE), \
    LDFLAGS := $(LDFLAGS_JDKEXE), \
    LIBS := $(X_LIBS), \
    OBJECT_DIR := $(X11WRAPPERS_OUTPUT)/objs, \
))

# Run the executable to create the data file.
$(GENSRC_X11WRAPPERS_DATADIR)/sizes-$(BITS).txt: $(BUILD_DATA_GENERATOR_TARGET)
	$(call LogInfo, Generating X11 wrapper data files)
	$(call MakeDir, $(@D))
	$(call ExecuteWithLog, $(X11WRAPPERS_OUTPUT)/generation, \
	    $(BUILD_DATA_GENERATOR_TARGET) | $(SORT) > $@)
	$(ECHO) IMPORTANT: If you update the X11 wrapper data files, they most certainly
	$(ECHO) need to be updated for both 32 and 64 bit platforms. You have now
	$(ECHO) updated them for $(BITS) bit platforms only.

TARGETS += $(GENSRC_X11WRAPPERS_DATADIR)/sizes-$(BITS).txt

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

all: $(TARGETS)

.PHONY: all default
