#
# Makefile for the Genesis Bridge project
#
#

SHELL=/bin/sh

TARGET = Modules

# The specifications for the documentation.
DOCDIR = doc

#  JAVAPATH = /home/jakebeal/Java/IBMJava2-14
#  BOOTCP = $(JAVAPATH)/jre/lib/core.jar
#  JAVACCMD = jikes $(JAVAC_OPTS) -O -bootclasspath $(BOOTCP)
#  CLASSPATH = .:$(JAVAPATH):/home/jakebeal/Java/j2sdk1.4.0_01/jre/lib/rt.jar

ifeq ($(SWISSNET),true)
  JAVAPATH = /home/jakebeal/Java/j2sdk1.4.0_01
  BOOTCP = $(JAVAPATH)/jre/lib/rt.jar
  JAVACCMD = jikes $(JAVAC_OPTS) -bootclasspath $(BOOTCP)
  CLASSPATH = .:$(JAVAPATH):$(JAVAPATH)/../jswat/jswat2.jar
else
  JAVAPATH = /projects/genesis/j2sdk1.4.0_01/
  JAVACCMD = jikes $(JAVAC_OPTS) -bootclasspath $(BOOTCP)
  BOOTCP = $(JAVAPATH)/jre/lib/rt.jar
  CLASSPATH = .:$(JAVAPATH)
endif

# javac command (include options):
JAVAC_OPTS = -classpath $(CLASSPATH) -g #-g:none # -g # g=debugging option
JAVACMD = $(JAVAPATH)/bin/java -classpath $(CLASSPATH)
ARGS = scripts/default.s

# This is the default target.  It creates the .jar file for
# execution, after compiling everything else
all: java

jar: $(TARGET).jar

$(TARGET).jar: java 
	jar cf $(TARGET).jar *.class
#	jar uf $(TARGET).jar modules/*.class
	jar uf $(TARGET).jar modules/broadcast/*.class
	jar uf $(TARGET).jar modules/codegas/*.class
	jar uf $(TARGET).jar modules/color/*.class
	jar uf $(TARGET).jar modules/dataflow/*.class
	jar uf $(TARGET).jar modules/gradient/*.class
	jar uf $(TARGET).jar modules/hierarchy/*.class
	jar uf $(TARGET).jar modules/line/*.class
	jar uf $(TARGET).jar modules/neighborset/*.class
	jar uf $(TARGET).jar modules/node/*.class
	jar uf $(TARGET).jar modules/region/*.class
	jar uf $(TARGET).jar scripting/*.class
	jar uf $(TARGET).jar simulator/*.class
	jar uf $(TARGET).jar testprocs/*.class
	jar uf $(TARGET).jar utils/*.class

debug: java
	$(JAVACMD) com.bluemarsh.jswat.Main


# This should delete everything which is created by this Makefile.
# That way a 'make clean ; make' will remake everything.
clean:
	find . -iname "*.class" -exec rm "{}" \;
	rm -f $(TARGET).tar.gz $(TARGET).jar


# run the sim
run: java
	$(JAVACMD) SimApp $(ARGS)

runbig: java
	$(JAVACMD) -Xms200m -Xmx500m SimApp $(ARGS)

# Here we have the dependency graph for all packages
java: utils simulator modules scripting testprocs root

root: $(patsubst %.java,%.class,$(wildcard *.java))

modules: modules.broadcast modules.codegas modules.color modules.consensus modules.dataflow modules.gossip modules.gradient modules.hashtable modules.hierarchy modules.line modules.neighborset modules.node modules.region simulator utils $(patsubst %.java,%.class,$(wildcard modules/*.java))

modules.broadcast: simulator utils $(patsubst %.java,%.class,$(wildcard modules/broadcast/*.java))

modules.codegas: simulator utils $(patsubst %.java,%.class,$(wildcard modules/codegas/*.java))

modules.color: simulator utils $(patsubst %.java,%.class,$(wildcard modules/color/*.java))

modules.consensus: simulator utils $(patsubst %.java,%.class,$(wildcard modules/consensus/*.java))

modules.dataflow: simulator utils $(patsubst %.java,%.class,$(wildcard modules/dataflow/*.java))

modules.gossip: simulator utils $(patsubst %.java,%.class,$(wildcard modules/gossip/*.java))

modules.gradient: simulator utils $(patsubst %.java,%.class,$(wildcard modules/gradient/*.java))

modules.hashtable: simulator utils $(patsubst %.java,%.class,$(wildcard modules/hashtable/*.java))

modules.hierarchy: simulator utils $(patsubst %.java,%.class,$(wildcard modules/hierarchy/*.java))

modules.line: simulator utils $(patsubst %.java,%.class,$(wildcard modules/line/*.java))

modules.neighborset: simulator utils $(patsubst %.java,%.class,$(wildcard modules/neighborset/*.java))

modules.node: simulator utils $(patsubst %.java,%.class,$(wildcard modules/node/*.java))

modules.region: simulator utils $(patsubst %.java,%.class,$(wildcard modules/region/*.java))

scripting: simulator $(patsubst %.java,%.class,$(wildcard scripting/*.java))

simulator: utils $(patsubst %.java,%.class,$(wildcard simulator/*.java))

testprocs: simulator $(patsubst %.java,%.class,$(wildcard testprocs/*.java))

utils: $(patsubst %.java,%.class,$(wildcard utils/*.java))

%.class: %.java ; $(JAVACCMD) $<



