# cross-compiling for win32 and emscripten...including likelihood.dll's sources directly
# $ sudo apt-get install mingw-w64
# Will also need two runtime dlls from mingw in /usr/lib/gcc/i686-w64-mingw32/5.3-win32/:
#    libstdc++-6.dll
#    libgcc_s_sjlj-1.dll

CCP := /usr/bin/i686-w64-mingw32-g++
OBJDIR := obj

HJCDIR := ../../HJCFIT

LNFLAGS = -shared -fPIC -lm -g
CFLAGS += -I$(HJCDIR) -I$(HJCDIR)/likelihood -I/usr/include/eigen3 -DQUBXHJC_EXPORTS -DASMFFI_EXPORTS -std=c++11 -O3
EMFLAGS := -I$(HJCDIR) -I$(HJCDIR)/likelihood -I/usr/include/eigen3 -s DISABLE_EXCEPTION_CATCHING=0 -s ASSERTIONS=1 -s DEMANGLE_SUPPORT=1 -s NO_EXIT_RUNTIME=1 -s TOTAL_MEMORY=128000000 -std=c++11 -s MODULARIZE=1 --memory-init-file 0 -O3 -s EXPORTED_FUNCTIONS="['_qub_hjc_bursts_alloc', '_qub_hjc_bursts_free', '_qub_hjc_bursts_append', '_qub_hjc_likelihood']"

SRCFILES := $(shell find . -mindepth 1 -maxdepth 1 -name "*.cpp") \
            $(shell find $(HJCDIR)/likelihood -mindepth 1 -maxdepth 1 -name "*.cc")
HDRFILES := $(shell find . -mindepth 1 -maxdepth 1 -name "*.h") \
            $(shell find $(HJCDIR)/likelihood -mindepth 1 -maxdepth 1 -name "*.h")
OBJFILES := $(patsubst %.cpp,$(OBJDIR)/%.o,$(SRCFILES))
OBJFILES := $(patsubst %.cc,$(OBJDIR)/%.o,$(OBJFILES))
DEPFILES := $(patsubst %.o,%.d,$(OBJFILES))
EMOBJECTS := $(patsubst %.cpp,$(OBJDIR)/%.bc,$(SRCFILES))
EMOBJECTS := $(patsubst %.cc,$(OBJDIR)/%.bc,$(EMOBJECTS))

-include $(DEPFILES)

default: dll

dll: qubxhjc.dll

asm: js/qubxhjc.js


$(OBJDIR)/%.o: %.cpp Makefile
	-@mkdir -p $(dir $@)
	$(CCP) $(CFLAGS) -MMD -MP -MT "$(OBJDIR)/$*.d $(OBJDIR)/$*.o" -c $< -o $@

$(OBJDIR)/%.o: %.cc Makefile
	-@mkdir -p $(dir $@)
	$(CCP) $(CFLAGS) -MMD -MP -MT "$(OBJDIR)/$*.d $(OBJDIR)/$*.o" -c $< -o $@

$(OBJDIR)/%.bc: %.cpp Makefile
	-@mkdir -p $(dir $@)
	emcc $(EMFLAGS) $< -o $@

$(OBJDIR)/%.bc: %.cc Makefile
	-@mkdir -p $(dir $@)
	emcc $(EMFLAGS) $< -o $@

qubxhjc.dll: $(OBJFILES) Makefile
	$(CCP) -o qubxhjc.dll $(OBJFILES) $(LNFLAGS) 

$(OBJDIR)/qubxhjc.js: $(EMOBJECTS) Makefile
	emcc $(EMFLAGS) -o $(OBJDIR)/qubxhjc.js $(EMOBJECTS)

js/qubxhjc.js: $(OBJDIR)/qubxhjc.js pre.js post.js Makefile
	cat pre.js $(OBJDIR)/qubxhjc.js post.js > js/qubxhjc.js
