jdk/makefiles/CompileNativeLibraries.gmk
author duke
Wed, 05 Jul 2017 18:46:58 +0200
changeset 16416 bcebd3fdefc9
parent 16129 744dd8193801
child 16512 024da1ae4667
child 16472 91737e09a234
permissions -rw-r--r--
Merge

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

defalt: all

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

# Setup the java compilers for the JDK build.
include Setup.gmk

# Copy files (can now depend on $(COPY_FILES))
include CopyFiles.gmk

# Prepare the find cache. Only used if running on windows.
$(eval $(call FillCacheFind,$(JDK_TOPDIR)/src))

# Build tools
include Tools.gmk

# Include the javah generated headers.
CFLAGS_JDKLIB += -I$(JDK_OUTPUTDIR)/gensrc_headers
CXXFLAGS_JDKLIB += -I$(JDK_OUTPUTDIR)/gensrc_headers

# Put the libraries here. Different locations for different target apis.
ifeq ($(OPENJDK_TARGET_OS_API),posix)
    INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_LIBDIR)
else
    INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/bin
endif

BUILD_LIBRARIES=

# Absolute paths to lib files on windows for use in LDFLAGS. Should figure out a more
# elegant solution to this.
WIN_VERIFY_LIB := $(JDK_OUTPUTDIR)/objs/libverify/verify.lib
WIN_JAVA_LIB := $(JDK_OUTPUTDIR)/objs/libjava/java.lib
WIN_AWT_LIB := $(JDK_OUTPUTDIR)/objs/libawt/awt.lib

# Use this variable to set DEBUG_SYMBOLS true on windows for all libraries, but
# not on other platforms.
ifeq ($(OPENJDK_TARGET_OS), windows)
    WINDOWS_ONLY := true
endif

#
# TODO replace with X_FLAGS / X_LIBS
#   and add them to configure
#
OPENWIN_LIB:=$(OPENWIN_HOME)/lib

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

BUILD_LIBFDLIBM_OPTIMIZATION:=HIGH

ifneq ($(OPENJDK_TARGET_OS), solaris)
      BUILD_LIBFDLIBM_OPTIMIZATION:=NONE
endif

ifneq ($(OPENJDK_TARGET_OS),macosx)
$(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM,\
                STATIC_LIBRARY:=fdlibm,\
                OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs,\
                SRC:=$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/src,\
		LANG:=C,\
		OPTIMIZATION:=$(BUILD_LIBFDLIBM_OPTIMIZATION), \
		CFLAGS:=$(CFLAGS_JDKLIB) \
			-I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include,\
		CFLAGS_windows_debug:=-DLOGGING,\
		ARFLAGS:=$(ARFLAGS),\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfdlibm))

else

# On macosx the old build does partial (incremental) linking of fdlibm instead of
# a plain static library.
$(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM_MAC,\
                LIBRARY:=fdlibm,\
                OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs/libfdlibm,\
                SRC:=$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/src,\
		LANG:=C,\
		CFLAGS:=$(CFLAGS_JDKLIB) \
			-I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include,\
		LDFLAGS:=-nostdlib -r -arch x86_64,\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfdlibm))

BUILD_LIBFDLIBM := $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX)
$(BUILD_LIBFDLIBM) : $(BUILD_LIBFDLIBM_MAC)
	$(CP) -a $< $@

endif
BUILD_LIBRARIES += $(BUILD_LIBFDLIBM)

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

BUILD_LIBVERIFY_SRC:=check_code.c check_format.c

ifeq ($(OPENJDK_TARGET_OS), solaris)
	ifneq ($(OPENJDK_TARGET_CPU), x86_64)
		BUILD_LIBVERIFY_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libverify/reorder-$(OPENJDK_TARGET_CPU)
	endif
endif

LIBVERIFY_OPTIMIZATION:=HIGH
ifneq ($(findstring $(OPENJDK_TARGET_OS),solaris linux),)
    ifeq ($(ENABLE_DEBUG_SYMBOLS), true)
        LIBVERIFY_OPTIMIZATION:=LOW
    endif
endif


$(eval $(call SetupNativeCompilation,BUILD_LIBVERIFY,\
		LIBRARY:=verify, \
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(JDK_TOPDIR)/src/share/native/common,\
		INCLUDE_FILES:=$(BUILD_LIBVERIFY_SRC),\
		LANG:=C,\
		OPTIMIZATION:=$(LIBVERIFY_OPTIMIZATION), \
		CFLAGS:=$(CFLAGS_JDKLIB),\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libverify/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN), \
		LDFLAGS_SUFFIX_posix:=-ljvm -lc,\
		LDFLAGS_SUFFIX_windows:=jvm.lib,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS) \
			  -D "JDK_FNAME=verify.dll" \
			  -D "JDK_INTERNAL_NAME=verify" \
			  -D "JDK_FTYPE=0x2L",\
		REORDER:=$(BUILD_LIBVERIFY_REORDER),\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libverify,\
		DEBUG_SYMBOLS:=true))

BUILD_LIBRARIES += $(BUILD_LIBVERIFY)

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

LIBJAVA_SRC_DIRS:=$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/java/lang \
		$(JDK_TOPDIR)/src/share/native/java/lang \
		$(JDK_TOPDIR)/src/share/native/java/lang/ref \
		$(JDK_TOPDIR)/src/share/native/java/lang/reflect \
		$(JDK_TOPDIR)/src/share/native/java/io \
		$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/java/io \
		$(JDK_TOPDIR)/src/share/native/java/nio \
		$(JDK_TOPDIR)/src/share/native/java/security \
		$(JDK_TOPDIR)/src/share/native/common \
		$(JDK_TOPDIR)/src/share/native/sun/misc \
		$(JDK_TOPDIR)/src/share/native/sun/reflect \
		$(JDK_TOPDIR)/src/share/native/java/util \
		$(JDK_TOPDIR)/src/share/native/java/util/concurrent/atomic \
		$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/common \
		$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/java/util

ifneq ($(OPENJDK_TARGET_OS),macosx)
    LIBJAVA_SRC_DIRS+=$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/util/locale/provider
else
    LIBJAVA_SRC_DIRS+=$(JDK_TOPDIR)/src/macosx/native/sun/util/locale/provider
endif

ifeq ($(OPENJDK_TARGET_OS),windows)
    LIBJAVA_SRC_DIRS+=$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/provider \
		$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/io
endif

LIBJAVA_CFLAGS:=$(foreach dir,$(LIBJAVA_SRC_DIRS),-I$(dir)) \
		  -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include \
                  -DARCHPROPNAME='"$(OPENJDK_TARGET_CPU_OSARCH)"'

LIBJAVA_CFLAGS += -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \
                  -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' \
                  -DJDK_MICRO_VERSION='"$(JDK_MICRO_VERSION)"' \
                  -DJDK_BUILD_NUMBER='"$(JDK_BUILD_NUMBER)"' 

ifneq (,$(JDK_UPDATE_VERSION))
	LIBJAVA_CFLAGS += -DJDK_UPDATE_VERSION='"$(JDK_UPDATE_VERSION)"'
endif

LIBJAVA_EXCLUDE_FILES:=check_code.c check_format.c

ifneq ($(OPENJDK_TARGET_OS),macosx)
	LIBJAVA_EXCLUDE_FILES += java_props_macosx.c
else
	BUILD_LIBJAVA_java_props_md.c_CFLAGS:=-x objective-c
endif

ifeq ($(OPENJDK_TARGET_OS),windows)
        LIBJAVA_EXCLUDE_FILES += \
		UNIXProcess_md.c \
		UnixFileSystem_md.c \
		FileSystemPreferences.c
else
	LIBJAVA_EXCLUDE_FILES += \
		ProcessImpl_md.c \
		WinNTFileSystem_md.c \
		dirent_md.c \
		WindowsPreferences.c \
		sun/security/provider/WinCAPISeedGenerator.c \
		sun/io/Win32ErrorMode.c
endif

ifeq ($(OPENJDK_TARGET_OS), solaris)
    ifneq ($(OPENJDK_TARGET_CPU), x86_64)
        LIBJAVA_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libjava/reorder-$(OPENJDK_TARGET_CPU)
    endif
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBJAVA,\
		LIBRARY:=java,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(LIBJAVA_SRC_DIRS),\
		EXCLUDES:=fdlibm/src zip, \
		EXCLUDE_FILES:=$(LIBJAVA_EXCLUDE_FILES), \
		LANG:=C,\
		OPTIMIZATION:=HIGH, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
                        $(LIBJAVA_CFLAGS),\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjava/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN), \
		LDFLAGS_SUFFIX_posix:=-ljvm -lverify, \
		LDFLAGS_SUFFIX_solaris:=-lsocket -lnsl -lscf $(LIBDL) $(BUILD_LIBFDLIBM) -lc,\
		LDFLAGS_SUFFIX_linux:=$(LIBDL) $(BUILD_LIBFDLIBM),\
		LDFLAGS_SUFFIX_macosx:=-L$(JDK_OUTPUTDIR)/objs/ -lfdlibm \
                                         -framework CoreFoundation \
                                         -framework Security -framework SystemConfiguration, \
		LDFLAGS_SUFFIX_windows:=-export:winFileHandleOpen -export:handleLseek \
					jvm.lib $(BUILD_LIBFDLIBM) $(WIN_VERIFY_LIB) \
					shell32.lib delayimp.lib -DELAYLOAD:shell32.dll \
					advapi32.lib,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=java.dll" \
			  -D "JDK_INTERNAL_NAME=java" \
			  -D "JDK_FTYPE=0x2L",\
		REORDER:=$(LIBJAVA_REORDER), \
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjava,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

BUILD_LIBRARIES += $(BUILD_LIBJAVA)

$(BUILD_LIBJAVA) : $(LIBJLI_BINARY)

$(BUILD_LIBJAVA) : $(BUILD_LIBVERIFY)

$(BUILD_LIBJAVA) : $(BUILD_LIBFDLIBM)

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

BUILD_LIBMLIB_SRC:=$(JDK_TOPDIR)/src/share/native/sun/awt/medialib
BUILD_LIBMLIB_CFLAGS:=-D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES \
			-I$(BUILD_LIBMLIB_SRC) \
			-I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/awt/medialib 

BUILD_LIBMLIB_LDLIBS:=
BUILD_LIBMLIB_IMAGE_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libmlib_image/mapfile-vers

BUILD_LIBMLIB_CFLAGS += -DMLIB_NO_LIBSUNMATH

ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
	BUILD_LIBMLIB_CFLAGS += -DMLIB_OS64BIT
endif

ifneq ($(OPENJDK_TARGET_OS), windows)
	BUILD_LIBMLIB_LDLIBS += $(LIBM) $(LIBDL)
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBMLIB_IMAGE,\
		LIBRARY:=mlib_image,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
                SRC:=$(BUILD_LIBMLIB_SRC),\
		EXCLUDE_FILES:=awt_ImagingLib.c mlib_c_ImageBlendTable.c,\
		LANG:=C,\
		OPTIMIZATION:=HIGHEST, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
                        $(BUILD_LIBMLIB_CFLAGS),\
		MAPFILE:=$(BUILD_LIBMLIB_IMAGE_MAPFILE), \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX:=$(BUILD_LIBMLIB_LDLIBS) \
				$(LDFLAGS_JDKLIB_SUFFIX),\
		LDFLAGS_SUFFIX_solaris:=-lc, \
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=mlib_image.dll" \
			  -D "JDK_INTERNAL_NAME=mlib_image" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libmlib_image,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

$(BUILD_LIBMLIB_IMAGE) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBMLIB_IMAGE)

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

ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH),solaris-sparc)

BUILD_LIBMLIB_IMAGE_V_FILES:=\
        mlib_v_ImageLookUp.c \
        mlib_ImageCreate.c \
        mlib_ImageAffine.c \
        mlib_ImageConvMxN.c \
        mlib_ImageConvKernelConvert.c \
        mlib_sys.c \
        mlib_ImageLookUp_64.c \
        mlib_ImageLookUp_Bit.c \
        mlib_ImageColorTrue2Index.c \
        mlib_c_ImageThresh1_U8.c \
        mlib_v_ImageLookUpS16S16Func.c \
        mlib_v_ImageLookUpS16S32Func.c \
        mlib_v_ImageLookUpS16U16Func.c \
        mlib_v_ImageLookUpS16U8Func.c \
        mlib_v_ImageLookUpS32S16Func.c \
        mlib_v_ImageLookUpS32S32Func.c \
        mlib_v_ImageLookUpS32U16Func.c \
        mlib_v_ImageLookUpS32U8Func.c \
        mlib_v_ImageLookUpSIS16S16Func.c \
        mlib_v_ImageLookUpSIS16S32Func.c \
        mlib_v_ImageLookUpSIS16U16Func.c \
        mlib_v_ImageLookUpSIS16U8Func.c \
        mlib_v_ImageLookUpSIS32S16Func.c \
        mlib_v_ImageLookUpSIS32S32Func.c \
        mlib_v_ImageLookUpSIS32U16Func.c \
        mlib_v_ImageLookUpSIS32U8Func.c \
        mlib_v_ImageLookUpSIU16S16Func.c \
        mlib_v_ImageLookUpSIU16S32Func.c \
        mlib_v_ImageLookUpSIU16U16Func.c \
        mlib_v_ImageLookUpSIU16U8Func.c \
        mlib_v_ImageLookUpSIU8S16Func.c \
        mlib_v_ImageLookUpSIU8S32Func.c \
        mlib_v_ImageLookUpSIU8U16Func.c \
        mlib_v_ImageLookUpSIU8U8Func.c \
        mlib_v_ImageLookUpU16S16Func.c \
        mlib_v_ImageLookUpU16S32Func.c \
        mlib_v_ImageLookUpU16U16Func.c \
        mlib_v_ImageLookUpU16U8Func.c \
        mlib_v_ImageLookUpU8S16Func.c \
        mlib_v_ImageLookUpU8S32Func.c \
        mlib_v_ImageLookUpU8U16Func.c \
        mlib_v_ImageLookUpU8U8Func.c \
        mlib_v_ImageAffineIndex_BC.c \
        mlib_v_ImageAffine_BC.c \
        mlib_v_ImageAffine_BC_S16.c \
        mlib_v_ImageAffine_BC_U16.c \
        mlib_v_ImageAffine_BL.c \
        mlib_v_ImageAffine_BL_S16.c \
        mlib_v_ImageAffine_BL_U16.c \
        mlib_v_ImageAffine_NN.c \
        mlib_v_ImageFilters.c \
        mlib_ImageAffineEdge.c \
        mlib_ImageAffine_BC_D64.c \
        mlib_ImageAffine_BC_F32.c \
        mlib_ImageAffine_BC_S32.c \
        mlib_ImageAffine_BL_D64.c \
        mlib_ImageAffine_BL_F32.c \
        mlib_ImageAffine_BL_S32.c \
        mlib_ImageAffine_NN.c \
        mlib_ImageAffine_NN_Bit.c \
        mlib_ImageFilters.c \
        mlib_ImageScanPoly.c \
        mlib_ImageConv_8nw.c \
        mlib_ImageConv_8ext.c \
        mlib_ImageConv_16nw.c \
        mlib_ImageConv_16ext.c \
        mlib_ImageConv_u16nw.c \
        mlib_ImageConv_u16ext.c \
        mlib_ImageConv_32nw.c \
        mlib_ImageConv_F32nw.c \
        mlib_ImageConvMxN_Fp.c \
        mlib_ImageConvMxN_ext.c \
        mlib_ImageConv_D64nw.c \
        mlib_ImageClipping.c \
        mlib_ImageConvCopyEdge_Bit.c \
        mlib_ImageConvClearEdge_Bit.c \
        mlib_ImageConv2x2_f.c \
        mlib_ImageConvClearEdge_Fp.c \
        mlib_v_ImageConvMxN_8.c \
        mlib_v_ImageConvClearEdge.c \
        mlib_v_ImageConvCopyEdge.c \
        mlib_v_ImageConvMxN_8ext.c \
        mlib_v_ImageConvVersion.c \
        mlib_v_ImageConv_8nw.c \
        mlib_ImageConvCopyEdge_Fp.c \
        mlib_v_ImageChannelInsert_1.c \
        mlib_v_ImageChannelExtract_43.c \
        mlib_v_ImageChannelExtract_1.c \
        mlib_ImageCopy_Bit.c \
        mlib_v_ImageCopy_f.c \
        mlib_ImageUtils.c \
        mlib_ImageDivTables.c

