# Makefile for building HDF5 JNI interface for Windows.
# 
# Author: Peter Cao
#           The HDF Group
#           Dec 30, 2008
#
# Notes: 
#   To comiple the source code, run 'nmake -f nt_makefile'
#   You have to add your VS studio bin path to your system path, e.g.
#   set path=%path";"C:\Program Files\Microsoft Visual Studio 8\VC\bin"
#

JAVAHOME="C:\Program Files\Java\jdk1.6.0_18"
HDF5INC=C:\hdf\hdf5\include
HDF5LIB=C:\hdf\hdf5\lib\hdf5.lib
SZLIB=C:\hdf\szip\lib\szlib.lib
ZLIB=C:\hdf\zlib\lib\zlib.lib

#####################################################################
#      Do not change below this line unless you know what you do    #
#####################################################################

CC=cl.exe
LINKER = link.exe

CFLAGS = \
/I $(HDF5INC) /I $(JAVAHOME)\include /I $(JAVAHOME)\include\win32 \
/D "_MBCS" /U "__cplusplus" \
/D "_CRT_SECURE_NO_WARNINGS" /D "_LARGEFILE_SOURCE" \
/nologo /W3 /EHsc /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c /TP \

# For 64-bit machines, use /machine:x64
LINKFLAG=/nologo /dll /incremental:no /machine:i386

OBJECTS=exceptionImp.obj h5Constants.obj h5Imp.obj h5aImp.obj h5dImp.obj h5eImp.obj \
        h5fImp.obj h5gImp.obj h5iImp.obj h5lImp.obj h5oImp.obj h5pImp.obj h5rImp.obj h5sImp.obj \
        h5tImp.obj nativeData.obj h5util.obj h5zImp.obj


# the following works only for hdf5 1.8.8 or below
#MSDEV_LIBS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib \
#advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib \
#/NODEFAULTLIB:"MSVCRT" /NODEFAULTLIB:"LIBC.LIB"

MSDEV_LIBS="kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "shell32.lib" \
"ole32.lib" "oleaut32.lib" "uuid.lib" "comdlg32.lib" "advapi32.lib" \
/NODEFAULTLIB:"LIBCMT" /NODEFAULTLIB:"LIBC.LIB"

all: $(OBJECTS)
	$(LINKER) /OUT:"jhdf5.dll" $(LINKFLAG) $(OBJECTS) $(HDF5LIB) $(SZLIB) $(ZLIB) $(MSDEV_LIBS)

exceptionImp.obj: exceptionImp.c
	$(CC) $(CFLAGS) /Fo$@ $?

h5aImp.obj: h5aImp.c
	$(CC) $(CFLAGS) /Fo$@ $?

h5Constants.obj: h5Constants.c
	$(CC) $(CFLAGS) /Fo$@ $?

h5dImp.obj: h5dImp.c
	$(CC) $(CFLAGS) /Fo$@ $?

h5fImp.obj: h5fImp.c
	$(CC) $(CFLAGS) /Fo$@ $?

h5gImp.obj: h5gImp.c
	$(CC) $(CFLAGS) /Fo$@ $?

h5iImp.obj: h5iImp.c
	$(CC) $(CFLAGS) /Fo$@ $?

h5Imp.obj: h5Imp.c
	$(CC) $(CFLAGS) /Fo$@ $?

h5oImp.obj: h5oImp.c
	$(CC) $(CFLAGS) /Fo$@ $?

h5pImp.obj: h5pImp.c
	$(CC) $(CFLAGS) /Fo$@ $?

h5rImp.obj: h5rImp.c
	$(CC) $(CFLAGS) /Fo$@ $?

h5sImp.obj: h5sImp.c
	$(CC) $(CFLAGS) /Fo$@ $?

h5tImp.obj: h5tImp.c
	$(CC) $(CFLAGS) /Fo$@ $?

h5util.obj: h5util.c
	$(CC) $(CFLAGS) /Fo$@ $?

h5zImp.obj: h5zImp.c
	$(CC) $(CFLAGS) /Fo$@ $?

nativeData.obj: nativeData.c
	$(CC) $(CFLAGS) /Fo$@ $?

h5eImp.obj: h5eImp.c
	$(CC) $(CFLAGS) /Fo$@ $?

h5lImp.obj: h5lImp.c
	$(CC) $(CFLAGS) /Fo$@ $?


clean:
	@del *.dll
	@del *.lib
	@del *.obj
	@del *.idb
	@del *.pdb
	@del *.ilk
	@del *.pdb
	@del *.exp

