all: fibre.so libthrd-pthread.so.so cforall.so

clean:
	rm -rf fibre.so libthrd-pthread.so.so cforall.so

CXXFLAGS=-Wall -Wextra -O3 -g -fpic -std=c++17 -pthread -ftls-model=initial-exec

libthrd-pthread.so: thread.cpp thread.hpp Makefile
	$(CXX) $(CXXFLAGS) -shared -o $@ $< -DWITH_PTHREADS

libthrd-fibre.so: thread.cpp thread.hpp Makefile
	$(CXX) $(CXXFLAGS) -shared -o $@ $< -DWITH_LIBFIBRE -lfibre

CFAINC=${HOME}/local/include/cfa-dev
CFALIB=${HOME}/local/lib/cfa-dev/x64-debug
CFAFLAGS=-z execstack -I${CFAINC} -I${CFAINC}/concurrency -L${CFALIB} -Wl,-rpath,${CFALIB}

libthrd-cforall.so: thread.cpp thread.hpp Makefile
	$(CXX) $(CXXFLAGS) $(CFAFLAGS) -shared -o $@ $< -DWITH_CFORALL -Wl,--push-state,--no-as-needed -lcfathread -lcfa -ldl -lm -Wl,--pop-state