BUILD_LIBMLIB_V_CFLAGS := $(filter-out -DMLIB_NO_LIBSUNMATH,$(BUILD_LIBMLIB_CFLAGS))

$(eval $(call SetupNativeCompilation,BUILD_LIBMLIB_IMAGE_V,\
		LIBRARY:=mlib_image_v, \
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
                SRC:=$(JDK_TOPDIR)/src/share/native/sun/awt/medialib \
		     $(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib,\
		LANG:=C,\
		INCLUDE_FILES:=$(BUILD_LIBMLIB_IMAGE_V_FILES),\
		OPTIMIZATION:=HIGHEST, \
		CFLAGS:=-xarch=sparcvis \
                      $(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib/vis_$(OPENJDK_TARGET_CPU_BITS).il\
                      $(BUILD_LIBMLIB_V_CFLAGS) \
                      $(CFLAGS_JDKLIB), \
		MAPFILE:=$(BUILD_LIBMLIB_IMAGE_MAPFILE), \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
                         $(BUILD_LIBMLIB_LDLIBS) -ljava -ljvm \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX_solaris:=-lc,\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libmlib_image_v))

$(BUILD_LIBMLIB_IMAGE_V): $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBMLIB_IMAGE_V)

endif

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

LIBAWT_DIRS:=\
	$(JDK_TOPDIR)/src/share/native/sun/awt \
	$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/awt \
	$(JDK_TOPDIR)/src/share/native/sun/awt/image \
	$(JDK_TOPDIR)/src/share/native/sun/awt/image/gif \
	$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \
	$(JDK_TOPDIR)/src/share/native/sun/awt/medialib \
	$(JDK_TOPDIR)/src/share/native/sun/awt/debug \
	$(JDK_TOPDIR)/src/share/native/sun/awt/utility \
	$(JDK_TOPDIR)/src/share/native/sun/java2d \
	$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/java2d \
	$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \
	$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \
	$(JDK_TOPDIR)/src/share/native/sun/awt/image \
	$(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \
	$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/java2d/opengl \
	$(JDK_TOPDIR)/src/share/native/sun/font

ifeq ($(OPENJDK_TARGET_OS),windows)
    LIBAWT_DIRS+=\
	$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/windows \
	$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/java2d/windows \
	$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/java2d/d3d
    LIBAWT_CFLAGS+=-I$(DXSDK_INCLUDE_PATH)
else
    LIBAWT_DIRS+=\
	$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/java2d/x11
endif

LIBAWT_CFLAGS+=-D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES \
	$(X_CFLAGS) \
	$(foreach dir,$(LIBAWT_DIRS),-I$(dir))

LIBAWT_FILES:=\
	gifdecoder.c \
	imageInitIDs.c \
	img_globals.c \
	SurfaceData.c \
	Region.c \
	BufImgSurfaceData.c \
	Disposer.c \
	Trace.c \
	GraphicsPrimitiveMgr.c \
	Blit.c \
	BlitBg.c \
	ScaledBlit.c \
	FillRect.c \
	FillSpans.c \
	FillParallelogram.c \
	DrawParallelogram.c \
	DrawLine.c \
	DrawRect.c \
	DrawPolygons.c \
	DrawPath.c \
	FillPath.c \
	ProcessPath.c \
	MaskBlit.c \
	MaskFill.c \
	TransformHelper.c \
	AlphaMath.c \
	AlphaMacros.c \
	AnyByte.c \
	ByteBinary1Bit.c \
	ByteBinary2Bit.c \
	ByteBinary4Bit.c \
	ByteIndexed.c \
	ByteGray.c \
	Index8Gray.c \
	Index12Gray.c \
	AnyShort.c \
	Ushort555Rgb.c \
	Ushort565Rgb.c \
	Ushort4444Argb.c \
	Ushort555Rgbx.c \
	UshortGray.c \
	UshortIndexed.c \
	Any3Byte.c \
	ThreeByteBgr.c \
	AnyInt.c \
	IntArgb.c \
	IntArgbPre.c \
	IntArgbBm.c \
	IntRgb.c \
	IntBgr.c \
	IntRgbx.c \
	Any4Byte.c \
	FourByteAbgr.c \
	FourByteAbgrPre.c \
	BufferedMaskBlit.c \
	BufferedRenderPipe.c \
	ShapeSpanIterator.c \
	SpanClipRenderer.c \
	awt_ImageRep.c \
	awt_ImagingLib.c \
	awt_Mlib.c \
	awt_parseImage.c \
	DataBufferNative.c \
	dither.c \
	debug_assert.c \
	debug_mem.c \
	debug_trace.c \
	debug_util.c

ifneq (,$(filter $(OPENJDK_TARGET_OS), solaris linux))
	LIBAWT_FILES += awt_LoadLibrary.c initIDs.c img_colors.c
endif

ifeq ($(OPENJDK_TARGET_OS),macosx)
	LIBAWT_FILES += awt_LoadLibrary.c img_colors.c
	LIBAWT_DIRS += $(JDK_TOPDIR)/src/macosx/native/com/apple/resources
	LIBAWT_FILES += awt_LoadLibrary.c MacOSXResourceBundle.m
	LIBAWT_CFLAGS += -F/System/Library/Frameworks/JavaVM.framework/Frameworks

	LIBAWT_MacOSXResourceBundle.m_CFLAGS:=-O0
endif

ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc)
        LIBAWT_CFLAGS += -DMLIB_ADD_SUFF
        LIBAWT_CFLAGS += -xarch=sparcvis
	LIBAWT_CFLAGS += $(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib/vis_$(OPENJDK_TARGET_CPU_BITS).il
        LIBAWT_CFLAGS += \
            -I$(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib \
            -I$(JDK_TOPDIR)/src/solaris/native/sun/java2d/medialib \
            -I$(JDK_TOPDIR)/src/solaris/native/sun/java2d/loops

	LIBAWT_DIRS += $(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib \
                       $(JDK_TOPDIR)/src/solaris/native/sun/java2d/loops

	LIBAWT_FILES += \
                vis_FuncArray.c           \
                java2d_Mlib.c             \
                mlib_ImageCreate.c        \
                mlib_ImageZoom_NN.c       \
                mlib_ImageCopy_Bit.c      \
                mlib_sys.c                \
                mlib_v_ImageClear.c       \
                mlib_v_ImageClear_f.c     \
                mlib_v_ImageConstXor.c    \
                mlib_v_ImageCopy.c        \
                mlib_v_ImageCopy_f.c      \
                mlib_v_ImageXor.c         \
                mlib_v_ImageZoom_NN_f.c   \
                vis_Interp.c              \
                vis_AlphaMacros.c         \
                vis_AlphaMaskBlit.c       \
                vis_AlphaMaskFill.c       \
                vis_ByteGray.c            \
                vis_ByteGray_FromRgb.c    \
                vis_ByteGray_Mask.c       \
                vis_ByteIndexed.c         \
                vis_DrawLine.c            \
                vis_FourByteAbgr.c        \
                vis_IntArgb.c             \
                vis_IntArgbPre.c          \
                vis_IntArgbPre_Mask.c     \
                vis_IntBgr.c              \
                vis_IntRgb.c              \
                vis_IntRgbx.c             \
                vis_SrcMaskFill.c         \
                vis_SrcOverMaskBlit.c     \
                vis_SrcOverMaskFill.c     \
                vis_FourByteAbgrPre.c     \
                vis_GlyphList.c           \
                vis_GlyphListXor.c        \
                vis_IntArgbBm.c           \
                vis_ThreeByteBgr.c        \
                vis_UshortGray.c          \
                vis_UshortGray_FromRgb.c  \
                vis_XorBlit.c             \
                mlib_v_ImageCopy_blk.s

	ifeq ($(OPENJDK_TARGET_CPU),sparcv9)
		LIBAWT_ASFLAGS=-P -xarch=v9a
	else
		LIBAWT_ASFLAGS=-P -xarch=v8plusa
	endif
else
	LIBAWT_FILES += MapAccelFunc.c
endif

ifneq ($(OPENJDK_TARGET_OS),solaris)
	LIBAWT_CFLAGS += -DMLIB_NO_LIBSUNMATH
endif

LIBAWT_LANG:=C

ifeq ($(OPENJDK_TARGET_OS),windows)
	LIBAWT_FILES += AccelGlyphCache.c \
			ShaderList.c \
			CmdIDList.cpp \
			Hashtable.cpp \
			GDIHashtable.cpp \
			Devices.cpp \
			ObjectList.cpp \
			GDIBlitLoops.cpp \
			GDIRenderer.cpp \
			GDIWindowSurfaceData.cpp \
			WindowsFlags.cpp \
			WPrinterJob.cpp \
			awt_%.cpp \
			D3DBlitLoops.cpp \
			D3DBufImgOps.cpp \
			D3DContext.cpp \
			D3DGlyphCache.cpp \
			D3DGraphicsDevice.cpp \
			D3DMaskBlit.cpp \
			D3DMaskCache.cpp \
			D3DMaskFill.cpp \
			D3DPipelineManager.cpp \
			D3DPaints.cpp \
			D3DRenderer.cpp \
			D3DRenderQueue.cpp \
			D3DResourceManager.cpp \
			D3DSurfaceData.cpp \
			D3DTextRenderer.cpp \
			D3DVertexCacher.cpp \
			ShellFolder2.cpp \
			ThemeReader.cpp \
			ComCtl32Util.cpp \
			DllUtil.cpp \
			initIDs.cpp \
			MouseInfo.cpp \
			rect.c \
			OGLBlitLoops.c \
			OGLBufImgOps.c \
		        OGLContext.c \
		        OGLFuncs.c \
		        OGLMaskBlit.c \
		        OGLMaskFill.c \
		        OGLPaints.c \
		        OGLRenderQueue.c \
		        OGLRenderer.c \
		        OGLSurfaceData.c \
		        OGLTextRenderer.c \
		        OGLVertexCache.c \
		        WGLGraphicsConfig.c \
		        WGLSurfaceData.c
	LIBAWT_LANG:=C++
	LIBAWT_CFLAGS += -EHsc -DUNICODE -D_UNICODE
	ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
		LIBAWT_CFLAGS += -DMLIB_OS64BIT
	endif

	ifdef OPENJDK
		LIBAWT_RC_FLAGS:=-i "$(JDK_TOPDIR)/src/windows/resource/icons"
	else
		LIBAWT_RC_FLAGS:=-i "$(JDK_TOPDIR)/src/closed/windows/native/sun/windows"
	endif
	LIBAWT_VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/native/sun/windows/awt.rc
endif

ifeq ($(MILESTONE), internal)
	LIBAWT_CFLAGS += -DINTERNAL_BUILD
endif

LIBAWT_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libawt/mapfile-vers
ifeq ($(OPENJDK_TARGET_OS),linux)
	LIBAWT_MAPFILE:=
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBAWT,\
		LIBRARY:=awt,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(LIBAWT_DIRS),\
		INCLUDE_FILES:=$(LIBAWT_FILES),\
		LANG:=$(LIBAWT_LANG),\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) $(LIBAWT_CFLAGS),\
		ASFLAGS:=$(LIBAWT_ASFLAGS),\
		MAPFILE:=$(LIBAWT_MAPFILE), \
		LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_solaris:=-R/usr/dt/lib$(OPENJDK_TARGET_CPU_ISADIR) -R$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR),\
		LDFLAGS_SUFFIX_linux:=-ljvm $(LIBM) $(LIBDL) -ljava,\
		LDFLAGS_SUFFIX_solaris:=-ljvm $(LIBM) $(LIBDL) -ljava -lc,\
		LDFLAGS_SUFFIX_macosx:=-lmlib_image -ljvm $(LIBM) \
				       -framework Cocoa \
				       -framework OpenGL \
				       -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
				       -framework JavaNativeFoundation \
				       -framework JavaRuntimeSupport \
				       -framework ApplicationServices \
				       -framework AudioToolbox \
				       -ljava,\
		LDFLAGS_SUFFIX_windows:=kernel32.lib user32.lib gdi32.lib winspool.lib \
					imm32.lib ole32.lib uuid.lib shell32.lib \
					comdlg32.lib winmm.lib comctl32.lib shlwapi.lib \
					delayimp.lib jvm.lib $(WIN_JAVA_LIB) advapi32.lib \
					-DELAYLOAD:user32.dll -DELAYLOAD:gdi32.dll \
					-DELAYLOAD:shell32.dll -DELAYLOAD:winmm.dll \
					-DELAYLOAD:winspool.drv -DELAYLOAD:imm32.dll \
					-DELAYLOAD:ole32.dll -DELAYLOAD:comdlg32.dll \
					-DELAYLOAD:comctl32.dll -DELAYLOAD:shlwapi.dll,\
		VERSIONINFO_RESOURCE:=$(LIBAWT_VERSIONINFO_RESOURCE),\
		RC_FLAGS:=$(RC_FLAGS) $(LIBAWT_RC_FLAGS) \
			  -D "JDK_FNAME=awt.dll" \
			  -D "JDK_INTERNAL_NAME=awt" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

$(BUILD_LIBAWT) : $(BUILD_LIBJAVA)

ifeq ($(OPENJDK_TARGET_OS), macosx)
$(BUILD_LIBAWT) : $(BUILD_LIBMLIB_IMAGE)
endif

BUILD_LIBRARIES += $(BUILD_LIBAWT)

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

# TODO!!
# Even though this variable as a general name, it is
# only used on macos, in fontpath.c, as prefix for where to find fonts.
#
# It's used for libawt_headless _and_ libawt_xawt
#
X11_PATH:=/usr/X11R6

ifneq ($(OPENJDK_TARGET_OS), windows)
ifndef BUILD_HEADLESS_ONLY

LIBAWT_XAWT_DIRS:=\
		$(JDK_TOPDIR)/src/share/native/sun/awt/debug \
		$(JDK_TOPDIR)/src/share/native/sun/awt/utility \
		$(JDK_TOPDIR)/src/share/native/sun/font \
		$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/font \
		$(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \
		$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/awt \
		$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/java2d/opengl \
		$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/java2d/x11 \
		$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/xawt \

LIBAWT_XAWT_CFLAGS:=-DXAWT -DXAWT_HACK \
        -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" \
	$(CUPS_CFLAGS) \
	$(foreach dir,$(LIBAWT_XAWT_DIRS),-I$(dir)) \
	-I$(JDK_TOPDIR)/src/share/native/sun/java2d \
	-I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/java2d \
	-I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \
	-I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \
	-I$(JDK_TOPDIR)/src/share/native/sun/awt/image \
	-I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \
	-I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \
	-I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/jdga

ifeq ($(OPENJDK_TARGET_OS),solaris)
	LIBAWT_XAWT_CFLAGS += -DFUNCPROTO=15
endif

ifeq ($(MILESTONE),internal)
	LIBAWT_XAWT_CFLAGS += -DINTERNAL_BUILD
endif

LIBAWT_XAWT_FILES:=\
	XlibWrapper.c \
	XWindow.c \
	XToolkit.c \
	X11Color.c \
	X11SurfaceData.c \
	awt_GraphicsEnv.c \
	awt_InputMethod.c \
	robot_common.c \
	awt_Robot.c \
        list.c \
        multiVis.c \
	initIDs.c \
	awt_util.c \
	awt_Desktop.c \
	awt_UNIXToolkit.c \
	X11FontScaler_md.c \
	X11TextRenderer_md.c \
	fontpath.c \
	awt_Insets.c \
	awt_Event.c \
	X11Renderer.c \
	X11PMBlitLoops.c \
	OGLBlitLoops.c \
	OGLBufImgOps.c \
	OGLContext.c \
	OGLFuncs.c \
	OGLMaskBlit.c \
	OGLMaskFill.c \
	OGLPaints.c \
	OGLRenderQueue.c \
	OGLRenderer.c \
	OGLSurfaceData.c \
	OGLTextRenderer.c \
	OGLVertexCache.c \
	GLXGraphicsConfig.c \
	GLXSurfaceData.c \
	AccelGlyphCache.c \
	awt_Font.c \
	multi_font.c \
	awt_AWTEvent.c \
	awt_DrawingSurface.c \
	jawt.c \
	CUPSfuncs.c \
	debug_assert.c \
	debug_mem.c \
	debug_trace.c \
	debug_util.c \
	awt_Plugin.c \
	gtk2_interface.c \
        swing_GTKEngine.c \
        swing_GTKStyle.c \
        rect.c \
	sun_awt_X11_GtkFileDialogPeer.c \
	XRSurfaceData.c \
	XRBackendNative.c

LIBAWT_XAWT_LDFLAGS_SUFFIX:=$(LIBM) -lawt -lXext -lX11 -lXrender $(LIBDL) -lXtst -lXi  -ljava -ljvm -lc

ifeq ($(OPENJDK_TARGET_OS), linux)
        # To match old build, add this to LDFLAGS instead of suffix.
	LIBAWT_XAWT_LDFLAGS += -lpthread
endif

ifeq ($(OPENJDK_TARGET_OS), macosx)
	LIBAWT_XAWT_LDFLAGS_SUFFIX += -lpthread
endif

# On macosx, the shared library origin is set twice for this lib.
$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_XAWT,\
		LIBRARY:=awt_xawt,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(LIBAWT_XAWT_DIRS),\
		INCLUDE_FILES:=$(LIBAWT_XAWT_FILES),\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) $(LIBAWT_XAWT_CFLAGS) \
                        $(X_CFLAGS),\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libawt_xawt/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(X_LIBS) $(LIBAWT_XAWT_LDFLAGS),\
		LDFLAGS_linux:=$(call SET_SHARED_LIBRARY_ORIGIN) \
			       $(call SET_SHARED_LIBRARY_ORIGIN,/..),\
		LDFLAGS_solaris:=-L$(OPENWIN_HOME)/sfw/lib$(OPENJDK_TARGET_CPU_ISADIR) \
				 -L$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR) \
				 -R$(OPENWIN_HOME)/sfw/lib$(OPENJDK_TARGET_CPU_ISADIR) \
				 -R$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR) \
				 -R/usr/dt/lib$(OPENJDK_TARGET_CPU_ISADIR) \
			 	 $(call SET_SHARED_LIBRARY_ORIGIN) \
			 	 $(call SET_SHARED_LIBRARY_ORIGIN,/..),\
		LDFLAGS_macosx:=$(call SET_SHARED_LIBRARY_ORIGIN) \
				$(call SET_SHARED_LIBRARY_ORIGIN). \
				$(call SET_SHARED_LIBRARY_ORIGIN) \
				$(call SET_SHARED_LIBRARY_ORIGIN).,\
		LDFLAGS_SUFFIX:=$(LIBAWT_XAWT_LDFLAGS_SUFFIX),\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=xawt.dll" \
			  -D "JDK_INTERNAL_NAME=xawt" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_xawt))

