# 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=/home/robin/Programs/jdk1.6.0_03

# DO NOT CHANGE ANYTHING FROM HERE ON

################################################################################
# Spring Vars
SPRING_CURRENT_WINDOWS=~/windows_TASpring_current/game
SPRING_HOME=../../..
STREFLOP_INCLUDES=-I$(SPRING_HOME)/rts/lib/streflop
#		  -I$(SPRING_HOME)/rts/lib/streflop/softfloat \
#		  -I$(SPRING_HOME)/rts/lib/streflop/libm \
#		  -I$(SPRING_HOME)/rts/lib/streflop/libm/dbl-64 \
#		  -I$(SPRING_HOME)/rts/lib/streflop/libm/headers
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.os \
	      $(SPRING_HOME)/build/rts/System/creg/Serializer-ai.os \
	      $(SPRING_HOME)/build/rts/System/creg/VarTypes-ai.os \
	      $(SPRING_HOME)/build/rts/System/float3-ai.os \
	      $(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=i586-mingw32msvc-g++
#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_SOURCE=$(JAVA_SOURCE_HOME)/info/osrts/jai/*.java \
	    $(JAVA_SOURCE_HOME)/info/osrts/jai/generated/*.java
JAVA_IMPLSOURCE_HOME=./src/java-testimpl
JAVA_IMPLSOURCE=$(JAVA_IMPLSOURCE_HOME)/info/osrts/jai/*.java
JAVA_IMPLSOURCE2_HOME=./src/java-testimpl_2
JAVA_IMPLSOURCE2=$(JAVA_IMPLSOURCE2_HOME)/info/osrts/jai/hoijui/*.java \
		 $(JAVA_IMPLSOURCE2_HOME)/info/osrts/jai/hoijui/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_SWIGMODULE=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 \
		 $(SPRING_HOME)/game/spring.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_SOURCE_HOMES=$(CPP_SOURCE_HOME)/JAI.cpp \
		 $(CPP_SOURCE_HOME)/JGlobalAI.cpp \
		 $(CPP_SOURCE_HOME)/AIMetalMap.cpp \
		 $(CPP_SOURCE_HOME)/SpotFinder.cpp \
		 $(TINYXML_SOURCES)
JAVA_TARGET=JAI.jar
JAVA_TARGET_IMPL=JAI-impl-hoijui.jar
JAVA_TARGET_IMPL2=JAI-impl-hoijui-2.jar
JAVA_NATIVE_TARGET=JAI.dll
SPRING_JAI_FOLDER=$(SPRING_AI_FOLDER)/Bot-libs/JAI

################################################################################
# Ruby Vars
RUBY_SOURCE_HOME=./src/ruby
RUBY_SWIGMODULE=RubyAI.i
RUBY_IFLAGS=-I/usr/lib/ruby/1.8/i486-linux -I/usr/include
RUBY_LOWERLFLAGS=-lruby
RUBY_STATIC_LIBS=
RUBY_NATIVE_TARGET=RubyAI.dll


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

jall: jclean jswig jcpp jcompile jcompile-impl jcompile-impl2 jinstall

jswig:
	$(SWIG) -c++ -java $(SWIGOPT) \
		-o $(CPP_SOURCE_HOME)/generated/JAI_wrap.cxx \
		-package info.osrts.jai.generated \
		-outdir $(JAVA_SOURCE_HOME)/info/osrts/jai/generated \
		$(IFLAGS) $(CPP_SOURCE_HOME)/$(JAVA_SWIGMODULE)
	./fixSWIGwrapper.sh

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

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

jcompile-impl2:
	$(JAVAC) -Xlint:unchecked $(JAVAC_OPTIONS) $(JAVA_IMPLSOURCE2)
	jar cfm0 $(JAVA_TARGET_IMPL2) manifest-impl_2.mf info
	mv ./$(JAVA_TARGET_IMPL2) $(BUILD_DIR)
	mkdir -p ./build/classes-impl_2/info/z
	rm -R ./build/classes-impl_2/info
	mv info ./build/classes-impl_2

jcpp:
	$(CC) -mwindows $(COMPILEOPT) -c -g $(IFLAGS) $(JAVA_IFLAGS) \
		$(JAVA_CPP_SOURCE_HOMES)
	$(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

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)/info/osrts/jai/*.class
	rm -f $(JAVA_SOURCE_HOME)/info/osrts/jai/generated/*.class
	rm -f $(JAVA_SOURCE_HOME)/info/osrts/jai/generated/*.java
	rm -f $(JAVA_IMPLSOURCE_HOME)/info/osrts/jai/*.class
	rm -f $(JAVA_IMPLSOURCE2_HOME)/info/osrts/jai/hoijui/*.class
	rm -f $(JAVA_IMPLSOURCE2_HOME)/info/osrts/jai/hoijui/helper/*.class



################################################################################
# Build Targets Ruby
#/usr/lib/libruby1.8-static.a
#/usr/lib/ruby/1.8/mkmf.rb
#/usr/lib/ruby/1.8/i486-linux/ruby.h
#/usr/lib/libruby1.8.so

rswig:
	$(SWIG) -c++ -ruby $(SWIGOPT) \
		-o $(CPP_SOURCE_HOME)/generated/RubyAI_wrap.cxx \
		-outdir $(RUBY_SOURCE_HOME)/generated \
		$(IFLAGS) $(CPP_SOURCE_HOME)/$(RUBY_SWIGMODULE)

rcpp:
	$(CC) -mwindows $(COMPILEOPT) -c -g $(IFLAGS) $(RUBY_IFLAGS) \
		$(CPP_SOURCE_HOME)/RubyAI.cpp
	$(CC) -mwindows $(COMPILEOPT) $(LOWERLFLAGS) $(RUBY_LOWERLFLAGS) \
		-shared -o $(RUBY_NATIVE_TARGET) $(LFLAGS) $(RUBY_LFLAGS) *.o \
		$(STATIC_LIBS) $(RUBY_STATIC_LIBS)
	mv $(RUBY_NATIVE_TARGET) $(BUILD_DIR)
