# Makefile for Ruby and Java bidings for the Spring GlobalAI interface

# This is only needed, if JAVA_HOME is not already set through the environment
# As make should inherit variables form there automatically
JAVA_HOME=P:/Programme/Java/jdk1.6.0_03

SPRING_HOME=../../..
SPRING_CURRENT_WINDOWS=$(SPRING_HOME)/game

# DO NOT CHANGE ANYTHING FROM HERE ON

EXEC_SUFFIX=bat

################################################################################
# Spring Vars
STREFLOP_INCLUDES=-I$(SPRING_HOME)/rts/lib/streflop
SPRING_IFLAGS=-I$(SPRING_HOME) \
       -I$(SPRING_HOME)/rts \
       -I$(SPRING_HOME)/rts/System \
       -I$(SPRING_HOME)/rts/System/creg \
       -I$(SPRING_HOME)/rts/Sim/Units \
       -I$(SPRING_HOME)/rts/Sim/Weapons \
       -I$(SPRING_HOME)/mingwlibs/include
SPRING_LFLAGS=-L$(SPRING_HOME)/rts/lib/streflop \
       -L$(SPRING_HOME)/game \
       -L$(SPRING_HOME)/mingwlibs/lib
SPRING_OFILES=$(SPRING_HOME)/build/rts/System/creg/creg-ai.o* \
	      $(SPRING_HOME)/build/rts/System/creg/Serializer-ai.o* \
	      $(SPRING_HOME)/build/rts/System/creg/VarTypes-ai.o* \
	      $(SPRING_HOME)/build/rts/System/float3-ai.o* \
	      $(SPRING_HOME)/build/rts/System/LogOutput.o
SPRING_STATIC_LIBS=$(SPRING_HOME)/mingwlibs/lib/libboost_thread-mt.a \
		   $(SPRING_HOME)/rts/lib/streflop/streflop.a
SPRING_AI_FOLDER=$(SPRING_CURRENT_WINDOWS)/AI



################################################################################
# SWIG Vars
SWIG=swig
SWIGOPT=
#SWIGTARGET=JAI_Module.i



################################################################################
# C++ Vars
CC=g++
CPP_SOURCE_HOME=./src/cpp
#COMPILEOPT=-Wall -Wextra
#COMPILEOPT=-fallow-single-precision
COMPILEOPT=-fsingle-precision-constant -frounding-math -fsignaling-nans \
	   -mieee-fp -O2 -pipe -fno-strict-aliasing -mfpmath=387 -mthreads \
	   -DNDEBUG -D_REENTRANT -D_SZ_ONE_DIRECTORY \
	   -D_JNI_IMPLEMENTATION_ -D_JNI_IMPLEMENTATION \
	   -DSTREFLOP_X87 \
	   -Wl,--add-stdcall-alias \
	   -mno-cygwin
#	   -mno-fp-ret-in-387 \
#	   -D __int64="long long" -Wl,--out-implib
#	   -Wl,--kill-at -DWIN32
IFLAGS=$(SPRING_IFLAGS) \
       -I./include/generated \
       -I./src/cpp \
       -I./src/cpp/generated \
       $(STREFLOP_INCLUDES)
STATIC_LIBS=$(SPRING_STATIC_LIBS)
#LFLAGS=-L$(JAVA_HOME)/jre/lib/i386/client -L.
#LFLAGS=-L$(JAVA_HOME)/jre/lib/i386/server
BUILD_DIR=build-mingw-32



################################################################################
# Java Vars