$(BUILD_LIBAWT_XAWT) : $(BUILD_LIBJAVA)

$(BUILD_LIBAWT_XAWT) : $(BUILD_LIBAWT)

BUILD_LIBRARIES += $(BUILD_LIBAWT_XAWT)

endif
endif

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

BUILD_LIBZIP_EXCLUDES :=
ifeq ($(USE_EXTERNAL_LIBZ),true)
    LIBZ := -lz
    LIBZIP_EXCLUDES += zlib-1.2.5
else
    ZLIB_CPPFLAGS := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5
endif

BUILD_LIBZIP_REORDER :=
ifeq ($(OPENJDK_TARGET_OS), solaris)
    ifneq ($(OPENJDK_TARGET_CPU), x86_64)
        BUILD_LIBZIP_REORDER := $(JDK_TOPDIR)/makefiles/mapfiles/libzip/reorder-$(OPENJDK_TARGET_CPU)
    endif
endif

ifeq ($(LIBZIP_CAN_USE_MMAP), true)
     BUILD_LIBZIP_MMAP := -DUSE_MMAP
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBZIP,\
                LIBRARY:=zip,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		SRC:=$(JDK_TOPDIR)/src/share/native/java/util/zip,\
		EXCLUDES:=$(LIBZIP_EXCLUDES),\
		CFLAGS:=$(CFLAGS_JDKLIB) \
                        $(ZLIB_CPPFLAGS) \
		        -I$(JDK_TOPDIR)/src/share/native/java/io \
                        -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/java/io,\
		CFLAGS_posix:=$(BUILD_LIBZIP_MMAP) -UDEBUG,\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libzip/mapfile-vers, \
		REORDER:=$(BUILD_LIBZIP_REORDER), \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN) \
			 $(EXPORT_ZIP_FUNCS), \
		LDFLAGS_windows:=-export:ZIP_Open -export:ZIP_Close -export:ZIP_FindEntry \
                                -export:ZIP_ReadEntry -export:ZIP_GetNextEntry jvm.lib \
                                $(WIN_JAVA_LIB),\
		LDFLAGS_SUFFIX_linux:=-ljvm -ljava $(LIBZ),\
		LDFLAGS_SUFFIX_solaris:=-ljvm -ljava $(LIBZ) -lc,\
		LDFLAGS_SUFFIX_macosx:=$(LIBZ) -ljava -ljvm,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=zip.dll" \
			  -D "JDK_INTERNAL_NAME=zip" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libzip,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

$(BUILD_LIBZIP) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBZIP)

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

$(eval $(call SetupNativeCompilation,BUILD_LIBUNPACK,\
		LIBRARY:=unpack, \
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
                SRC:=$(JDK_TOPDIR)/src/share/native/com/sun/java/util/jar/pack,\
		EXCLUDE_FILES:=main.cpp,\
		LANG:=C++,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CXXFLAGS_JDKLIB) \
			 -DNO_ZLIB -DUNPACK_JNI -DFULL,\
		CFLAGS_release:=-DPRODUCT,\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libunpack/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) $(LDFLAGS_CXX_JDK) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_windows:=-map:$(JDK_OUTPUTDIR)/objs/unpack.map -debug \
				jvm.lib $(WIN_JAVA_LIB),\
		LDFLAGS_SUFFIX_posix:=-ljvm $(LIBCXX) -ljava -lc,\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libunpack,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=unpack.dll" \
			  -D "JDK_INTERNAL_NAME=unpack" \
			  -D "JDK_FTYPE=0x2L",\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

$(BUILD_LIBUNPACK) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBUNPACK)

ifeq ($(OPENJDK_TARGET_OS),windows)
    $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack.map: $(BUILD_LIBUNPACK)
	$(ECHO) Copying $(@F)
	$(CP) $(patsubst %$(SHARED_LIBRARY_SUFFIX),%.map,$<) $@

    $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack.pdb: $(BUILD_LIBUNPACK)
	$(ECHO) Copying $(@F)
	$(CP) $(patsubst %$(SHARED_LIBRARY_SUFFIX),%.pdb,$<) $@
endif

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

LIBATTACH_EXCLUDE_FILES:=
ifneq ($(OPENJDK_TARGET_OS),solaris)
    LIBATTACH_EXCLUDE_FILES+=SolarisVirtualMachine.c
endif
ifneq ($(OPENJDK_TARGET_OS),linux)
    LIBATTACH_EXCLUDE_FILES+=LinuxVirtualMachine.c
endif
ifneq ($(OPENJDK_TARGET_OS),macosx)
    LIBATTACH_EXCLUDE_FILES+=BsdVirtualMachine.c
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBATTACH,\
		LIBRARY:=attach, \
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
                SRC:=$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/tools/attach,\
		EXCLUDE_FILES:=$(LIBATTACH_EXCLUDE_FILES),\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB),\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libattach/mapfile-$(OPENJDK_TARGET_OS), \
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS) \
			  -D "JDK_FNAME=attach.dll" \
			  -D "JDK_INTERNAL_NAME=attach" \
			  -D "JDK_FTYPE=0x2L",\
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_solaris:=-ldoor,\
		LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\
		LDFLAGS_SUFFIX_windows:=$(WIN_JAVA_LIB) advapi32.lib psapi.lib,\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libattach,\
		DEBUG_SYMBOLS:=true))

$(BUILD_LIBATTACH) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBATTACH)

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

$(eval $(call SetupNativeCompilation,BUILD_LIBDT_SOCKET,\
		LIBRARY:=dt_socket,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
                SRC:=$(JDK_TOPDIR)/src/share/transport/socket \
			$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/transport/socket,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) -DUSE_MMAP \
                        -I$(INCLUDEDIR) -I$(JDK_OUTPUTDIR)/include/$(OPENJDK_TARGET_OS) \
                        -I$(JDK_TOPDIR)/src/share/transport/socket \
		        -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/transport/socket \
                        -I$(JDK_TOPDIR)/src/share/back/export \
                        -I$(JDK_TOPDIR)/src/share/back,\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libdt_socket/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN), \
		LDFLAGS_SUFFIX_linux:=-lpthread,\
		LDFLAGS_SUFFIX_solaris:=-lnsl -lsocket -lc,\
		LDFLAGS_SUFFIX_windows:=$(LDFLAGS_JDKLIB_SUFFIX) -export:jdwpTransport_OnLoad ws2_32.lib,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=dt_socket.dll" \
			  -D "JDK_INTERNAL_NAME=dt_socket" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libdt_socket,\
		DEBUG_SYMBOLS:=true))

$(BUILD_LIBDT_SOCKET) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBDT_SOCKET)

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

ifeq ($(OPENJDK_TARGET_OS),windows)

  $(eval $(call SetupNativeCompilation,BUILD_LIBDT_SHMEM,\
		LIBRARY:=dt_shmem,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
                SRC:=$(JDK_TOPDIR)/src/share/native/com/sun/tools/jdi \
			$(JDK_TOPDIR)/src/share/transport/shmem \
			$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/transport/shmem,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) -DUSE_MMAP\
                        -I$(INCLUDEDIR) -I$(JDK_OUTPUTDIR)/include/$(OPENJDK_TARGET_OS) \
                        -I$(JDK_TOPDIR)/src/share/transport/shmem \
		        -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/transport/shmem \
                        -I$(JDK_TOPDIR)/src/share/back/export, \
		LDFLAGS:=$(LDFLAGS_JDKLIB),\
		LDFLAGS_windows:=-export:jdwpTransport_OnLoad,\
		LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=dt_shmem.dll" \
			  -D "JDK_INTERNAL_NAME=dt_shmem" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libdt_shmem,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

  BUILD_LIBRARIES += $(BUILD_LIBDT_SHMEM)

endif # OPENJDK_TARGET_OS

##########################################################################################
# JDWP_LOGGING causes log messages to be compiled into the library.
$(eval $(call SetupNativeCompilation,BUILD_LIBJDWP,\
		LIBRARY:=jdwp, \
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
                SRC:=$(JDK_TOPDIR)/src/share/back $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/back,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) -DJDWP_LOGGING\
		 -I$(JDK_TOPDIR)/src/share/transport/export \
                 -I$(JDK_TOPDIR)/src/share/back/export \
                 -I$(JDK_TOPDIR)/src/share/npt \
                 -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt \
                 -I$(JDK_TOPDIR)/src/share/back \
                 -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/back \
		 -I$(JDK_OUTPUTDIR)/gensrc_jdwp_headers,\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjdwp/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX_linux:=$(LIBDL),\
		LDFLAGS_SUFFIX_solaris:=$(LIBDL) -lc,\
		LDFLAGS_SUFFIX_windows:=$(LDFLAGS_JDKLIB_SUFFIX),\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=jdwp.dll" \
			  -D "JDK_INTERNAL_NAME=jdwp" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjdwp,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

$(BUILD_LIBJDWP) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBJDWP)

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

LIBJAAS_MAPFILE:=
ifneq ($(OPENJDK_TARGET_OS),solaris)
   LIBJAAS_EXCLUDE_FILES:=Solaris.c
else
   # only on solaris...wonder why
   LIBJAAS_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjaas/mapfile-vers
endif

LIBJAAS_NAME:=jaas_unix
ifeq ($(OPENJDK_TARGET_OS), windows)
     LIBJAAS_NAME:=jaas_nt
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBJAAS,\
		LIBRARY:=$(LIBJAAS_NAME),\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
                SRC:=$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/com/sun/security/auth/module,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB),\
		MAPFILE:=$(LIBJAAS_MAPFILE),\
		LDFLAGS:=$(filter-out -ljava,$(LDFLAGS_JDKLIB)) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_windows:=netapi32.lib user32.lib mpr.lib advapi32.lib,\
		LDFLAGS_SUFFIX_windows:=$(LDFLAGS_JDKLIB_SUFFIX),\
		LDFLAGS_SUFFIX_solaris:=-lc,\
		EXCLUDE_FILES:=$(LIBJAAS_EXCLUDE_FILES),\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS) \
			  -D "JDK_FNAME=$(LIBJAAS_NAME).dll" \
			  -D "JDK_INTERNAL_NAME=$(LIBJAAS_NAME)" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjaas,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

$(BUILD_LIBJAAS) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBJAAS)

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

$(eval $(call SetupNativeCompilation,BUILD_LIBJSDT,\
		LIBRARY:=jsdt,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
                SRC:=$(JDK_TOPDIR)/src/share/native/sun/tracing/dtrace\
			$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/tracing/dtrace,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB)\
			-I$(JDK_TOPDIR)/src/share/native/sun/tracing/dtrace,\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjsdt/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX_linux:=$(LIBDL),\
		LDFLAGS_SUFFIX_windows:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBDL),\
		LDFLAGS_SUFFIX_macosx:=                         $(LIBDL),\
		LDFLAGS_SUFFIX_solaris:=-lc,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=jsdt.dll" \
			  -D "JDK_INTERNAL_NAME=jsdt" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsdt, \
                DEBUG_SYMBOLS:=true))

$(BUILD_LIBJSDT) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBJSDT)

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

