HEATBUGS_SRC = HeatSpace.java HeatbugModelSwarm.java
COLLECTION_SRC = $(wildcard collection/*.java)
GUI_SRC = $(wildcard gui/*.java)
SPACE_SRC = $(wildcard space/*.java)
HEATBUGS_GUI_SRC = $(HEATBUGS_SRC) $(COLLECTION_SRC) $(GUI_SRC) $(SPACE_SRC) HeatbugObserverSwarm.java StartHeatbugsGUI.java StartHeatbugsBatch.java
HEATBUGS_BATCH_SRC = $(HEATBUGS_SRC) $(COLLECTION_SRC) $(SPACE_SRC) HeatbugBatchSwarm.java StartHeatbugsBatch.java
ALL_SRC = $(HEATBUGS_GUI_SRC) Heatbug.java

all: $(HEATBUGS_GUI_SRC)
	(cat HeatbugGUITop.java HeatbugTop.java HeatbugGUI.java ; echo '}') > Heatbug.java
	CLASSPATH=.:colt.jar $(SWARMHOME)/bin/javacswarm $(HEATBUGS_GUI_SRC)

clean: 
	rm -f $(patsubst %.java,%.class,$(ALL_SRC)) $(patsubst %.java,%.o,$(ALL_SRC)) *.so *.cc Heatbug.java hack.c hack.o _fixup_jheatbugs.o

native: $(HEATBUGS_BATCH_SRC)
	(cat HeatbugBatchTop.java HeatbugTop.java ; echo '}') > Heatbug.java
	make jheatbugs.so _fixup_jheatbugs.so

OPT = -O6 -fkeep-inline-functions # -pg

%.so: $(patsubst %.java,%.o,$(HEATBUGS_BATCH_SRC) Heatbug.java)
	gcc -shared -o $@ $^

_fixup_%.so: %.so
	$(HOME)/bin/fixup $* > _fixup_$*.cc
	g++ $(OPT) -fPIC -I$(P)/include -c _fixup_$*.cc
	nm $*.so | grep 0024 | sed -n 's/ *U \(.*\)/int \1;/p' > hack.c
	gcc $(OPT) -fPIC -c hack.c 
	gcc -shared -o _fixup_$*.so _fixup_$*.o hack.o

%.o: %.java
	gcj $(OPT) -classpath .:classes:$(DATADIR)/swarm:$(DATADIR)/kaffe -c -fPIC $< -o $@