JAVAC=$(JAVA_HOME)/bin/javac
JAVAH=$(JAVA_HOME)/bin/javah
JAVA_SOURCE_HOME=./src/java
JAVA_FIRST_PKG_PART=com
JAVA_SWIG_PKG_MAIN=com.clan_sy.spring.ai.global.java
JAVA_SWIG_PKG_WRAP=$(JAVA_SWIG_PKG_MAIN).wrap
JAVA_PKG_MAIN=com/clan_sy/spring/ai/global/java
JAVA_PKG_WRAP=$(JAVA_PKG_MAIN)/wrap
JAVA_SOURCE=$(JAVA_SOURCE_HOME)/$(JAVA_PKG_MAIN)/*.java \
	    $(JAVA_SOURCE_HOME)/$(JAVA_PKG_WRAP)/*.java
JAVA_IMPL_SOURCE_HOME=./src/java-impl-tst
JAVA_IMPL_FIRST_PKG_PART=hoijui
#JAVA_PKG_IMPL=$(JAVA_PKG_MAIN)/impl/tst
JAVA_PKG_IMPL=hoijui/spring/ai/global/impl/tst
JAVA_IMPL_SOURCE=$(JAVA_IMPL_SOURCE_HOME)/$(JAVA_PKG_IMPL)/*.java
JAVA_IMPL2_SOURCE_HOME=./src/java-impl-hoijui
JAVA_IMPL2_FIRST_PKG_PART=hoijui
#JAVA_PKG_IMPL2=$(JAVA_PKG_MAIN)/impl/hoijui
JAVA_PKG_IMPL2=hoijui/spring/ai/global/impl/hoijui
JAVA_IMPL2_SOURCE=$(JAVA_IMPL2_SOURCE_HOME)/$(JAVA_PKG_IMPL2)/*.java \
		 $(JAVA_IMPL2_SOURCE_HOME)/$(JAVA_PKG_IMPL2)/helper/*.java
JAVA_LIB=./lib/java
JAVA_CLASSPATH=$(JAVA_LIB)/commons-configuration-1.5.jar:$(JAVA_LIB)/commons-lang-2.4.jar:$(JAVA_LIB)/commons-logging-1.1.1.jar:$(JAVA_LIB)/commons-collections-3.2.1.jar:$(JAVA_LIB)/vecmath.jar

JAVA_SWIG_MODULE=JAI.i
#JAVAC_OPTIONS=-sourcepath $(JAVA_SOURCE_HOME)
JAVAC_OPTIONS=-d ./ \
	      -target 1.5 \
	      -source 1.5 \
	      -classpath './build/classes:$(JAVA_CLASSPATH)'
JAVA_IFLAGS=-I$(JAVA_HOME)/include \
	      -I$(JAVA_HOME)/include/win32 \
	      -I$(JAVA_HOME)/include/linux
JAVA_STATIC_LIBS=./lib/libjvm.dll.a
TINYXML_SOURCES=$(CPP_SOURCE_HOME)/tinyxml.cpp \
		$(CPP_SOURCE_HOME)/tinyxmlparser.cpp \
		$(CPP_SOURCE_HOME)/tinyxmlerror.cpp \
		$(CPP_SOURCE_HOME)/tinystr.cpp
JAVA_CPP_SOURCES=$(CPP_SOURCE_HOME)/JAI.cpp \
		 $(CPP_SOURCE_HOME)/JGlobalAI.cpp \
		 $(CPP_SOURCE_HOME)/AIMetalMap.cpp \
		 $(TINYXML_SOURCES)
JAVA_TARGET=JAI.jar
JAVA_TARGET_IMPL=tst.jar
JAVA_TARGET_IMPL2=hoijui.jar
JAVA_NATIVE_TARGET=JAI.dll
SPRING_JAI_FOLDER=$(SPRING_AI_FOLDER)/Bot-libs/JAI



################################################################################
# Build Targets Java

jall: jclean jswig jcpp jcompile jcompile-impl-tst jcompile-impl-hoijui jinstall

jswig:
	$(SWIG) -c++ -java $(SWIGOPT) \
		-o $(CPP_SOURCE_HOME)/generated/JAI_wrap.cxx \
		-package $(JAVA_SWIG_PKG_WRAP) \
		-outdir $(JAVA_SOURCE_HOME)/$(JAVA_PKG_WRAP) \
		$(IFLAGS) $(CPP_SOURCE_HOME)/$(JAVA_SWIG_MODULE)
	fixSWIGwrapper.$(EXEC_SUFFIX)

jcompile:
	$(JAVAC) -Xlint:unchecked $(JAVAC_OPTIONS) $(JAVA_SOURCE)
	jar cfm0 $(JAVA_TARGET) $(JAVA_SOURCE_HOME)/manifest.mf $(JAVA_FIRST_PKG_PART)
	mv ./$(JAVA_TARGET) $(BUILD_DIR)
	mkdir -p ./build/classes/$(JAVA_FIRST_PKG_PART)/z
	rm -R ./build/classes/$(JAVA_FIRST_PKG_PART)
	mv $(JAVA_FIRST_PKG_PART) ./build/classes

jcompile-impl-tst:
	$(JAVAC) -Xlint:unchecked $(JAVAC_OPTIONS) $(JAVA_IMPL_SOURCE)
	jar cfm0 $(JAVA_TARGET_IMPL) $(JAVA_IMPL_SOURCE_HOME)/manifest.mf $(JAVA_IMPL_FIRST_PKG_PART)
	mv ./$(JAVA_TARGET_IMPL) $(BUILD_DIR)
	mkdir -p ./build/classes-impl-tst/$(JAVA_IMPL_FIRST_PKG_PART)/z
	rm -R ./build/classes-impl-tst/$(JAVA_IMPL_FIRST_PKG_PART)
	mv $(JAVA_IMPL_FIRST_PKG_PART) ./build/classes-impl-tst

jcompile-impl-hoijui:
	$(JAVAC) -Xlint:unchecked $(JAVAC_OPTIONS) $(JAVA_IMPL2_SOURCE)
	jar cfm0 $(JAVA_TARGET_IMPL2) $(JAVA_IMPL2_SOURCE_HOME)/manifest.mf $(JAVA_IMPL2_FIRST_PKG_PART)
	mv ./$(JAVA_TARGET_IMPL2) $(BUILD_DIR)
	mkdir -p ./build/classes-impl-hoijui/$(JAVA_IMPL2_FIRST_PKG_PART)/z
	rm -R ./build/classes-impl-hoijui/$(JAVA_IMPL2_FIRST_PKG_PART)
	mv $(JAVA_IMPL2_FIRST_PKG_PART) ./build/classes-impl-hoijui

jcpp:
	# do this for the spring make, which will not find the .h files otherwise
	cp $(CPP_SOURCE_HOME)/*.h $(CPP_SOURCE_HOME)/generated/
	$(CC) -mwindows $(COMPILEOPT) -c -g $(IFLAGS) $(JAVA_IFLAGS) \
		$(JAVA_CPP_SOURCES)
	$(CC) -mwindows $(COMPILEOPT) $(LOWERLFLAGS) $(JAVA_LOWERLFLAGS) \
		-shared -o $(JAVA_NATIVE_TARGET) $(LFLAGS) $(JAVA_LFLAGS) \
		$(SPRING_OFILES) *.o \
		$(STATIC_LIBS) $(JAVA_STATIC_LIBS)
	mv $(JAVA_NATIVE_TARGET) $(BUILD_DIR)

jinstall:
	mkdir -p $(SPRING_JAI_FOLDER)/lib
	mkdir -p $(SPRING_JAI_FOLDER)/log
	cp $(BUILD_DIR)/$(JAVA_NATIVE_TARGET) $(SPRING_JAI_FOLDER)
	cp $(BUILD_DIR)/$(JAVA_TARGET) $(SPRING_JAI_FOLDER)
	cp $(JAVA_LIB)/*.jar $(SPRING_JAI_FOLDER)/lib
#	cp ./config.xml $(SPRING_JAI_FOLDER)
	cp ./commons-logging.properties $(SPRING_JAI_FOLDER)
	cp ./log4j.xml $(SPRING_JAI_FOLDER)
	cp $(BUILD_DIR)/$(JAVA_TARGET_IMPL) $(SPRING_AI_FOLDER)/Bot-libs
	cp $(BUILD_DIR)/$(JAVA_TARGET_IMPL2) $(SPRING_AI_FOLDER)/Bot-libs

jimpl-tst: jcompile-impl-tst jinstall
jimpl-hoijui: jcompile-impl-hoijui jinstall

jclean:
	rm -f *.o
	rm -fR build
	rm -fR dist
	rm -f $(BUILD_DIR)/*
	rm -f $(CPP_SOURCE_HOME)/generated/*
	rm -f $(JAVA_SOURCE_HOME)/$(JAVA_PKG_MAIN)/*.class
	rm -f $(JAVA_SOURCE_HOME)/$(JAVA_PKG_WRAP)/*.class
	rm -f $(JAVA_SOURCE_HOME)/$(JAVA_PKG_WRAP)/*.java
	rm -f $(JAVA_IMPL_SOURCE_HOME)/$(JAVA_PKG_IMPL)/*.class
	rm -f $(JAVA_IMPL2_SOURCE_HOME)/$(JAVA_PKG_IMPL)/*/*.class
	rm -f $(JAVA_IMPL2_SOURCE_HOME)/$(JAVA_PKG_IMPL2)/*.class
	rm -f $(JAVA_IMPL2_SOURCE_HOME)/$(JAVA_PKG_IMPL2)/*/*.class