ifdef OPENJDK
    # TODO: Update awt lib path when awt is converted
    $(eval $(call SetupNativeCompilation,BUILD_LIBLCMS,\
                LIBRARY:=lcms,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
                SRC:=$(JDK_TOPDIR)/src/share/native/sun/java2d/cmm/lcms,\
		LANG:=C,\
		OPTIMIZATION:=HIGHEST, \
		CFLAGS:=$(filter-out -xc99=%none,$(CFLAGS_JDKLIB)) \
			$(SHARED_LIBRARY_FLAGS) \
			-I$(JDK_TOPDIR)/src/share/native/sun/java2d \
			-I$(JDK_TOPDIR)/src/share/native/sun/awt/debug,\
		CFLAGS_solaris:=-xc99=no_lib,\
		CFLAGS_windows:=-DCMS_IS_WINDOWS_,\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/liblcms/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
                         $(call SET_SHARED_LIBRARY_ORIGIN), \
		LDFLAGS_solaris:=/usr/lib$(OPENJDK_TARGET_CPU_ISADIR)/libm.so.2,\
		LDFLAGS_windows:=$(WIN_AWT_LIB) $(WIN_JAVA_LIB),\
		LDFLAGS_SUFFIX_solaris:=-lawt -ljava -ljvm -lc,\
		LDFLAGS_SUFFIX_macosx:=$(LIBM) -lawt -ljava -ljvm,\
		LDFLAGS_SUFFIX_linux:=-lm -lawt -ljava -ljvm,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=lcms.dll" \
			  -D "JDK_INTERNAL_NAME=lcms" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/liblcms,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

    BUILD_LIBRARIES += $(BUILD_LIBLCMS)

    $(BUILD_LIBLCMS) : $(BUILD_LIBAWT)
endif

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

ifdef OPENJDK
    BUILD_LIBJPEG_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/mapfile-vers
else
    BUILD_LIBJPEG_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/mapfile-vers-closed
    BUILD_LIBJPEG_CLOSED_SRC:=$(JDK_TOPDIR)/src/closed/share/native/sun/awt/image/jpeg
    BUILD_LIBJPEG_CLOSED_INCLUDES:=-I$(BUILD_LIBJPEG_CLOSED_SRC)
endif

BUILD_LIBJPEG_REORDER:=
ifeq ($(OPENJDK_TARGET_OS), solaris)
    ifneq ($(OPENJDK_TARGET_CPU), x86_64)
        BUILD_LIBJPEG_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/reorder-$(OPENJDK_TARGET_CPU)
    endif
endif

# Suppress gcc warnings like "variable might be clobbered by 'longjmp'
# or 'vfork'": this warning indicates that some variable is placed to
# a register by optimized compiler and it's value might be lost on longjmp().
# Recommended way to avoid such warning is to declare the variable as
# volatile to prevent the optimization. However, this approach does not
# work because we have to declare all variables as volatile in result.
#ifndef CROSS_COMPILE_ARCH
#    CC_43_OR_NEWER:=\
#        $(shell $(EXPR) $(CC_MAJORVER) \> 4 \| \
#              \( $(CC_MAJORVER) = 4 \& $(CC_MINORVER) \>= 3 \) )
#    ifeq ($(CC_43_OR_NEWER),1)
#        BUILD_LIBJPEG_CFLAGS_linux += -Wno-clobbered
#    endif
#endif

$(eval $(call SetupNativeCompilation,BUILD_LIBJPEG,\
                LIBRARY:=jpeg, \
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
                SRC:=$(BUILD_LIBJPEG_CLOSED_SRC) \
		     $(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg,\
		LANG:=C,\
		OPTIMIZATION:=HIGHEST, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
			$(BUILD_LIBJPEG_CLOSED_INCLUDES) \
			-I$(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg,\
		MAPFILE:=$(BUILD_LIBJPEG_MAPFILE), \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_windows:=$(WIN_JAVA_LIB) jvm.lib,\
		LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=jpeg.dll" \
			  -D "JDK_INTERNAL_NAME=jpeg" \
			  -D "JDK_FTYPE=0x2L",\
		REORDER:=$(BUILD_LIBJPEG_REORDER),\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjpeg,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

$(BUILD_LIBJPEG) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBJPEG)

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

ifndef OPENJDK
    FONT_HEADERS:=-I$(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k
    BUILD_LIBFONTMANAGER_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libfontmanager/mapfile-vers
    LIBFONTMANAGER_EXCLUDE_FILES += freetypeScaler.c
else
    FONT_HEADERS:=$(FREETYPE2_CFLAGS)
    BUILD_LIBFONTMANAGER_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libfontmanager/mapfile-vers.openjdk
    BUILD_LIBFONTMANAGER_FONTLIB:=$(FREETYPE2_LIBS)
endif

LIBFONTMANAGER_OPTIMIZATION:=HIGH

ifeq ($(OPENJDK_TARGET_OS),windows)
    LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \
				    X11TextRenderer.c
    LIBFONTMANAGER_OPTIMIZATION:=LOW
else
    LIBFONTMANAGER_EXCLUDE_FILES += fontpath.c \
				    lcdglyph.c
endif

BUILD_LIBFONTMANAGER_CFLAGS_COMMON:=\
			$(X_CFLAGS) \
			-DLE_STANDALONE -DHEADLESS \
			$(FONT_HEADERS) \
			-I$(JDK_TOPDIR)/src/share/native/sun/font \
			-I$(JDK_TOPDIR)/src/share/native/sun/font/layout \
			-I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \
			-I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/awt \
			-I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \
			-I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \
			-I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \
			-I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/java2d \
			-I$(JDK_TOPDIR)/src/share/native/sun/java2d

# Turn off aliasing with GCC for ExtensionSubtables.cpp
ifeq ($(OPENJDK_TARGET_OS), linux)
    BUILD_LIBFONTMANAGER_ExtensionSubtables.cpp_CXXFLAGS:=-fno-strict-aliasing
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBFONTMANAGER,\
		LIBRARY:=fontmanager, \
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
                SRC:=$(JDK_TOPDIR)/src/share/native/sun/font\
		     $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/font,\
		EXCLUDE_FILES:=$(LIBFONTMANAGER_EXCLUDE_FILES) \
			       AccelGlyphCache.c,\
		LANG:=C++,\
		CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBFONTMANAGER_CFLAGS_COMMON),\
		CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(BUILD_LIBFONTMANAGER_CFLAGS_COMMON),\
		OPTIMIZATION:=$(LIBFONTMANAGER_OPTIMIZATION), \
		CFLAGS_windows= -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/windows \
				-DCC_NOEX, \
		MAPFILE:=$(BUILD_LIBFONTMANAGER_MAPFILE), \
		LDFLAGS:=$(subst -Xlinker -z -Xlinker defs,,$(LDFLAGS_JDKLIB)) $(LDFLAGS_CXX_JDK) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX:=$(BUILD_LIBFONTMANAGER_FONTLIB),\
		LDFLAGS_SUFFIX_linux:=-lawt $(LIBM) $(LIBCXX) -ljava -ljvm -lc,\
		LDFLAGS_SUFFIX_solaris:=-lawt -lawt_xawt -lc $(LIBM) $(LIBCXX) -ljava -ljvm,\
		LDFLAGS_SUFFIX_macosx:=-lawt $(LIBM) $(LIBCXX) -undefined dynamic_lookup \
				       -ljava -ljvm,\
		LDFLAGS_SUFFIX_windows:=$(WIN_JAVA_LIB) advapi32.lib user32.lib gdi32.lib \
					$(WIN_AWT_LIB),\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=fontmanager.dll" \
			  -D "JDK_INTERNAL_NAME=fontmanager" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfontmanager,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

$(BUILD_LIBFONTMANAGER) : $(BUILD_LIBAWT)

ifneq (,$(findstring $(OPENJDK_TARGET_OS),solaris macosx))
$(BUILD_LIBFONTMANAGER) : $(BUILD_LIBAWT_XAWT)
endif

BUILD_LIBRARIES += $(BUILD_LIBFONTMANAGER)

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

ifndef OPENJDK

#    ifeq ($(OPENJDK_TARGET_OS), linux)
#        ifeq ("$(CC_VER_MAJOR)", "3")
#            OTHER_LDLIBS  += -Wl,-Bstatic -lgcc_eh -Wl,-Bdynamic
#        endif                           
#    endif
#
# The resulting size of the t2k lib file is (at least on linux) dependant on the order of 
# the input .o files. Because of this the new build will differ in size to the old build.
    BUILD_LIBT2K_CFLAGS_COMMON:=-I$(JDK_TOPDIR)/src/share/native/sun/font \
		            -I$(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k \
		            -I$(JDK_TOPDIR)/src/closed/share/native/sun/font \
		            -I$(JDK_TOPDIR)/src/share/share/native/sun/font \
		            -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/font \
		            -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \
		            -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \
		            -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/java2d \
		            -I$(JDK_TOPDIR)/src/share/native/sun/java2d

    $(eval $(call SetupNativeCompilation,BUILD_LIBT2K,\
                LIBRARY:=t2k, \
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
                SRC:=$(JDK_TOPDIR)/src/closed/share/native/sun/font \
		     $(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k \
		     $(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k/ttHints,\
		EXCLUDE_FILES:=orion.c,\
		LANG:=C++,\
		OPTIMIZATION:=HIGH, \
		CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBT2K_CFLAGS_COMMON),\
		CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(BUILD_LIBT2K_CFLAGS_COMMON),\
		CFLAGS_windows=-DCC_NOEX, \
		CXXFLAGS_windows=-DCC_NOEX, \
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libt2k/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) $(LDFLAGS_CXX_JDK) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_windows:=user32.lib $(JDK_OUTPUTDIR)/objs/libfontmanager/fontmanager.lib,\
		LDFLAGS_SUFFIX_posix:=$(LIBM) $(LIBCXX) -lfontmanager -ljava -ljvm -lc,\
		LDFLAGS_SUFFIX_solaris:=-lawt -lawt_xawt,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=t2k.dll" \
			  -D "JDK_INTERNAL_NAME=t2k" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libt2k,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

    # t2k is linked against fontmanager
    $(BUILD_LIBT2K) : $(BUILD_LIBFONTMANAGER)

    BUILD_LIBRARIES += $(BUILD_LIBT2K)
endif

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

ifeq ($(OPENJDK_TARGET_OS), windows)
    ifeq ($(OPENJDK_TARGET_CPU), x86)
        KERNEL32_LIB:=kernel32.lib
    endif
    $(eval $(call SetupNativeCompilation,BUILD_LIBJAWT,\
                LIBRARY:=jawt, \
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
                SRC:=$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/windows,\
		INCLUDE_FILES:=jawt.cpp,\
		LANG:=C++,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CXXFLAGS_JDKLIB) \
			-EHsc -DUNICODE -D_UNICODE \
			-I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/windows \
		        -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \
		        -I$(JDK_TOPDIR)/src/share/native/sun/java2d \
			-I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \
			-I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/java2d/windows \
			-I$(DXSDK_INCLUDE_PATH), \
		LDFLAGS:=$(LDFLAGS_JDKLIB) $(KERNEL32_LIB) $(LDFLAGS_CXX_JDK) \
			 advapi32.lib $(WIN_AWT_LIB),\
		LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=jawt.dll" \
			  -D "JDK_INTERNAL_NAME=jawt" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjawt,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

$(BUILD_LIBJAWT) : $(BUILD_LIBAWT)

$(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX): $(BUILD_LIBJAWT)
	$(ECHO) Copying $(@F)
	$(CP) $(JDK_OUTPUTDIR)/objs/libjawt/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX) $@

BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX)

else # OPENJDK_TARGET_OS not windows

    JAWT_LIBS:=
    ifneq ($(OPENJDK_TARGET_OS), solaris)
        JAWT_LIBS += -lawt
    endif

    ifndef BUILD_HEADLESS_ONLY
        JAWT_LIBS += -lawt_xawt
    else
        JAWT_LIBS += -lawt_headless
        HEADLESS_CFLAG += -DHEADLESS
    endif

    JAWT_FILES:=jawt.c
    ifeq ($(OPENJDK_TARGET_OS), macosx)
	JAWT_FILES:=jawt.m
	JAWT_LIBS:=-lawt_lwawt
    endif

    $(eval $(call SetupNativeCompilation,BUILD_LIBJAWT,\
                LIBRARY:=jawt, \
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
                SRC:=$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/awt \
                     $(JDK_TOPDIR)/src/macosx/native/sun/awt,\
		INCLUDE_FILES:=$(JAWT_FILES),\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB), \
		CFLAGS_linux:=$(HEADLESS_CFLAG),\
		CFLAGS_macosx:=-I$(JDK_TOPDIR)/src/solaris/native/sun/awt ,\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjawt/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_solaris:=-L$(OPENWIN_HOME)/sfw/lib$(OPENJDK_TARGET_CPU_ISADIR) -L$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR),\
		LDFLAGS_SUFFIX_linux:=$(JAWT_LIBS) $(LDFLAGS_JDKLIB_SUFFIX),\
		LDFLAGS_SUFFIX_solaris:=$(JAWT_LIBS) $(LDFLAGS_JDKLIB_SUFFIX) -lXrender,\
		LDFLAGS_SUFFIX_macosx:=-Xlinker -rpath -Xlinker @loader_path $(JAWT_LIBS) \
				       -framework Cocoa $(LDFLAGS_JDKLIB_SUFFIX),\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjawt))

ifndef BUILD_HEADLESS_ONLY
$(BUILD_LIBJAWT) : $(BUILD_LIBAWT_XAWT)
else
$(BUILD_LIBJAWT) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_headless$(SHARED_LIBRARY_SUFFIX)
endif

ifeq ($(OPENJDK_TARGET_OS),macosx)
$(BUILD_LIBJAWT) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX)
endif

endif # OPENJDK_TARGET_OS

BUILD_LIBRARIES += $(BUILD_LIBJAWT)

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

LIBINSTRUMENT_SRC   :=$(JDK_TOPDIR)/src/share/instrument \
                      $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/java/io \
                      $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/instrument

LIBINSTRUMENT_FILES :=\
	EncodingSupport.c \
	EncodingSupport_md.c \
	FileSystemSupport_md.c \
	InstrumentationImplNativeMethods.c \
	InvocationAdapter.c \
	JarFacade.c \
	JPLISAgent.c \
	JPLISAssert.c \
	JavaExceptions.c \
	PathCharsValidator.c \
	Reentrancy.c \
	Utilities.c \
	canonicalize_md.c

LIBINSTRUMENT_DIR   :=$(JDK_OUTPUTDIR)/objs/libinstrument
LIBINSTRUMENT_CFLAGS:=$(CFLAGS_JDKLIB) \
                      -I$(JDK_TOPDIR)/src/share/instrument \
                      -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/instrument \
                      -I$(JDK_TOPDIR)/src/share/bin

LIBINSTRUMENT_LDFLAGS:=
LIBINSTRUMENT_LDFLAGS_SUFFIX:=

ifeq ($(OPENJDK_TARGET_OS), windows)
    LIBINSTRUMENT_LDFLAGS += $(JDK_OUTPUTDIR)/objs/jli_static.lib $(WIN_JAVA_LIB) \
				 -export:Agent_OnAttach advapi32.lib
    # Statically link the C runtime so that there are not dependencies on modules 
    # not on the search patch when invoked from the Windows system directory 
    # (or elsewhere).
    LIBINSTRUMENT_CFLAGS := $(filter-out -MD,$(LIBINSTRUMENT_CFLAGS))
    # equivalent of strcasecmp is stricmp on Windows
    LIBINSTRUMENT_CFLAGS += -Dstrcasecmp=stricmp
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBINSTRUMENT,\
		LIBRARY:=instrument, \
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(LIBINSTRUMENT_SRC),\
		INCLUDE_FILES:=$(LIBINSTRUMENT_FILES),\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(LIBINSTRUMENT_CFLAGS),\
		CFLAGS_debug:=-DJPLIS_LOGGING,\
		CFLAGS_release:=-DNO_JPLIS_LOGGING,\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libinstrument/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN) \
                         $(LIBINSTRUMENT_LDFLAGS),\
		LDFLAGS_linux:=$(call SET_SHARED_LIBRARY_ORIGIN,/jli),\
		LDFLAGS_solaris:= $(call SET_SHARED_LIBRARY_ORIGIN,/jli),\
		LDFLAGS_macosx:=-Xlinker -all_load $(JDK_OUTPUTDIR)/objs/libjli_static.a \
				-framework Cocoa -framework Security -framework ApplicationServices,\
		LDFLAGS_SUFFIX:=$(LIBINSTRUMENT_LDFLAGS_SUFFIX),\
		LDFLAGS_SUFFIX_macosx:=-liconv $(LIBZ),\
		LDFLAGS_SUFFIX_solaris:=$(LIBZ) -L $(INSTALL_LIBRARIES_HERE)/jli -ljli $(LIBDL) -lc,\
		LDFLAGS_SUFFIX_linux:=$(LIBZ) -L $(INSTALL_LIBRARIES_HERE)/jli -ljli $(LIBDL),\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=instrument.dll" \
			  -D "JDK_INTERNAL_NAME=instrument" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(LIBINSTRUMENT_DIR),\
		DEBUG_SYMBOLS:=true))

ifneq (,$(findstring $(OPENJDK_TARGET_OS), macosx windows))
$(BUILD_LIBINSTRUMENT) : $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX)
else
$(BUILD_LIBINSTRUMENT) : $(INSTALL_LIBRARIES_HERE)/jli/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX)
endif
$(BUILD_LIBINSTRUMENT) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBINSTRUMENT)

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

BUILD_LIBMANAGEMENT_SRC:=$(JDK_TOPDIR)/src/share/native/sun/management \
                           $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/management \
                           $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/com/sun/management

BUILD_LIBMANAGEMENT_EXCLUDES:=

BUILD_LIBMANAGEMENT_CFLAGS:=-I$(JDK_TOPDIR)/src/share/native/sun/management

ifneq ($(OPENJDK_TARGET_OS), windows)
	BUILD_LIBMANAGEMENT_EXCLUDES += OperatingSystem_md.c
else
	BUILD_LIBMANAGEMENT_EXCLUDES += UnixOperatingSystem_md.c
endif

ifneq ($(OPENJDK_TARGET_OS),solaris)
	BUILD_LIBMANAGEMENT_EXCLUDES += SolarisOperatingSystem.c
endif

ifneq ($(OPENJDK_TARGET_OS),linux)
	BUILD_LIBMANAGEMENT_EXCLUDES += LinuxOperatingSystem.c
endif

ifneq ($(OPENJDK_TARGET_OS),macosx)
	BUILD_LIBMANAGEMENT_EXCLUDES += MacosxOperatingSystem.c
endif

LIBMANAGEMENT_OPTIMIZATION:=HIGH
ifneq ($(findstring $(OPENJDK_TARGET_OS),solaris linux),)
    ifeq ($(ENABLE_DEBUG_SYMBOLS), true)
        LIBMANAGEMENT_OPTIMIZATION:=LOW
    endif
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBMANAGEMENT,\
		LIBRARY:=management,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(BUILD_LIBMANAGEMENT_SRC),\
		EXCLUDE_FILES:=$(BUILD_LIBMANAGEMENT_EXCLUDES),\
		LANG:=C,\
		OPTIMIZATION:=$(LIBMANAGEMENT_OPTIMIZATION), \
		CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBMANAGEMENT_CFLAGS),\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libmanagement/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_solaris:=-lkstat,\
		LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\
		LDFLAGS_SUFFIX_windows:=jvm.lib psapi.lib $(WIN_JAVA_LIB) advapi32.lib,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=management.dll" \
			  -D "JDK_INTERNAL_NAME=management" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libmanagement,\
		DEBUG_SYMBOLS:=true))

