# default values....

CSHARP_CC=$(CSHARP_PATH)/bin/mcs
MONO_JIT=$(CSHARP_PATH)/bin/mono

# common build environment

ifeq ($(NEOTONIC_ROOT),)
NEOTONIC_ROOT = ..
endif

include $(NEOTONIC_ROOT)/rules.mk

# our targets

TARGETS = clearsilver.dll cstest.exe csperftest.exe testcs

all: $(TARGETS)

clearsilver.dll: CS.cs
	$(CSHARP_CC) -target:library -unsafe CS.cs -out:clearsilver.dll

cstest.exe: clearsilver.dll ../dso/libneo.so cstest.cs
	$(CSHARP_CC) -r:clearsilver.dll -unsafe cstest.cs 

csperftest.exe: clearsilver.dll ../dso/libneo.so csperftest.cs
	$(CSHARP_CC) -r:clearsilver.dll -unsafe csperftest.cs

perf: csperftest.exe
	export LD_LIBRARY_PATH=../dso; \
	$(MONO_JIT) csperftest.exe 
	

testcs: cstest.exe
	@echo "Running csharp test"
	@failed=0; \
	rm -f cstest.out; \
	export LD_LIBRARY_PATH=../dso; \
	$(MONO_JIT) cstest.exe > cstest.out; \
	diff cstest.out cstest.gold > /dev/null; \
	return_code=$$?; \
	if [ $$return_code -ne 0 ]; then \
	  diff cstest.out cstest.gold > cstest.err; \
	  echo "Failed csharp test: cstest.cs"; \
	  echo "    See cstest.out and cstest.err"; \
	  failed=1; \
	fi; \
	if [ $$failed -eq 1 ]; then \
	  exit 1; \
	fi;
	@echo "Passed csharp test"

gold: cstest.exe
	export LD_LIBRARY_PATH=../dso; \
	$(MONO_JIT) cstest.exe > cstest.gold;
	@echo "Generated gold files"


clean:
	rm -f core.*

distclean:
	rm -f $(TARGETS) core.* Makefile.depend