mcpat-sys 0.8.0

The package provides bindings to McPAT.
Documentation
build := $(shell pwd)
source := $(build)/source
wrapper := $(build)/wrapper
patches := $(build)/patches

FILTER_OUT = $(foreach v,$(2),$(if $(findstring $(1),$(v)),,$(v)))

NTHREADS ?= 4
cflags := -fPIC -O3 -w -msse2 -mfpmath=sse -DNTHREADS=$(NTHREADS)
cflags += -I$(source) -I$(source)/cacti -I$(build)
lflags := -shared

sources := $(call FILTER_OUT,main.cc,$(wildcard $(source)/*.cc) $(wildcard $(source)/cacti/*.cc))
objects := $(patsubst %.cc,%.o,$(sources))
patches := $(sort $(wildcard $(patches)/*.patch))

sources := $(wildcard $(wrapper)/*.cc) $(wildcard $(wrapper)/cacti/*.cc)
objects += $(patsubst %.cc,%.o,$(sources))

ifdef CARGO_FEATURE_CACHING
cflags += -I$(DEP_HIREDIS_ROOT)/include
lflags += -Wl,-rpath,$(DEP_HIREDIS_ROOT)/lib -L$(DEP_HIREDIS_ROOT)/lib -lhiredis
sources := $(wildcard $(wrapper)/caching/*.cc)
objects += $(patsubst %.cc,%.o,$(sources))
else
patches := $(call FILTER_OUT,caching,$(patches))
endif

ifeq ($(shell uname),Darwin)
library = libmcpat.dylib
else
library = libmcpat.so
endif

$(OUT_DIR)/$(library): $(source)/$(library)
	cp $< $@

$(source)/$(library): $(objects)
	$(CXX) $(lflags) $(objects) -o $@

%.o: %.cc | $(source)/.patch
	$(CXX) $(cflags) $< -c -o $@

$(source)/.patch:
	(cd $(source); cat $(patches) | patch -p1)
	touch $@

.PHONY: $(OUT_DIR)/$(library)