$(BUILD_LIBMANAGEMENT) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBMANAGEMENT)

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

BUILD_LIBHPROF_SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/hprof $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/demo/jvmti/hprof
BUILD_LIBHPROF_CFLAGS:=-I$(JDK_TOPDIR)/src/share/demo/jvmti/hprof \
                         -I$(JDK_TOPDIR)/src/share/npt \
                         -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt \
                         -I$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo

BUILD_LIBHPROF_LDFLAGS:=

LIBHPROF_OPTIMIZATION:=HIGHEST
ifneq ($(findstring $(OPENJDK_TARGET_OS),solaris linux),)
    ifeq ($(ENABLE_DEBUG_SYMBOLS), true)
        LIBHPROF_OPTIMIZATION:=LOW
    endif
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBHPROF,\
		LIBRARY:=hprof, \
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(BUILD_LIBHPROF_SRC),\
		LANG:=C,\
		OPTIMIZATION:=$(LIBHPROF_OPTIMIZATION), \
		CFLAGS:=$(CFLAGS_JDKLIB) \
                         $(BUILD_LIBHPROF_CFLAGS),\
		CFLAGS_debug:=-DHPROF_LOGGING,\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libhprof/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_windows:=wsock32.lib winmm.lib advapi32.lib,\
		LDFLAGS_SUFFIX_linux:=$(LIBDL),\
		LDFLAGS_SUFFIX_macosx:=$(LIBDL),\
		LDFLAGS_SUFFIX_solaris:=-lsocket -lnsl $(LIBDL) -lc,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=hprof.dll" \
			  -D "JDK_INTERNAL_NAME=hprof" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libhprof_jvmti,\
		DEBUG_SYMBOLS:=true))

BUILD_LIBRARIES += $(BUILD_LIBHPROF)

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

$(eval $(call SetupNativeCompilation,BUILD_LIBJAVA_CRW_DEMO,\
		LIBRARY:=java_crw_demo, \
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
                        -I$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo,\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjava_crw_demo/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX_solaris:=-lc,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=java_crw_demo.dll" \
			  -D "JDK_INTERNAL_NAME=java_crw_demo" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjava_crw_demo,\
		DEBUG_SYMBOLS:=true))

BUILD_LIBRARIES += $(BUILD_LIBJAVA_CRW_DEMO)

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

$(eval $(call SetupNativeCompilation,BUILD_LIBNPT,\
		LIBRARY:=npt, \
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(JDK_TOPDIR)/src/share/npt $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
                        -I$(JDK_TOPDIR)/src/share/npt \
                        -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt,\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnpt/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_macosx:=-liconv,\
		LDFLAGS_SUFFIX_windows:=-export:nptInitialize -export:nptTerminate,\
		LDFLAGS_SUFFIX_solaris:=-lc, \
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=npt.dll" \
			  -D "JDK_INTERNAL_NAME=npt" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libnpt,\
		DEBUG_SYMBOLS:=true))

BUILD_LIBRARIES += $(BUILD_LIBNPT)

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

LIBNET_SRC_DIRS:=$(JDK_TOPDIR)/src/share/native/java/net \
                   $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/java/net \
                   $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/net/dns \
                   $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/net/spi

ifeq ($(OPENJDK_TARGET_OS),windows)
    LIBNET_SRC_DIRS+=$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/net/www/protocol/http/ntlm
else
    LIBNET_SRC_DIRS+=$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/net/sdp
endif

LIBNET_CFLAGS:=$(foreach dir,$(LIBNET_SRC_DIRS),-I$(dir))

LIBNET_EXCLUDE_FILES:=
ifneq ($(OPENJDK_TARGET_OS),linux)
	LIBNET_EXCLUDE_FILES += linux_close.c
endif

ifneq ($(OPENJDK_TARGET_OS),macosx)
	LIBNET_EXCLUDE_FILES += bsd_close.c
endif

ifeq ($(OPENJDK_TARGET_OS),windows)
	LIBNET_EXCLUDE_FILES += PlainSocketImpl.c PlainDatagramSocketImpl.c SdpSupport.c
else
	LIBNET_EXCLUDE_FILES += TwoStacksPlainSocketImpl.c DualStackPlainSocketImpl.c \
                                TwoStacksPlainDatagramSocketImpl.c DualStackPlainDatagramSocketImpl.c \
				NTLMAuthSequence.c NetworkInterface_winXP.c
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBNET,\
		LIBRARY:=net,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(LIBNET_SRC_DIRS),\
		EXCLUDE_FILES:=$(LIBNET_EXCLUDE_FILES), \
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
                        $(LIBNET_CFLAGS),\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnet/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX_macosx:=-ljvm -ljava,\
		LDFLAGS_SUFFIX_solaris:=-ljvm -ljava -lnsl -lsocket $(LIBDL) -lc ,\
		LDFLAGS_SUFFIX_linux:=$(LIBDL) -ljvm -lpthread -ljava,\
		LDFLAGS_SUFFIX_windows:=ws2_32.lib jvm.lib secur32.lib iphlpapi.lib \
					delayimp.lib $(WIN_JAVA_LIB) advapi32.lib \
					-DELAYLOAD:secur32.dll -DELAYLOAD:iphlpapi.dll, \
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=net.dll" \
			  -D "JDK_INTERNAL_NAME=net" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libnet,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

$(BUILD_LIBNET) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBNET)

$(JDK_OUTPUTDIR)/lib/net.properties: $(JDK_TOPDIR)/src/share/lib/net.properties
	$(ECHO) $(LOG_INFO) Copying $(@F)
	$(MKDIR) -p $(@D)
	$(CP) $< $@

COPY_FILES += $(JDK_OUTPUTDIR)/lib/net.properties

ifeq ($(OPENJDK_TARGET_OS), solaris)
$(JDK_OUTPUTDIR)/lib/sdp/sdp.conf.template : $(JDK_TOPDIR)/src/${OPENJDK_TARGET_OS_API_DIR}/lib/sdp/sdp.conf.template
	$(ECHO) $(LOG_INFO) Copying $(@F)
	$(MKDIR) -p $(@D)
	$(CP) $< $@

COPY_FILES += $(JDK_OUTPUTDIR)/lib/sdp/sdp.conf.template
endif

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

BUILD_LIBNIO_SRC:=\
        $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/java/nio \
	$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/nio/ch \
	$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/nio/fs

BUILD_LIBNIO_CFLAGS:=\
	-I$(JDK_TOPDIR)/src/share/native/sun/nio/ch \
	-I$(JDK_TOPDIR)/src/share/native/java/io \
	-I$(JDK_TOPDIR)/src/share/native/java/net \
        -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/java/net

BUILD_LIBNIO_FILES:=\
        DatagramChannelImpl.c \
        DatagramDispatcher.c \
	FileChannelImpl.c \
	FileDispatcherImpl.c \
	FileKey.c \
	IOUtil.c \
        MappedByteBuffer.c \
	Net.c \
	ServerSocketChannelImpl.c \
	SocketChannelImpl.c \
	SocketDispatcher.c

ifeq ($(OPENJDK_TARGET_OS), windows)
	BUILD_LIBNIO_FILES += \
		Iocp.c \
		RegistryFileTypeDetector.c \
		WindowsAsynchronousFileChannelImpl.c \
		WindowsAsynchronousServerSocketChannelImpl.c \
		WindowsAsynchronousSocketChannelImpl.c \
		WindowsNativeDispatcher.c \
	        WindowsSelectorImpl.c
endif

ifeq ($(OPENJDK_TARGET_OS), linux)
	BUILD_LIBNIO_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-$(OPENJDK_TARGET_OS)
	BUILD_LIBNIO_FILES += \
		EPoll.c \
		EPollArrayWrapper.c \
		EPollPort.c \
		InheritedChannel.c \
		NativeThread.c \
		PollArrayWrapper.c \
		UnixAsynchronousServerSocketChannelImpl.c \
		UnixAsynchronousSocketChannelImpl.c \
		GnomeFileTypeDetector.c \
		MagicFileTypeDetector.c \
		LinuxNativeDispatcher.c \
		LinuxWatchService.c \
		UnixCopyFile.c \
		UnixNativeDispatcher.c
endif

ifeq ($(OPENJDK_TARGET_OS), macosx)
	BUILD_LIBNIO_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-$(OPENJDK_TARGET_OS)
	BUILD_LIBNIO_SRC += $(JDK_TOPDIR)/src/macosx/native/sun/nio/ch
	BUILD_LIBNIO_FILES += \
		InheritedChannel.c \
		NativeThread.c \
	        PollArrayWrapper.c \
		UnixAsynchronousServerSocketChannelImpl.c \
		UnixAsynchronousSocketChannelImpl.c \
		BsdNativeDispatcher.c \
		MacOSXNativeDispatcher.c \
		UnixCopyFile.c \
		UnixNativeDispatcher.c \
		KQueue.c \
		KQueuePort.c \
		KQueueArrayWrapper.c
endif

ifeq ($(OPENJDK_TARGET_OS), solaris)
	BUILD_LIBNIO_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-$(OPENJDK_TARGET_OS)
	BUILD_LIBNIO_FILES += \
		DevPollArrayWrapper.c \
		InheritedChannel.c \
		NativeThread.c \
		PollArrayWrapper.c \
		SolarisEventPort.c \
		UnixAsynchronousServerSocketChannelImpl.c \
		UnixAsynchronousSocketChannelImpl.c \
		GnomeFileTypeDetector.c \
		SolarisNativeDispatcher.c \
		SolarisWatchService.c \
		UnixCopyFile.c \
		UnixNativeDispatcher.c
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBNIO,\
		LIBRARY:=nio,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(BUILD_LIBNIO_SRC),\
		INCLUDE_FILES:=$(BUILD_LIBNIO_FILES), \
		LANG:=C,\
		OPTIMIZATION:=HIGH, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
                        $(BUILD_LIBNIO_CFLAGS),\
		MAPFILE:=$(BUILD_LIBNIO_MAPFILE), \
		LDFLAGS:=$(LDFLAGS_JDKLIB) $(BUILD_LIBNIO_LDFLAGS) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX_linux:=-ljava -lnet -lpthread $(LIBDL),\
		LDFLAGS_SUFFIX_solaris:=-ljvm -lsocket -lposix4 $(LIBDL) \
				        -lsendfile -ljava -lnet -lc,\
		LDFLAGS_SUFFIX_windows:=jvm.lib ws2_32.lib $(WIN_JAVA_LIB) \
					$(JDK_OUTPUTDIR)/objs/libnet/net.lib \
                                        $(JDK_OUTPUTDIR)/objs/libjava/io_util.obj \
		                        $(JDK_OUTPUTDIR)/objs/libjava/FileDescriptor_md.obj \
					advapi32.lib,\
		LDFLAGS_SUFFIX_macosx:=-ljava -lnet -pthread -framework CoreFoundation,\
		LDFLAGS_SUFFIX:=,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=nio.dll" \
			  -D "JDK_INTERNAL_NAME=nio" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libnio,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

BUILD_LIBRARIES += $(BUILD_LIBNIO)

$(BUILD_LIBNIO) : $(BUILD_LIBNET)

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

ifeq ($(OPENJDK_TARGET_OS_API),posix)

  ifneq ($(OPENJDK_TARGET_OS),macosx)

    SCTP_WERROR := -Werror
    ifeq ($(OPENJDK_TARGET_CPU_ARCH), ppc)
      SCTP_WERROR :=
    endif

    $(eval $(call SetupNativeCompilation,BUILD_LIBSCTP,\
                LIBRARY:=sctp,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
                SRC:=$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/nio/ch/sctp,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB)\
			-I$(JDK_TOPDIR)/src/share/native/sun/nio/ch \
			-I$(JDK_TOPDIR)/src/share/native/sun/nio/ch/sctp \
			-I$(JDK_TOPDIR)/src/share/native/java/net \
			-I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/nio/ch \
			-I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/java/net,\
		CFLAGS_linux:=$(SCTP_WERROR),\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libsctp/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX_linux:=-lpthread $(LIBDL) -ljava -ljvm,\
		LDFLAGS_SUFFIX_posix:=-lnio -lnet,\
		LDFLAGS_SUFFIX_solaris:=-lsocket -ljava -ljvm -lc,\
		LDFLAGS_SUFFIX_macosx:=-ljava -ljvm,\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsctp))

    BUILD_LIBRARIES += $(BUILD_LIBSCTP)

    $(BUILD_LIBSCTP) : $(BUILD_LIBNIO)
  endif
endif

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

BUILD_LIBJLI_SRC_DIRS:=$(JDK_TOPDIR)/src/share/bin $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/bin
LIBJLI_CFLAGS:=$(CFLAGS_JDKLIB) $(foreach dir,$(BUILD_LIBJLI_SRC_DIRS),-I$(dir))

BUILD_LIBJLI_FILES:=\
	java.c \
	splashscreen_stubs.c \
	parse_manifest.c \
	version_comp.c \
	wildcard.c \
	jli_util.c

ifeq ($(JVM_VARIANT_ZERO), true)
	ERGO_FAMILY:=zero
else
	ifeq ($(OPENJDK_TARGET_CPU_ARCH), x86)
		ERGO_FAMILY:=i586
	else
		ERGO_FAMILY:=$(OPENJDK_TARGET_CPU_ARCH)
	endif
endif

ifeq ($(OPENJDK_TARGET_OS), macosx)
	LIBJLI_CFLAGS += -I$(JDK_TOPDIR)/src/macosx/bin
	BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/bin
	BUILD_LIBJLI_FILES += java_md_common.c java_md_macosx.c

	BUILD_LIBJLI_java_md_macosx.c_CFLAGS:=-x objective-c
	BUILD_LIBJLI_STATIC_java_md_macosx.c_CFLAGS:=-x objective-c
endif

ifeq ($(OPENJDK_TARGET_OS), windows)
	BUILD_LIBJLI_FILES += java_md.c \
			      cmdtoargs.c
        # Staticically link with c runtime on windows.
	LIBJLI_CFLAGS:=$(filter-out -MD,$(LIBJLI_CFLAGS))
else ifneq ($(OPENJDK_TARGET_OS), macosx)

	BUILD_LIBJLI_FILES += java_md_common.c
	BUILD_LIBJLI_FILES += java_md_solinux.c ergo.c 

	ERGO_ARCH_FILE = ergo_$(ERGO_FAMILY).c

        # if the architecture specific ergo file exists then
        # use it, else use the generic definitions from ergo.c
	ifneq ($(wildcard $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/bin/$(ERGO_ARCH_FILE)),)
		BUILD_LIBJLI_FILES += $(ERGO_ARCH_FILE)
	else # !ERGO_ARCH_FILE
		LIBJLI_CFLAGS += -DUSE_GENERIC_ERGO
	endif # ERGO_ARCH_FILE
endif #WINDOWS

# Append defines depending on target platform
LIBJLI_CFLAGS += $(OPENJDK_TARGET_CPU_JLI_CFLAGS)

ifeq ($(OPENJDK_TARGET_OS), macosx)
	LIBJLI_CFLAGS += -DPACKAGE_PATH=\"$(PACKAGE_PATH)\"
endif

ifneq ($(USE_EXTERNAL_LIBZ),true)
	BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5
	LIBJLI_CFLAGS += $(ZLIB_CPPFLAGS)
	BUILD_LIBJLI_FILES += \
		inflate.c \
		inftrees.c \
		inffast.c \
		zadler32.c \
		zcrc32.c \
		zutil.c
endif

ifeq ($(OPENJDK_TARGET_OS), windows)
    LIBJLI_OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE)
else
    LIBJLI_OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE)/jli
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBJLI,\
		LIBRARY:=jli,\
                OUTPUT_DIR:=$(LIBJLI_OUTPUT_DIR),\
		SRC:=$(BUILD_LIBJLI_SRC_DIRS),\
		INCLUDE_FILES:=$(BUILD_LIBJLI_FILES),\
		LANG:=C,\
		OPTIMIZATION:=HIGH, \
		CFLAGS:=$(LIBJLI_CFLAGS),\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjli/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_linux:=$(call SET_SHARED_LIBRARY_ORIGIN,/..),\
		LDFLAGS_solaris:=$(call SET_SHARED_LIBRARY_ORIGIN,/..),\
		LDFLAGS_macosx:=-framework Cocoa -framework Security -framework ApplicationServices,\
		LDFLAGS_SUFFIX_solaris:=$(LIBZ) $(LIBDL) -lc,\
		LDFLAGS_SUFFIX_linux:=$(LIBZ) $(LIBDL) -lc -lpthread,\
		LDFLAGS_SUFFIX_macosx:=$(LIBZ),\
		LDFLAGS_SUFFIX_windows:=\
			-export:JLI_Launch \
			-export:JLI_ManifestIterate \
			-export:JLI_SetTraceLauncher \
			-export:JLI_ReportErrorMessage \
			-export:JLI_ReportErrorMessageSys \
			-export:JLI_ReportMessage \
			-export:JLI_ReportExceptionDescription \
			-export:JLI_MemAlloc \
			-export:JLI_CmdToArgs \
			-export:JLI_GetStdArgc \
			-export:JLI_GetStdArgs \
			advapi32.lib \
			comctl32.lib \
			user32.lib,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS) \
			  -D "JDK_FNAME=jli.dll" \
			  -D "JDK_INTERNAL_NAME=jli" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

BUILD_LIBRARIES += $(BUILD_LIBJLI)

# On windows, the static library has the same suffix as the import library created by
# with the shared library, so the static library is given a different name. No harm
# in doing it for all platform to reduce complexity.
ifeq ($(OPENJDK_TARGET_OS), windows)
    $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC,\
		STATIC_LIBRARY:=jli_static,\
                OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs,\
		SRC:=$(BUILD_LIBJLI_SRC_DIRS),\
		INCLUDE_FILES:=$(BUILD_LIBJLI_FILES),\
		LANG:=C,\
		OPTIMIZATION:=HIGH, \
		CFLAGS:=$(STATIC_LIBRARY_FLAGS) $(LIBJLI_CFLAGS),\
		ARFLAGS:=$(ARFLAGS),\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli_static))

BUILD_LIBRARIES += $(BUILD_LIBJLI_STATIC)

else ifeq ($(OPENJDK_TARGET_OS),macosx)
    #
    # On macosx they do partial (incremental) linking of libjli_static.a
    #   code it here...rather than add support to NativeCompilation
    #   as this is first time I see it
    $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC,\
		LIBRARY:=jli_static, \
                OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs,\
		SRC:=$(BUILD_LIBJLI_SRC_DIRS),\
		INCLUDE_FILES:=$(BUILD_LIBJLI_FILES),\
		LANG:=C,\
		OPTIMIZATION:=HIGH, \
		CFLAGS:=$(CFLAGS_JDKLIB) $(LIBJLI_CFLAGS),\
		LDFLAGS:=-nostdlib -r,\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli_static))

$(JDK_OUTPUTDIR)/objs/libjli_static.a : $(BUILD_LIBJLI_STATIC)
	$(CP) -a $< $@

BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/libjli_static.a
endif

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

ifndef OPENJDK
ifeq ($(ENABLE_JFR), true)

$(eval $(call SetupNativeCompilation,BUILD_LIBJFR,\
		LIBRARY:=jfr,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(JDK_TOPDIR)/src/closed/share/native/oracle/jfr,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
                        -I$(JDK_TOPDIR)/src/closed/share/javavm/export, \
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjfr/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX_solaris:=-lc,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=jfr.dll" \
			  -D "JDK_INTERNAL_NAME=jfr" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjfr,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

BUILD_LIBRARIES += $(BUILD_LIBJFR)

endif
endif

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

ifndef OPENJDK

BUILD_LIBKCMS_EXCLUDE_FILES:=
ifeq ($(OPENJDK_TARGET_OS),windows)
	BUILD_LIBKCMS_EXCLUDE_FILES += ukcpmgr.c unixmem.c
else
	BUILD_LIBKCMS_EXCLUDE_FILES += cmmdll.c registry.c spxffile.c sysinfo.c winmem.c wkcpmgr.c
endif

BUILD_LIBKCMS_FLAGS:=$(CFLAGS_JDKLIB)

ifeq ($(OPENJDK_TARGET_OS),solaris)
     # This particular library uses a feature called PIC_CODE_SMALL (on solaris)
     #   implement it like this...since it's only used here
     BUILD_LIBKCMS_FLAGS:=$(patsubst -KPIC,-Kpic,$(BUILD_LIBKCMS_FLAGS))
else ifeq ($(OPENJDK_TARGET_CPU_ARCH), ppc)
     BUILD_LIBKCMS_FLAGS:=$(patsubst -fPIC,-fpic,$(BUILD_LIBKCMS_FLAGS))
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBKCMS,\
		LIBRARY:=kcms,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(JDK_TOPDIR)/src/closed/share/native/sun/java2d/cmm/kcms,\
		LANG:=C,\
		EXCLUDE_FILES:=$(BUILD_LIBKCMS_EXCLUDE_FILES),\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(BUILD_LIBKCMS_FLAGS) \
                        -DJAVACMM -DFUT_CALC_EX -DNO_FUT_GCONST,\
		CFLAGS_linux:=-Wno-missing-field-initializers,\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libkcms/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX_linux:=-lc -lpthread,\
		LDFLAGS_SUFFIX_solaris:=-lc,\
		LDFLAGS_SUFFIX_windows:=$(WIN_JAVA_LIB) advapi32.lib user32.lib version.lib, \
		LDFLAGS_SUFFIX_posix:=-lm -ljava -ljvm,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/closed/share/native/sun/java2d/cmm/kcms/cmm.rc,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/closed/share/native/sun/java2d/cmm/kcms/cmm.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=kcms.dll" \
			  -D "JDK_INTERNAL_NAME=kcms" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libkcms,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

$(BUILD_LIBKCMS) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBKCMS)

endif

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

ifndef OPENJDK
ifeq ($(OPENJDK_TARGET_OS), solaris)
ifneq ($(OPENJDK_TARGET_CPU), x86_64)

ifeq ($(shell if test "$(OS_VERSION_MAJOR)" -eq 5 -a "$(OS_VERSION_MINOR)" -le 10; then $(ECHO) ok; fi), ok)

SUNWJDGA_MAPFILE:=
ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
	SUNWJDGA_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjdga/mapfile-vers
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBSUNWJDGA, \
		LIBRARY:=sunwjdga,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(JDK_TOPDIR)/src/solaris/native/sun/jdga, \
		LANG:=C, \
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
			-I$(JDK_TOPDIR)/src/share/javavm/export \
			-I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/javavm/export \
			-I$(OPENWIN_HOME)/include, \
		MAPFILE:=$(SUNWJDGA_MAPFILE), \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN), \
		LDFLAGS_SUFFIX:=-L$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR) -R$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR) -ldga -lX11 $(LIBDL) -lc, \
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsunwjdga))

BUILD_LIBRARIES += $(BUILD_LIBSUNWJDGA)

endif
endif
endif
endif

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

ifeq ($(BUILD_HEADLESS), true)
ifneq ($(OPENJDK_TARGET_OS), windows)

LIBAWT_HEADLESS_DIRS:=$(JDK_TOPDIR)/src/share/native/sun/font \
                        $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \
			$(JDK_TOPDIR)/src/solaris/native/sun/font \
			$(JDK_TOPDIR)/src/solaris/native/sun/awt \
			$(JDK_TOPDIR)/src/solaris/native/sun/java2d/opengl \
			$(JDK_TOPDIR)/src/solaris/native/sun/java2d/x11

LIBAWT_HEADLESS_CFLAGS:=-DHEADLESS=true \
                          -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" \
			  $(CUPS_CFLAGS) \
			  $(X_CFLAGS) \
			  -I$(JDK_TOPDIR)/src/share/native/sun/java2d \
			  -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/java2d \
			  -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \
			  -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \
			  -I$(JDK_TOPDIR)/src/share/native/sun/awt/image \
			  -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \
			  -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \
			  -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/jdga \
                          $(foreach dir,$(LIBAWT_HEADLESS_DIRS),-I$(dir))

LIBAWT_HEADLESS_FILES:=\
	awt_Font.c \
	HeadlessToolkit.c \
	fontpath.c \
	VDrawingArea.c \
	X11Color.c \
	X11Renderer.c \
	X11PMBlitLoops.c \
	X11SurfaceData.c \
	X11FontScaler_md.c \
	X11TextRenderer_md.c \
        OGLBlitLoops.c \
        OGLBufImgOps.c \
        OGLContext.c \
        OGLFuncs.c \
        OGLMaskBlit.c \
        OGLMaskFill.c \
        OGLPaints.c \
        OGLRenderQueue.c \
        OGLRenderer.c \
        OGLSurfaceData.c \
        OGLTextRenderer.c \
        OGLVertexCache.c \
        GLXGraphicsConfig.c \
        GLXSurfaceData.c \
        AccelGlyphCache.c \
	CUPSfuncs.c

LIBAWT_HEADLESS_REORDER:=
ifeq ($(OPENJDK_TARGET_OS), solaris)
	ifneq ($(OPENJDK_TARGET_CPU), x86_64)
		LIBAWT_HEADLESS_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libawt_headless/reorder-$(OPENJDK_TARGET_CPU)
	endif
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_HEADLESS,\
		LIBRARY:=awt_headless,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(LIBAWT_HEADLESS_DIRS),\
		INCLUDE_FILES:=$(LIBAWT_HEADLESS_FILES),\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) $(LIBAWT_HEADLESS_CFLAGS),\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libawt_headless/mapfile-vers,\
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_linux:=$(call SET_SHARED_LIBRARY_ORIGIN,/..),\
		LDFLAGS_solaris:=$(call SET_SHARED_LIBRARY_ORIGIN,/..) \
				 -R/usr/dt/lib$(OPENJDK_TARGET_CPU_ISADIR) \
				 -R$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR),\
		LDFLAGS_macosx:=$(call SET_SHARED_LIBRARY_ORIGIN).,\
		REORDER:=$(LIBAWT_HEADLESS_REORDER), \
		LDFLAGS_SUFFIX_linux:=-ljvm -lawt -lm $(LIBDL) -ljava,\
		LDFLAGS_SUFFIX_solaris:=$(LIBDL) -ljvm -lawt -lm -ljava $(LIBCXX) -lc,\
		LDFLAGS_SUFFIX_macosx:=-ljvm $(LIBCXX) -lawt $(LIBDL) -ljava,\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_headless))

$(BUILD_LIBAWT_HEADLESS) : $(BUILD_LIBAWT)

BUILD_LIBRARIES += $(BUILD_LIBAWT_HEADLESS)

endif
endif

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

ifndef BUILD_HEADLESS_ONLY
LIBSPLASHSCREEN_DIRS:=\
	$(JDK_TOPDIR)/src/share/native/sun/awt/giflib \
	$(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg \
	$(JDK_TOPDIR)/src/share/native/sun/awt/libpng \
	$(JDK_TOPDIR)/src/share/native/sun/awt/splashscreen

ifneq ($(OPENJDK_TARGET_OS), macosx)
    LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/awt/splashscreen
else
    LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/macosx/native/sun/awt/splashscreen
endif


LIBSPLASHSCREEN_CFLAGS:=-DSPLASHSCREEN -DPNG_NO_MMX_CODE \
	$(foreach dir,$(LIBSPLASHSCREEN_DIRS),-I$(dir))

ifeq ($(OPENJDK_TARGET_OS), macosx)
	LIBSPLASHSCREEN_CFLAGS:=-I$(JDK_TOPDIR)/src/macosx/native/sun/awt/splashscreen \
                                  $(LIBSPLASHSCREEN_CFLAGS) \
                                  -F/System/Library/Frameworks/JavaVM.framework/Frameworks
	LIBSPLASHSCREEN_CFLAGS += -DWITH_MACOSX
	LIBSPLASHSCREEN_CFLAGS += -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp

	LIBSPLASHSCREEN_java_awt_SplashScreen.c_CFLAGS:=-x objective-c -O0
	LIBSPLASHSCREEN_splashscreen_gfx_impl.c_CFLAGS:=-x objective-c -O0
	LIBSPLASHSCREEN_splashscreen_gif.c_CFLAGS:=-x objective-c -O0
	LIBSPLASHSCREEN_splashscreen_impl.c_CFLAGS:=-x objective-c -O0
	LIBSPLASHSCREEN_splashscreen_jpeg.c_CFLAGS:=-x objective-c -O0
	LIBSPLASHSCREEN_splashscreen_png.c_CFLAGS:=-x objective-c -O0
	LIBSPLASHSCREEN_splashscreen_sys.m_CFLAGS:=-O0

else ifneq ($(OPENJDK_TARGET_OS), windows)
	LIBSPLASHSCREEN_CFLAGS += -DWITH_X11 -I$(OPENWIN_HOME)/include -I$(OPENWIN_HOME)/include/X11/extensions
else
	LIBSPLASHSCREEN_CFLAGS += -DWITH_WIN32
endif

LIBSPLASHSCREEN_LDFLAGS_SUFFIX:=

ifneq ($(USE_EXTERNAL_LIBZ),true)
	LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5
	LIBSPLASHSCREEN_CFLAGS += $(ZLIB_CPPFLAGS)
endif

ifeq ($(OPENJDK_TARGET_OS), macosx)
	LIBSPLASHSCREEN_LDFLAGS_SUFFIX += $(LIBM) -lpthread -liconv -losxapp \
				  -framework ApplicationServices \
				  -framework Foundation \
				  -framework Cocoa \
                                  -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
				  -framework JavaNativeFoundation
else ifneq ($(OPENJDK_TARGET_OS), windows)
	LIBSPLASHSCREEN_LDFLAGS_SUFFIX += -L$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR) -lX11 -lXext $(LIBM) -lpthread
else # OPENJDK_TARGET_OS
	LIBSPLASHSCREEN_LDFLAGS_SUFFIX += kernel32.lib user32.lib gdi32.lib delayimp.lib -DELAYLOAD:user32.dll
endif # OPENJDK_TARGET_OS

$(eval $(call SetupNativeCompilation,LIBSPLASHSCREEN,\
		LIBRARY:=splashscreen,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(LIBSPLASHSCREEN_DIRS),\
		EXCLUDE_FILES:=imageioJPEG.c jpegdecoder.c pngtest.c,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(LIBSPLASHSCREEN_CFLAGS) $(CFLAGS_JDKLIB),\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libsplashscreen/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX:=$(LIBSPLASHSCREEN_LDFLAGS_SUFFIX) $(LIBZ),\
		LDFLAGS_SUFFIX_solaris:=-lc,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=splashscreen.dll" \
			  -D "JDK_INTERNAL_NAME=splashscreen" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsplashscreen,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

BUILD_LIBRARIES += $(LIBSPLASHSCREEN)

ifeq ($(OPENJDK_TARGET_OS),macosx)
$(LIBSPLASHSCREEN) :  $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osxapp$(SHARED_LIBRARY_SUFFIX) 
endif

endif

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

ifndef OPENJDK

LIBDCPR_SRC_DIRS:=\
	$(JDK_TOPDIR)/src/closed/share/native/sun/dc/doe \
	$(JDK_TOPDIR)/src/closed/share/native/sun/dc/path \
	$(JDK_TOPDIR)/src/closed/share/native/sun/dc/pr \
	$(JDK_TOPDIR)/src/closed/share/native/sun/dc/util

LIBDCPR_CFLAGS:=$(foreach dir,$(LIBDCPR_SRC_DIRS),-I$(dir)) \
	          -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe

$(eval $(call SetupNativeCompilation,BUILD_LIBDCPR,\
		LIBRARY:=dcpr,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(LIBDCPR_SRC_DIRS),\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
			$(LIBDCPR_CFLAGS), \
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libdcpr/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX:=$(LIBM) $(LDFLAGS_JDKLIB_SUFFIX),\
		LDFLAGS_SUFFIX_posix:=-lm,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=dcpr.dll" \
			  -D "JDK_INTERNAL_NAME=dcpr" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libdcpr,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

$(BUILD_LIBDCPR) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBDCPR)

endif

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

$(eval $(call SetupNativeCompilation,BUILD_LIBJ2PCSC,\
		LIBRARY:=j2pcsc,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/smartcardio \
                     $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/smartcardio,\
		LANG:=C,\
		CFLAGS_posix:=-D__sun_jdk,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
                     -I$(JDK_TOPDIR)/src/share/native/sun/security/smartcardio \
                     -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/smartcardio\
                     -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/smartcardio/MUSCLE,\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libj2pcsc/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX_posix:=$(LIBDL), \
		LDFLAGS_SUFFIX_windows:=winscard.lib,\
		LDFLAGS_SUFFIX_solaris:=-lc,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=j2pcsc.dll" \
			  -D "JDK_INTERNAL_NAME=j2pcsc" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2pcsc,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

BUILD_LIBRARIES += $(BUILD_LIBJ2PCSC)

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

ifneq ($(OPENJDK_TARGET_OS), windows)
ifneq ($(OPENJDK_TARGET_OS), macosx)
$(eval $(call SetupNativeCompilation,BUILD_LIBJ2GSS,\
		LIBRARY:=j2gss,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/jgss/wrapper \
                     $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/jgss/wrapper,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
                     -I$(JDK_TOPDIR)/src/share/native/sun/security/jgss/wrapper \
                     -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/jgss/wrapper,\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libj2gss/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX:=$(LIBDL),\
		LDFLAGS_SUFFIX_solaris:=-lc,\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2gss))

BUILD_LIBRARIES += $(BUILD_LIBJ2GSS)
endif
endif

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

BUILD_LIBKRB5_NAME:=
ifeq ($(OPENJDK_TARGET_OS), windows)
     BUILD_LIBKRB5_NAME:=w2k_lsa_auth
     BUILD_LIBKRB5_SRC:=$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/krb5
     BUILD_LIBKRB5_LIBS:=advapi32.lib Secur32.lib netapi32.lib kernel32.lib user32.lib \
			 gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib \
			 ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib
else ifeq ($(OPENJDK_TARGET_OS), macosx)
     BUILD_LIBKRB5_NAME:=osxkrb5
     BUILD_LIBKRB5_SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/krb5
     BUILD_LIBKRB5_LIBS:=-framework Kerberos
endif

ifneq ($(BUILD_LIBKRB5_NAME),)
$(eval $(call SetupNativeCompilation,BUILD_LIBKRB5,\
		LIBRARY:=$(BUILD_LIBKRB5_NAME),\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(BUILD_LIBKRB5_SRC),\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
		        -I$(JDK_TOPDIR)/src/share/native/sun/security/krb5 \
                        -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/krb5 ,\
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX:=$(BUILD_LIBKRB5_LIBS) ,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=$(BUILD_LIBKRB5_NAME).dll" \
			  -D "JDK_INTERNAL_NAME=$(BUILD_LIBKRB5_NAME)" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libkrb5,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

BUILD_LIBRARIES += $(BUILD_LIBKRB5)
endif

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

ifeq ($(OPENJDK_TARGET_OS), windows)

$(eval $(call SetupNativeCompilation,BUILD_LIBSUNMSCAPI,\
		LIBRARY:=sunmscapi,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/mscapi,\
		LANG:=C++,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
                        -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/mscapi ,\
		LDFLAGS:=$(LDFLAGS_JDKLIB) $(LDFLAGS_CXX_JDK) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX:=Crypt32.Lib advapi32.lib,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=sunmscapi.dll" \
			  -D "JDK_INTERNAL_NAME=sunmscapi" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsunmscapi,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

BUILD_LIBRARIES += $(BUILD_LIBSUNMSCAPI)
endif

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

$(eval $(call SetupNativeCompilation,BUILD_LIBJ2PKCS11,\
		LIBRARY:=j2pkcs11,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/pkcs11 \
                     $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/pkcs11 \
                     $(JDK_TOPDIR)/src/share/native/sun/security/pkcs11/wrapper \
                     $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/pkcs11/wrapper,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
		        -I$(JDK_TOPDIR)/src/share/native/sun/security/pkcs11 \
		        -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/pkcs11 \
		        -I$(JDK_TOPDIR)/src/share/native/sun/security/pkcs11/wrapper \
                        -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/pkcs11/wrapper,\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libj2pkcs11/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX_posix:=$(LIBDL),\
		LDFLAGS_SUFFIX_solaris:=-lc,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=j2pkcs11.dll" \
			  -D "JDK_INTERNAL_NAME=j2pkcs11" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2pkcs11,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

BUILD_LIBRARIES += $(BUILD_LIBJ2PKCS11)

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

ifeq ($(ENABLE_INTREE_EC),yes)

BUILD_LIBSUNEC_FLAGS:= -I$(JDK_TOPDIR)/src/share/native/sun/security/ec \
                       -I$(JDK_TOPDIR)/src/share/native/sun/security/ec/impl

#
# On sol-sparc...all libraries are compiled with -xregs=no%appl
#   (set in CFLAGS_REQUIRED_sparc)
#
# except!!! libsunec.so
#
ECC_JNI_SOLSPARC_FILTER:=
ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
     ECC_JNI_SOLSPARC_FILTER:=-xregs=no%appl
endif

$(eval $(call SetupNativeCompilation,BUILD_LIBSUNEC,\
		LIBRARY:=sunec,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/ec \
                     $(JDK_TOPDIR)/src/share/native/sun/security/ec/impl, \
		LANG:=C++, \
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(filter-out $(ECC_JNI_SOLSPARC_FILTER), $(CFLAGS_JDKLIB))\
                        $(BUILD_LIBSUNEC_FLAGS) \
                        -DMP_API_COMPATIBLE -DNSS_ECC_MORE_THAN_SUITE_B,\
		CXXFLAGS:=$(filter-out $(ECC_JNI_SOLSPARC_FILTER), $(CXXFLAGS_JDKLIB)) \
                          $(BUILD_LIBSUNEC_FLAGS),\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libsunec/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB) $(LDFLAGS_CXX_JDK),\
		LDFLAGS_macosx:=$(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX:=$(LIBCXX),\
                LDFLAGS_SUFFIX_linux:=-lc ,\
                LDFLAGS_SUFFIX_solaris:=-lc ,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=sunec.dll" \
			  -D "JDK_INTERNAL_NAME=sunec" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsunec,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

BUILD_LIBRARIES += $(BUILD_LIBSUNEC)
endif

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

LIBJSOUND_SRC_DIRS:=\
	$(JDK_TOPDIR)/src/share/native/com/sun/media/sound \
	$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/com/sun/media/sound

LIBJSOUND_SRC_FILES:=Utilities.c Platform.c

LIBJSOUND_LANG:=C
LIBJSOUND_CFLAGS:=$(foreach dir,$(LIBJSOUND_SRC_DIRS),-I$(dir))

EXTRA_SOUND_JNI_LIBS:=

LIBJSOUND_MIDIFILES:=\
	MidiInDevice.c \
	MidiInDeviceProvider.c \
	MidiOutDevice.c \
	MidiOutDeviceProvider.c \
	PlatformMidi.c

# files needed for ports
LIBJSOUND_PORTFILES:=\
	PortMixerProvider.c \
	PortMixer.c

# files needed for direct audio
LIBJSOUND_DAUDIOFILES:=\
	DirectAudioDeviceProvider.c \
	DirectAudioDevice.c

ifeq ($(OPENJDK_TARGET_OS), windows)
	EXTRA_SOUND_JNI_LIBS += jsoundds
	LIBJSOUND_CFLAGS += -DX_PLATFORM=X_WINDOWS \
                            -DUSE_PLATFORM_MIDI_OUT=TRUE \
                            -DUSE_PLATFORM_MIDI_IN=TRUE \
                            -DUSE_PORTS=TRUE
	LIBJSOUND_SRC_FILES += \
		PLATFORM_API_WinOS_MidiIn.cpp \
		PLATFORM_API_WinOS_MidiOut.c \
		PLATFORM_API_WinOS_Util.c \
		PLATFORM_API_WinOS_Ports.c
	LIBJSOUND_SRC_FILES += $(LIBJSOUND_MIDIFILES)
	LIBJSOUND_SRC_FILES += $(LIBJSOUND_PORTFILES)
endif # OPENJDK_TARGET_OS windows

ifeq ($(OPENJDK_TARGET_OS), linux)
	EXTRA_SOUND_JNI_LIBS += jsoundalsa
	LIBJSOUND_CFLAGS += -DX_PLATFORM=X_LINUX
endif # OPENJDK_TARGET_OS linux

ifeq ($(OPENJDK_TARGET_OS), macosx)
	LIBJSOUND_LANG:=C++
	LIBJSOUND_CFLAGS += -DX_PLATFORM=X_MACOSX \
                            -DUSE_PORTS=TRUE \
                            -DUSE_DAUDIO=TRUE \
                            -DUSE_PLATFORM_MIDI_OUT=TRUE \
                            -DUSE_PLATFORM_MIDI_IN=TRUE
	LIBJSOUND_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/native/com/sun/media/sound
	LIBJSOUND_SRC_FILES += \
		PLATFORM_API_MacOSX_Utils.cpp \
		PLATFORM_API_MacOSX_PCM.cpp \
		PLATFORM_API_MacOSX_Ports.cpp \
                PLATFORM_API_MacOSX_MidiIn.c \
                PLATFORM_API_MacOSX_MidiOut.c \
                PLATFORM_API_MacOSX_MidiUtils.c
	LIBJSOUND_SRC_FILES += $(LIBJSOUND_MIDIFILES)
	LIBJSOUND_SRC_FILES += $(LIBJSOUND_PORTFILES)
	LIBJSOUND_SRC_FILES += $(LIBJSOUND_DAUDIOFILES)
endif # OPENJDK_TARGET_OS macosx

ifeq ($(OPENJDK_TARGET_OS), solaris)
	LIBJSOUND_CFLAGS += -DX_PLATFORM=X_SOLARIS \
                            -DUSE_PORTS=TRUE \
                            -DUSE_DAUDIO=TRUE
	LIBJSOUND_SRC_FILES += \
		PLATFORM_API_SolarisOS_Utils.c \
		PLATFORM_API_SolarisOS_Ports.c \
		PLATFORM_API_SolarisOS_PCM.c
	LIBJSOUND_SRC_FILES += $(LIBJSOUND_MIDIFILES)
	LIBJSOUND_SRC_FILES += $(LIBJSOUND_PORTFILES)
	LIBJSOUND_SRC_FILES += $(LIBJSOUND_DAUDIOFILES)
endif # OPENJDK_TARGET_OS solaris


ifeq ($(JVM_VARIANT_ZERO), true)
	LIBJSOUND_CFLAGS += -DX_ARCH=X_ZERO
else
  ifeq ($(OPENJDK_TARGET_CPU), x86)
	LIBJSOUND_CFLAGS += -DX_ARCH=X_I586
  endif

  ifeq ($(OPENJDK_TARGET_CPU), sparc)
	LIBJSOUND_CFLAGS += -DX_ARCH=X_SPARC
  endif

  ifeq ($(OPENJDK_TARGET_CPU), sparcv9)
	LIBJSOUND_CFLAGS += -DX_ARCH=X_SPARCV9
  endif

  ifeq ($(OPENJDK_TARGET_CPU), x86_64)
	LIBJSOUND_CFLAGS += -DX_ARCH=X_AMD64
  endif

  ifeq ($(OPENJDK_TARGET_CPU), arm)
	LIBJSOUND_CFLAGS += -DX_ARCH=X_ARM
  endif

  ifeq ($(OPENJDK_TARGET_CPU), ppc)
	LIBJSOUND_CFLAGS += -DX_ARCH=X_PPC
  endif
endif

LIBJSOUND_CFLAGS += -DEXTRA_SOUND_JNI_LIBS='"$(EXTRA_SOUND_JNI_LIBS)"'

$(eval $(call SetupNativeCompilation,BUILD_LIBJSOUND,\
		LIBRARY:=jsound,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(LIBJSOUND_SRC_DIRS),\
		INCLUDE_FILES:=$(LIBJSOUND_SRC_FILES),\
		LANG:=$(LIBJSOUND_LANG),\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
		        $(LIBJSOUND_CFLAGS), \
		CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(LIBJSOUND_CFLAGS), \
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjsound/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB)\
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_macosx:=-framework CoreAudio -framework CoreFoundation \
				-framework CoreServices -framework AudioUnit $(LIBCXX) \
				-framework CoreMIDI -framework AudioToolbox,\
		LDFLAGS_windows:=$(WIN_JAVA_LIB) advapi32.lib winmm.lib,\
		LDFLAGS_SUFFIX_posix:=-ljava -ljvm,\
		LDFLAGS_SUFFIX_solaris:=-lc ,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=jsound.dll" \
			  -D "JDK_INTERNAL_NAME=jsound" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsound,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

$(BUILD_LIBJSOUND) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBJSOUND)

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

ifneq ($(filter jsoundalsa, $(EXTRA_SOUND_JNI_LIBS)),)

$(eval $(call SetupNativeCompilation,BUILD_LIBJSOUNDALSA,\
		LIBRARY:=jsoundalsa,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(LIBJSOUND_SRC_DIRS),\
		INCLUDE_FILES:=Utilities.c $(LIBJSOUND_MIDIFILES) $(LIBJSOUND_PORTFILES) \
                                $(LIBJSOUND_DAUDIOFILES) \
				PLATFORM_API_LinuxOS_ALSA_CommonUtils.c   \
				PLATFORM_API_LinuxOS_ALSA_PCM.c     \
				PLATFORM_API_LinuxOS_ALSA_PCMUtils.c   \
				PLATFORM_API_LinuxOS_ALSA_MidiIn.c  \
				PLATFORM_API_LinuxOS_ALSA_MidiOut.c \
				PLATFORM_API_LinuxOS_ALSA_MidiUtils.c \
				PLATFORM_API_LinuxOS_ALSA_Ports.c,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
			$(LIBJSOUND_CFLAGS) \
			-DUSE_DAUDIO=TRUE \
			-DUSE_PORTS=TRUE  \
			-DUSE_PLATFORM_MIDI_OUT=TRUE \
			-DUSE_PLATFORM_MIDI_IN=TRUE, \
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjsoundalsa/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB)\
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX:=-lasound -ljava -ljvm,\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsoundalsa))

$(BUILD_LIBJSOUNDALSA) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBJSOUNDALSA)

endif

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

ifneq ($(filter jsoundds, $(EXTRA_SOUND_JNI_LIBS)),)

$(eval $(call SetupNativeCompilation,BUILD_LIBJSOUNDDS,\
		LIBRARY:=jsoundds,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(LIBJSOUND_SRC_DIRS),\
		INCLUDE_FILES:=Utilities.c $(LIBJSOUND_DAUDIOFILES) \
				PLATFORM_API_WinOS_DirectSound.cpp, \
		LANG:=C++,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
			$(LIBJSOUND_CFLAGS) \
			-DUSE_DAUDIO=TRUE \
                        -I$(DXSDK_INCLUDE_PATH), \
		LDFLAGS:=$(LDFLAGS_JDKLIB) $(LDFLAGS_CXX_JDK) \
			 $(call SET_SHARED_LIBRARY_ORIGIN),\
		LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) dsound.lib winmm.lib user32.lib ole32.lib,\
		VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
		RC_FLAGS:=$(RC_FLAGS)\
			  -D "JDK_FNAME=jsoundds.dll" \
			  -D "JDK_INTERNAL_NAME=jsoundds" \
			  -D "JDK_FTYPE=0x2L",\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsoundds,\
		DEBUG_SYMBOLS:=$(WINDOWS_ONLY)))

$(BUILD_LIBJSOUNDDS) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBJSOUNDDS)

endif

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

ifeq ($(OPENJDK_TARGET_OS), solaris)
ifndef OPENJDK

$(eval $(call SetupNativeCompilation,BUILD_LIBJ2UCRYPTO,\
		LIBRARY:=j2ucrypto,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(JDK_TOPDIR)/src/closed/solaris/native/com/oracle/security/ucrypto,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
			-I$(JDK_TOPDIR)/src/closed/solaris/native/com/oracle/security/ucrypto ,\
		MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libj2ucrypto/mapfile-vers, \
		LDFLAGS:=$(LDFLAGS_JDKLIB),\
		LDFLAGS_SUFFIX:=$(LIBDL),\
		LDFLAGS_SUFFIX_solaris:=-lc,\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2ucrypto))

$(BUILD_LIBJ2UCRYPTO) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBJ2UCRYPTO)

endif
endif

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

ifeq ($(OPENJDK_TARGET_OS), macosx)

$(eval $(call SetupNativeCompilation,BUILD_LIBAPPLESCRIPTENGINE,\
		LIBRARY:=AppleScriptEngine,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(JDK_TOPDIR)/src/macosx/native/apple/applescript,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
			-I$(JDK_TOPDIR)/src/macosx/native/apple/applescript \
			-F/System/Library/Frameworks/JavaVM.framework/Frameworks \
                        -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks, \
		LDFLAGS:=$(LDFLAGS_JDKLIB)\
			 $(call SET_SHARED_LIBRARY_ORIGIN), \
		LDFLAGS_SUFFIX:=-framework Cocoa \
                                -framework Carbon \
                                -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
                                -framework JavaNativeFoundation \
                                $(LDFLAGS_JDKLIB_SUFFIX),\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libAppleScriptEngine))

$(BUILD_LIBAPPLESCRIPTENGINE) : $(BUILD_LIBJAVA)

BUILD_LIBRARIES += $(BUILD_LIBAPPLESCRIPTENGINE)

endif

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

ifeq ($(OPENJDK_TARGET_OS), macosx)

$(eval $(call SetupNativeCompilation,BUILD_LIBOSXAPP,\
		LIBRARY:=osxapp,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(JDK_TOPDIR)/src/macosx/native/sun/osxapp,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
			-I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \
			-I$(JDK_OUTPUTDIR)/gensrc/sun/osxapp \
                        -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
                        -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks,\
		LDFLAGS:=$(LDFLAGS_JDKLIB)\
			 $(call SET_SHARED_LIBRARY_ORIGIN), \
		LDFLAGS_SUFFIX_macosx:=\
	-framework Accelerate \
	-framework ApplicationServices \
	-framework AudioToolbox \
	-framework Carbon \
	-framework Cocoa \
	-framework Security \
	-framework ExceptionHandling \
        -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
	-framework JavaNativeFoundation \
	-framework JavaRuntimeSupport \
	-framework OpenGL \
	-framework IOSurface \
	-framework QuartzCore, \
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosxapp))

BUILD_LIBRARIES += $(BUILD_LIBOSXAPP)

endif

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

ifeq ($(OPENJDK_TARGET_OS), macosx)

LIBOSX_DIRS:=\
  $(JDK_TOPDIR)/src/macosx/native/com/apple/concurrent \
  $(JDK_TOPDIR)/src/macosx/native/java/util \
  $(JDK_TOPDIR)/src/macosx/native/com/apple/eio \
  $(JDK_TOPDIR)/src/macosx/native/apple/security \
  $(JDK_TOPDIR)/src/macosx/native/apple/launcher

$(eval $(call SetupNativeCompilation,BUILD_LIBOSX,\
		LIBRARY:=osx,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(LIBOSX_DIRS),\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
                        $(foreach dir,$(LIBOSX_DIRS),-I$(dir)) \
                        -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \
                        -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
                        -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks,\
		LDFLAGS:=$(LDFLAGS_JDKLIB)\
			 $(call SET_SHARED_LIBRARY_ORIGIN), \
		LDFLAGS_SUFFIX_macosx:=\
    -losxapp \
    -framework Cocoa \
    -framework ApplicationServices \
    -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
    -framework JavaNativeFoundation \
    -framework JavaRuntimeSupport \
    -framework Security \
    -framework SystemConfiguration \
    $(LDFLAGS_JDKLIB_SUFFIX), \
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosx))

BUILD_LIBRARIES += $(BUILD_LIBOSX)

$(BUILD_LIBOSX) : $(BUILD_LIBOSXAPP)

$(BUILD_LIBOSX) : $(BUILD_LIBJAVA)

endif

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

ifeq ($(OPENJDK_TARGET_OS), macosx)

LIBAWT_LWAWT_FILES:=\
        awt.m \
        ApplicationDelegate.m \
        CFRetainedResource.m \
        CGLGraphicsConfig.m \
        CGLSurfaceData.m \
        CGLLayer.m \
        CGraphicsConfig.m \
        CGraphicsDevice.m \
        CGraphicsEnv.m \
        CCharToGlyphMapper.m \
        CSystemColors.m \
        AWTFont.m \
        CGGlyphOutlines.m \
        CGGlyphImages.m \
        CoreTextSupport.m \
        AWTStrike.m \
        InitIDs.m \
        AWTEvent.m \
        AWTView.m \
        AWTWindow.m \
        AWTSurfaceLayers.m \
        CCursorManager.m \
        CClipboard.m \
        CDataTransferer.m \
        CDragSource.m \
        CDragSourceContextPeer.m \
        CDropTarget.m \
        CDropTargetContextPeer.m \
        CInputMethod.m \
        CDesktopPeer.m \
        OSVersion.m \
        DnDUtilities.m \
        CFileDialog.m \
        CImage.m \
        CMenu.m \
        CMenuBar.m \
        CMenuComponent.m \
        CMenuItem.m \
        CPopupMenu.m \
        CRobot.m \
        CTrayIcon.m \
        CWrapper.m \
        JavaAccessibilityAction.m \
        JavaAccessibilityUtilities.m \
        JavaComponentAccessibility.m \
        JavaTextAccessibility.m \
        LWCToolkit.m \
        GeomUtilities.m \
        CPrinterJob.m \
        PrintModel.m \
        PrinterSurfaceData.m \
        PrinterView.m \
        QuartzSurfaceData.m \
        QuartzRenderer.m \
        CTextPipe.m \
        ImageSurfaceData.m \
        awt_DrawingSurface.m \
        \
        OGLBlitLoops.c \
        OGLBufImgOps.c \
        OGLContext.c \
        OGLFuncs.c \
        OGLMaskBlit.c \
        OGLMaskFill.c \
        OGLPaints.c \
        OGLRenderQueue.c \
        OGLRenderer.c \
        OGLSurfaceData.c \
        OGLTextRenderer.c \
        OGLVertexCache.c \
        AccelGlyphCache.c \
        CUPSfuncs.c


LIBAWT_LWAWT_DIRS:=\
  $(JDK_TOPDIR)/src/macosx/native/sun/awt \
  $(JDK_TOPDIR)/src/macosx/native/sun/font \
  $(JDK_TOPDIR)/src/macosx/native/sun/java2d/opengl \
  $(JDK_TOPDIR)/src/solaris/native/sun/awt \
  $(JDK_TOPDIR)/src/share/native/sun/font \
  $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \

$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_LWAWT,\
		LIBRARY:=awt_lwawt,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(LIBAWT_LWAWT_DIRS),\
		LANG:=C,\
		INCLUDE_FILES:=$(LIBAWT_LWAWT_FILES),\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
                        $(X_CFLAGS) \
                        $(X_LIBS) \
                        $(foreach dir,$(LIBAWT_LWAWT_DIRS),-I$(dir)) \
                        -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \
                        -I$(JDK_TOPDIR)/src/share/native/sun/java2d \
                        -I$(JDK_TOPDIR)/src/solaris/native/sun/java2d \
                        -I$(JDK_TOPDIR)/src/share/native/sun/awt/image \
                        -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \
                        -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \
                        -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \
                        -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \
                        -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
                        -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks,\
		LDFLAGS:=$(LDFLAGS_JDKLIB)\
			 $(call SET_SHARED_LIBRARY_ORIGIN), \
		LDFLAGS_SUFFIX_macosx:=-lawt -lmlib_image -losxapp -ljvm $(LIBM) \
				       -framework Accelerate \
				       -framework ApplicationServices \
				       -framework AudioToolbox \
				       -framework Carbon \
				       -framework Cocoa \
				       -framework Security \
				       -framework ExceptionHandling \
				       -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
				       -framework JavaNativeFoundation \
				       -framework JavaRuntimeSupport \
				       -framework OpenGL \
				       -framework QuartzCore -ljava,\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_lwawt))

BUILD_LIBRARIES += $(BUILD_LIBAWT_LWAWT)

$(BUILD_LIBAWT_LWAWT) : $(BUILD_LIBAWT) 

$(BUILD_LIBAWT_LWAWT) : $(BUILD_LIBMLIB_IMAGE)

$(BUILD_LIBAWT_LWAWT) : $(BUILD_LIBOSXAPP)

$(BUILD_LIBAWT_LWAWT) : $(BUILD_LIBJAVA)

endif

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

ifeq ($(OPENJDK_TARGET_OS), macosx)

$(eval $(call SetupNativeCompilation,BUILD_LIBOSXUI,\
		LIBRARY:=osxui,\
                OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(JDK_TOPDIR)/src/macosx/native/com/apple/laf,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=$(CFLAGS_JDKLIB) \
                        -I$(JDK_TOPDIR)/src/macosx/native/com/apple/laf \
			-I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \
			-I$(JDK_TOPDIR)/src/macosx/native/sun/awt \
                        -F/System/Library/Frameworks/JavaVM.framework/Frameworks, \
		LDFLAGS:=$(LDFLAGS_JDKLIB)\
			 $(call SET_SHARED_LIBRARY_ORIGIN) \
			 -Xlinker -rpath -Xlinker @loader_path,\
		LDFLAGS_SUFFIX_macosx:=-lawt -losxapp -lawt_lwawt \
				       -framework Cocoa \
				       -framework Carbon \
				       -framework ApplicationServices \
				       -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
				       -framework JavaNativeFoundation \
				       -framework JavaRuntimeSupport \
				       -ljava -ljvm,\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosxui))

BUILD_LIBRARIES += $(BUILD_LIBOSXUI)

$(BUILD_LIBOSXUI) : $(BUILD_LIBAWT) 

$(BUILD_LIBOSXUI) : $(BUILD_LIBOSXAPP)

$(BUILD_LIBOSXUI) : $(BUILD_LIBAWT_LWAWT)

#$(BUILD_LIBOSXUI) : $(BUILD_LIBJAVA)

endif

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

ifeq ($(OPENJDK_TARGET_OS), macosx)

# Ugly hack to mimic behaviour in old build where this is built as an xcode project.
SET_SHARED_LIBRARY_NAME=-Xlinker -install_name -Xlinker /usr/local/lib/libJObjC.dylib

$(eval $(call SetupNativeCompilation,BUILD_LIBJOBJC32,\
		LIBRARY:=JObjC,\
                OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs/libjobjc32,\
		SRC:=$(JDK_TOPDIR)/src/macosx/native/jobjc/src/core/native \
                     $(JDK_TOPDIR)/src/macosx/native/jobjc/src/runtime-additions/native ,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=-fpascal-strings \
                        -fobjc-gc \
                        -gdwarf-2 \
                        $(CFLAGS_JDKLIB) -I$(JDK_OUTPUTDIR)/gensrc_headers_jobjc \
                        -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
			-m32,\
		LDFLAGS:=$(LDFLAGS_JDKLIB)\
			-m32, \
		LDFLAGS_SUFFIX:=-framework Foundation -framework JavaVM \
                                  -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
                                  -framework JavaNativeFoundation \
                                  -lffi, \
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjobjc32))

$(eval $(call SetupNativeCompilation,BUILD_LIBJOBJC64,\
		LIBRARY:=JObjC,\
                OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs/libjobjc64,\
		SRC:=$(JDK_TOPDIR)/src/macosx/native/jobjc/src/core/native \
                     $(JDK_TOPDIR)/src/macosx/native/jobjc/src/runtime-additions/native ,\
		LANG:=C,\
		OPTIMIZATION:=LOW, \
		CFLAGS:=-fpascal-strings \
                        -fobjc-gc \
                        -gdwarf-2 \
                        $(CFLAGS_JDKLIB) -I$(JDK_OUTPUTDIR)/gensrc_headers_jobjc \
                        -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
			, \
		LDFLAGS:=-fpascal-strings \
                         -fobjc-gc \
                         -gdwarf-2 \
                         $(LDFLAGS_JDKLIB)\
			 $(call SET_SHARED_LIBRARY_ORIGIN), \
		LDFLAGS_SUFFIX:=-framework Foundation -framework JavaVM \
                                  -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
                                  -framework JavaNativeFoundation \
                                  -lffi, \
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjobjc64))

$(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)JObjC$(SHARED_LIBRARY_SUFFIX): $(BUILD_LIBJOBJC32) $(BUILD_LIBJOBJC64)
	$(LIPO) -create -output $@ $(BUILD_LIBJOBJC32) $(BUILD_LIBJOBJC64)

BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)JObjC$(SHARED_LIBRARY_SUFFIX)

endif

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

ifndef OPENJDK
ifeq ($(OPENJDK_TARGET_OS), windows)

  ACCESSBRIDGE_SRCDIR:=$(JDK_TOPDIR)/src/closed/windows/native/sun/bridge

  define SetupAccessBridge
    # Parameter 1 Suffix
    # Parameter 2 Machine
    # Parameter 3 ACCESSBRIDGE_ARCH_ suffix

    $(call SetupNativeCompilation,BUILD_JAWTACCESSBRIDGE$1,\
		LIBRARY=JAWTAccessBridge$1,\
		OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(ACCESSBRIDGE_SRCDIR),\
		INCLUDE_FILES:=JAWTAccessBridge.cpp,\
		LANG:=C++,\
		OPTIMIZATION:=LOW,\
		CFLAGS:=$(CFLAGS_JDKLIB) \
			-DACCESSBRIDGE_ARCH_$3,\
		LDFLAGS:=$(LDFLAGS_JDKLIB) kernel32.lib user32.lib gdi32.lib \
			 winspool.lib jawt.lib comdlg32.lib advapi32.lib shell32.lib \
			 ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib \
			 -subsystem:windows -machine:$2 \
			 -def:$(ACCESSBRIDGE_SRCDIR)/JAWTAccessBridge.DEF,\
		VERSIONINFO_RESOURCE:=$(ACCESSBRIDGE_SRCDIR)/AccessBridgeStatusWindow.rc,\
		RC_FLAGS:=$(RC_FLAGS),\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjawtaccessbridge$1,\
		DEBUG_SYMBOLS:=true)

    $$(BUILD_JAWTACCESSBRIDGE$1): $(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX)

    $(call SetupNativeCompilation,BUILD_JAVAACCESSBRIDGE$1,\
		LIBRARY=JavaAccessBridge$1,\
		OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(ACCESSBRIDGE_SRCDIR),\
		INCLUDE_FILES:=AccessBridgeATInstance.cpp AccessBridgeDebug.cpp \
			       AccessBridgeJavaEntryPoints.cpp \
			       AccessBridgeMessages.cpp JavaAccessBridge.cpp,\
		LANG:=C++,\
		OPTIMIZATION:=LOW,\
		CFLAGS:=$(CFLAGS_JDKLIB) \
			-DACCESSBRIDGE_ARCH_$3,\
		LDFLAGS:=$(LDFLAGS_JDKLIB) kernel32.lib user32.lib gdi32.lib \
			 winspool.lib comdlg32.lib advapi32.lib shell32.lib \
			 ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib \
			 -subsystem:windows -machine:$2 \
			 -def:$(ACCESSBRIDGE_SRCDIR)/JavaAccessBridge.DEF,\
		VERSIONINFO_RESOURCE:=$(ACCESSBRIDGE_SRCDIR)/AccessBridgeStatusWindow.rc,\
		RC_FLAGS:=$(RC_FLAGS),\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjavaaccessbridge$1,\
		DEBUG_SYMBOLS:=true)

    $(call SetupNativeCompilation,BUILD_WINDOWSACCESSBRIDGE$1,\
		LIBRARY=WindowsAccessBridge$1,\
		OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
		SRC:=$(ACCESSBRIDGE_SRCDIR),\
		INCLUDE_FILES:=AccessBridgeJavaVMInstance.cpp AccessBridgeMessageQueue.cpp \
			       AccessBridgeMessages.cpp AccessBridgeWindowsEntryPoints.cpp \
			       WinAccessBridge.cpp AccessBridgeDebug.cpp \
			       AccessBridgeEventHandler.cpp,\
		LANG:=C++,\
		OPTIMIZATION:=LOW,\
		CFLAGS:=$(filter-out -MD,$(CFLAGS_JDKLIB)) -MT \
			-DACCESSBRIDGE_ARCH_$3,\
		LDFLAGS:=$(LDFLAGS_JDKLIB) kernel32.lib user32.lib gdi32.lib \
			 winspool.lib comdlg32.lib advapi32.lib shell32.lib \
			 ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib \
			 -subsystem:windows -machine:$2 \
			 -def:$(ACCESSBRIDGE_SRCDIR)/WinAccessBridge.DEF,\
		VERSIONINFO_RESOURCE:=$(ACCESSBRIDGE_SRCDIR)/AccessBridgeStatusWindow.rc,\
		RC_FLAGS:=$(RC_FLAGS),\
		OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libwindowsaccessbridge$1,\
		DEBUG_SYMBOLS:=true)

    BUILD_LIBRARIES += $$(BUILD_JAWTACCESSBRIDGE$1) $$(BUILD_JAVAACCESSBRIDGE$1) \
		       $$(BUILD_WINDOWSACCESSBRIDGE$1)

  endef

  ifeq ($(OPENJDK_TARGET_CPU_BITS),32)
    $(eval $(call SetupAccessBridge,-32,I386,32))
    $(eval $(call SetupAccessBridge,,I386,LEGACY))
  else
    $(eval $(call SetupAccessBridge,-64,X64,64))
  endif
endif
endif


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

all: $(COPY_FILES) $(BUILD_LIBRARIES)

.PHONY: all